从Windows子系统for Linux进程调用Win32 / NT-Native API?

时间:2016-05-17 20:13:16

标签: windows-kernel windows-subsystem-for-linux

如何从Windows Solaris for Linux(WSL)中的Linux二进制文件调用Windows API函数?我很确定没有记录的方法可以这样做,但尝试它可能会很有趣。

我有兴趣调用Win32函数,或者如果不可能,至少是Windows NT本机API(Nt *,Zw *)。本机API应该至少可用,因为运行Linux进程的组件(lxss)依赖于这些API。

可能需要构建一个类似LoadLibrary的自定义函数来加载Windows DLL。另一个想法是在进程内存中搜索已知的内核函数(即用户模式入口点)。

有人试过这个并想分享一个解决方案吗?

1 个答案:

答案 0 :(得分:5)

简而言之,你不能。

Linux进程运行的实际进程不是Win32进程,无法加载和执行Win32用户模式代码,也无法调用标准的Win32 NT内核入口点。

有关WSL使用的PicoProcess基础架构的更多信息,请阅读this blog and/or watch the accompanying video

如果您确实想从WSL中运行的代码“调用”Windows代码,您可能需要考虑使用某种形式的套接字/消息传递/ RPC / REST调用技术,其中关系的两端/两端可以监听和响应通过某个网络/套接字/管道传送的消息。