Windows 服务注册表中的“WOW64”值有何作用,该值位于:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
我附上了截图。
这是我的问题:我创建了一个服务
<myserviceexe> /install
看起来就像屏幕截图中的那样。 Service可执行文件是用32位编译的并且运行良好。
之后我手动创建了第二个服务
sc create myservice binpath=C:\myservice.exe start=auto
第二个服务也是以 32 位编译的(但与第一个服务完全不同),并且在使用第二个命令创建时运行良好。但是,当创建第二个服务时,注册表中没有 WOW64 条目。如果我手动添加此条目(只是出于测试的好奇心),该服务会抛出一个非常非常奇怪的错误“ERROR_MORE_DATA 234:有更多数据”(无论这意味着什么)(https://learn.microsoft. com/de-de/windows/win32/debug/system-error-codes--0-499-)
有人可以解释一下WOW64条目是做什么的吗?我在网上找到的信息绝对为零。我知道 WOW64 通常意味着什么:二进制文件是 32 位二进制文件,并且在 32 位环境中运行。但这与服务有什么关系?为什么在注册表中创建 WOW64 条目时我的第二个服务不运行,尽管它是 32 位二进制文件?
我查看了从 ms-sysinternals 中使用进程监视器启动第二个服务时发生的情况,并注意到当程序加载我手动创建的 WOW64 注册表项时发生了缓冲区溢出。然后我注意到我在注册表中创建了一个 QWORD 而不是 DWORD xD
当使用 DWORD(正如你应该的那样)时,第二个服务也可以正常运行。
我也想知道。某个地方必须有关于服务控制器的 WOW64 值中各个位的含义的描述。