3

次のコード (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 の特定のアカウントで、トークンを設定しようとすると、アクセス拒否エラーが発生します。私の推測では、その特定のトークンを設定する権限がないため、その特定のトークンを設定することはできません。非管理者アカウントまたは権限の低いアカウントにデバッグ トークンを設定するにはどうすればよいですか?

コードは大歓迎です。

ありがとう

4

1 に答える 1

7

できません。できれば、大規模なセキュリティ ホールになります (SeDebugPrivilege には Administrator よりも多くの機能があります)。

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

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

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

于 2009-07-31T13:21:46.987 に答える