Unit testing UAC模拟和单元测试

Unit testing UAC模拟和单元测试,unit-testing,winapi,uac,Unit Testing,Winapi,Uac,我有一些需要管理员权限的设置函数,其结果被另一个未运行的应用程序使用。因此,为了让我的单元测试真正反映现实,我需要调用设置函数,然后以某种方式删除提升,以便调用使用设置的函数。难道没有一个相当简单的方法可以做到这一点吗?看来我应该能用 CreateRestrictedToken 及 非模拟登录用户 有任何示例吗?UAC提升仅在流程启动时执行。一旦进程开始运行,就不可能(取消)提升进程。因此,要完成您正在尝试的操作,您需要单独的流程。您可以: 最初以非提升方式运行.exe,并在需要调用设置函数时让

我有一些需要管理员权限的设置函数,其结果被另一个未运行的应用程序使用。因此,为了让我的单元测试真正反映现实,我需要调用设置函数,然后以某种方式删除提升,以便调用使用设置的函数。难道没有一个相当简单的方法可以做到这一点吗?看来我应该能用

CreateRestrictedToken

非模拟登录用户


有任何示例吗?

UAC提升仅在流程启动时执行。一旦进程开始运行,就不可能(取消)提升进程。因此,要完成您正在尝试的操作,您需要单独的流程。您可以:

  • 最初以非提升方式运行.exe,并在需要调用设置函数时让它启动新的提升进程。非提升进程可以将
    ShellExecute/Ex()
    “runas”
    动词一起使用,或者使用第三方实现以提升状态启动新进程

  • 首先运行提升的.exe并让它调用设置函数,然后在需要调用使用者函数时使用
    CreateRestrictedToken()
    CreateProcessAsUser()
    启动单独的非提升进程

  • 将设置函数移动到COM对象中,然后在非提升状态下运行.exe,并在COM对象需要调用设置函数时使用实例化COM对象

  • 对于#1和#2,为了便于管理,您可以将所有代码放在一个.exe文件中,该文件只运行其自身的新副本,并向其传递命令行参数,该参数告诉它要调用哪些函数,然后立即退出