سؤال

السؤال السابق سألت كيفية التغلب حقيقة أن في بعض المستخدمين كانت امتيازات التصحيح لم يكن هناك. الآن، لأنني لا يمكن أن يحدد شيء لا وجود له، كيف لي أن تحقق ما إذا كان المستخدم لديه امتيازات التصحيح؟

وأنا أعرف أن لدي لاستخدام LookupPrivilegeValue ()، أنا فقط لا يمكن معرفة إلى أين قرأت على القيمة التي تم إرجاعها التي من شأنها أن تشير إلى ما إذا كان امتياز معين هناك أم لا.

ويحظى بتقدير القانون.

والشكر

هل كانت مفيدة؟

المحلول

http://msdn.microsoft. كوم / EN-US / مكتبة / aa446619٪ 28VS.85٪ 29.aspx

BOOL SetPrivilege(
    HANDLE hToken,          // access token handle
    LPCTSTR lpszPrivilege,  // name of privilege to enable/disable
    BOOL bEnablePrivilege   // to enable or disable privilege
    ) 
{
    TOKEN_PRIVILEGES tp;
    LUID luid;

    if ( !LookupPrivilegeValue( 
            NULL,            // lookup privilege on local system
            lpszPrivilege,   // privilege to lookup 
            &luid ) )        // receives LUID of privilege
    {
        printf("LookupPrivilegeValue error: %u\n", GetLastError() ); 
        return FALSE; 
    }

    tp.PrivilegeCount = 1;
    tp.Privileges[0].Luid = luid;
    if (bEnablePrivilege)
        tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    else
        tp.Privileges[0].Attributes = 0;

    // Enable the privilege or disable all privileges.

    if ( !AdjustTokenPrivileges(
           hToken, 
           FALSE, 
           &tp, 
           sizeof(TOKEN_PRIVILEGES), 
           (PTOKEN_PRIVILEGES) NULL, 
           (PDWORD) NULL) )
    { 
          printf("AdjustTokenPrivileges error: %u\n", GetLastError() ); 
          return FALSE; 
    } 

    if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)

    {
          printf("The token does not have the specified privilege. \n");
          return FALSE;
    } 

    return TRUE;
}

وإذا ترجع الدالة ERROR_NOT_ALL_ASSIGNED عند طلب تعيين امتيازات التصحيح ثم الرمز المميز ليست هناك.

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