我正在尝试让一款非常老的科学仪器程序在 Windows 10 上运行。我相信该程序最初是为某些 Unix 系统开发的,然后使用 Unix 模拟器移植到 Windows NT 之类的系统。该程序在 Windows XP 上可以运行,但由于安全策略的变化,无法在更高版本上运行。
我想升级到 Windows 10,我已经设法让该程序在 Windows 10 上运行,但只能在管理员权限下运行,而我绝对不能在计算机上使用该权限。我知道我可以运行虚拟机,但如果可以的话,我想避免这样做。我也无法升级到不同的 Unix 仿真器,因为该程序和仿真器紧密相连。兼容模式也不起作用。
使用 API Monitor,我发现该程序需要管理员权限,因为它试图创建全局内存部分,我认为这是为了模拟器和程序之间的通信,而这需要SeCreateGlobalPrivilege
只有管理员才拥有的权限。由于安全策略,我无法向用户帐户授予权限。
使用 API Monitor,我尝试在有问题的全局Kernel32.dll
调用CreateFileMappingA
、、CreateSemaphoreA
处插入一个断点CreateMutexA
,CreateEventA
并手动将它们从全局更改为本地,这似乎可以使程序正常运行。
有没有办法永久修补/挂钩/拦截Kernel32.dll
本地调用而不是全局调用?
答案1
您可以使用绕行或自定义AppCompat 垫片(如果现有的都不适合)来覆盖库调用。
答案2
尝试 覆盖:
WinAPIOverride 是一款适用于 32 位和 64 位进程的高级 API 监控软件。
您可以监控和/或覆盖进程的任何函数。
这可以针对 API 函数或可执行内部函数进行。
该应用程序可免费用于家庭非商业用途(捐赠软件)。它最后更新于 2022 年 2 月。
否则,您将需要编写自己的全局系统范围的挂钩程序,将您的 DLL 注入进程空间并拦截这些系统调用。