Author: ekohl Date: Sun Oct 26 07:33:36 2008 New Revision: 36985
URL: http://svn.reactos.org/svn/reactos?rev=36985&view=rev Log: Service Manager: - Fix declaration of SERVICE_STATUS_HANDLE in the PSDK. - Add a new custom binding handle to svcctl.idl as an alias of SERVICE_STATUS_HANDLE. - Enable all custom binding handles in svcctl.idl and fix services.exe and advapi32.dll accordingly.
Modified: trunk/reactos/base/system/services/rpcserver.c trunk/reactos/dll/win32/advapi32/service/scm.c trunk/reactos/dll/win32/advapi32/service/sctrl.c trunk/reactos/include/psdk/winsvc.h trunk/reactos/include/reactos/idl/svcctl.idl
Modified: trunk/reactos/base/system/services/rpcserver.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/services/rpcser... ============================================================================== --- trunk/reactos/base/system/services/rpcserver.c [iso-8859-1] (original) +++ trunk/reactos/base/system/services/rpcserver.c [iso-8859-1] Sun Oct 26 07:33:36 2008 @@ -1004,8 +1004,8 @@
/* Function 7 */ DWORD RSetServiceStatus( - handle_t BindingHandle, - SC_RPC_HANDLE hServiceStatus, +// handle_t BindingHandle, + RPC_SERVICE_STATUS_HANDLE hServiceStatus, LPSERVICE_STATUS lpServiceStatus) { PSERVICE lpService; @@ -1026,7 +1026,7 @@ return ERROR_INVALID_HANDLE; }
- lpService = ScmGetServiceEntryByClientHandle((ULONG)hServiceStatus); + lpService = ScmGetServiceEntryByClientHandle(hServiceStatus); if (lpService == NULL) { DPRINT1("lpService == NULL!\n"); @@ -1091,8 +1091,8 @@
/* Function 10 */ DWORD RI_ScSetServiceBitsW( - handle_t BindingHandle, - SC_RPC_HANDLE hServiceStatus, +// handle_t BindingHandle, + RPC_SERVICE_STATUS_HANDLE hServiceStatus, DWORD dwServiceBits, int bSetBitsOn, int bUpdateImmediately, @@ -2388,7 +2388,7 @@
/* Function 15 */ DWORD ROpenSCManagerW( - handle_t BindingHandle, +// handle_t BindingHandle, LPWSTR lpMachineName, LPWSTR lpDatabaseName, DWORD dwDesiredAccess, @@ -2893,8 +2893,8 @@
/* Function 22 */ DWORD RI_ScSetServiceBitsA( - handle_t BindingHandle, - SC_RPC_HANDLE hServiceStatus, +// handle_t BindingHandle, + RPC_SERVICE_STATUS_HANDLE hServiceStatus, DWORD dwServiceBits, int bSetBitsOn, int bUpdateImmediately, @@ -3462,7 +3462,7 @@
/* Function 27 */ DWORD ROpenSCManagerA( - handle_t BindingHandle, +// handle_t BindingHandle, LPSTR lpMachineName, LPSTR lpDatabaseName, DWORD dwDesiredAccess, @@ -3482,7 +3482,7 @@ RtlCreateUnicodeStringFromAsciiz(&DatabaseName, lpDatabaseName);
- dwError = ROpenSCManagerW(BindingHandle, + dwError = ROpenSCManagerW(//BindingHandle, lpMachineName ? MachineName.Buffer : NULL, lpDatabaseName ? DatabaseName.Buffer : NULL, dwDesiredAccess,
Modified: trunk/reactos/dll/win32/advapi32/service/scm.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/advapi32/service/... ============================================================================== --- trunk/reactos/dll/win32/advapi32/service/scm.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/advapi32/service/scm.c [iso-8859-1] Sun Oct 26 07:33:36 2008 @@ -76,6 +76,172 @@ } } #endif + +handle_t __RPC_USER +SVCCTL_HANDLEA_bind(SVCCTL_HANDLEA szMachineName) +{ + handle_t hBinding = NULL; + UCHAR *pszStringBinding; + RPC_STATUS status; + + ERR("SVCCTL_HANDLEA_bind() called\n"); + + status = RpcStringBindingComposeA((UCHAR *)szMachineName, + (UCHAR *)"ncacn_np", + NULL, + (UCHAR *)"\pipe\ntsvcs", + NULL, + (UCHAR **)&pszStringBinding); + if (status) + { + ERR("RpcStringBindingCompose returned 0x%x\n", status); + return NULL; + } + + /* Set the binding handle that will be used to bind to the server. */ + status = RpcBindingFromStringBindingA(pszStringBinding, + &hBinding); + if (status) + { + ERR("RpcBindingFromStringBinding returned 0x%x\n", status); + } + + status = RpcStringFreeA(&pszStringBinding); + if (status) + { + ERR("RpcStringFree returned 0x%x\n", status); + } + + return hBinding; +} + + +void __RPC_USER +SVCCTL_HANDLEA_unbind(SVCCTL_HANDLEA szMachineName, + handle_t hBinding) +{ + RPC_STATUS status; + + ERR("SVCCTL_HANDLEA_unbind() called\n"); + + status = RpcBindingFree(&hBinding); + if (status) + { + ERR("RpcBindingFree returned 0x%x\n", status); + } +} + + +handle_t __RPC_USER +SVCCTL_HANDLEW_bind(SVCCTL_HANDLEW szMachineName) +{ + handle_t hBinding = NULL; + LPWSTR pszStringBinding; + RPC_STATUS status; + + ERR("SVCCTL_HANDLEW_bind() called\n"); + + + status = RpcStringBindingComposeW(szMachineName, + L"ncacn_np", + NULL, + L"\pipe\ntsvcs", + NULL, + &pszStringBinding); + if (status) + { + ERR("RpcStringBindingCompose returned 0x%x\n", status); + return NULL; + } + + /* Set the binding handle that will be used to bind to the server. */ + status = RpcBindingFromStringBindingW(pszStringBinding, + &hBinding); + if (status) + { + ERR("RpcBindingFromStringBinding returned 0x%x\n", status); + } + + status = RpcStringFreeW(&pszStringBinding); + if (status) + { + ERR("RpcStringFree returned 0x%x\n", status); + } + + return hBinding; +} + + +void __RPC_USER +SVCCTL_HANDLEW_unbind(SVCCTL_HANDLEW szMachineName, + handle_t hBinding) +{ + RPC_STATUS status; + + ERR("SVCCTL_HANDLEW_unbind() called\n"); + + status = RpcBindingFree(&hBinding); + if (status) + { + ERR("RpcBindingFree returned 0x%x\n", status); + } +} + + +handle_t __RPC_USER +RPC_SERVICE_STATUS_HANDLE_bind(RPC_SERVICE_STATUS_HANDLE hServiceStatus) +{ + handle_t hBinding = NULL; + LPWSTR pszStringBinding; + RPC_STATUS status; + + ERR("RPC_SERVICE_STATUS_HANDLE_bind() called\n"); + + + status = RpcStringBindingComposeW(NULL, + L"ncacn_np", + NULL, + L"\pipe\ntsvcs", + NULL, + &pszStringBinding); + if (status) + { + ERR("RpcStringBindingCompose returned 0x%x\n", status); + return NULL; + } + + /* Set the binding handle that will be used to bind to the server. */ + status = RpcBindingFromStringBindingW(pszStringBinding, + &hBinding); + if (status) + { + ERR("RpcBindingFromStringBinding returned 0x%x\n", status); + } + + status = RpcStringFreeW(&pszStringBinding); + if (status) + { + ERR("RpcStringFree returned 0x%x\n", status); + } + + return hBinding; +} + + +void __RPC_USER +RPC_SERVICE_STATUS_HANDLE_unbind(RPC_SERVICE_STATUS_HANDLE hServiceStatus, + handle_t hBinding) +{ + RPC_STATUS status; + + ERR("RPC_SERVICE_STATUS_HANDLE_unbind() called\n"); + + status = RpcBindingFree(&hBinding); + if (status) + { + ERR("RpcBindingFree returned 0x%x\n", status); + } +}
DWORD @@ -1494,12 +1660,12 @@
WaitForSCManager();
- HandleBind(); +// HandleBind();
_SEH_TRY { /* Call to services.exe using RPC */ - dwError = ROpenSCManagerA(BindingHandle, + dwError = ROpenSCManagerA(//BindingHandle, (LPSTR)lpMachineName, (LPSTR)lpDatabaseName, dwDesiredAccess, @@ -1542,12 +1708,12 @@
WaitForSCManager();
- HandleBind(); +// HandleBind();
_SEH_TRY { /* Call to services.exe using RPC */ - dwError = ROpenSCManagerW(BindingHandle, + dwError = ROpenSCManagerW(//BindingHandle, (LPWSTR)lpMachineName, (LPWSTR)lpDatabaseName, dwDesiredAccess,
Modified: trunk/reactos/dll/win32/advapi32/service/sctrl.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/advapi32/service/... ============================================================================== --- trunk/reactos/dll/win32/advapi32/service/sctrl.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/advapi32/service/sctrl.c [iso-8859-1] Sun Oct 26 07:33:36 2008 @@ -536,7 +536,7 @@ * @implemented */ BOOL STDCALL -I_ScSetServiceBitsA(SC_RPC_HANDLE hServiceStatus, +I_ScSetServiceBitsA(SERVICE_STATUS_HANDLE hServiceStatus, DWORD dwServiceBits, BOOL bSetBitsOn, BOOL bUpdateImmediately, @@ -544,13 +544,13 @@ { BOOL bResult;
- HandleBind(); +// HandleBind();
_SEH_TRY { /* Call to services.exe using RPC */ - bResult = RI_ScSetServiceBitsA(BindingHandle, - (SC_RPC_HANDLE)hServiceStatus, + bResult = RI_ScSetServiceBitsA(//BindingHandle, + (RPC_SERVICE_STATUS_HANDLE)hServiceStatus, dwServiceBits, bSetBitsOn, bUpdateImmediately, @@ -575,7 +575,7 @@ * @implemented */ BOOL STDCALL -I_ScSetServiceBitsW(SC_RPC_HANDLE hServiceStatus, +I_ScSetServiceBitsW(SERVICE_STATUS_HANDLE hServiceStatus, DWORD dwServiceBits, BOOL bSetBitsOn, BOOL bUpdateImmediately, @@ -583,13 +583,13 @@ { BOOL bResult;
- HandleBind(); +// HandleBind();
_SEH_TRY { /* Call to services.exe using RPC */ - bResult = RI_ScSetServiceBitsW(BindingHandle, - (SC_RPC_HANDLE)hServiceStatus, + bResult = RI_ScSetServiceBitsW(//BindingHandle, + (RPC_SERVICE_STATUS_HANDLE)hServiceStatus, dwServiceBits, bSetBitsOn, bUpdateImmediately, @@ -639,11 +639,11 @@ TRACE("SetServiceStatus() called\n"); TRACE("hServiceStatus %lu\n", hServiceStatus);
- HandleBind(); +// HandleBind();
/* Call to services.exe using RPC */ - dwError = RSetServiceStatus(BindingHandle, - (SC_RPC_HANDLE)hServiceStatus, + dwError = RSetServiceStatus(//BindingHandle, + (RPC_SERVICE_STATUS_HANDLE)hServiceStatus, lpServiceStatus); if (dwError != ERROR_SUCCESS) {
Modified: trunk/reactos/include/psdk/winsvc.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/winsvc.h?rev=3... ============================================================================== --- trunk/reactos/include/psdk/winsvc.h [iso-8859-1] (original) +++ trunk/reactos/include/psdk/winsvc.h [iso-8859-1] Sun Oct 26 07:33:36 2008 @@ -158,7 +158,7 @@ DECLARE_HANDLE(SC_HANDLE); typedef SC_HANDLE *LPSC_HANDLE; typedef PVOID SC_LOCK; -typedef DWORD SERVICE_STATUS_HANDLE; +DECLARE_HANDLE(SERVICE_STATUS_HANDLE); typedef VOID(WINAPI *LPHANDLER_FUNCTION)(DWORD); typedef DWORD (WINAPI *LPHANDLER_FUNCTION_EX)(DWORD,DWORD,LPVOID,LPVOID); typedef struct _SERVICE_DESCRIPTIONA {
Modified: trunk/reactos/include/reactos/idl/svcctl.idl URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/reactos/idl/svcctl.... ============================================================================== --- trunk/reactos/include/reactos/idl/svcctl.idl [iso-8859-1] (original) +++ trunk/reactos/include/reactos/idl/svcctl.idl [iso-8859-1] Sun Oct 26 07:33:36 2008 @@ -15,8 +15,9 @@ const unsigned short SC_MAX_ARGUMENT_LENGTH = 1024; const unsigned short SC_MAX_ARGUMENTS = 1024;
-typedef /*[handle]*/ LPSTR SVCCTL_HANDLEA; -typedef /*[handle]*/ LPWSTR SVCCTL_HANDLEW; +typedef [handle] LPSTR SVCCTL_HANDLEA; +typedef [handle] LPWSTR SVCCTL_HANDLEW; +typedef [handle] ULONG_PTR RPC_SERVICE_STATUS_HANDLE; typedef /*[context_handle]*/ unsigned long SC_RPC_HANDLE; typedef SC_RPC_HANDLE* LPSC_RPC_HANDLE; typedef /*[context_handle]*/ unsigned long SC_RPC_LOCK; @@ -296,9 +297,9 @@ uuid(367abb81-9844-35f1-ad32-98f038001003), version(2.0), pointer_default(unique), - #ifndef __midl +// #ifndef __midl ,explicit_handle - #endif +// #endif ] interface svcctl { @@ -350,8 +351,8 @@
/* Function 7 */ DWORD RSetServiceStatus( - [in] handle_t BindingHandle, - [in] SC_RPC_HANDLE hServiceStatus, +// [in] handle_t BindingHandle, + [in] RPC_SERVICE_STATUS_HANDLE hServiceStatus, [in] LPSERVICE_STATUS lpServiceStatus);
/* Function 8 */ @@ -367,8 +368,8 @@
/* Function 10 */ DWORD RI_ScSetServiceBitsW( - [in] handle_t BindingHandle, - [in] SC_RPC_HANDLE hServiceStatus, +// [in] handle_t BindingHandle, + [in] RPC_SERVICE_STATUS_HANDLE hServiceStatus, [in] DWORD dwServiceBits, [in] BOOL bSetBitsOn, [in] BOOL bUpdateImmediately, @@ -435,8 +436,8 @@
/* Function 15 */ DWORD ROpenSCManagerW( - [in] handle_t BindingHandle, - [in, string, unique, range(0, SC_MAX_COMPUTER_NAME_LENGTH)] LPWSTR lpMachineName, +// [in] handle_t BindingHandle, + [in, string, unique, range(0, SC_MAX_COMPUTER_NAME_LENGTH)] SVCCTL_HANDLEW lpMachineName, [in, string, unique, range(0, SC_MAX_NAME_LENGTH)] LPWSTR lpDatabaseName, [in] DWORD dwDesiredAccess, [out] LPSC_RPC_HANDLE lpScHandle); @@ -491,8 +492,8 @@
/* Function 22 */ DWORD RI_ScSetServiceBitsA( - [in] handle_t BindingHandle, - [in] SC_RPC_HANDLE hServiceStatus, +// [in] handle_t BindingHandle, + [in] RPC_SERVICE_STATUS_HANDLE hServiceStatus, [in] DWORD dwServiceBits, [in] BOOL bSetBitsOn, [in] BOOL bUpdateImmediately, @@ -559,8 +560,8 @@
/* Function 27 */ DWORD ROpenSCManagerA( - [in] handle_t BindingHandle, - [in, string, unique, range(0, SC_MAX_COMPUTER_NAME_LENGTH)] LPSTR lpMachineName, +// [in] handle_t BindingHandle, + [in, string, unique, range(0, SC_MAX_COMPUTER_NAME_LENGTH)] SVCCTL_HANDLEA lpMachineName, [in, string, unique, range(0, SC_MAX_NAME_LENGTH)] LPSTR lpDatabaseName, [in] DWORD dwDesiredAccess, [out] LPSC_RPC_HANDLE lpScHandle);