在UAC提示上SendInput失败

时间:2019-06-14 09:48:39

标签: winapi uac sendinput windows-security uipi

我们正在编写一个仅运行的远程桌面应用程序,该应用程序使用SendInput进行键盘(和鼠标)交互。但是,它无法与UAC提示进行交互。

我们的应用程序为此需要什么权限?

背景信息:该应用程序是由另一个复制winlogon.exe的访问令牌的进程生成的。这样可以在具有系统完整性级别的SYSTEM帐户下运行,并附加到物理控制台会话,并且具有与winlogon.exe(https://docs.microsoft.com/en-us/windows/desktop/secauthz/privilege-constants)相同的SE特权,尽管并未全部启用。

 var fetched_data = [];

function getData() {
    $.ajax({
        type: "GET",
        url: "http://localhost:5000/renderheatmap",
        dataType: 'json'
    }).done(function(jsonData) {
        for (var i = 0; i < jsonData.length; i++) {
            fetched_data.push(jsonData[i])
        }
      //  document.getElementById('test_div').innerHTML = fetched_data;

      //  final_data = new Array(fetched_data);

        Highcharts.chart('yourid', {

            series: [{
                name: 'Sales per employee',
                borderWidth: 1,

                data: fetched_data,

                dataLabels: {
                    enabled: true,
                    color: '#000000'
                }
            }]

        });


    });

} 

2 个答案:

答案 0 :(得分:2)

SendInput(例如SendMessage和PostMessage)仅限于在与目标进程相同的登录会话和同一桌面内的进程之间工作。 UAC提示显示在Winlogon's Secure Desktopwinsta0\Winlogon)中,因此您需要使用OpenInputDesktop()定期轮询当前桌面,然后使用SetThreadDesktop()启用当前线程将消息发送到用户的桌面/安全桌面,以活动状态为准。

对于UAC,您需要像以前一样在系统帐户下运行流程,以遵守UIPI Integrity Level check

See also: How to switch a process between default desktop and Winlogon desktop?

答案 1 :(得分:0)

可以授权您的应用程序执行这些UIAutomation /屏幕阅读器任务。

在程序集清单中创建一个条目,其中包括:

uiAccess="true"

然后,您必须使用有效的数字证书进行数字签名。
并且您必须安装在Program Files中。

能够自动执行UAC对话框是一项严肃的工作;而且您不会无所适从。

奖金阅读

https://techcommunity.microsoft.com/t5/windows-blog-archive/using-the-uiaccess-attribute-of-requestedexecutionlevel-to/ba-p/228641

相关问题