ana*_*and 20 c++ winapi windows-vista
我有进程ID,我想得到它的进程句柄.
有没有可用的API.
我尝试使用OpenProcess但它返回NULL,并且GetLastError = 0.
这是我在尝试Vista.
我想我需要在使用OpenProcess之前启用SeDebugPrivilege.但是为了启用SeDebugPrivilege,我需要获得它的Process句柄.
Mat*_*ner 25
OpenProcess(PROCESS_ALL_ACCESS, TRUE, procId);
Run Code Online (Sandbox Code Playgroud)
您需要验证您是否使用了有效的进程ID,并且您是否被允许从该进程请求的访问权限.
bdd*_*bdd 11
这是你想要的?
HANDLE processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);
CloseHandle(processHandle);
Run Code Online (Sandbox Code Playgroud)
另外,这里是我用来在注入DLL之前设置debug privledge的一些代码.
void Loader::EnableDebugPriv(void)
{
HANDLE hToken;
LUID SeDebugNameValue;
TOKEN_PRIVILEGES TokenPrivileges;
if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
if(LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &SeDebugNameValue))
{
TokenPrivileges.PrivilegeCount = 1;
TokenPrivileges.Privileges[0].Luid = SeDebugNameValue;
TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if(AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL))
{
CloseHandle(hToken);
}
else
{
CloseHandle(hToken);
throw std::exception("Couldn't adjust token privileges!");
}
}
else
{
CloseHandle(hToken);
throw std::exception("Couldn't look up privilege value!");
}
}
else
{
throw std::exception("Couldn't open process token!");
}
}
Run Code Online (Sandbox Code Playgroud)
我已经成功地在Windows Vista上使用了上述代码.