OpenServiceA打不开任何服务 getlasterror()是5

learn_fj 2015-06-22 12:27:49
这个是我的代码 哪里出错误了啊? 我用的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
...全文
416 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
武稀松 2015-06-23
  • 打赏
  • 举报
回复
5不是权限问题吗
lyhoo163 2015-06-23
  • 打赏
  • 举报
回复
问题解决就好了。
learn_fj 2015-06-23
  • 打赏
  • 举报
回复
我找到了!应该设置成SERVICE_query_config

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧