From c0b0d3b4e25c01cf3ab734882af6b82589e9a53c Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Wed, 25 Feb 2015 09:07:59 +0300 Subject: [PATCH] services: Pass resume index to server. --- dlls/advapi32/service.c | 5 +---- include/wine/svcctl.idl | 5 +++-- programs/services/rpc.c | 8 ++++++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/dlls/advapi32/service.c b/dlls/advapi32/service.c index e0f7312fd57..ae002c9eeae 100644 --- a/dlls/advapi32/service.c +++ b/dlls/advapi32/service.c @@ -1619,9 +1619,6 @@ EnumServicesStatusW( SC_HANDLE hmngr, DWORD type, DWORD state, LPENUM_SERVICE_ST TRACE("%p 0x%x 0x%x %p %u %p %p %p\n", hmngr, type, state, services, size, needed, returned, resume_handle); - if (resume_handle) - FIXME("resume handle not supported\n"); - if (!hmngr) { SetLastError( ERROR_INVALID_HANDLE ); @@ -1637,7 +1634,7 @@ EnumServicesStatusW( SC_HANDLE hmngr, DWORD type, DWORD state, LPENUM_SERVICE_ST __TRY { - err = svcctl_EnumServicesStatusW( hmngr, type, state, (BYTE *)services, size, needed, returned ); + err = svcctl_EnumServicesStatusW( hmngr, type, state, (BYTE *)services, size, needed, returned, resume_handle ); } __EXCEPT(rpc_filter) { diff --git a/include/wine/svcctl.idl b/include/wine/svcctl.idl index b5a8c4d59fa..7409b17b30b 100644 --- a/include/wine/svcctl.idl +++ b/include/wine/svcctl.idl @@ -253,7 +253,7 @@ typedef struct _SC_RPC_CONFIG_INFOW { /* Not compatible with Windows function 0x0d */ DWORD svcctl_EnumDependentServicesW(/* FIXME */); - /* Not compatible with Windows function 0x0e */ + /* Compatible with Windows function 0x0e */ DWORD svcctl_EnumServicesStatusW( [in] SC_RPC_HANDLE hmngr, [in] DWORD type, @@ -261,7 +261,8 @@ typedef struct _SC_RPC_CONFIG_INFOW { [out,size_is(size)] BYTE *buffer, [in] DWORD size, [out] LPDWORD needed, - [out] LPDWORD returned + [out] LPDWORD returned, + [in,out,unique] LPDWORD resume ); /* Compatible with Windows function 0x0f */ diff --git a/programs/services/rpc.c b/programs/services/rpc.c index 34d012d69b4..3a206c712dc 100644 --- a/programs/services/rpc.c +++ b/programs/services/rpc.c @@ -1276,7 +1276,8 @@ DWORD __cdecl svcctl_EnumServicesStatusW( BYTE *buffer, DWORD size, LPDWORD needed, - LPDWORD returned) + LPDWORD returned, + LPDWORD resume) { DWORD err, sz, total_size, num_services; DWORD_PTR offset; @@ -1284,7 +1285,7 @@ DWORD __cdecl svcctl_EnumServicesStatusW( struct service_entry *service; ENUM_SERVICE_STATUSW *s; - WINE_TRACE("(%p, 0x%x, 0x%x, %p, %u, %p, %p)\n", hmngr, type, state, buffer, size, needed, returned); + WINE_TRACE("(%p, 0x%x, 0x%x, %p, %u, %p, %p, %p)\n", hmngr, type, state, buffer, size, needed, returned, resume); if (!type || !state) return ERROR_INVALID_PARAMETER; @@ -1292,6 +1293,9 @@ DWORD __cdecl svcctl_EnumServicesStatusW( if ((err = validate_scm_handle(hmngr, SC_MANAGER_ENUMERATE_SERVICE, &manager)) != ERROR_SUCCESS) return err; + if (resume) + WINE_FIXME("resume index not supported\n"); + scmdatabase_lock_exclusive(manager->db); total_size = num_services = 0;