我正在尝试让科学仪器在 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
本地而不是全局的调用?
您也许可以使用Detours或自定义AppCompat shim(如果现有的都不适合)来覆盖库调用。
尝试 WinAPIOverride:
该应用程序可免费用于家庭非商业用途(捐赠软件)。上次更新时间为 2022 年 2 月。
否则,您将需要编写自己的全局系统范围挂钩程序,它将您的 DLL 注入进程空间并拦截这些系统调用。