【问题标题】:setWindowLong, cannot remove WS_POPUP with different userssetWindowLong,不能删除不同用户的 WS_POPUP
【发布时间】:2016-06-20 08:09:46
【问题描述】:

我想将一个窗口拉入另一个窗口。因此,我将 python 与 pywin32 一起使用。

我想用 setWindowLong 删除 WS_POPUP 样式。

当登录用户和所涉及的进程相同时,这可以正常工作。

但是当进程在不同的用户下运行时,我会收到拒绝访问错误。

感谢您的帖子。

【问题讨论】:

    标签: python security winapi


    【解决方案1】:

    SetWindowLongPtr 的文档包含关于 hWnd 参数的以下部分:

    如果拥有由 hWnd 参数指定的窗口的进程在 UIPI 层次结构中的进程特权高于调用线程所在的进程,则 SetWindowLongPtr 函数将失败。

    如果调用失败并出现拒绝访问错误,那么您是从完整性级别低于目标进程的进程调用的。

    虽然通过应用程序清单请求 UIAccess 可能有效(请参阅Security Considerations for Assistive Technologies),但没有建议的解决方案来绕过该安全防火墙。这适用于辅助技术应用程序,不应被非此类软件滥用。


    额外阅读:Is it legal to have a cross-process parent/child or owner/owned window relationship?

    【讨论】:

    • 感谢 IInspectable,
    • 但这不是两个进程的完整性级别高的问题,这意味着两个进程都以管理员身份运行。我还授予了登录用户的管理权限(但仅用于测试)。
    • @held_a:授予登录用户管理权限不会自动将这些权限转移到在该帐户下启动的进程。默认情况下,进程仍然使用最低要求启动(使用Process Explorer 查看实际的完整性级别)。如果您需要以管理权限运行您的应用程序,则需要请求它们(例如通过UAC information in the manifest)。
    • 进程在管理员帐户下运行,它们都具有完整性级别高(据我所知,这意味着它们具有管理员权限)并且它们处于同一级别,这意味着 setWindowLongPtr 应该可以工作。我给了登录用户管理员权限,因为我认为这对我的行为有影响,但它没有。当我的流程具有高完整性级别时,我不必更改清单文件?
    • @held_a:您是否验证了两个进程都以高完整性级别运行(使用 Process Explorer 之类的工具)?
    猜你喜欢
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    相关资源
    最近更新 更多