Settokeninformation Failed

Тема в разделе "Общие вопросы по С и С++", создана пользователем sadgb, 29 мар 2008.

  1. sadgb

    sadgb Гость

    Здравствуйте.
    Столкнулся со следующей проблемой

    SetTokenInformation(hNewToken, TokenIntegrityLevel, &TIL,sizeof(TOKEN_MANDATORY_LABEL) + GetLengthSid(pIntegritySid)))
    срабатывает нормально
    но вот когда я хочу установить TOKEN_MANDATORY_POLICY
    SetTokenInformation(hNewToken, TokenMandatoryPolicy, &POL ,sizeof(TOKEN_MANDATORY_POLICY));
    мне выдают ошибку 1314 (GetLastError())
    ERROR_PRIVILEGE_NOT_HELD
    1314
    0x522
    A required privilege is not held by the client.
    текущему пользователю я выставил вообще все привилегии .
    Поэтому неясно почему он говорит что привилегии нет
    Работаю в Vista
    Uac отключён

    исходный код ниже
    он практически полностью взят из мсдн
    [codebox]void CreateLowProcess()
    {
    BOOL bRet;
    HANDLE hToken;
    HANDLE hNewToken;

    // Notepad is used as an example
    WCHAR wszProcessName[MAX_PATH] =
    L"c:\\windows\\system32\\calc.exe";
    // Low integrity SID
    WCHAR wszIntegritySid[20] = L"S-1-16-4096";
    PSID pIntegritySid = NULL;
    TOKEN_MANDATORY_LABEL TIL = {0};
    TOKEN_MANDATORY_POLICY POL = {0};
    PROCESS_INFORMATION ProcInfo = {0};
    STARTUPINFO StartupInfo = {0};
    ULONG ExitCode = 0;
    if (OpenProcessToken(GetCurrentProcess(),MAXIMUM_ALLOWED, &hToken))
    {
    if (DuplicateTokenEx(hToken, MAXIMUM_ALLOWED, NULL,SecurityImpersonation, TokenPrimary, &hNewToken))
    {
    if (ConvertStringSidToSid(wszIntegritySid, &pIntegritySid))
    {
    TIL.Label.Attributes = SE_GROUP_INTEGRITY;
    TIL.Label.Sid = pIntegritySid;

    // Set the process integrity level
    if (SetTokenInformation(hNewToken, TokenIntegrityLevel, &TIL,sizeof(TOKEN_MANDATORY_LABEL) + GetLengthSid(pIntegritySid)))
    {
    POL.Policy=TOKEN_MANDATORY_POLICY_NO_WRITE_UP;
    printf ("%i\n", GetLastError());
    // в следующей строке SetTokenInformation не возвращает 0 и ошибку 1314.
    SetTokenInformation(hNewToken, TokenMandatoryPolicy, &POL ,sizeof(TOKEN_MANDATORY_POLICY));
    printf ("%i\n", GetLastError());
    // Create the new process at Low integrity
    bRet = CreateProcessAsUser(hNewToken, NULL,
    wszProcessName, NULL, NULL, FALSE,
    0, NULL, NULL, &StartupInfo, &ProcInfo);
    printf ("%i\n", GetLastError());
    }

    LocalFree(pIntegritySid);
    }
    CloseHandle(hNewToken);
    }
    CloseHandle(hToken);
    }
    }[/codebox]


    Подскажите пожайлуйста как это можно исправить.
    заранее СПАСИБО
     
Загрузка...
Похожие Темы - Settokeninformation Failed
  1. R4z0R
    Ответов:
    11
    Просмотров:
    2.961
  2. samurai
    Ответов:
    1
    Просмотров:
    1.567
  3. malor
    Ответов:
    5
    Просмотров:
    6.697

Поделиться этой страницей