244
вказаним маркером за допомогою функції CreateProcessAsUser.
Ця функція є аналогом функції CreateProcess, за винятком пара-
метра hToken, який указує на маркер, що визначає контекст кори-
стувача нового процесу.
Інший спосіб виконати код із запозиченим маркером – здійс-
нити перевтілення (impersonation). Перевтілення означає, що
один із потоків процесу функціонує з маркером, відмінним від
маркера поточного процесу. Зокрема, клієнтський потік може пе-
редати свій маркер доступу серверному потоку, щоб сервер міг
дістати доступ до захищених файлів і інших об’єктів від імені
клієнта. Згодом потік може повернутися в нормальний стан, тоб-
то використовувати маркер процесу.
Windows не дозволяє серверам виступати в ролі клієнтів без їх
відома. Щоб уникнути цього, клієнтський процес може обмежити
рівень імперсонації. Тому для участі в перевтіленні маркер пови-
нен мати відповідний рівень перевтілення. Цей рівень визнача-
ється параметром маркера TokenImpersonationLevel і може бути
запитаний функцією GetTokenInformation. Для процесу перевті-
лення важливо, щоб цей параметр мав значення не нижче за
SecurityImpersonation, що означає можливість імперсонації на ло-
кальній машині. Значення SecurityDelegation дозволяє серверному
процесу виступати від імені клієнта як на локальному, так і на
віддаленому комп’ютері. Останнє значення має відношення до
делегування, яке є природним розвитком перевтілення, але пра-
цює тільки за наявності домена і функціонуванні активного ката-
логу. За замовчуванням встановлюється рівень
SecurityImpersonation.
Маркер перевтілення зазвичай створюють шляхом дублюван-
ня існуючого маркера і додання йому потрібних прав доступу і
рівня імперсонації. Це можна зробити за допомогою функції
DuplicateTokenEx. Власне, перевтілення здійснюється за допомо-
гою функції ImpersonateLoggedOnUser. Щоб повернутися в почат-
ковий стан, потік повинен викликати функцію RevertToSelf.
Важливо також не забувати, що коли перевтілений потік здій-
снює доступ до об’єкта, то решта потоків процесу, навіть не пере-
втілених, також має до нього доступ. Подібні ситуації вимагають