#include <Windows.h> #include <iostream> int main() { HANDLE hToken; TOKEN_PRIVILEGES tokenPrivileges; LUID luid; // 打开当前进程的令牌 if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { std::cout << "OpenProcessToken failed. Error: " << GetL...
无法调整特权级别:AdjustTokenPrivileges函数可能无法调整特权级别。这可能是由于指定的特权级别无效或不可调整,或者当前进程的访问令牌不允许调整特权级别。请确保指定的特权级别是有效的,并且当前进程的访问令牌允许调整特权级别。 错误处理:在使用AdjustTokenPrivileges函数时,需要正确处理错误。可以使用GetLastError函数获取详细...
如果第五个参数不是NULL,在OpenProcessToken加特权时除了需要指定TOKEN_ADJUST_PRIVILEGES还必须指定TOKEN_QUERY 如果第五个参数是NULL,你不接受原先的结构体(第六个当然也是NULL), 就不用再指定附加的TOKEN_QUERY的特权了。 还要注意: 就算这个函数返回为真,还要调用GetLastError()来检验是否完全成功。 如果返回ERROR_...
包含要修改的权限的访问令牌的句柄。 句柄必须具有TOKEN_ADJUST_PRIVILEGES令牌的访问权限。 如果PreviousState参数不为NULL,则句柄还必须具有TOKEN_QUERY访问权限。 [in] DisableAllPrivileges 指定函数是否禁用令牌的所有特权。 如果此值为TRUE,则函数将禁用所有特权并忽略NewState参数。 如果为FALSE,则函数根据Ne...
1.OpenProcessToken 2.LookupPrivilegeValue 3.AdjustTokenPrivileges 总结一点:以上函数只是启用已有的禁用的令牌...
句柄必须具有TOKEN_ADJUST_PRIVILEGES令牌的访问权限。 如果 PreviousState 参数不为 NULL,则句柄还必须具有TOKEN_QUERY访问权限。[in] DisableAllPrivileges指定函数是否禁用令牌的所有特权。 如果此值为 TRUE,则函数将禁用所有特权并忽略 NewState 参数。 如果为 FALSE,则函数根据 NewState 参数指向的信息修改权限。
AdjustTokenPrivileges voidCWindowsOPDlg::AdjustToken() { //该函数在OnInitDialog()函数中调用 staticHANDLEhToken; ::OpenProcessToken(::GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken); //以当前实力为准得到令牌的句柄保存在hToken中 //参数1函数为得到当前程序的句柄 // //参数3表示...
尝试用AdjustTokenPrivileges调整访问权限,但是失败了. BOOL addDebugToken(HANDLE TokenHandle, LPCSTR lpName, BOOL bAdd) { BOOL bRc = FALSE; DWORD ReturnLength = 0; struct _LUID Luid; struct _TOKEN_PRIVILEGES PreviousState; struct _TOKEN_PRIVILEGES NewState; ReturnLength = sizeof(PreviousState); ...
GetCurrentProcessID 得到当前进程的ID OpenProcessToken 得到进程的令牌句柄LookupPrivilegeValue 查询进程的权限 AdjustTokenPrivileges 判断令牌权限 要对一个任意进程(包括系统安全进程和服务进程)进行指定了写相关的访问权的OpenProcess操作,只要当前进程具有SeDeDebug权限就可以了。要是一个用户是Administrator或是被给予了相应...