mirror of
https://github.com/reactos/reactos.git
synced 2024-07-31 08:39:05 +00:00
SEH-protect all calls to remote functions.
Based on patches from Bug #3669 by bugboy <martinmnet@hotmail.com>. svn path=/trunk/; revision=35605
This commit is contained in:
parent
413b6d969f
commit
866b97d444
|
@ -78,6 +78,26 @@ HandleUnbind(VOID)
|
|||
#endif
|
||||
|
||||
|
||||
static DWORD
|
||||
ScmRpcStatusToWinError(RPC_STATUS Status)
|
||||
{
|
||||
switch (Status)
|
||||
{
|
||||
case RPC_X_SS_IN_NULL_CONTEXT:
|
||||
return ERROR_INVALID_HANDLE;
|
||||
|
||||
case RPC_X_NULL_REF_POINTER:
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
|
||||
case STATUS_ACCESS_VIOLATION:
|
||||
return ERROR_INVALID_ADDRESS;
|
||||
|
||||
default:
|
||||
return (DWORD)Status;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* ChangeServiceConfig2A
|
||||
*
|
||||
|
@ -116,9 +136,18 @@ ChangeServiceConfig2A(SC_HANDLE hService,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
dwError = RChangeServiceConfig2A(BindingHandle,
|
||||
(SC_RPC_HANDLE)hService,
|
||||
Info);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("RChangeServiceConfig2A() failed (Error %lu)\n", dwError);
|
||||
|
@ -170,9 +199,18 @@ ChangeServiceConfig2W(SC_HANDLE hService,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
dwError = RChangeServiceConfig2W(BindingHandle,
|
||||
(SC_RPC_HANDLE)hService,
|
||||
Info);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("RChangeServiceConfig2W() failed (Error %lu)\n", dwError);
|
||||
|
@ -226,6 +264,8 @@ ChangeServiceConfigA(SC_HANDLE hService,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = RChangeServiceConfigA(BindingHandle,
|
||||
(SC_RPC_HANDLE)hService,
|
||||
|
@ -241,6 +281,13 @@ ChangeServiceConfigA(SC_HANDLE hService,
|
|||
NULL, /* FIXME: lpPassword */
|
||||
0, /* FIXME: dwPasswordLength */
|
||||
(LPSTR)lpDisplayName);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("RChangeServiceConfigA() failed (Error %lu)\n", dwError);
|
||||
|
@ -294,6 +341,8 @@ ChangeServiceConfigW(SC_HANDLE hService,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = RChangeServiceConfigW(BindingHandle,
|
||||
(SC_RPC_HANDLE)hService,
|
||||
|
@ -309,6 +358,13 @@ ChangeServiceConfigW(SC_HANDLE hService,
|
|||
NULL, /* FIXME: lpPassword */
|
||||
0, /* FIXME: dwPasswordLength */
|
||||
(LPWSTR)lpDisplayName);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("RChangeServiceConfigW() failed (Error %lu)\n", dwError);
|
||||
|
@ -334,9 +390,18 @@ CloseServiceHandle(SC_HANDLE hSCObject)
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = RCloseServiceHandle(BindingHandle,
|
||||
(LPSC_RPC_HANDLE)&hSCObject);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError)
|
||||
{
|
||||
ERR("RCloseServiceHandle() failed (Error %lu)\n", dwError);
|
||||
|
@ -367,11 +432,20 @@ ControlService(SC_HANDLE hService,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = RControlService(BindingHandle,
|
||||
(SC_RPC_HANDLE)hService,
|
||||
dwControl,
|
||||
lpServiceStatus);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("RControlService() failed (Error %lu)\n", dwError);
|
||||
|
@ -403,7 +477,6 @@ ControlServiceEx(IN SC_HANDLE hService,
|
|||
}
|
||||
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* CreateServiceA
|
||||
*
|
||||
|
@ -616,6 +689,8 @@ CreateServiceW(SC_HANDLE hSCManager,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = RCreateServiceW(BindingHandle,
|
||||
(SC_RPC_HANDLE)hSCManager,
|
||||
|
@ -634,6 +709,13 @@ CreateServiceW(SC_HANDLE hSCManager,
|
|||
NULL, /* FIXME: lpPassword */
|
||||
0, /* FIXME: dwPasswordLength */
|
||||
(SC_RPC_HANDLE *)&hService);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("RCreateServiceW() failed (Error %lu)\n", dwError);
|
||||
|
@ -659,9 +741,18 @@ DeleteService(SC_HANDLE hService)
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = RDeleteService(BindingHandle,
|
||||
(SC_RPC_HANDLE)hService);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("RDeleteService() failed (Error %lu)\n", dwError);
|
||||
|
@ -687,13 +778,15 @@ EnumDependentServicesA(SC_HANDLE hService,
|
|||
LPDWORD lpServicesReturned)
|
||||
{
|
||||
LPENUM_SERVICE_STATUSA lpStatusPtr;
|
||||
DWORD dwError = ERROR_SUCCESS;
|
||||
DWORD dwError;
|
||||
DWORD dwCount;
|
||||
|
||||
TRACE("EnumServicesStatusA() called\n");
|
||||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
dwError = REnumDependentServicesA(BindingHandle,
|
||||
(SC_RPC_HANDLE)hService,
|
||||
dwServiceState,
|
||||
|
@ -701,6 +794,12 @@ EnumDependentServicesA(SC_HANDLE hService,
|
|||
cbBufSize,
|
||||
pcbBytesNeeded,
|
||||
lpServicesReturned);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
lpStatusPtr = (LPENUM_SERVICE_STATUSA)lpServices;
|
||||
for (dwCount = 0; dwCount < *lpServicesReturned; dwCount++)
|
||||
|
@ -743,13 +842,15 @@ EnumDependentServicesW(SC_HANDLE hService,
|
|||
LPDWORD lpServicesReturned)
|
||||
{
|
||||
LPENUM_SERVICE_STATUSW lpStatusPtr;
|
||||
DWORD dwError = ERROR_SUCCESS;
|
||||
DWORD dwError;
|
||||
DWORD dwCount;
|
||||
|
||||
TRACE("EnumServicesStatusW() called\n");
|
||||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
dwError = REnumDependentServicesW(BindingHandle,
|
||||
(SC_RPC_HANDLE)hService,
|
||||
dwServiceState,
|
||||
|
@ -757,6 +858,12 @@ EnumDependentServicesW(SC_HANDLE hService,
|
|||
cbBufSize,
|
||||
pcbBytesNeeded,
|
||||
lpServicesReturned);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
lpStatusPtr = (LPENUM_SERVICE_STATUSW)lpServices;
|
||||
for (dwCount = 0; dwCount < *lpServicesReturned; dwCount++)
|
||||
|
@ -825,13 +932,15 @@ EnumServicesStatusA(SC_HANDLE hSCManager,
|
|||
LPDWORD lpResumeHandle)
|
||||
{
|
||||
LPENUM_SERVICE_STATUSA lpStatusPtr;
|
||||
DWORD dwError = ERROR_SUCCESS;
|
||||
DWORD dwError;
|
||||
DWORD dwCount;
|
||||
|
||||
TRACE("EnumServicesStatusA() called\n");
|
||||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
dwError = REnumServicesStatusA(BindingHandle,
|
||||
(SC_RPC_HANDLE)hSCManager,
|
||||
dwServiceType,
|
||||
|
@ -841,6 +950,12 @@ EnumServicesStatusA(SC_HANDLE hSCManager,
|
|||
pcbBytesNeeded,
|
||||
lpServicesReturned,
|
||||
lpResumeHandle);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
lpStatusPtr = (LPENUM_SERVICE_STATUSA)lpServices;
|
||||
for (dwCount = 0; dwCount < *lpServicesReturned; dwCount++)
|
||||
|
@ -885,13 +1000,15 @@ EnumServicesStatusW(SC_HANDLE hSCManager,
|
|||
LPDWORD lpResumeHandle)
|
||||
{
|
||||
LPENUM_SERVICE_STATUSW lpStatusPtr;
|
||||
DWORD dwError = ERROR_SUCCESS;
|
||||
DWORD dwError;
|
||||
DWORD dwCount;
|
||||
|
||||
TRACE("EnumServicesStatusW() called\n");
|
||||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
dwError = REnumServicesStatusW(BindingHandle,
|
||||
(SC_RPC_HANDLE)hSCManager,
|
||||
dwServiceType,
|
||||
|
@ -901,6 +1018,12 @@ EnumServicesStatusW(SC_HANDLE hSCManager,
|
|||
pcbBytesNeeded,
|
||||
lpServicesReturned,
|
||||
lpResumeHandle);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
lpStatusPtr = (LPENUM_SERVICE_STATUSW)lpServices;
|
||||
for (dwCount = 0; dwCount < *lpServicesReturned; dwCount++)
|
||||
|
@ -947,13 +1070,15 @@ EnumServicesStatusExA(SC_HANDLE hSCManager,
|
|||
LPCSTR pszGroupName)
|
||||
{
|
||||
LPENUM_SERVICE_STATUS_PROCESSA lpStatusPtr;
|
||||
DWORD dwError = ERROR_SUCCESS;
|
||||
DWORD dwError;
|
||||
DWORD dwCount;
|
||||
|
||||
TRACE("EnumServicesStatusExA() called\n");
|
||||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
dwError = REnumServicesStatusExA(BindingHandle,
|
||||
(SC_RPC_HANDLE)hSCManager,
|
||||
InfoLevel,
|
||||
|
@ -965,6 +1090,12 @@ EnumServicesStatusExA(SC_HANDLE hSCManager,
|
|||
lpServicesReturned,
|
||||
lpResumeHandle,
|
||||
(LPSTR)pszGroupName);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError == ERROR_MORE_DATA)
|
||||
{
|
||||
|
@ -1019,13 +1150,15 @@ EnumServicesStatusExW(SC_HANDLE hSCManager,
|
|||
LPCWSTR pszGroupName)
|
||||
{
|
||||
LPENUM_SERVICE_STATUS_PROCESSW lpStatusPtr;
|
||||
DWORD dwError = ERROR_SUCCESS;
|
||||
DWORD dwError;
|
||||
DWORD dwCount;
|
||||
|
||||
TRACE("EnumServicesStatusExW() called\n");
|
||||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
dwError = REnumServicesStatusExW(BindingHandle,
|
||||
(SC_RPC_HANDLE)hSCManager,
|
||||
InfoLevel,
|
||||
|
@ -1037,6 +1170,12 @@ EnumServicesStatusExW(SC_HANDLE hSCManager,
|
|||
lpServicesReturned,
|
||||
lpResumeHandle,
|
||||
(LPWSTR)pszGroupName);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError == ERROR_MORE_DATA)
|
||||
{
|
||||
|
@ -1090,11 +1229,23 @@ GetServiceDisplayNameA(SC_HANDLE hSCManager,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
dwError = RGetServiceDisplayNameA(BindingHandle,
|
||||
(SC_RPC_HANDLE)hSCManager,
|
||||
(LPSTR)lpServiceName,
|
||||
lpDisplayName,
|
||||
lpcchBuffer);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
/* HACK: because of a problem with rpcrt4, rpcserver is hacked to return 6 for ERROR_SERVICE_DOES_NOT_EXIST */
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
|
||||
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("RGetServiceDisplayNameA() failed (Error %lu)\n", dwError);
|
||||
|
@ -1125,11 +1276,20 @@ GetServiceDisplayNameW(SC_HANDLE hSCManager,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
dwError = RGetServiceDisplayNameW(BindingHandle,
|
||||
(SC_RPC_HANDLE)hSCManager,
|
||||
(LPWSTR)lpServiceName,
|
||||
lpDisplayName,
|
||||
lpcchBuffer);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("RGetServiceDisplayNameW() failed (Error %lu)\n", dwError);
|
||||
|
@ -1160,11 +1320,20 @@ GetServiceKeyNameA(SC_HANDLE hSCManager,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
dwError = RGetServiceKeyNameA(BindingHandle,
|
||||
(SC_RPC_HANDLE)hSCManager,
|
||||
(LPSTR)lpDisplayName,
|
||||
lpServiceName,
|
||||
lpcchBuffer);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("RGetServiceKeyNameA() failed (Error %lu)\n", dwError);
|
||||
|
@ -1195,11 +1364,20 @@ GetServiceKeyNameW(SC_HANDLE hSCManager,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
dwError = RGetServiceKeyNameW(BindingHandle,
|
||||
(SC_RPC_HANDLE)hSCManager,
|
||||
(LPWSTR)lpDisplayName,
|
||||
lpServiceName,
|
||||
lpcchBuffer);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("RGetServiceKeyNameW() failed (Error %lu)\n", dwError);
|
||||
|
@ -1228,10 +1406,19 @@ LockServiceDatabase(SC_HANDLE hSCManager)
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = RLockServiceDatabase(BindingHandle,
|
||||
(SC_RPC_HANDLE)hSCManager,
|
||||
(SC_RPC_LOCK *)&hLock);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("RLockServiceDatabase() failed (Error %lu)\n", dwError);
|
||||
|
@ -1305,12 +1492,21 @@ OpenSCManagerA(LPCSTR lpMachineName,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = ROpenSCManagerA(BindingHandle,
|
||||
(LPSTR)lpMachineName,
|
||||
(LPSTR)lpDatabaseName,
|
||||
dwDesiredAccess,
|
||||
(SC_RPC_HANDLE *)&hScm);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("ROpenSCManagerA() failed (Error %lu)\n", dwError);
|
||||
|
@ -1344,12 +1540,21 @@ OpenSCManagerW(LPCWSTR lpMachineName,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = ROpenSCManagerW(BindingHandle,
|
||||
(LPWSTR)lpMachineName,
|
||||
(LPWSTR)lpDatabaseName,
|
||||
dwDesiredAccess,
|
||||
(SC_RPC_HANDLE *)&hScm);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("ROpenSCManagerW() failed (Error %lu)\n", dwError);
|
||||
|
@ -1381,12 +1586,21 @@ OpenServiceA(SC_HANDLE hSCManager,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = ROpenServiceA(BindingHandle,
|
||||
(SC_RPC_HANDLE)hSCManager,
|
||||
(LPSTR)lpServiceName,
|
||||
dwDesiredAccess,
|
||||
(SC_RPC_HANDLE *)&hService);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("ROpenServiceA() failed (Error %lu)\n", dwError);
|
||||
|
@ -1418,12 +1632,21 @@ OpenServiceW(SC_HANDLE hSCManager,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = ROpenServiceW(BindingHandle,
|
||||
(SC_RPC_HANDLE)hSCManager,
|
||||
(LPWSTR)lpServiceName,
|
||||
dwDesiredAccess,
|
||||
(SC_RPC_HANDLE *)&hService);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
if (dwError == ERROR_SERVICE_DOES_NOT_EXIST)
|
||||
|
@ -1458,12 +1681,21 @@ QueryServiceConfigA(SC_HANDLE hService,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = RQueryServiceConfigA(BindingHandle,
|
||||
(SC_RPC_HANDLE)hService,
|
||||
(LPBYTE)lpServiceConfig,
|
||||
cbBufSize,
|
||||
pcbBytesNeeded);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("RQueryServiceConfigA() failed (Error %lu)\n", dwError);
|
||||
|
@ -1521,12 +1753,21 @@ QueryServiceConfigW(SC_HANDLE hService,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = RQueryServiceConfigW(BindingHandle,
|
||||
(SC_RPC_HANDLE)hService,
|
||||
(LPBYTE)lpServiceConfig,
|
||||
cbBufSize,
|
||||
pcbBytesNeeded);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
if (dwError == ERROR_INSUFFICIENT_BUFFER)
|
||||
|
@ -1588,6 +1829,8 @@ QueryServiceConfig2A(SC_HANDLE hService,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = RQueryServiceConfig2A(BindingHandle,
|
||||
(SC_RPC_HANDLE)hService,
|
||||
|
@ -1595,6 +1838,13 @@ QueryServiceConfig2A(SC_HANDLE hService,
|
|||
lpBuffer,
|
||||
cbBufSize,
|
||||
pcbBytesNeeded);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("RQueryServiceConfig2A() failed (Error %lu)\n", dwError);
|
||||
|
@ -1663,6 +1913,8 @@ QueryServiceConfig2W(SC_HANDLE hService,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = RQueryServiceConfig2W(BindingHandle,
|
||||
(SC_RPC_HANDLE)hService,
|
||||
|
@ -1670,6 +1922,13 @@ QueryServiceConfig2W(SC_HANDLE hService,
|
|||
lpBuffer,
|
||||
cbBufSize,
|
||||
pcbBytesNeeded);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("RQueryServiceConfig2W() failed (Error %lu)\n", dwError);
|
||||
|
@ -1736,12 +1995,21 @@ QueryServiceLockStatusA(SC_HANDLE hSCManager,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = RQueryServiceLockStatusA(BindingHandle,
|
||||
(SC_RPC_HANDLE)hSCManager,
|
||||
lpLockStatus,
|
||||
cbBufSize,
|
||||
pcbBytesNeeded);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("RQueryServiceLockStatusA() failed (Error %lu)\n", dwError);
|
||||
|
@ -1778,12 +2046,21 @@ QueryServiceLockStatusW(SC_HANDLE hSCManager,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = RQueryServiceLockStatusW(BindingHandle,
|
||||
(SC_RPC_HANDLE)hSCManager,
|
||||
lpLockStatus,
|
||||
cbBufSize,
|
||||
pcbBytesNeeded);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("RQueryServiceLockStatusW() failed (Error %lu)\n", dwError);
|
||||
|
@ -1822,6 +2099,8 @@ QueryServiceObjectSecurity(SC_HANDLE hService,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = RQueryServiceObjectSecurity(BindingHandle,
|
||||
(SC_RPC_HANDLE)hService,
|
||||
|
@ -1829,6 +2108,13 @@ QueryServiceObjectSecurity(SC_HANDLE hService,
|
|||
(LPBYTE)lpSecurityDescriptor,
|
||||
cbBufSize,
|
||||
pcbBytesNeeded);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("QueryServiceObjectSecurity() failed (Error %lu)\n", dwError);
|
||||
|
@ -1883,12 +2169,20 @@ SetServiceObjectSecurity(SC_HANDLE hService,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = RSetServiceObjectSecurity(BindingHandle,
|
||||
(SC_RPC_HANDLE)hService,
|
||||
dwSecurityInformation,
|
||||
(LPBYTE)SelfRelativeSD,
|
||||
Length);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, SelfRelativeSD);
|
||||
|
||||
|
@ -1919,10 +2213,19 @@ QueryServiceStatus(SC_HANDLE hService,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = RQueryServiceStatus(BindingHandle,
|
||||
(SC_RPC_HANDLE)hService,
|
||||
lpServiceStatus);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("RQueryServiceStatus() failed (Error %lu)\n", dwError);
|
||||
|
@ -1952,6 +2255,8 @@ QueryServiceStatusEx(SC_HANDLE hService,
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = RQueryServiceStatusEx(BindingHandle,
|
||||
(SC_RPC_HANDLE)hService,
|
||||
|
@ -1959,6 +2264,13 @@ QueryServiceStatusEx(SC_HANDLE hService,
|
|||
lpBuffer,
|
||||
cbBufSize,
|
||||
pcbBytesNeeded);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("RQueryServiceStatusEx() failed (Error %lu)\n", dwError);
|
||||
|
@ -1982,11 +2294,18 @@ StartServiceA(SC_HANDLE hService,
|
|||
{
|
||||
DWORD dwError;
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
dwError = RStartServiceA(BindingHandle,
|
||||
(SC_RPC_HANDLE)hService,
|
||||
dwNumServiceArgs,
|
||||
(LPSTRING_PTRSA)lpServiceArgVectors);
|
||||
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
|
@ -2011,10 +2330,18 @@ StartServiceW(SC_HANDLE hService,
|
|||
{
|
||||
DWORD dwError;
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
dwError = RStartServiceW(BindingHandle,
|
||||
(SC_RPC_HANDLE)hService,
|
||||
dwNumServiceArgs,
|
||||
(LPSTRING_PTRSW)lpServiceArgVectors);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
|
@ -2041,9 +2368,18 @@ UnlockServiceDatabase(SC_LOCK ScLock)
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = RUnlockServiceDatabase(BindingHandle,
|
||||
(SC_RPC_LOCK)ScLock);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("RUnlockServiceDatabase() failed (Error %lu)\n", dwError);
|
||||
|
@ -2069,10 +2405,19 @@ NotifyBootConfigStatus(BOOL BootAcceptable)
|
|||
|
||||
HandleBind();
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
/* Call to services.exe using RPC */
|
||||
dwError = RNotifyBootConfigStatus(BindingHandle,
|
||||
NULL,
|
||||
BootAcceptable);
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
|
||||
}
|
||||
_SEH_END;
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("NotifyBootConfigStatus() failed (Error %lu)\n", dwError);
|
||||
|
|
Loading…
Reference in a new issue