}
-handle_t __RPC_USER
-RPC_SERVICE_STATUS_HANDLE_bind(RPC_SERVICE_STATUS_HANDLE hServiceStatus)
-{
- handle_t hBinding = NULL;
- LPWSTR pszStringBinding;
- RPC_STATUS status;
-
- TRACE("RPC_SERVICE_STATUS_HANDLE_bind() called\n");
-
- status = RpcStringBindingComposeW(NULL,
- L"ncacn_np",
- NULL,
- L"\\pipe\\ntsvcs",
- NULL,
- &pszStringBinding);
- if (status != RPC_S_OK)
- {
- 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 != RPC_S_OK)
- {
- ERR("RpcBindingFromStringBinding returned 0x%x\n", status);
- }
-
- status = RpcStringFreeW(&pszStringBinding);
- if (status != RPC_S_OK)
- {
- 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;
-
- TRACE("RPC_SERVICE_STATUS_HANDLE_unbind() called\n");
-
- status = RpcBindingFree(&hBinding);
- if (status != RPC_S_OK)
- {
- ERR("RpcBindingFree returned 0x%x\n", status);
- }
-}
-
-
DWORD
ScmRpcStatusToWinError(RPC_STATUS Status)
{
if (dwError != ERROR_SUCCESS)
{
- ERR("RChangeServiceConfig2A() failed (Error %lu)\n", dwError);
+ TRACE("RChangeServiceConfig2A() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
switch (dwInfoLevel)
{
case SERVICE_CONFIG_DESCRIPTION:
- {
Info.psd = (LPSERVICE_DESCRIPTIONW)&lpInfo;
break;
- }
case SERVICE_CONFIG_FAILURE_ACTIONS:
Info.psfa = (LPSERVICE_FAILURE_ACTIONSW)&lpInfo;
if (dwError != ERROR_SUCCESS)
{
- ERR("RChangeServiceConfig2W() failed (Error %lu)\n", dwError);
+ TRACE("RChangeServiceConfig2W() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("RChangeServiceConfigA() failed (Error %lu)\n", dwError);
+ TRACE("RChangeServiceConfigA() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("RChangeServiceConfigW() failed (Error %lu)\n", dwError);
+ TRACE("RChangeServiceConfigW() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
if (dwError)
{
- ERR("RCloseServiceHandle() failed (Error %lu)\n", dwError);
+ TRACE("RCloseServiceHandle() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("RControlService() failed (Error %lu)\n", dwError);
+ TRACE("RControlService() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
LPCSTR lpServiceStartName,
LPCSTR lpPassword)
{
- SC_HANDLE RetVal = NULL;
- LPWSTR lpServiceNameW = NULL;
- LPWSTR lpDisplayNameW = NULL;
- LPWSTR lpBinaryPathNameW = NULL;
- LPWSTR lpLoadOrderGroupW = NULL;
- LPWSTR lpDependenciesW = NULL;
- LPWSTR lpServiceStartNameW = NULL;
- LPWSTR lpPasswordW = NULL;
+ SC_HANDLE hService = NULL;
DWORD dwDependenciesLength = 0;
+ DWORD dwError;
DWORD dwLength;
- int len;
LPSTR lpStr;
+ TRACE("CreateServiceA() called\n");
+ TRACE("%p %s %s\n", hSCManager,
+ lpServiceName, lpDisplayName);
+
if (!hSCManager)
{
SetLastError(ERROR_INVALID_HANDLE);
return NULL;
}
- if (lpServiceName)
- {
- len = MultiByteToWideChar(CP_ACP, 0, lpServiceName, -1, NULL, 0);
- lpServiceNameW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
- if (!lpServiceNameW)
- {
- SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- goto cleanup;
- }
- MultiByteToWideChar(CP_ACP, 0, lpServiceName, -1, lpServiceNameW, len);
- }
-
- if (lpDisplayName)
- {
- len = MultiByteToWideChar(CP_ACP, 0, lpDisplayName, -1, NULL, 0);
- lpDisplayNameW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
- if (!lpDisplayNameW)
- {
- SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- goto cleanup;
- }
- MultiByteToWideChar(CP_ACP, 0, lpDisplayName, -1, lpDisplayNameW, len);
- }
-
- if (lpBinaryPathName)
- {
- len = MultiByteToWideChar(CP_ACP, 0, lpBinaryPathName, -1, NULL, 0);
- lpBinaryPathNameW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
- if (!lpBinaryPathNameW)
- {
- SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- goto cleanup;
- }
- MultiByteToWideChar(CP_ACP, 0, lpBinaryPathName, -1, lpBinaryPathNameW, len);
- }
-
- if (lpLoadOrderGroup)
- {
- len = MultiByteToWideChar(CP_ACP, 0, lpLoadOrderGroup, -1, NULL, 0);
- lpLoadOrderGroupW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
- if (!lpLoadOrderGroupW)
- {
- SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- goto cleanup;
- }
- MultiByteToWideChar(CP_ACP, 0, lpLoadOrderGroup, -1, lpLoadOrderGroupW, len);
- }
-
- if (lpDependencies)
+ /* Calculate the Dependencies length*/
+ if (lpDependencies != NULL)
{
lpStr = (LPSTR)lpDependencies;
while (*lpStr)
lpStr = lpStr + dwLength;
}
dwDependenciesLength++;
-
- lpDependenciesW = HeapAlloc(GetProcessHeap(), 0, dwDependenciesLength * sizeof(WCHAR));
- if (!lpDependenciesW)
- {
- SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- goto cleanup;
- }
- MultiByteToWideChar(CP_ACP, 0, lpDependencies, dwDependenciesLength, lpDependenciesW, dwDependenciesLength);
}
- if (lpServiceStartName)
+ /* FIXME: Encrypt the password */
+
+ RpcTryExcept
{
- len = MultiByteToWideChar(CP_ACP, 0, lpServiceStartName, -1, NULL, 0);
- lpServiceStartNameW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
- if (!lpServiceStartNameW)
- {
- SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- goto cleanup;
- }
- MultiByteToWideChar(CP_ACP, 0, lpServiceStartName, -1, lpServiceStartNameW, len);
+ /* Call to services.exe using RPC */
+ dwError = RCreateServiceA((SC_RPC_HANDLE)hSCManager,
+ (LPSTR)lpServiceName,
+ (LPSTR)lpDisplayName,
+ dwDesiredAccess,
+ dwServiceType,
+ dwStartType,
+ dwErrorControl,
+ (LPSTR)lpBinaryPathName,
+ (LPSTR)lpLoadOrderGroup,
+ lpdwTagId,
+ (LPBYTE)lpDependencies,
+ dwDependenciesLength,
+ (LPSTR)lpServiceStartName,
+ NULL, /* FIXME: lpPassword */
+ 0, /* FIXME: dwPasswordLength */
+ (SC_RPC_HANDLE *)&hService);
}
-
- if (lpPassword)
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
- len = MultiByteToWideChar(CP_ACP, 0, lpPassword, -1, NULL, 0);
- lpPasswordW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
- if (!lpPasswordW)
- {
- SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- goto cleanup;
- }
- MultiByteToWideChar(CP_ACP, 0, lpPassword, -1, lpPasswordW, len);
+ dwError = ScmRpcStatusToWinError(RpcExceptionCode());
}
+ RpcEndExcept;
- RetVal = CreateServiceW(hSCManager,
- lpServiceNameW,
- lpDisplayNameW,
- dwDesiredAccess,
- dwServiceType,
- dwStartType,
- dwErrorControl,
- lpBinaryPathNameW,
- lpLoadOrderGroupW,
- lpdwTagId,
- lpDependenciesW,
- lpServiceStartNameW,
- lpPasswordW);
-
-cleanup:
- if (lpServiceNameW !=NULL)
- HeapFree(GetProcessHeap(), 0, lpServiceNameW);
-
- if (lpDisplayNameW != NULL)
- HeapFree(GetProcessHeap(), 0, lpDisplayNameW);
-
- if (lpBinaryPathNameW != NULL)
- HeapFree(GetProcessHeap(), 0, lpBinaryPathNameW);
-
- if (lpLoadOrderGroupW != NULL)
- HeapFree(GetProcessHeap(), 0, lpLoadOrderGroupW);
-
- if (lpDependenciesW != NULL)
- HeapFree(GetProcessHeap(), 0, lpDependenciesW);
-
- if (lpServiceStartNameW != NULL)
- HeapFree(GetProcessHeap(), 0, lpServiceStartNameW);
-
- if (lpPasswordW != NULL)
- HeapFree(GetProcessHeap(), 0, lpPasswordW);
+ if (dwError != ERROR_SUCCESS)
+ {
+ TRACE("RCreateServiceA() failed (Error %lu)\n", dwError);
+ SetLastError(dwError);
+ return NULL;
+ }
- return RetVal;
+ return hService;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("RCreateServiceW() failed (Error %lu)\n", dwError);
+ TRACE("RCreateServiceW() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return NULL;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("RDeleteService() failed (Error %lu)\n", dwError);
+ TRACE("RDeleteService() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
}
RpcEndExcept;
- if (dwError != ERROR_SUCCESS)
+ if (dwError == ERROR_SUCCESS || dwError == ERROR_MORE_DATA)
{
- ERR("REnumDependentServicesA() failed (Error %lu)\n", dwError);
- SetLastError(dwError);
- return FALSE;
- }
+ lpStatusPtr = (LPENUM_SERVICE_STATUSA)lpServices;
+ for (dwCount = 0; dwCount < *lpServicesReturned; dwCount++)
+ {
+ if (lpStatusPtr->lpServiceName)
+ lpStatusPtr->lpServiceName =
+ (LPSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpServiceName);
- lpStatusPtr = (LPENUM_SERVICE_STATUSA)lpServices;
- for (dwCount = 0; dwCount < *lpServicesReturned; dwCount++)
- {
- if (lpStatusPtr->lpServiceName)
- lpStatusPtr->lpServiceName =
- (LPSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpServiceName);
+ if (lpStatusPtr->lpDisplayName)
+ lpStatusPtr->lpDisplayName =
+ (LPSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpDisplayName);
- if (lpStatusPtr->lpDisplayName)
- lpStatusPtr->lpDisplayName =
- (LPSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpDisplayName);
+ lpStatusPtr++;
+ }
+ }
- lpStatusPtr++;
+ if (dwError != ERROR_SUCCESS)
+ {
+ TRACE("REnumDependentServicesA() failed (Error %lu)\n", dwError);
+ SetLastError(dwError);
+ return FALSE;
}
TRACE("EnumDependentServicesA() done\n");
}
RpcEndExcept;
- if (dwError != ERROR_SUCCESS)
+ if (dwError == ERROR_SUCCESS || dwError == ERROR_MORE_DATA)
{
- ERR("REnumDependentServicesW() failed (Error %lu)\n", dwError);
- SetLastError(dwError);
- return FALSE;
- }
+ lpStatusPtr = (LPENUM_SERVICE_STATUSW)lpServices;
+ for (dwCount = 0; dwCount < *lpServicesReturned; dwCount++)
+ {
+ if (lpStatusPtr->lpServiceName)
+ lpStatusPtr->lpServiceName =
+ (LPWSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpServiceName);
- lpStatusPtr = (LPENUM_SERVICE_STATUSW)lpServices;
- for (dwCount = 0; dwCount < *lpServicesReturned; dwCount++)
- {
- if (lpStatusPtr->lpServiceName)
- lpStatusPtr->lpServiceName =
- (LPWSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpServiceName);
+ if (lpStatusPtr->lpDisplayName)
+ lpStatusPtr->lpDisplayName =
+ (LPWSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpDisplayName);
- if (lpStatusPtr->lpDisplayName)
- lpStatusPtr->lpDisplayName =
- (LPWSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpDisplayName);
+ lpStatusPtr++;
+ }
+ }
- lpStatusPtr++;
+ if (dwError != ERROR_SUCCESS)
+ {
+ TRACE("REnumDependentServicesW() failed (Error %lu)\n", dwError);
+ SetLastError(dwError);
+ return FALSE;
}
TRACE("EnumDependentServicesW() done\n");
}
RpcEndExcept;
- if (dwError != ERROR_SUCCESS)
+ if (dwError == ERROR_SUCCESS || dwError == ERROR_MORE_DATA)
{
- ERR("REnumServicesStatusA() failed (Error %lu)\n", dwError);
- SetLastError(dwError);
- return FALSE;
- }
+ lpStatusPtr = (LPENUM_SERVICE_STATUSA)lpServices;
+ for (dwCount = 0; dwCount < *lpServicesReturned; dwCount++)
+ {
+ if (lpStatusPtr->lpServiceName)
+ lpStatusPtr->lpServiceName =
+ (LPSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpServiceName);
- lpStatusPtr = (LPENUM_SERVICE_STATUSA)lpServices;
- for (dwCount = 0; dwCount < *lpServicesReturned; dwCount++)
- {
- if (lpStatusPtr->lpServiceName)
- lpStatusPtr->lpServiceName =
- (LPSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpServiceName);
+ if (lpStatusPtr->lpDisplayName)
+ lpStatusPtr->lpDisplayName =
+ (LPSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpDisplayName);
- if (lpStatusPtr->lpDisplayName)
- lpStatusPtr->lpDisplayName =
- (LPSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpDisplayName);
+ lpStatusPtr++;
+ }
+ }
- lpStatusPtr++;
+ if (dwError != ERROR_SUCCESS)
+ {
+ TRACE("REnumServicesStatusA() failed (Error %lu)\n", dwError);
+ SetLastError(dwError);
+ return FALSE;
}
TRACE("EnumServicesStatusA() done\n");
}
RpcEndExcept;
- if (dwError != ERROR_SUCCESS)
+ if (dwError == ERROR_SUCCESS || dwError == ERROR_MORE_DATA)
{
- ERR("REnumServicesStatusW() failed (Error %lu)\n", dwError);
- SetLastError(dwError);
- return FALSE;
- }
+ lpStatusPtr = (LPENUM_SERVICE_STATUSW)lpServices;
+ for (dwCount = 0; dwCount < *lpServicesReturned; dwCount++)
+ {
+ if (lpStatusPtr->lpServiceName)
+ lpStatusPtr->lpServiceName =
+ (LPWSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpServiceName);
- lpStatusPtr = (LPENUM_SERVICE_STATUSW)lpServices;
- for (dwCount = 0; dwCount < *lpServicesReturned; dwCount++)
- {
- if (lpStatusPtr->lpServiceName)
- lpStatusPtr->lpServiceName =
- (LPWSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpServiceName);
+ if (lpStatusPtr->lpDisplayName)
+ lpStatusPtr->lpDisplayName =
+ (LPWSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpDisplayName);
- if (lpStatusPtr->lpDisplayName)
- lpStatusPtr->lpDisplayName =
- (LPWSTR)((ULONG_PTR)lpServices + (ULONG_PTR)lpStatusPtr->lpDisplayName);
+ lpStatusPtr++;
+ }
+ }
- lpStatusPtr++;
+ if (dwError != ERROR_SUCCESS)
+ {
+ TRACE("REnumServicesStatusW() failed (Error %lu)\n", dwError);
+ SetLastError(dwError);
+ return FALSE;
}
TRACE("EnumServicesStatusW() done\n");
return FALSE;
}
-
RpcTryExcept
{
dwError = REnumServicesStatusExA((SC_RPC_HANDLE)hSCManager,
}
RpcEndExcept;
- if (dwError == ERROR_MORE_DATA)
- {
- WARN("Required buffer size %ul\n", *pcbBytesNeeded);
- SetLastError(dwError);
- return FALSE;
- }
- else if (dwError == ERROR_SUCCESS)
+ if (dwError == ERROR_SUCCESS || dwError == ERROR_MORE_DATA)
{
lpStatusPtr = (LPENUM_SERVICE_STATUS_PROCESSA)lpServices;
for (dwCount = 0; dwCount < *lpServicesReturned; dwCount++)
lpStatusPtr++;
}
}
- else
+
+ if (dwError != ERROR_SUCCESS)
{
- ERR("REnumServicesStatusExA() failed (Error %lu)\n", dwError);
+ TRACE("REnumServicesStatusExA() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
}
RpcEndExcept;
- if (dwError == ERROR_MORE_DATA)
- {
- WARN("Required buffer size %ul\n", *pcbBytesNeeded);
- SetLastError(dwError);
- return FALSE;
- }
- else if (dwError == ERROR_SUCCESS)
+ if (dwError == ERROR_SUCCESS || dwError == ERROR_MORE_DATA)
{
lpStatusPtr = (LPENUM_SERVICE_STATUS_PROCESSW)lpServices;
for (dwCount = 0; dwCount < *lpServicesReturned; dwCount++)
lpStatusPtr++;
}
}
- else
+
+ if (dwError != ERROR_SUCCESS)
{
- ERR("REnumServicesStatusExW() failed (Error %lu)\n", dwError);
+ TRACE("REnumServicesStatusExW() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
LPDWORD lpcchBuffer)
{
DWORD dwError;
+ LPSTR lpNameBuffer;
+ CHAR szEmptyName[] = "";
TRACE("GetServiceDisplayNameA() called\n");
TRACE("%p %s %p %p\n", hSCManager,
return FALSE;
}
- if (!lpDisplayName)
- *lpcchBuffer = 0;
+ if (!lpDisplayName || *lpcchBuffer < sizeof(CHAR))
+ {
+ lpNameBuffer = szEmptyName;
+ *lpcchBuffer = sizeof(CHAR);
+ }
+ else
+ {
+ lpNameBuffer = lpDisplayName;
+ }
RpcTryExcept
{
dwError = RGetServiceDisplayNameA((SC_RPC_HANDLE)hSCManager,
lpServiceName,
- lpDisplayName,
+ lpNameBuffer,
lpcchBuffer);
}
RpcExcept(EXCEPTION_EXECUTE_HANDLER)
/* HACK: because of a problem with rpcrt4, rpcserver is hacked to return 6 for ERROR_SERVICE_DOES_NOT_EXIST */
dwError = ScmRpcStatusToWinError(RpcExceptionCode());
}
-
-
RpcEndExcept;
if (dwError != ERROR_SUCCESS)
{
- ERR("RGetServiceDisplayNameA() failed (Error %lu)\n", dwError);
+ TRACE("RGetServiceDisplayNameA() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
LPDWORD lpcchBuffer)
{
DWORD dwError;
+ LPWSTR lpNameBuffer;
+ WCHAR szEmptyName[] = L"";
TRACE("GetServiceDisplayNameW() called\n");
return FALSE;
}
- if (!lpDisplayName)
- *lpcchBuffer = 0;
+ if (!lpDisplayName || *lpcchBuffer < sizeof(WCHAR))
+ {
+ lpNameBuffer = szEmptyName;
+ *lpcchBuffer = sizeof(WCHAR);
+ }
+ else
+ {
+ lpNameBuffer = lpDisplayName;
+ }
RpcTryExcept
{
dwError = RGetServiceDisplayNameW((SC_RPC_HANDLE)hSCManager,
lpServiceName,
- lpDisplayName,
+ lpNameBuffer,
lpcchBuffer);
}
RpcExcept(EXCEPTION_EXECUTE_HANDLER)
if (dwError != ERROR_SUCCESS)
{
- ERR("RGetServiceDisplayNameW() failed (Error %lu)\n", dwError);
+ TRACE("RGetServiceDisplayNameW() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
LPDWORD lpcchBuffer)
{
DWORD dwError;
+ LPSTR lpNameBuffer;
+ CHAR szEmptyName[] = "";
TRACE("GetServiceKeyNameA() called\n");
return FALSE;
}
- if (!lpDisplayName)
+ if (!lpServiceName || *lpcchBuffer < sizeof(CHAR))
{
- SetLastError(ERROR_INVALID_ADDRESS);
-
- if (!lpServiceName)
- *lpcchBuffer = 1;
- return FALSE;
+ lpNameBuffer = szEmptyName;
+ *lpcchBuffer = sizeof(CHAR);
+ }
+ else
+ {
+ lpNameBuffer = lpServiceName;
}
-
- if (!lpServiceName)
- *lpcchBuffer = 0;
RpcTryExcept
{
dwError = RGetServiceKeyNameA((SC_RPC_HANDLE)hSCManager,
lpDisplayName,
- lpServiceName,
+ lpNameBuffer,
lpcchBuffer);
}
RpcExcept(EXCEPTION_EXECUTE_HANDLER)
if (dwError != ERROR_SUCCESS)
{
- ERR("RGetServiceKeyNameA() failed (Error %lu)\n", dwError);
+ TRACE("RGetServiceKeyNameA() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
LPDWORD lpcchBuffer)
{
DWORD dwError;
+ LPWSTR lpNameBuffer;
+ WCHAR szEmptyName[] = L"";
TRACE("GetServiceKeyNameW() called\n");
return FALSE;
}
- if (!lpDisplayName)
+ if (!lpServiceName || *lpcchBuffer < sizeof(WCHAR))
{
- SetLastError(ERROR_INVALID_ADDRESS);
-
- if (!lpServiceName)
- *lpcchBuffer = 1;
- return FALSE;
+ lpNameBuffer = szEmptyName;
+ *lpcchBuffer = sizeof(WCHAR);
+ }
+ else
+ {
+ lpNameBuffer = lpServiceName;
}
-
- if (!lpServiceName)
- *lpcchBuffer = 0;
RpcTryExcept
{
dwError = RGetServiceKeyNameW((SC_RPC_HANDLE)hSCManager,
lpDisplayName,
- lpServiceName,
+ lpNameBuffer,
lpcchBuffer);
}
RpcExcept(EXCEPTION_EXECUTE_HANDLER)
if (dwError != ERROR_SUCCESS)
{
- ERR("RGetServiceKeyNameW() failed (Error %lu)\n", dwError);
+ TRACE("RGetServiceKeyNameW() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("RLockServiceDatabase() failed (Error %lu)\n", dwError);
+ TRACE("RLockServiceDatabase() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return NULL;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("ROpenSCManagerA() failed (Error %lu)\n", dwError);
+ TRACE("ROpenSCManagerA() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return NULL;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("ROpenSCManagerW() failed (Error %lu)\n", dwError);
+ TRACE("ROpenSCManagerW() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return NULL;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("ROpenServiceA() failed (Error %lu)\n", dwError);
+ TRACE("ROpenServiceA() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return NULL;
}
if (dwError != ERROR_SUCCESS)
{
- if (dwError == ERROR_SERVICE_DOES_NOT_EXIST)
- WARN("ROpenServiceW() failed (Error %lu)\n", dwError);
- else
- ERR("ROpenServiceW() failed (Error %lu)\n", dwError);
+ TRACE("ROpenServiceW() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return NULL;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("RQueryServiceConfigA() failed (Error %lu)\n", dwError);
+ TRACE("RQueryServiceConfigA() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
if (dwError != ERROR_SUCCESS)
{
- if (dwError == ERROR_INSUFFICIENT_BUFFER)
- WARN("RQueryServiceConfigW() failed (Error %lu)\n", dwError);
- else
- ERR("RQueryServiceConfigW() failed (Error %lu)\n", dwError);
+ TRACE("RQueryServiceConfigW() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
{
DWORD dwError;
- DbgPrint("QueryServiceConfig2A(hService %p, dwInfoLevel %lu, lpBuffer %p, cbBufSize %lu, pcbBytesNeeded %p)\n",
- hService, dwInfoLevel, lpBuffer, cbBufSize, pcbBytesNeeded);
+ TRACE("QueryServiceConfig2A(hService %p, dwInfoLevel %lu, lpBuffer %p, cbBufSize %lu, pcbBytesNeeded %p)\n",
+ hService, dwInfoLevel, lpBuffer, cbBufSize, pcbBytesNeeded);
if (dwInfoLevel != SERVICE_CONFIG_DESCRIPTION &&
dwInfoLevel != SERVICE_CONFIG_FAILURE_ACTIONS)
if (dwError != ERROR_SUCCESS)
{
- ERR("RQueryServiceConfig2A() failed (Error %lu)\n", dwError);
+ TRACE("RQueryServiceConfig2A() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("RQueryServiceConfig2W() failed (Error %lu)\n", dwError);
+ TRACE("RQueryServiceConfig2W() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("RQueryServiceLockStatusA() failed (Error %lu)\n", dwError);
+ TRACE("RQueryServiceLockStatusA() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("RQueryServiceLockStatusW() failed (Error %lu)\n", dwError);
+ TRACE("RQueryServiceLockStatusW() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("QueryServiceObjectSecurity() failed (Error %lu)\n", dwError);
+ TRACE("QueryServiceObjectSecurity() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("RServiceObjectSecurity() failed (Error %lu)\n", dwError);
+ TRACE("RServiceObjectSecurity() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("RQueryServiceStatus() failed (Error %lu)\n", dwError);
+ TRACE("RQueryServiceStatus() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("RQueryServiceStatusEx() failed (Error %lu)\n", dwError);
+ TRACE("RQueryServiceStatusEx() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("RStartServiceA() failed (Error %lu)\n", dwError);
+ TRACE("RStartServiceA() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("RStartServiceW() failed (Error %lu)\n", dwError);
+ TRACE("RStartServiceW() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("RUnlockServiceDatabase() failed (Error %lu)\n", dwError);
+ TRACE("RUnlockServiceDatabase() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}
if (dwError != ERROR_SUCCESS)
{
- ERR("NotifyBootConfigStatus() failed (Error %lu)\n", dwError);
+ TRACE("NotifyBootConfigStatus() failed (Error %lu)\n", dwError);
SetLastError(dwError);
return FALSE;
}