OpenServiceA打不开任何服务 getlasterror()是5
这个是我的代码 哪里出错误了啊? 我用的VS2013
hSCM = OpenSCManagerA(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE | SC_MANAGER_CONNECT);
if (NULL == hSCM)
{
printf("OpenSCManager error.\n");
system("pause");
return -1;
}
EnumServicesStatusEx(hSCM, SC_ENUM_PROCESS_INFO, SERVICE_WIN32, SERVICE_STATE_ALL,
NULL, dwBufSize, &dwBufNeed, &dwNumberOfService, NULL, NULL);
dwBufSize = dwBufNeed + sizeof(ENUM_SERVICE_STATUS_PROCESS);
pBuf = (char *)malloc(dwBufSize);
if (NULL == pBuf)
{
printf("malloc error.\n");
system("pause");
return -1;
}
memset(pBuf, 0, dwBufSize);
// 获取服务信息
bRet = EnumServicesStatusEx(hSCM, SC_ENUM_PROCESS_INFO, SERVICE_WIN32, SERVICE_STATE_ALL,
(LPBYTE)pBuf, dwBufSize, &dwBufNeed, &dwNumberOfService, NULL, NULL);
if (bRet == FALSE)
{
printf("EnumServicesStatusEx error.\n");
system("pause");
::CloseServiceHandle(hSCM);
free(pBuf);
return -1;
}
pServiceInfo = (LPENUM_SERVICE_STATUS_PROCESS)pBuf;
LPSERVICE_DESCRIPTION pDesc = NULL;
pDesc = (LPSERVICE_DESCRIPTION)LocalAlloc(LPTR, 4096);
for (unsigned int i = 0; i < dwNumberOfService; i++)
{
LPCSTR lpsname = pServiceInfo[i].lpDisplayName;
LPCSTR lpdname = pServiceInfo[i].lpServiceName;
SC_HANDLE scm = OpenServiceA(hSCM, "ALG", SERVICE_START | SERVICE_STOP | SERVICE_QUERY_STATUS);
if (scm == NULL)
{
printf("%d\n",GetLastError());
break;
}
else
{
break;
}
}
更多 0