前卫目录网

AdjustTokenPrivileges - 调整令牌特权 (adjustment)


文章编号:1905 / 更新时间:2024-12-30 18:34:57 / 浏览:

AdjustTokenPrivileges 函数可在进程的线程令牌中启用或禁用特权。

函数原型

BOOL AdjustTokenPrivileges(HANDLE TokenHandle,           // 令牌句柄BOOL DisableAllPrivileges,    // 是否禁用所有特权PTOKEN_PRIVILEGES NewState,  // 新的特权状态DWORD BufferLength,          // 缓冲区大小PTOKEN_PRIVILEGES PreviousState, // 上一个特权状态(可选)PDWORD ReturnLength           // 返回缓冲区大小(可选));
AdjustTokenPrivileges | 值 | 描述 ||---|---|| `TRUE` | 成功。 || `FALSE` | 失败。有关错误信息,请调用 `GetLasterror`。 |

备注

调用此函数需要 `SE_ASSIGNPRIMARYTOKEN_PRIVILEGE` 特权。启用或禁用特权不会立即影响调用线程。相反,它影响后续操作,这些操作会检查令牌特权。如果 `DisableAllPrivileges` 为 `TRUE`,则禁用所有特权,包括启用或禁用的特权。如果 `NewState` 为 `NULL`,则不修改任何特权。`PreviousState` 缓冲区必须足以存储所有当前启用的特权。

示例

以下示例演示如何启用和禁用特权:```cppinclude include // 启用 "SeDebugPrivilege" 特权BOOL EnablePrivilege(HANDLE hToken, LPCTSTR lpszPrivilege){TOKEN_PRIVILEGES tp;LUID luid;if (!LookupPrivilegeValue(NULL, lpszPrivilege, &luid)){printf("LookupPrivilegeValue error: %u\n", GetLastError());return FALSE;}tp.PrivilegeCount = 1;tp.Privileges[0].Luid = luid;tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;if (!AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL)){printf("AdjustTokenPrivileges error: %u\n", GetLastError());return FALSE;}return TRUE;}// 禁用 "SeDebugPrivilege" 特权BOOL DisablePrivilege(HANDLE hToken, LPCTSTR lpszPrivilege){TOKEN_PRIVILEGES tp;LUID luid;if (!LookupPrivilegeValue(NULL, lpszPrivilege, &luid)){printf("LookupPrivilegeValue error: %u\n", GetLastError());returnFALSE;}tp.PrivilegeCount = 1;tp.Privileges[0].Luid = luid;tp.Privileges[0].Attributes = 0;if (!AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL)){printf("AdjustTokenPrivileges error: %u\n", GetLastError());return FALSE;}return TRUE;}int main(){HANDLE hToken = NULL;if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)){printf("OpenProcessToken error: %u\n", GetLastError());return 1;}if (EnablePrivilege(hToken, SE_DEBUG_NAME)){printf("Enabled SeDebugPrivilege\n");}if (DisablePrivilege(hToken, SE_DEBUG_NAME)){printf("Disabled SeDebugPrivilege\n");}CloseHandle(hToken);return 0;}```
相关标签: adjustment调整令牌特权AdjustTokenPrivileges

本文地址:https://www.qianwe.com/article/dcd7bd01cec6c1f956f5.html

上一篇:adjusttokenprivileges调整令牌特权adjust...
下一篇:提交更改提交更改姓名申请多久去取...

发表评论

温馨提示

做上本站友情链接,在您站上点击一次,即可自动收录并自动排在本站第一位!
<a href="https://www.qianwe.com/" target="_blank">前卫目录网</a>
文章推荐