//
//设置或取消当前进程的调试特权
//
BOOL EnableDebugPrivilege(BOOL bEnable)
{
BOOL bOk=FALSE;
HANDLE hToken;
//打开一个进程的访问令牌
if(::OpenProcessToken(::GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
{
//取得特权名为"SetDebugPrivilege"的LUID
LUID uID;
::LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&uID);
//调整特权级别
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount=1;
tp.Privileges[0].Luid=uID;
tp.Privileges[0].Attributes=bEnable? SE_PRIVILEGE_ENABLED:0;
::AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL);
bOk=(::GetLastError()==ERROR_SUCCESS);
//关闭访问令牌句柄
::CloseHandle(hToken);
}
ret bOk;
}
//设置或取消当前进程的调试特权
//
BOOL EnableDebugPrivilege(BOOL bEnable)
{
BOOL bOk=FALSE;
HANDLE hToken;
//打开一个进程的访问令牌
if(::OpenProcessToken(::GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
{
//取得特权名为"SetDebugPrivilege"的LUID
LUID uID;
::LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&uID);
//调整特权级别
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount=1;
tp.Privileges[0].Luid=uID;
tp.Privileges[0].Attributes=bEnable? SE_PRIVILEGE_ENABLED:0;
::AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL);
bOk=(::GetLastError()==ERROR_SUCCESS);
//关闭访问令牌句柄
::CloseHandle(hToken);
}
ret bOk;
}