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

won*_*rer 3 c windows debugging privileges

我正在使用以下代码(这是MSDN略有修改的示例)来检查我是否对进程具有调试权限.如果我不这样做,我会尝试设置它们.

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;
}
Run Code Online (Sandbox Code Playgroud)

现在,在Windows XP和2003的某个帐户下,我在尝试设置令牌时收到拒绝访问错误.我的猜测是我无法设置该特定令牌,因为我无权这样做.如何在非管理员帐户或具有低权限的帐户上设置调试令牌?

代码表示赞赏.

谢谢

Rog*_*mbe 7

你不能.如果可以,那将是一个巨大的安全漏洞(SeDebugPrivilege比管理员有更多的魔力).

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

您必须将权限添加到用户帐户,然后用户必须再次注销并重新登录(以获取具有该权限的新令牌).

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