From: Eric Kohl Date: Sat, 13 Sep 2008 20:04:51 +0000 (+0000) Subject: Implement I_ScSetServiceBitsA/W and SetServiceBits. X-Git-Tag: backups/umode-network-branch@37897~54 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=b3bb873fd3b0c3333adb918f0f46ed255d8db4b2 Implement I_ScSetServiceBitsA/W and SetServiceBits. svn path=/trunk/; revision=36200 --- diff --git a/reactos/base/system/services/rpcserver.c b/reactos/base/system/services/rpcserver.c index a52f58fc6a1..64353ed51f4 100644 --- a/reactos/base/system/services/rpcserver.c +++ b/reactos/base/system/services/rpcserver.c @@ -1035,7 +1035,7 @@ DWORD RNotifyBootConfigStatus( /* Function 10 */ -DWORD RSetServiceBitsW( +DWORD RI_ScSetServiceBitsW( handle_t BindingHandle, SC_RPC_HANDLE hServiceStatus, DWORD dwServiceBits, @@ -2819,7 +2819,7 @@ DWORD RGetServiceKeyNameW( /* Function 22 */ -DWORD RSetServiceBitsA( +DWORD RI_ScSetServiceBitsA( handle_t BindingHandle, SC_RPC_HANDLE hServiceStatus, DWORD dwServiceBits, diff --git a/reactos/dll/win32/advapi32/advapi32.def b/reactos/dll/win32/advapi32/advapi32.def index 6d87ef4624a..57116b66ce8 100644 --- a/reactos/dll/win32/advapi32/advapi32.def +++ b/reactos/dll/win32/advapi32/advapi32.def @@ -307,8 +307,8 @@ GetWindowsAccountDomainSid@12 ;I_ScIsSecurityProcess ;I_ScPnPGetServiceName ;I_ScSendTSMessage -;I_ScSetServiceBitsA@20 -;I_ScSetServiceBitsW@20 +I_ScSetServiceBitsA@20 +I_ScSetServiceBitsW@20 ;IdentifyCodeAuthzLevelW ImpersonateAnonymousToken@4 ImpersonateLoggedOnUser@4 diff --git a/reactos/dll/win32/advapi32/advapi32.h b/reactos/dll/win32/advapi32/advapi32.h index 069df54c046..23a63b9901d 100644 --- a/reactos/dll/win32/advapi32/advapi32.h +++ b/reactos/dll/win32/advapi32/advapi32.h @@ -50,6 +50,10 @@ BOOL EvtGetLocalHandle(RPC_BINDING_HANDLE *BindingHandle); RPC_STATUS EvtUnbindLocalHandle(void); +/* scm.c */ +DWORD +ScmRpcStatusToWinError(RPC_STATUS Status); + /* Interface to ntmarta.dll **************************************************/ typedef struct _NTMARTA diff --git a/reactos/dll/win32/advapi32/advapi32.rbuild b/reactos/dll/win32/advapi32/advapi32.rbuild index 8199e92e650..ff6b443389d 100644 --- a/reactos/dll/win32/advapi32/advapi32.rbuild +++ b/reactos/dll/win32/advapi32/advapi32.rbuild @@ -53,7 +53,6 @@ rpc.c scm.c sctrl.c - undoc.c privilege.c diff --git a/reactos/dll/win32/advapi32/service/scm.c b/reactos/dll/win32/advapi32/service/scm.c index 513cab9a10f..a47c620a89d 100644 --- a/reactos/dll/win32/advapi32/service/scm.c +++ b/reactos/dll/win32/advapi32/service/scm.c @@ -78,7 +78,7 @@ HandleUnbind(VOID) #endif -static DWORD +DWORD ScmRpcStatusToWinError(RPC_STATUS Status) { switch (Status) diff --git a/reactos/dll/win32/advapi32/service/sctrl.c b/reactos/dll/win32/advapi32/service/sctrl.c index af3900eb876..140a6c27316 100644 --- a/reactos/dll/win32/advapi32/service/sctrl.c +++ b/reactos/dll/win32/advapi32/service/sctrl.c @@ -528,10 +528,88 @@ RegisterServiceCtrlHandlerExW(LPCWSTR lpServiceName, } +/********************************************************************** + * I_ScSetServiceBitsA + * + * Undocumented + * + * @implemented + */ +BOOL STDCALL +I_ScSetServiceBitsA(SC_RPC_HANDLE hServiceStatus, + DWORD dwServiceBits, + BOOL bSetBitsOn, + BOOL bUpdateImmediately, + LPSTR lpString) +{ + BOOL bResult; + + HandleBind(); + + _SEH_TRY + { + /* Call to services.exe using RPC */ + bResult = RI_ScSetServiceBitsA(BindingHandle, + (SC_RPC_HANDLE)hServiceStatus, + dwServiceBits, + bSetBitsOn, + bUpdateImmediately, + lpString); + } + _SEH_HANDLE + { + SetLastError(ScmRpcStatusToWinError(RpcExceptionCode())); + bResult = FALSE; + } + _SEH_END; + + return bResult; +} + + +/********************************************************************** + * I_ScSetServiceBitsW + * + * Undocumented + * + * @implemented + */ +BOOL STDCALL +I_ScSetServiceBitsW(SC_RPC_HANDLE hServiceStatus, + DWORD dwServiceBits, + BOOL bSetBitsOn, + BOOL bUpdateImmediately, + LPWSTR lpString) +{ + BOOL bResult; + + HandleBind(); + + _SEH_TRY + { + /* Call to services.exe using RPC */ + bResult = RI_ScSetServiceBitsW(BindingHandle, + (SC_RPC_HANDLE)hServiceStatus, + dwServiceBits, + bSetBitsOn, + bUpdateImmediately, + lpString); + } + _SEH_HANDLE + { + SetLastError(ScmRpcStatusToWinError(RpcExceptionCode())); + bResult = FALSE; + } + _SEH_END; + + return bResult; +} + + /********************************************************************** * SetServiceBits * - * @unimplemented + * @implemented */ BOOL STDCALL SetServiceBits(SERVICE_STATUS_HANDLE hServiceStatus, @@ -539,8 +617,11 @@ SetServiceBits(SERVICE_STATUS_HANDLE hServiceStatus, BOOL bSetBitsOn, BOOL bUpdateImmediately) { - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return FALSE; + return I_ScSetServiceBitsW(hServiceStatus, + dwServiceBits, + bSetBitsOn, + bUpdateImmediately, + NULL); } diff --git a/reactos/dll/win32/advapi32/service/undoc.c b/reactos/dll/win32/advapi32/service/undoc.c deleted file mode 100644 index 7f596c726e9..00000000000 --- a/reactos/dll/win32/advapi32/service/undoc.c +++ /dev/null @@ -1,51 +0,0 @@ -/* $Id$ - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS system libraries - * FILE: lib/advapi32/service/undoc.c - * PURPOSE: Undocumented service functions - * PROGRAMMER: Emanuele Aliberti - * UPDATE HISTORY: - * 19990413 EA created - * 19990515 EA - */ - -/* INCLUDES ******************************************************************/ - -#include - - -/* FUNCTIONS *****************************************************************/ - -/********************************************************************** - * I_ScSetServiceBitsA - * - * Undocumented - * - * Return value unknown. - */ -DWORD -STDCALL -I_ScSetServiceBitsA(VOID) -{ - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 1; -} - - -/********************************************************************** - * I_ScSetServiceBitsW - * - * Undocumented - * - * Return value unknown. - */ -DWORD -STDCALL -I_ScSetServiceBitsW(VOID) -{ - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 1; -} - - diff --git a/reactos/include/reactos/idl/svcctl.idl b/reactos/include/reactos/idl/svcctl.idl index 5dff418aaeb..ba75d0dbfcc 100644 --- a/reactos/include/reactos/idl/svcctl.idl +++ b/reactos/include/reactos/idl/svcctl.idl @@ -366,7 +366,7 @@ interface svcctl [in] DWORD BootAcceptable); /* Function 10 */ - DWORD RSetServiceBitsW( + DWORD RI_ScSetServiceBitsW( [in] handle_t BindingHandle, [in] SC_RPC_HANDLE hServiceStatus, [in] DWORD dwServiceBits, @@ -490,7 +490,7 @@ interface svcctl [in, out] DWORD* lpcchBuffer); /* Function 22 */ - DWORD RSetServiceBitsA( + DWORD RI_ScSetServiceBitsA( [in] handle_t BindingHandle, [in] SC_RPC_HANDLE hServiceStatus, [in] DWORD dwServiceBits,