On Friday 04 March 2005 11:56, Alexandre Julliard wrote:
> Raphael <[EMAIL PROTECTED]> writes:
> > On Friday 04 March 2005 00:45, Robert Shearman wrote:
> > > I have made a few comments on the implementation below:
> > > > SRCDIR    = @srcdir@
> > > > VPATH     = @srcdir@
> > > > MODULE    = advapi32.dll
> > > >-IMPORTS   = kernel32 ntdll
> > > >+IMPORTS   = winspool kernel32 ntdll
> > >
> > > Should be in DELAYIMPORTS. We don't want to slow down the loading of
> > > all applications because of this one uncommon case.
> >
> > I didn't known this wine makefile option :)
> > Done
>
> This doesn't look right at all, even with delayed imports. Do you have
> evidence that Windows advapi32 calls into winspool?

Hi,

cf:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/low_level_security_descriptor_functions.asp

You can see low-level functions for each supported objects (specified by 
SE_OBJECT_TYPE)

Anyway, native advapi32 seems to do dynamic loading :)

-=(FeniX as [EMAIL PROTECTED])-(on tty1)-(at 09:46:55)=-
 -={$:'/cvs-src/wine/dlls/advapi32'}=->winedump dump -j import 
-C /mnt/win_c/windows/system32/advapi32.dll | grep GetModule
   358  GetModuleFileNameW 646d2
   362  GetModuleHandleW 64984
   359  GetModuleHandleA 64ce0
-=(FeniX as [EMAIL PROTECTED])-(on tty1)-(at 09:47:03)=-
 -={$:'/cvs-src/wine/dlls/advapi32'}=->winedump dump -j import 
-C /mnt/win_c/windows/system32/advapi32.dll | grep LoadLib
   560  LoadLibraryExW 64664
   561  LoadLibraryW 64bd0
   558  LoadLibraryA 64dd2
-=(FeniX as [EMAIL PROTECTED])-(on tty1)-(at 09:47:51)=-
 -={$:'/cvs-src/wine/dlls/advapi32'}=->winedump dump -j import 
-C /mnt/win_c/windows/system32/advapi32.dll | grep GetProcAd
   393  GetProcAddress 64de2


Changelog:
 - simple implentation of SetSecurityInfo
 - add some stubs to ntdll to support native advapi32

Regards,
Raphael
Index: Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/advapi32/Makefile.in,v
retrieving revision 1.22
diff -u -r1.22 Makefile.in
--- Makefile.in	6 Oct 2004 18:53:29 -0000	1.22
+++ Makefile.in	9 Mar 2005 08:48:21 -0000
@@ -5,6 +5,7 @@
 VPATH     = @srcdir@
 MODULE    = advapi32.dll
 IMPORTS   = kernel32 ntdll
+DELAYIMPORTS = winspool user32
 EXTRALIBS = $(LIBUNICODE)
 
 C_SRCS = \
Index: advapi32.spec
===================================================================
RCS file: /home/wine/wine/dlls/advapi32/advapi32.spec,v
retrieving revision 1.69
diff -u -r1.69 advapi32.spec
--- advapi32.spec	3 Jan 2005 20:10:45 -0000	1.69
+++ advapi32.spec	9 Mar 2005 08:48:22 -0000
@@ -288,7 +288,7 @@
 @ stdcall SetSecurityDescriptorGroup (ptr ptr long)
 @ stdcall SetSecurityDescriptorOwner (ptr ptr long)
 @ stdcall SetSecurityDescriptorSacl(ptr long ptr long)
-@ stub SetSecurityInfo #(ptr long ptr ptr ptr ptr ptr ptr)
+@ stdcall SetSecurityInfo(ptr long long ptr ptr ptr ptr ptr)
 @ stdcall SetServiceBits(long long long long)
 @ stdcall SetServiceObjectSecurity(long long ptr)
 @ stdcall SetServiceStatus(long long)
Index: security.c
===================================================================
RCS file: /home/wine/wine/dlls/advapi32/security.c,v
retrieving revision 1.92
diff -u -r1.92 security.c
--- security.c	11 Feb 2005 11:52:07 -0000	1.92
+++ security.c	9 Mar 2005 08:48:25 -0000
@@ -33,6 +33,9 @@
 #include "sddl.h"
 #include "winsvc.h"
 #include "aclapi.h"
+#include "lm.h"
+#include "wingdi.h"
+#include "winspool.h"
 
 #include "wine/debug.h"
 #include "wine/unicode.h"
@@ -750,6 +753,7 @@
 {
     return set_ntstatus( RtlSetDaclSecurityDescriptor (lpsd, daclpresent, dacl, dacldefaulted ) );
 }
+
 /******************************************************************************
  *  GetSecurityDescriptorSacl			[EMAIL PROTECTED]
  */
@@ -1418,6 +1422,96 @@
 {
   FIXME("(%s) : stub\n", debugstr_w(lpFileName) );
   return TRUE;
+}
+
+/******************************************************************************
+ * SetSecurityInfo [EMAIL PROTECTED]
+ */
+DWORD WINAPI SetSecurityInfo(HANDLE handle,
+			    SE_OBJECT_TYPE ObjectType,
+			    SECURITY_INFORMATION SecurityInfo,
+			    PSID psidOwner,
+			    PSID psidGroup,
+			    PACL pDacl,
+			    PACL pSacl)
+{
+  SECURITY_DESCRIPTOR sd;
+  BOOL test;
+
+  TRACE("(%p, %x, %x, %p, %p, %p, %p)\n", handle, ObjectType, SecurityInfo, psidOwner, psidGroup, pDacl, pSacl);
+
+  test = InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
+  if (!test) return ERROR_INVALID_SECURITY_DESCR;
+
+  if (SecurityInfo & DACL_SECURITY_INFORMATION) {
+    test = SetSecurityDescriptorDacl(&sd, TRUE, pDacl, TRUE);
+  }
+  if (SecurityInfo & SACL_SECURITY_INFORMATION) {
+    test = SetSecurityDescriptorSacl(&sd, TRUE, pSacl, TRUE);
+  }
+  if (SecurityInfo & GROUP_SECURITY_INFORMATION) {
+    if (NULL == psidGroup) {
+      return ERROR_INVALID_PARAMETER;
+    }
+    test = SetSecurityDescriptorGroup(&sd, psidGroup, TRUE);
+  }
+  if (SecurityInfo & OWNER_SECURITY_INFORMATION) {
+    if (NULL == psidOwner) {
+      return ERROR_INVALID_PARAMETER;
+
+    }
+    test = SetSecurityDescriptorOwner(&sd, psidOwner, TRUE);
+  }
+
+  if (!test) return ERROR_INVALID_SECURITY_DESCR;
+
+  switch (ObjectType) {
+  case SE_KERNEL_OBJECT:
+    test = SetKernelObjectSecurity(handle, SecurityInfo, &sd);
+    break;
+  case SE_SERVICE:
+    test = SetServiceObjectSecurity(handle, SecurityInfo, &sd);
+    break;
+  case SE_REGISTRY_WOW64_32KEY:
+  case SE_REGISTRY_KEY:
+    test = RegSetKeySecurity(handle, SecurityInfo, &sd);
+    break;
+  case SE_LMSHARE:
+    /*test = NetShareSetInfo(handle, SecurityInfo, &sd); TODO: don't exit on netapi */
+    FIXME("unimplemented NetShareSetInfo support on netapi\n");
+    break;
+  case SE_PRINTER: 
+    {
+#if 0
+      PRINTER_INFO_2A pr_info;
+      memset(&pr_info, 0, sizeof(pr_info));
+      /** maybe we should do GetPrinter before SetSecurityDesc* ? */
+      test = GetPrinterA(handle, 2, (LPBYTE) &pr_info, 0, NULL);
+      pr_info.pSecurityDescriptor = &sd;
+      test = SetPrinterA(handle, 2, (LPBYTE) &pr_info, PRINTER_CONTROL_SET_STATUS);
+#else
+      FIXME("unimplemented Printer support\n");
+#endif
+      break;
+    }
+  case SE_WINDOW_OBJECT:
+    test = SetUserObjectSecurity(handle, SecurityInfo, &sd);
+    break;
+
+  case SE_FILE_OBJECT:
+    /*SetFileSecurity ? */
+  case SE_DS_OBJECT:
+  case SE_DS_OBJECT_ALL:
+  case SE_PROVIDER_DEFINED_OBJECT:
+  case SE_WMIGUID_OBJECT:
+  case SE_UNKNOWN_OBJECT_TYPE:
+  default:
+    FIXME("unsupported ObjectType %d\n", ObjectType); 
+    test = TRUE;
+  }
+
+  if (!test) return GetLastError();
+  return ERROR_SUCCESS;
 }
 
 /******************************************************************************
Index: ntdll.spec
===================================================================
RCS file: /home/wine/wine/dlls/ntdll/ntdll.spec,v
retrieving revision 1.173
diff -u -r1.173 ntdll.spec
--- ntdll.spec	14 Feb 2005 21:07:33 -0000	1.173
+++ ntdll.spec	9 Mar 2005 08:48:33 -0000
@@ -66,6 +66,9 @@
 @ stdcall NtAcceptConnectPort(ptr long ptr long long ptr)
 @ stdcall NtAccessCheck(ptr long long ptr ptr ptr ptr ptr)
 @ stub NtAccessCheckAndAuditAlarm
+@ stub NtAccessCheckByType
+@ stub NtAccessCheckByTypeAndAuditAlarm
+@ stub NtAccessCheckByTypeResultList
 @ stdcall NtAdjustGroupsToken(long long ptr long ptr ptr)
 @ stdcall NtAdjustPrivilegesToken(long long long long long long)
 @ stub NtAlertResumeThread
@@ -73,27 +76,36 @@
 @ stdcall NtAllocateLocallyUniqueId(ptr)
 @ stdcall NtAllocateUuids(ptr ptr ptr)
 @ stdcall NtAllocateVirtualMemory(long ptr ptr ptr long long)
+@ stub NtAllocateVirtualMemory64
+@ stub NtApphelpCacheControl
+@ stub NtAreMappedFilesTheSame
 @ stub NtCallbackReturn
 @ stdcall NtCancelIoFile(long ptr)
 @ stdcall NtCancelTimer(long ptr)
 @ stdcall NtClearEvent(long)
 @ stdcall NtClose(long)
 @ stub NtCloseObjectAuditAlarm
+@ stub NtCompactKeys
+@ stub NtCompareTokens
 @ stdcall NtCompleteConnectPort(ptr)
+@ stub NtCompressKey
 @ stdcall NtConnectPort(ptr ptr ptr ptr ptr ptr ptr ptr)
 @ stub NtContinue
+@ stub NtCreateDebugObject
 @ stdcall NtCreateDirectoryObject(long long long)
 @ stdcall NtCreateEvent(long long long long long)
 @ stub NtCreateEventPair
 @ stdcall NtCreateFile(ptr long ptr ptr long long long ptr long long ptr)
 @ stub NtCreateIoCompletion
 @ stdcall NtCreateKey(ptr long ptr long ptr long long)
+@ stub NtCreateKeyedEvent
 @ stdcall NtCreateMailslotFile(long long long long long long long long)
 @ stdcall NtCreateMutant(ptr long ptr long)
 @ stdcall NtCreateNamedPipeFile(ptr long ptr ptr long long long long long long long long long ptr)
 @ stdcall NtCreatePagingFile(long long long long)
 @ stdcall NtCreatePort(ptr ptr long long long)
 @ stub NtCreateProcess
+@ stub NtCreateProcessEx
 @ stub NtCreateProfile
 @ stdcall NtCreateSection(ptr long ptr ptr long long long)
 @ stdcall NtCreateSemaphore(ptr long ptr long long)
@@ -102,6 +114,10 @@
 @ stdcall NtCreateTimer(ptr long ptr long)
 @ stub NtCreateToken
 @ stdcall NtCurrentTeb()
+# see kernel32/debugger DebugActiveProcess impl
+@ stub NtDebugActiveProcess
+# see kernel32/debugger ContinueDebugEvent impl
+@ stub NtDebugContinue
 @ stdcall NtDelayExecution(long ptr)
 @ stdcall NtDeleteFile(ptr)
 @ stdcall NtDeleteKey(long)
@@ -114,14 +130,17 @@
 @ stdcall NtEnumerateKey (long long long long long long)
 @ stdcall NtEnumerateValueKey (long long long long long long)
 @ stub NtExtendSection
+@ stub NtFilterToken
 @ stdcall NtFlushBuffersFile(long ptr)
 @ stdcall NtFlushInstructionCache(long ptr long)
 @ stdcall NtFlushKey(long)
 @ stdcall NtFlushVirtualMemory(long ptr ptr long)
 @ stub NtFlushWriteBuffer
 @ stdcall NtFreeVirtualMemory(long ptr ptr long)
+@ stub NtFreeVirtualMemory64
 @ stdcall NtFsControlFile(long long long long long long long long long long)
 @ stdcall NtGetContextThread(long ptr)
+@ stub NtGetCurrentProcessorNumber
 @ stub NtGetPlugPlayEvent
 @ stub NtGetTickCount
 @ stub NtImpersonateAnonymousToken
@@ -131,10 +150,15 @@
 @ stdcall NtListenPort(ptr ptr)
 @ stdcall NtLoadDriver(ptr)
 @ stdcall NtLoadKey(ptr ptr)
+@ stub NtLoadKeyEx
 @ stdcall NtLockFile(long long ptr ptr ptr ptr ptr ptr long long)
+@ stub NtLockProductActivationKeys
+@ stub NtLockRegistryKey
 @ stdcall NtLockVirtualMemory(long ptr ptr long)
 @ stub NtMakeTemporaryObject
+@ stub NtMakePermanentObject
 @ stdcall NtMapViewOfSection(long long ptr long long ptr ptr long long long)
+@ stub NtMapViewOfVlmSection
 @ stub NtNotifyChangeDirectoryFile
 @ stdcall NtNotifyChangeKey(long long ptr ptr ptr long long ptr long long)
 @ stdcall NtOpenDirectoryObject(long long long)
@@ -143,23 +167,28 @@
 @ stdcall NtOpenFile(ptr long ptr ptr long long)
 @ stub NtOpenIoCompletion
 @ stdcall NtOpenKey(ptr long ptr)
+@ stub NtOpenKeyedEvent
 @ stdcall NtOpenMutant(ptr long ptr)
 @ stub NtOpenObjectAuditAlarm
 @ stub NtOpenProcess
 @ stdcall NtOpenProcessToken(long long long)
+@ stub NtOpenProcessTokenEx
 @ stdcall NtOpenSection(ptr long ptr)
 @ stdcall NtOpenSemaphore(long long ptr)
 @ stdcall NtOpenSymbolicLinkObject (long long long)
 @ stdcall NtOpenThread(ptr long ptr ptr)
 @ stdcall NtOpenThreadToken(long long long long)
+@ stub NtOpenThreadTokenEx
 @ stdcall NtOpenTimer(ptr long ptr)
 @ stub NtPlugPlayControl
 @ stub NtPrivilegeCheck
 @ stub NtPrivilegeObjectAuditAlarm
 @ stub NtPrivilegedServiceAuditAlarm
 @ stdcall NtProtectVirtualMemory(long ptr ptr long ptr)
+@ stub NtProtectVirtualMemory64
 @ stdcall NtPulseEvent(long ptr)
 @ stdcall NtQueryAttributesFile(ptr ptr)
+@ stub NtQueryDebugFilterState
 @ stdcall NtQueryDefaultLocale(long ptr)
 @ stdcall NtQueryDefaultUILanguage(ptr)
 @ stdcall NtQueryDirectoryFile(long long  ptr ptr ptr ptr long long long ptr long)
@@ -179,31 +208,41 @@
 @ stdcall NtQueryMutant(long long ptr long ptr)
 @ stdcall NtQueryObject(long long long long long)
 @ stub NtQueryOpenSubKeys
+@ stub NtQueryOpenSubKeysEx
 @ stdcall NtQueryPerformanceCounter(ptr ptr)
+@ stub NtQueryPortInformationProcess
+@ stub NtQueryQuotaInformationFile
 @ stdcall NtQuerySection (long long long long long)
 @ stdcall NtQuerySecurityObject (long long long long long)
 @ stdcall NtQuerySemaphore (long long long long long)
 @ stdcall NtQuerySymbolicLinkObject(long ptr ptr)
 @ stub NtQuerySystemEnvironmentValue
+@ stub NtQuerySystemEnvironmentValueEx
 @ stdcall NtQuerySystemInformation(long long long long)
 @ stdcall NtQuerySystemTime(ptr)
 @ stdcall NtQueryTimer(ptr long ptr long ptr)
 @ stdcall NtQueryTimerResolution(long long long)
 @ stdcall NtQueryValueKey(long long long long long long)
 @ stdcall NtQueryVirtualMemory(long ptr long ptr long ptr)
+@ stub NtQueryVirtualMemory64
 @ stdcall NtQueryVolumeInformationFile(long ptr ptr long long)
 @ stdcall NtQueueApcThread(long ptr long long long)
 @ stdcall NtRaiseException(ptr ptr long)
 @ stub NtRaiseHardError
 @ stdcall NtReadFile(long long long long long long long long long)
+@ stub NtReadFile64
 @ stub NtReadRequestData
 @ stdcall NtReadVirtualMemory(long ptr ptr long ptr)
+@ stub NtReadVirtualMemory64
 @ stub NtRegisterNewDevice
 @ stdcall NtRegisterThreadTerminatePort(ptr)
+@ stub NtReleaseKeyedEvent
 @ stdcall NtReleaseMutant(long ptr)
 @ stub NtReleaseProcessMutant
 @ stdcall NtReleaseSemaphore(long long ptr)
 @ stub NtRemoveIoCompletion
+@ stub NtRemoveProcessDebug
+@ stub NtRenameKey
 @ stdcall NtReplaceKey(ptr long ptr)
 @ stub NtReplyPort
 @ stdcall NtReplyWaitReceivePort(ptr ptr ptr ptr)
@@ -213,18 +252,22 @@
 @ stdcall NtRequestWaitReplyPort(ptr ptr ptr)
 @ stdcall NtResetEvent(long ptr)
 @ stdcall NtRestoreKey(long long long)
+@ stub NtResumeProcess
 @ stdcall NtResumeThread(long long)
 @ stdcall NtSaveKey(long long)
 @ stub NtSecureConnectPort
 @ stdcall NtSetContextThread(long ptr)
+@ stub NtSetDebugFilterState
 @ stub NtSetDefaultHardErrorPort
 @ stdcall NtSetDefaultLocale(long long)
 @ stdcall NtSetDefaultUILanguage(long)
 @ stub NtSetEaFile
 @ stdcall NtSetEvent(long long)
+@ stub NtSetEventBoostPriority
 @ stub NtSetHighEventPair
 @ stub NtSetHighWaitLowEventPair
 @ stub NtSetHighWaitLowThread
+@ stub NtSetInformationDebugObject
 @ stdcall NtSetInformationFile(long long long long long)
 @ stdcall NtSetInformationKey(long long ptr long)
 @ stdcall NtSetInformationObject(long long ptr long)
@@ -237,8 +280,10 @@
 @ stub NtSetLowEventPair
 @ stub NtSetLowWaitHighEventPair
 @ stub NtSetLowWaitHighThread
+@ stub NtSetQuotaInformationFile
 @ stdcall NtSetSecurityObject(long long ptr)
 @ stub NtSetSystemEnvironmentValue
+@ stub NtSetSystemEnvironmentValueEx
 @ stub NtSetSystemInformation
 @ stub NtSetSystemPowerState
 @ stdcall NtSetSystemTime(ptr ptr)
@@ -249,27 +294,36 @@
 @ stdcall NtShutdownSystem(long)
 @ stub NtStartProfile
 @ stub NtStopProfile
+@ stub NtSuspendProcess
 @ stdcall NtSuspendThread(long ptr)
 @ stub NtSystemDebugControl
 @ stdcall NtTerminateProcess(long long)
 @ stdcall NtTerminateThread(long long)
 @ stub NtTestAlert
+@ stub NtTranslateFilePath
 @ stdcall NtUnloadDriver(ptr)
 @ stdcall NtUnloadKey(long)
+@ stub NtUnloadKey2
 @ stub NtUnloadKeyEx
 @ stdcall NtUnlockFile(long ptr ptr ptr ptr)
 @ stdcall NtUnlockVirtualMemory(long ptr ptr long)
 @ stdcall NtUnmapViewOfSection(long ptr)
+@ stub NtUnmapViewOfVlmSection
 @ stub NtVdmControl
 @ stub NtW32Call
+# see kernel32/debugger implementation of WaitForDebugEvent
+@ stub NtWaitForDebugEvent
+@ stub NtWaitForKeyedEvent
 @ stdcall NtWaitForMultipleObjects(long ptr long long ptr)
 @ stub NtWaitForProcessMutant
 @ stdcall NtWaitForSingleObject(long long long)
 @ stub NtWaitHighEventPair
 @ stub NtWaitLowEventPair
 @ stdcall NtWriteFile(long long ptr ptr ptr ptr long ptr ptr)
+@ stub NtWriteFile64
 @ stub NtWriteRequestData
 @ stdcall NtWriteVirtualMemory(long ptr ptr long ptr)
+@ stub NtWriteVirtualMemory64
 @ stdcall NtYieldExecution()
 @ stub PfxFindPrefix
 @ stub PfxInitialize
@@ -330,6 +384,7 @@
 @ stdcall RtlConvertSidToUnicodeString(ptr ptr long)
 @ stub RtlConvertUiListToApiList
 @ stdcall -ret64 RtlConvertUlongToLargeInteger(long)
+@ stub RtlConvertToAutoInheritSecurityObject 
 @ stdcall RtlCopyLuid(ptr ptr)
 @ stdcall RtlCopyLuidAndAttributesArray(long ptr ptr)
 @ stub RtlCopySecurityDescriptor
@@ -514,6 +569,9 @@
 @ stub RtlNewInstanceSecurityObject
 @ stub RtlNewSecurityGrantedAccess
 @ stdcall RtlNewSecurityObject(long long long long long long)
+@ stub RtlNewSecurityObjectEx
+@ stub RtlNewSecurityObjectWithMultipleInheritance
+@ stub RtlNewSecurityGrantedAccess
 @ stdcall RtlNormalizeProcessParams(ptr)
 @ stdcall RtlNtStatusToDosError(long)
 @ stdcall RtlNtStatusToDosErrorNoTeb(long)
@@ -584,7 +642,11 @@
 @ stdcall RtlSetLastWin32Error(long)
 @ stdcall RtlSetOwnerSecurityDescriptor(ptr ptr long)
 @ stdcall RtlSetSaclSecurityDescriptor(ptr long ptr long)
+@ stub RtlSetControlSecurityDescriptor 
+@ stub RtlSetSecurityDescriptorRMControl
+@ stub RtlGetSecurityDescriptorRMControl
 @ stub RtlSetSecurityObject
+@ stub RtlSetSecurityObjectEx
 @ stdcall RtlSetTimeZoneInformation(ptr)
 @ stub RtlSetUserFlagsHeap
 @ stub RtlSetUserValueHeap

Attachment: pgp0iaTqHzSql.pgp
Description: PGP signature

Reply via email to