如何检测可执行文件是否需要UAC提升? 到目前为止,我提出了两个想法: 图片识别可执行文件的图标,以检查是否有UAC盾牌图标 来自维基百科的信息: http://en.wikipedia.org/wiki/User_Account_Control
可以通过使用CreateProcess()并将dwCreationFlags参数设置为CREATE_SUSPENDED,以编程方式检测可执行文件是否需要提升。如果需要提升,则返回ERROR_ELEVATION_REQUIRED。[16]如果不需要提升,将返回成功返回代码,此时您可以在新创建的暂停进程上使用TerminateProcess()。如果您已在升级过程中执行,则不允许您检测可执行文件是否需要提升。
由于
答案 0 :(得分:3)
如果可以通过编程方式检查,为什么要使用图片识别?您可以使用P / invoke使用所需参数调用CreateProcess。
答案 1 :(得分:3)
尝试使用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
);
您必须做一些实验才能找到如何正确调用该功能。到目前为止我能够解决的问题是,如果Output1不是0,则需要提升。
答案 2 :(得分:0)
最好的方法是解析其PE格式,然后知道其清单文件是否需要UAC。
不确定Kenny如何编写代码,但它显示了这种可能性。