获得服务进程PID

·

DWORD GetServicePid(PSTR ServiceName)
{
	SC_HANDLE ScmHandle;
	SC_HANDLE SvcHandle;
	SERVICE_STATUS_PROCESS ServiceStatusProcess;
	DWORD cbBytesNeeded;

	ScmHandle = OpenSCManagerA(NULL, NULL, SC_MANAGER_CONNECT);
	if (ScmHandle)
	{
		SvcHandle = OpenServiceA(ScmHandle, ServiceName, SERVICE_QUERY_STATUS);
		if (SvcHandle)
		{
			if (QueryServiceStatusEx(SvcHandle, SC_STATUS_PROCESS_INFO, (LPBYTE)&ServiceStatusProcess, sizeof(ServiceStatusProcess), &cbBytesNeeded))
			{
				CloseServiceHandle(SvcHandle);
				CloseServiceHandle(ScmHandle);
				return ServiceStatusProcess.dwProcessId;
			}
			CloseServiceHandle(SvcHandle);
		}
		CloseServiceHandle(ScmHandle);
	}
	return 0;
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注