如何检测可执行文件是否需要 UAC 提升(C# 首选)

Pav*_*vel 3 c# windows uac file

如何检测可执行文件是否需要 UAC 提升?到目前为止,我想到了两个想法:可执行文件图标的图片识别以检查 UAC 盾牌图标是否在其上以及来自维基百科的信息: http: //en.wikipedia.org/wiki/User_Account_Control

通过使用 CreateProcess() 并将 dwCreationFlags 参数设置为 CREATE_SUSPENDED,可以以编程方式检测可执行文件是否需要提升。如果需要海拔,则将返回 ERROR_ELEVATION_REQUIRED。[16] 如果不需要提升,将返回成功返回代码,此时您可以在新创建的挂起进程上使用 TerminateProcess()。如果您已经在提升的进程中执行,这将不允许您检测到可执行文件需要提升。

谢谢

wj3*_*j32 6

尝试使用kernel32.dll导出的CheckElevation函数。这是一个完全没有文档记录的函数,但这是我能够进行逆向工程的:

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
    );
Run Code Online (Sandbox Code Playgroud)

您必须做一些实验才能找出如何正确调用该函数。到目前为止我已经能够解决的是,如果 Output1 不为 0,则需要海拔。