質問

次のコード(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には管理者よりも多くのmojoがあります)。

AdjustTokenPrivilegesは、トークンが持っている特権を有効にしますが、有効にはなっていません。たとえば、SeShutdownPrivilegeはこれらの1つです。

ユーザーアカウントに特権を追加する必要があります。その後、ユーザーはログアウトして再度ログインする必要があります(特権を持つ新しいトークンを取得するため)。

プログラムでユーザーアカウントに特権を追加するには、 http://support.microsoftから始めます。 com / kb / 132958

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top