Как определить, требуется ли для исполняемого файла повышение прав UAC (префикс C #) - PullRequest
2 голосов
/ 28 января 2010

как я могу определить, требует ли исполняемый файл повышения UAC? До сих пор я пришел к двум идеям: распознавание изображения значка исполняемого файла для проверки наличия значка щита UAC и информация из википедии: http://en.wikipedia.org/wiki/User_Account_Control

можно программно определить, будет ли исполняемый файл требовать повышения, используя CreateProcess () и установив для параметра dwCreationFlags значение CREATE_SUSPENDED. Если требуется повышение, будет возвращено ERROR_ELEVATION_REQUIRED. [16] Если повышение не требуется, будет возвращен успешный код возврата, после чего вы сможете использовать TerminateProcess () во вновь созданном, приостановленном процессе. Это не позволит вам обнаружить, что исполняемый файл требует повышения прав, если вы уже выполняете процесс с повышенными правами.

Спасибо

Ответы [ 3 ]

3 голосов
/ 14 ноября 2010

Попробуйте использовать функцию CheckElevation, экспортированную kernel32.dll. Это совершенно недокументированная функция, но вот что я смог перепроектировать:

ULONG CheckElevation(
    __in PWSTR FileName,
    __inout PULONG Flags, // Have a ULONG set to 0, and pass a pointer to it
    __in_opt HANDLE TokenHandle, // Use NULL
    __out_opt PULONG Output1, // On output, is 2 or less.
    __out_opt PULONG Output2
    );

Вам нужно будет поэкспериментировать, чтобы узнать, как правильно вызывать функцию. До сих пор мне удавалось понять, что если Output1 не равен 0, требуется повышение прав.

3 голосов
/ 28 января 2010

Зачем вам использовать распознавание изображений, если оно может быть проверено программно? Вы можете использовать P / invoke для вызова CreateProcess с необходимыми параметрами.

0 голосов
/ 29 января 2010

Лучший способ - проанализировать его формат PE и узнать, требует ли его файл манифеста UAC.

http://weblogs.asp.net/kennykerr/archive/2007/07/10/manifest-view-1-0.aspx?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+KennyKerr+(Kenny+Kerr)

Не знаю, как Кенни написал код, но это показывает возможность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...