Привет. Пишу юнит-тест. Нужно потестить фичу, которая позволяет получать доступ к некоему объекту(шаред мемори) из процессов с low IL. В действительности все работает -- проверено. В тесте создаю поток, имперсонирую его low integrity level sid'ом и пытаюсь в нем открыть уже созданный в нормальных условиях объект. Объект не открывается со STATUS_ACCESS_DENIED. Код создания потока: Код (Text): HANDLE thread = CreateThread(0, 0, fun, param, CREATE_SUSPENDED, 0); HANDLE prToken = NULL; OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &prToken); HANDLE token; DuplicateTokenEx(prToken, MAXIMUM_ALLOWED, NULL, SecurityImpersonation, TokenImpersonate, &token); CAccessToken processToken; processToken.Attach(prToken); processToken.EnablePrivilege(SE_IMPERSONATE_NAME); WCHAR integritySidName[20] = L"S-1-16-1024"; PSID integritySid = NULL; ConvertStringSidToSid(integritySidName, &integritySid); TOKEN_MANDATORY_LABEL TIL = {0}; TIL.Label.Attributes = SE_GROUP_INTEGRITY; TIL.Label.Sid = integritySid; SetTokenInformation(token, TokenIntegrityLevel, &TIL, sizeof(TOKEN_MANDATORY_LABEL) + GetLengthSid(integritySid)); SetThreadToken(&thread, token); ResumeThread(thread); CloseHandle(token); return thread; Наверняка накосячил что-то с созданием потока.. Подскажите, плиз, кто знает, полдня уже убил на это, не дело это, тесты писать дольше, чем сам код =)
Код (Text): HANDLE token; DuplicateTokenEx(prToken, MAXIMUM_ALLOWED, NULL, SecurityImpersonation, TokenImpersonate, &token); читать Код (Text): HANDLE token; DuplicateTokenEx(prToken, MAXIMUM_ALLOWED, NULL, SecurityImpersonation, [b]TokenImpersonation[/b], &token);