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
pgp0iaTqHzSql.pgp
Description: PGP signature