gpt4 book ai didi

c# - 当目标应用程序以管理员身份运行时,ShowWindow 功能不起作用

转载 作者:太空狗 更新时间:2023-10-30 00:42:50 24 4
gpt4 key购买 nike

我正在编写一个程序来显示/隐藏某个目标应用程序的窗口。我早些时候正在测试它并注意到一些奇怪的事情。如果我以管理员身份运行目标应用程序(右键单击 -> 属性,“兼容性”选项卡,“以管理员身份运行此程序”)它不起作用。

为了演示,我编写了一个名为“TargetApplication”的简单 GUI 应用程序,然后编写了以下代码来测试显示/隐藏此应用程序:

class Program
{
static void Main(string[] args)
{
IntPtr windowPtr = FindWindow(null, "TargetApplication");
ShowWindow(windowPtr, 0); // 0 = Hide
Console.WriteLine("The window is now hidden. Press Enter to restore");
Console.ReadLine();
ShowWindow(windowPtr, 9); // 9 = Restore
Console.WriteLine("The window is now restored. Press Enter to exit.");
Console.ReadLine();
}

[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
}

如果我在没有管理员权限的情况下启动窗口应用程序,它将无法运行。

有人介意帮我测试一下吗?我已经在此处上传了两个应用程序的 .exe:

TestShowWindow Download

您所要做的就是下载它们并运行 TestApplication.exe,然后运行 ​​TestShowWindow.exe。您会发现,将 TestApplication.exe 更改为以管理员身份运行会导致 ShowWindow 不再工作。

当然,如果您不信任下载我的东西,您可以随时编译我的代码并在 Windows 中的任何目标应用程序上测试它,您可以更改其兼容模式。

附言我不确定它是否有所作为,但我运行的是 Windows 8 Pro。 64 位。

最佳答案

这是设计使然。它是 UAC 鲜为人知的双胞胎,称为 UIPI或用户界面特权隔离。未提升的程序无法征用提升的程序。鉴于 UI 自动化的功能,这是阻止程序劫持提升进程功能的明显反制措施。称为 shatter attack 的安全违规行为.

解决方法是为存储在 c:\windows 或 c:\program 文件中并提供证书的程序提供 uiAccess = true 的 list 。并为目标程序调用 ChangeWindowMessageFilter 以允许发送某些消息。在您的情况下,应该是 WM_SHOWWINDOW。

关于c# - 当目标应用程序以管理员身份运行时,ShowWindow 功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13468331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com