调整非特权帐户(C,Windows)上的令牌

我正在使用下面的代码(这是来自MSDN稍微修改的示例)来检查我是否对进程具有debugging权限。 如果我不尝试设置它们。

int SetDebugPriv() { HANDLE TokenHandle; LUID lpLuid; TOKEN_PRIVILEGES NewState; if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &TokenHandle)) { //failed return 0; } if(!LookupPrivilegeValue(NULL, "SeDebugPrivilege" , &lpLuid)) { //failed CloseHandle(TokenHandle); return 0; } NewState.PrivilegeCount = 1; NewState.Privileges[0].Luid = lpLuid; NewState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if(!AdjustTokenPrivileges(TokenHandle, FALSE, &NewState, sizeof(NewState), NULL, NULL)) { //failed CloseHandle(TokenHandle); return 0; } CloseHandle(TokenHandle); return 1; } 

现在,在Windows XP和2003的某些帐户下,当我尝试设置令牌时,出现拒绝访问错误。 我的猜测是我无法设置特定的标记,因为我没有权限这样做。 我将如何设置debugging令牌非pipe理员帐户或具有低权限的帐户?

代码表示赞赏。

谢谢

Solutions Collecting From Web of "调整非特权帐户(C,Windows)上的令牌"

你不能。 如果可以的话,这将是一个巨大的安全漏洞(SeDebugPrivilege拥有比管理员更多的mojo)。

AdjustTokenPrivileges打开令牌具有的权限,但未启用该权限。 例如,SeShutdownPrivilege就是其中之一。

您必须将权限添加到用户帐户,然后用户必须注销并重新登录(以获得具有该权限的新标记)。

要以编程方式将权限添加到用户帐户,请从以下位置开始: http : //support.microsoft.com/kb/132958