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

2024-02-07

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

为了演示,我编写了一个名为“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:

测试显示窗口 下载 https://www.box.com/s/k0y8kcb1u8bjoxi4q60j

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

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

附:我不确定这是否有影响,但我运行的是 Windows 8 Pro。 64 位。


这是设计使然。它是 UAC 的不太为人所知的双胞胎,称为UIPI http://en.wikipedia.org/wiki/User_Interface_Privilege_Isolation或用户界面权限隔离。未提升的程序无法征用提升的程序。考虑到 UI 自动化的功能,这是一个明显的对策,可以阻止程序劫持提升进程的功能。称为安全违规粉碎攻击 http://en.wikipedia.org/wiki/Shatter_attack.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当目标应用程序以管理员身份运行时,ShowWindow 功能不起作用 的相关文章

随机推荐

  • 如何通过 xs:unique 使我的枚举变得唯一

    谁能指出为什么我的 XSD 中的独特元素没有强制唯一性 这应该会引发错误 因为最后一个ScreenResult元素不包含唯一值Type属性 我还应该指出 我确实在强迫其中一个之后Type within ScreenResults Scree
  • 类型错误:“未定义”不是函数(评估“$(文档)”)

    我正在使用 WordPress 网站 我将此脚本包含在标题中 当脚本加载时 我收到此错误 类型错误 未定义 不是函数 评估 文档 我不知道是什么原因造成的 甚至不知道它意味着什么 在萤火虫中 我得到这个 不是函数 WordPress 在中使
  • 如何去除所有换行符以生成正确的 CSV?

    我在正常工作的网站上有一个文本区域提交到我的数据库 但是当我从数据库生成 CSV 通过 PHP 时 所有换行符都会弄乱生成的 CSV 任何 CSV 阅读器都会将输入中的换行符解释为新行 我尝试过以下方法 将字段封装在引号中 This fie
  • oauth 中不支持的响应类型[重复]

    这个问题在这里已经有答案了 您好 我正在 Angular 2 中开发 Web 应用程序 我在 webapi 中有 oauth 身份验证 我在前端使用 Angular 2 登录时我调用下面的代码 private login this oaut
  • << 具有多个参数的运算符[重复]

    这个问题在这里已经有答案了 我只是想知道我们是否可以为运算符 举个例子会更明确 anyType operator lt lt arg p1 arg p2 DoSomethingWith p1 DoSomethingWith p2 retur
  • OpenCV Python 错误断言失败(scn == 3 || scn == 4)

    我刚刚开始玩OpenCV在 Python 中 我遇到了断言错误 我从a复制了以下代码tutorial http docs opencv org trunk doc py tutorials py gui py video display p
  • MySQL 中“FOR XML AUTO”的等效项是什么? (用于具有代表行的 XML 字符串)

    在 SQL Server 中 我经常使用 FOR XML AUTO 它允许 SELECT id FROM car FOR XML AUTO 返回 12 MySQL 有没有办法做到这一点 我想要的是能够将此 XML 存储在另一个表中 这样我就
  • 将 Z 轴与向量对齐的最简单方法是什么?

    给定一个点 如 0 0 0 和一个向量 如 x y z 对齐以 0 0 0 为中心的负 Z 轴以指向该向量的方向的最简单方法是什么 使用 OpenGL 的示例将受到欢迎 但不是必需的 有很多不同的方法可以旋转坐标系以指向给定方向 它们都会使
  • 什么时候应该在 C++ 中使用引用?

    我已经编写 C 有一段时间了 我开始怀疑这个规则尽可能使用参考文献应该到处应用 Unlike 这个相关的SO帖子 https stackoverflow com questions 7058339 c when to use referen
  • -[NSConcreteMutableData base64EncodedStringWithOptions:]:无法识别的选择器发送到实例 0x776e920'

    我的应用程序不断崩溃并显示以下消息 由于未捕获的异常 NSInvalidArgumentException 而终止应用程序 原因 NSConcreteMutableData base64EncodedStringWithOptions 无法
  • OO PHP 受保护的属性在 foreach 循环中不可用?

    我有一个验证类 我想用它来检查应用程序中的所有值是否在允许的约束范围内 我将一个对象从另一个类 在本例中为 User 传递给验证类中的静态函数 function validate errors Validation validate thi
  • 参数的存在数据库基数

    我是exist db 和XQuery 的新手 在exist db中 我有这个站点地图 目录 registranten 包含目录 data 带有xml文件 和两个文件 regBasic xql 和 regSearch xql 我正在尝试使用脚
  • 如何使用 Silverlight 和 MVVM 设计复合视图和视图模型?

    我想在我的 Silverlight MVVM 应用程序中创建一个 向导 该向导应包含多个步骤 您可以使用 下一个 和 上一个 在这些步骤之间导航 我面临的问题是视图和视图模型之间的关系 我希望向导本身有一个视图和视图模型 我的直觉告诉我 向
  • 由于 WatchKit,Xcode 11 Beta 无法构建?

    在 Xcode 10 上工作 现在在测试版中我无法构建我不断收到此错误 为 iOS 模拟器构建时 WatchKit 不可用 考虑使用 if os iOS 有条件地导入此框架 对于 WatchKit 扩展中的一个 swift 文件 我也遇到了
  • 如何使用 Promise 异步读取多个文件,然后继续

    我对承诺和使用不熟悉rsvp https github com tildeio rsvp js执行 我想异步读取文件列表 然后仅在读取所有文件后才继续执行另一个任务 我已经了解了读取一个文件并链接到下一个任务的基本结构 var loadFi
  • YouTube iframe API:无法使其响应

    我正在尝试通过 iFrame API 实现 Youtube 视频 我需要捕捉一些事件 因此单独嵌入播放器不是一个选择 正如文档中所解释的 一切正常 我这样称呼视频 var tag document createElement script
  • 什么时候应该使用按位运算符?

    我阅读了以下 Stack Overflow 问题 并且了解了按位和逻辑之间的区别 参考 这个符号在 PHP 中意味着什么 https stackoverflow com questions 3737139 reference what do
  • DataSets to POCOs - 有关 DAL 架构的询问

    我必须非常快速地开发一个相当大的 ASP NET MVC 项目 并且我想获得一些关于我的 DAL 设计的意见 以确保不会有任何问题困扰我 因为 BL 可能会变得相当复杂 一些背景知识 我正在使用 Oracle 后端 因此内置的 LINQ t
  • scala并行收集处理的性能

    我遇到过需要一次处理数千条记录的情况 有时 可能有数百条 甚至可能多达 30000 条记录 我正在考虑使用scala的并行集合 为了理解其中的区别 我编写了一个简单的 pgm 如下所示 object Test extends App val
  • 当目标应用程序以管理员身份运行时,ShowWindow 功能不起作用

    我正在编写一个程序来显示 隐藏某些目标应用程序的窗口 我之前测试过它并注意到一些奇怪的事情 如果我以管理员身份运行目标应用程序 右键单击 gt 属性 兼容性 选项卡 以管理员身份运行此程序 它不起作用 为了演示 我编写了一个名为 Targe