我有一个程序,我处理步行获得HANDLE
每一个过程,因为我“走”下来列表(正常工作),但是当我做我的问题在于:
HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID)
其中PROCESS_ALL_ACCESS
是接入令牌,处理继承被设置为FALSE
,并PE32是PROCESSENTRY32
GetLastError()
返回错误代码5,和所有由手柄是不符合任何合适的工艺在间谍++地址六十四分之三十二(我试过建设同时根据平台的目标应用程序,但你会期望,结果是一样的)。
设置SeDebugPrivilege为此我使用的是宿主进程的代码:
BOOL EnableDebugPrivilege(BOOL bEnable)
{
HANDLE hToken = nullptr;
LUID luid;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) return FALSE;
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid)) return FALSE;
TOKEN_PRIVILEGES tokenPriv;
tokenPriv.PrivilegeCount = 1;
tokenPriv.Privileges[0].Luid = luid;
tokenPriv.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0;
if (!AdjustTokenPrivileges(hToken, FALSE, &tokenPriv, sizeof(TOKEN_PRIVILEGES), NULL, NULL)) return FALSE;
return TRUE;
}
有些问题,这将有助于你:
- 我运行Windows 7 64位专业版。
- 是的,devenv.exe的开始以“以管理员身份运行”权限,这意味着调试器和应用程序本身是相同的亲和力下开始。
- 我曾尝试切换UAC或运行与UAC的应用程序完全关闭。 尽管如此错误代码5。
- 我只是试图用做
PROCESS_QUERY_LIMITED_INFORMATION
和我收到的错误代码6,或ERROR_INVALID_HANDLE
。 也试图与PROCESS_QUERY_INFORMATION | PROCESS_VM_READ
PROCESS_QUERY_INFORMATION | PROCESS_VM_READ
,结果是错误5试。 -
SeDebugPrivilege
启用,与Sysinternals的进程资源管理器验证。 此外,从devenv的产卵所有进程/无论调试器被称为继承SeDebugPrivilege所以...这是奇怪的。
谢谢大家对我付出的时间,我达到了斗智斗勇这个问题结束:S