【问题标题】:Calling a protected Windows 7 executable with Perl使用 Perl 调用受保护的 Windows 7 可执行文件
【发布时间】:2011-02-22 23:21:46
【问题描述】:

我正在尝试编写一个 perl 脚本,该脚本使用 query.exe (c:\Windows\system32\query.exe) 确定哪些用户当前登录到 Windows。 Perl 无法访问该文件,无法执行它,甚至无法看到它的存在,正如我在以下代码中发现的那样:

print `dir c:\\windows\\system32\\query*`;

这会产生以下输出:

07/13/2009  05:16 PM         1,363,456 Query.dll
1 File(s)      1,363,456 bytes
0 Dir(s)  183,987,658,752 bytes free

我已经使用 perl 的 getlogin 函数检查了执行脚本的用户,它返回了本地管理员组成员的名称(特别是我)。我还尝试为“所有人”添加读取/执行权限,但是当我尝试修改此文件的权限时,Windows 不断给我拒绝访问错误。最后,我尝试以管理员身份运行 perl.exe,但这也不能解决问题。

我可以通过更改 Windows 中的某些设置来解决这个问题吗?我需要在我的 perl 脚本中添加一些东西吗?还是没有办法授予 perl 访问其中一些进程的权限?

【问题讨论】:

    标签: perl windows-7 permissions


    【解决方案1】:

    在我的 64 位机器上,我可以在 Windows\System32(64 位系统目录)中找到 query.exe,但在 Windows\SysWOW64(32 位系统目录)中找不到。

    我怀疑您正在运行 64 位 Windows 和 32 位 Perl,因此,在 WOW64 仿真下,32 位 Perl 进程将 system32 重定向到 SysWOW64

    由于system32 应该在您的路径中,您应该能够通过在没有任何路径的情况下执行query.exe 来执行它。如果您绝对必须引用 64 位系统文件夹,那么您可以使用 C:\Windows\sysnative 从 32 位进程执行此操作。

    如果我的怀疑是正确的,我建议您阅读 WOW64,因为在您掌握它之前可能会非常混乱。另一方面,如果你已经知道这一切,我为光顾而道歉。

    【讨论】:

    • 这根本不是光顾,它真的很有帮助。您对我的设置是正确的,尽管 system32 在我的路径中,但我的脚本仍然无法访问查询命令。使用 C:\Windows\sysnative 效果很好。谢谢!
    • @Jake 我回滚了你的更新。在 64 位机器上 system32 是 64 位文件夹,而 SySWOW64 是 32 位文件夹。混乱我知道!在您的 32 位 Perl 进程中,system32 实际上被重定向到 SysWOW64,这就是您需要 sysnative 来定位它的原因。
    • @David-Heffernan Man,这也很有意义。再次感谢:)
    猜你喜欢
    • 2018-07-09
    • 2022-07-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2012-02-05
    • 2011-02-05
    相关资源
    最近更新 更多