low integrity level доступ и юнит тест

Тема в разделе "WASM.WIN32", создана пользователем Velheart, 10 июн 2010.

  1. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Привет. Пишу юнит-тест. Нужно потестить фичу, которая позволяет получать доступ к некоему объекту(шаред мемори) из процессов с low IL. В действительности все работает -- проверено. В тесте создаю поток, имперсонирую его low integrity level sid'ом и пытаюсь в нем открыть уже созданный в нормальных условиях объект. Объект не открывается со STATUS_ACCESS_DENIED.

    Код создания потока:
    Код (Text):
    1.                         HANDLE thread = CreateThread(0, 0, fun, param, CREATE_SUSPENDED, 0);
    2.        
    3.             HANDLE prToken = NULL;
    4.             OpenProcessToken(GetCurrentProcess(),
    5.                 TOKEN_ALL_ACCESS,
    6.                 &prToken);
    7.            
    8.  
    9.             HANDLE token;
    10.             DuplicateTokenEx(prToken,
    11.                 MAXIMUM_ALLOWED,
    12.                 NULL,
    13.                 SecurityImpersonation,
    14.                 TokenImpersonate,
    15.                 &token);
    16.  
    17.             CAccessToken processToken;
    18.             processToken.Attach(prToken);
    19.  
    20.             processToken.EnablePrivilege(SE_IMPERSONATE_NAME);
    21.  
    22.             WCHAR integritySidName[20] = L"S-1-16-1024";
    23.             PSID integritySid = NULL;
    24.             ConvertStringSidToSid(integritySidName, &integritySid);
    25.  
    26.             TOKEN_MANDATORY_LABEL TIL = {0};
    27.  
    28.             TIL.Label.Attributes = SE_GROUP_INTEGRITY;
    29.             TIL.Label.Sid        = integritySid;
    30.  
    31.             SetTokenInformation(token,
    32.                 TokenIntegrityLevel,
    33.                 &TIL,
    34.                 sizeof(TOKEN_MANDATORY_LABEL) + GetLengthSid(integritySid));
    35.            
    36.             SetThreadToken(&thread, token);
    37.  
    38.             ResumeThread(thread);
    39.             CloseHandle(token);
    40.  
    41.             return thread;
    Наверняка накосячил что-то с созданием потока.. Подскажите, плиз, кто знает, полдня уже убил на это, не дело это, тесты писать дольше, чем сам код =)
     
  2. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Код (Text):
    1. HANDLE token;
    2.             DuplicateTokenEx(prToken,
    3.                 MAXIMUM_ALLOWED,
    4.                 NULL,
    5.                 SecurityImpersonation,
    6.                 TokenImpersonate,
    7.                 &token);
    читать

    Код (Text):
    1. HANDLE token;
    2.             DuplicateTokenEx(prToken,
    3.                 MAXIMUM_ALLOWED,
    4.                 NULL,
    5.                 SecurityImpersonation,
    6.                 [b]TokenImpersonation[/b],
    7.                 &token);