如何获得服务的进程ID

hongfei20080624 2011-03-02 12:06:40
已经获得了服务的名称等信息,且该服务已经启动,如何获得该服务的进程ID
...全文
156 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lazy_2010 2011-03-03
  • 打赏
  • 举报
回复
觉得

proc = new SERVICE_STATUS_PROCESS[bufsize];

应该修改成

proc = (SERVICE_STATUS_PROCESS *)new BYTE[bufSize];

或者

SERVICE_STATUS_PROCESS itemInfo;
proc = &itemInfo;

不过,6# 说得对
hongfei20080624 2011-03-03
  • 打赏
  • 举报
回复
错误解决了,是权限不够,我在打开服务时SC_HANDLE hSvc = OpenService(hSCM, lpszServName, SERVICE_QUERY_CONFIG);是这样写的。改成SC_HANDLE hSvc = OpenService(hSCM, lpszServName, SERVICE_ALL_ACCESS);就好了
hongfei20080624 2011-03-02
  • 打赏
  • 举报
回复
如何获得该服务的制造商,版本等信息。以及如何定位到注册表的相应位置?
Eleven 2011-03-02
  • 打赏
  • 举报
回复
BOOL WINAPI QueryServiceStatusEx(
__in SC_HANDLE hService,
__in SC_STATUS_TYPE InfoLevel, // this struct
__out_opt LPBYTE lpBuffer,
__in DWORD cbBufSize,
__out LPDWORD pcbBytesNeeded
);


typedef struct _SERVICE_STATUS_PROCESS
{
DWORD dwServiceType;
DWORD dwCurrentState;
DWORD dwControlsAccepted;
DWORD dwWin32ExitCode;
DWORD dwServiceSpecificExitCode;
DWORD dwCheckPoint;
DWORD dwWaitHint;
DWORD dwProcessId; // Process Id
DWORD dwServiceFlags;
} SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS;
Lactoferrin 2011-03-02
  • 打赏
  • 举报
回复
QueryServiceStatusEx
Lactoferrin 2011-03-02
  • 打赏
  • 举报
回复
第二次错误码是什么
hongfei20080624 2011-03-02
  • 打赏
  • 举报
回复
LPSERVICE_STATUS_PROCESS proc;
DWORD bufsize, byteneeded;
if(!QueryServiceStatusEx(hSvc, SC_STATUS_PROCESS_INFO, NULL, 0, &byteneeded))
{
if(GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
bufsize = byteneeded + 1;
proc = new SERVICE_STATUS_PROCESS[bufsize];
QueryServiceStatusEx(hSvc, SC_STATUS_PROCESS_INFO, (LPBYTE)proc, bufsize, &byteneeded);
}
}
我的代码如上,但是第二次执行QueryServiceStatusEx的时候总是失败,换成我的调用有什么问题吗
shenyi0106 2011-03-02
  • 打赏
  • 举报
回复
psapi或者snapshot

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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