سؤال

وأنا باستخدام التعليمات البرمجية التالية (والذي هو عينة من 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 لديها اكثر من موجو مدير عام).

وAdjustTokenPrivileges يتحول على امتياز الرمز المميز له، ولكن هذا غير ممكن. على سبيل المثال، SeShutdownPrivilege هو واحد من هؤلاء.

لديك لإضافة امتياز إلى حساب المستخدم، ومن ثم لدى المستخدم لتسجيل الخروج والعودة مرة أخرى (للحصول على رمز جديد مع امتياز).

لإضافة امتيازات لحساب المستخدم برمجيا، وتبدأ مع هذا: http://support.microsoft. كوم / كيلو بايت / 132958

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top