I had to cut-and-paste to inline this patch, since Notes 5 doesn't seem to do inlining, so let me know if it gets corrupted. Changelog: * Assorted Win2k/WinXP stubs in advapi32.dll Index: dlls/advapi32/advapi32.spec =================================================================== RCS file: /home/wine/wine/dlls/advapi32/advapi32.spec,v retrieving revision 1.28 diff -u -r1.28 advapi32.spec --- dlls/advapi32/advapi32.spec 6 Sep 2002 19:36:37 -0000 1.28 +++ dlls/advapi32/advapi32.spec 25 Nov 2002 14:42:59 -0000 @@ -3,7 +3,9 @@ @ stdcall AccessCheck(ptr long long ptr ptr ptr ptr ptr) AccessCheck @ stub AccessCheckAndAuditAlarmA @ stub AccessCheckAndAuditAlarmW +@ stub AccessCheckByType #(ptr ptr long long ptr long ptr ptr ptr ptr ptr) AccessCheckByType @ stdcall AddAccessAllowedAce (ptr long long ptr) AddAccessAllowedAce +@ stub AddAccessAllowedAceEx #(ptr long long long ptr) AddAccessAllowedAceEx @ stub AddAccessDeniedAce @ stub AddAce @ stub AddAuditAccessAce @@ -23,12 +25,17 @@ @ stdcall CloseServiceHandle(long) CloseServiceHandle @ stub CommandLineFromMsiDescriptor @ stdcall ControlService(long long ptr) ControlService +@ stub ConvertSidToStringSidA #(ptr str) ConvertSidToStringSidA +@ stub ConvertSidToStringSidW #(ptr wstr) ConvertSidToStringSidW +@ stub ConvertStringSecurityDescriptorToSecurityDescriptorA #(str long ptr ptr) ConvertStringSecurityDescriptorToSecurityDescriptorA +@ stub ConvertStringSecurityDescriptorToSecurityDescriptorW #(wstr long ptr ptr) ConvertStringSecurityDescriptorToSecurityDescriptorW @ stdcall CopySid(long ptr ptr) CopySid @ stub CreatePrivateObjectSecurity @ stub CreateProcessAsUserA @ stub CreateProcessAsUserW @ stdcall CreateServiceA(long ptr ptr long long long long ptr ptr ptr ptr ptr ptr) CreateServiceA @ stdcall CreateServiceW (long ptr ptr long long long long ptr ptr ptr ptr ptr ptr) CreateServiceW +@ stub CredProfileLoaded @ stdcall CryptAcquireContextA(ptr str str long long) CryptAcquireContextA @ stdcall CryptAcquireContextW(ptr wstr wstr long long) CryptAcquireContextW @ stdcall CryptContextAddRef(long ptr long) CryptContextAddRef @@ -72,7 +79,8 @@ @ stdcall DeleteService(long) DeleteService @ stdcall DeregisterEventSource(long) DeregisterEventSource @ stub DestroyPrivateObjectSecurity -@ stub DuplicateToken +@ stub DuplicateToken #(long long ptr) DuplicateToken +@ stub DuplicateTokenEx #(long long ptr long long ptr) DuplicateTokenEx @ stub EnumDependentServicesA @ stub EnumDependentServicesW @ stdcall EnumServicesStatusA (long long long ptr long ptr ptr ptr) EnumServicesStatusA @@ -90,6 +98,8 @@ @ stub GetKernelObjectSecurity @ stdcall GetLengthSid(ptr) GetLengthSid @ stub GetMangledSiteSid +@ stub GetNamedSecurityInfoA #(str long long ptr ptr ptr ptr ptr) GetNamedSecurityInfoA +@ stub GetNamedSecurityInfoW #(wstr long long ptr ptr ptr ptr ptr) GetNamedSecurityInfoW @ stdcall GetNumberOfEventLogRecords (long ptr) GetNumberOfEventLogRecords @ stdcall GetOldestEventLogRecord (long ptr) GetOldestEventLogRecord @ stub GetPrivateObjectSecurity @@ -99,6 +109,7 @@ @ stdcall GetSecurityDescriptorLength(ptr) GetSecurityDescriptorLength @ stdcall GetSecurityDescriptorOwner(ptr ptr ptr) GetSecurityDescriptorOwner @ stdcall GetSecurityDescriptorSacl (ptr ptr ptr ptr) GetSecurityDescriptorSacl +@ stub GetSecurityInfo #(long long long ptr ptr ptr ptr ptr) GetSecurityInfo @ stub GetServiceDisplayNameA @ stub GetServiceDisplayNameW @ stub GetServiceKeyNameA @@ -169,6 +180,7 @@ @ stub QueryServiceLockStatusW @ stub QueryServiceObjectSecurity @ stdcall QueryServiceStatus(long ptr) QueryServiceStatus +@ stdcall QueryServiceStatusEx (long long ptr long ptr) QueryServiceStatusEx @ stdcall ReadEventLogA (long long long ptr long ptr ptr) ReadEventLogA @ stdcall ReadEventLogW (long long long ptr long ptr ptr) ReadEventLogW @ stdcall RegCloseKey(long) RegCloseKey @@ -233,6 +245,7 @@ @ stdcall SetFileSecurityW(wstr long ptr) SetFileSecurityW @ stdcall SetKernelObjectSecurity(long long ptr) SetKernelObjectSecurity @ stub SetPrivateObjectSecurity +@ stub SetSecurityDescriptorControl #(ptr long long) @ stdcall SetSecurityDescriptorDacl(ptr long ptr long) SetSecurityDescriptorDacl @ stdcall SetSecurityDescriptorGroup (ptr ptr long) SetSecurityDescriptorGroup @ stdcall SetSecurityDescriptorOwner (ptr ptr long) SetSecurityDescriptorOwner Index: dlls/advapi32/service.c =================================================================== RCS file: /home/wine/wine/dlls/advapi32/service.c,v retrieving revision 1.31 diff -u -r1.31 service.c --- dlls/advapi32/service.c 25 Oct 2002 19:17:33 -0000 1.31 +++ dlls/advapi32/service.c 25 Nov 2002 14:42:59 -0000 @@ -700,3 +700,22 @@ return TRUE; } + +/****************************************************************************** + * QueryServiceStatusEx [ADVAPI32.@] + * + * PARAMS + * hService [handle to service] + * InfoLevel [information level] + * lpBuffer [buffer] + * cbBufSize [size of buffer] + * pcbBytesNeeded [bytes needed] +*/ +BOOL WINAPI QueryServiceStatusEx(SC_HANDLE hService, SC_STATUS_TYPE InfoLevel, + LPBYTE lpBuffer, DWORD cbBufSize, + LPDWORD pcbBytesNeeded) +{ + FIXME("stub\n"); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return FALSE; +} Index: include/winsvc.h =================================================================== RCS file: /home/wine/wine/include/winsvc.h,v retrieving revision 1.9 diff -u -r1.9 winsvc.h --- include/winsvc.h 10 Mar 2002 00:02:34 -0000 1.9 +++ include/winsvc.h 25 Nov 2002 14:54:51 -0000 @@ -114,6 +114,10 @@ DWORD dwWaitHint; } SERVICE_STATUS, *LPSERVICE_STATUS; +typedef enum _SC_STATUS_TYPE { + SC_STATUS_PROCESS_INFO = 0 +} SC_STATUS_TYPE; + /* Service main function prototype */ typedef VOID (CALLBACK *LPSERVICE_MAIN_FUNCTIONA)(DWORD,LPSTR*); @@ -188,7 +192,7 @@ BOOL WINAPI StartServiceCtrlDispatcherW(LPSERVICE_TABLE_ENTRYW); #define StartServiceCtrlDispatcher WINELIB_NAME_AW(StartServiceCtrlDispatcher) BOOL WINAPI QueryServiceStatus(SC_HANDLE,LPSERVICE_STATUS); - +BOOL WINAPI QueryServiceStatusEx(SC_HANDLE,SC_STATUS_TYPE,LPBYTE,DWORD,LPDWORD); #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */