Как вызвать функцию, изображающую другого пользователя вместо SYSTEM

Win32 API был вызван в моей DLL, которая будет загружена пользователем SYSTEM, и этот API возвращает разные результаты в зависимости от текущего пользователя, поэтому я не могу получить результаты, соответствующие текущему пользователю, как я могу вызвать этот API под текущим пользователем входа в систему контекст, когда DLL работает в контексте SYSTEM?

4

Решение

Я провел некоторое исследование и пришел к выводу (я не эксперт по Win32 API, но я действительно заинтересован в этом):

Ты можешь использовать ImpersonateLoggedOnUser, который просит первичный или олицетворение ручка токена (по крайней мере, с TOKEN_QUERY в обоих, TOKEN_DUPLICATE на первичном токене или TOKEN_IMPERSONATE на знак подражания).

Было бы очень легко, если бы у вас был текущий токен пользователя и нужные привилегии, вы бы просто использовали ImpersonateLoggedOnUserвызовите нужную функцию API, а затем вызовите RevertToSelf вернуть своему первоначальному владельцу токен.

Но не так просто получить текущий зарегистрированный токен пользователя. Вы должны использовать либо LogonUser указав имя пользователя и пароль (что кажется неправильным), или владелец службы Windows с достаточными правами, чтобы вы могли звонить WTSQueryUserToken, который может отличаться от того, какой тип проекта вы разрабатываете.

Или, если вы действительно хотите сделать это с помощью обычного процесса, вы также можете изучить Функции аутентификации, где вы можете воспользоваться новыми Windows UAC и контекстами безопасности, с которыми может быть немного сложно работать.

Есть также этот метод, который я не уверен, работает ли он: Выдавать себя за обычного пользователя (получение токена с помощью OpenProcessToken на explorer.exe).

Некоторые ссылки, которые я нашел полезными:

Я предлагаю: убедитесь, что вам действительно нужно выдать себя за пользователя при вызове функции API, которую вы упомянули, прежде чем продолжить. Посмотрите, есть ли другой путь для достижения того, что вы хотите.

Вы также можете указать, какую функцию API вы пытаетесь использовать, что может перенаправить вас на другой более простой вопрос.

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector