Use 创建Toolhelp32Snapshot, 进程32优先, and 流程32下一个枚举所有进程。
在 - 的里面流程输入32你可以找到一个szExeFile
成员。
您可以通过调用获取进程句柄开放进程与进程 IDth32ProcessID
在同一结构内。
一旦找到与您的 exe 名称匹配的进程,您就可以跳出循环并获取句柄。
注意:如果您需要枚举每个进程,无论会话是什么,您应该获得 SE_DEBUG 权限。
在你的主要调用的顶部:
acquirePrivilegeByName(SE_DEBUG_NAME);// SeDebugPrivilege
这是定义acquirePrivilegeByName
:
BOOL acquirePrivilegeByName(
const TCHAR *szPrivilegeName)
{
HANDLE htoken;
TOKEN_PRIVILEGES tkp;
DWORD dwerr;
if (szPrivilegeName == NULL)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if (!LookupPrivilegeValue(NULL, szPrivilegeName, &(tkp.Privileges[0].Luid)))
return FALSE;
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &htoken))
return FALSE;
if (!AdjustTokenPrivileges(htoken, FALSE, &tkp, 0, NULL, NULL) ||
GetLastError() != ERROR_SUCCESS) // may equal ERROR_NOT_ALL_ASSIGNED
{
dwerr = GetLastError();
CloseHandle(htoken);
SetLastError(dwerr);
return FALSE;
}
CloseHandle(htoken);
SetLastError(ERROR_SUCCESS);
return TRUE;
} //acquirePrivilegeByName()
除了我上面说的之外,还有一个关于如何使用上面的Win32 API的示例here.