문제

프로세스에 디버그 권한이 있는지 확인하기 위해 다음 코드 (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;
}

이제 Windows XP 및 2003의 특정 계정에 따라 토큰을 설정하려고 할 때 액세스 거부 오류가 발생합니다. 내 생각에 나는 그렇게 할 권한이 없기 때문에 특정 토큰을 설정할 수 없다는 것입니다. 권한이 낮은 비 관리 계정 또는 계정에서 디버그 토큰을 어떻게 설정합니까?

코드에 감사드립니다.

감사해요

도움이 되었습니까?

해결책

당신은 할 수 없습니다. 가능하다면 대규모 보안 구멍이 될 것입니다 (Sedebugprivilege는 관리자보다 더 많은 모조가 있습니다).

AdvernTokenPrivileges는 토큰이 가지고있는 특권을 켜지 만 활성화되지는 않습니다. 예를 들어, SeshutdownPrivilege가 그 중 하나입니다.

사용자 계정에 권한을 추가 한 다음 사용자가 로그 아웃하고 다시 들어와야합니다 (특권이있는 새 토큰을 얻으려면).

프로그래밍 방식으로 사용자 계정에 권한을 추가하려면 다음부터 시작하십시오. http://support.microsoft.com/kb/132958

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top