想要debug 调试api 附加一个受保护进程,所以要给当前进程提权限,开启它的SeDebugPrivilege 权限。
代码如下:
[C] 纯文本查看 复制代码 #include <Windows.h>
#include <stdio.h>
BOOL SetPrivilege(
HANDLE hToken,
LPCTSTR lpszPrivilege,
BOOL bEnablePrivilege
)
{
TOKEN_PRIVILEGES tp;
LUID luid;
if (!LookupPrivilegeValue(
NULL,
lpszPrivilege,
&luid))
{
printf("LookupPrivilegeValue error: %u", GetLastError());
return FALSE;
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
if (bEnablePrivilege)
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
tp.Privileges[0].Attributes = 0;
if (!AdjustTokenPrivileges(
hToken,
FALSE,
&tp,
sizeof(TOKEN_PRIVILEGES),
(PTOKEN_PRIVILEGES)NULL,
(PDWORD)NULL))
{
printf("AdjustTokenPrivileges error: %u\n", GetLastError());
return FALSE;
}
if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
{
printf("The token not have the specified privileges. \n");
return FALSE;
}
return TRUE;
}
int main()
{
//提升权限
HANDLE hLProcess = NULL;
HANDLE tokenHandle = NULL;
hLProcess = GetCurrentProcess();
if (!OpenProcessToken(hLProcess, TOKEN_ADJUST_PRIVILEGES, &tokenHandle))
{
printf("open process token error\n");
return FALSE;
}
SetPrivilege(tokenHandle, L"SeDebugPrivilege", TRUE);
}
实际上这就是msdn 给的例子。
问题是,同样的代码,不同的项目工程,同样在管理员cmd窗口执行,但是有的项目可以正常提权,比如我新建的test.exe,但是有的他就是不能正常提权,错误是找不到这个权限。可是都是管理员窗口,应该是有这个权限的。不知道问题出在那里,向各位大哥求助。目前怀疑是vs 项目配置的问题,但不确定,求助!!!!! |