从内核模式驱动程序调用 java 程序

力量

我有一个命令行 java 程序,我需要从内核模式驱动程序(Windows 上的 MiniFilter 驱动程序)调用它。

是否可以 ?有什么我需要注意以避免出现问题的吗?我怎样才能做到这一点 ?

异步

java程序在用户模式下运行。你不能只是从内核模式到用户模式进行函数调用。但是你可以在两者之间进行通信。

通常,用户模式程序通过在与驱动程序关联的设备对象上打开的句柄调用用户模式 ​​IO API 来调用驱动程序的功能。有标准的 IO 操作,如读取和写入(即调用 Win32 APIReadFile()WriteFile()在 C/C++ 中),但您也可以使用DeviceIoControl(). 您传递一个操作代码和一对缓冲区:一个带有参数/输入到驱动程序,另一个接收其输出。在此之上,您可以为用户模式程序构建一种机制,以从驱动程序请求“呼叫”或消息,并且驱动程序在想要发送此类呼叫/消息之前不会完成请求。它会在输出中传递它的参数待处理的 DeviceIoControl 请求的缓冲区。然后程序可以使用另一个 DeviceIoControl() 调用,可能使用不同的操作代码,将结果返回给驱动程序,在输入缓冲区中。

从 Java 调用 DeviceIoControl() 会带来额外的负担。为此,您可能需要在 DLL 中使用JNI和一些 C/C++ 代码。

当心让驱动程序依赖于用户模式程序的陷阱。您可能不想在等待用户模式响应的驱动程序中实现阻塞调用,因为用户模式程序可能会崩溃或被杀死并且永远不会完成驱动程序正在等待的调用,然后您有一个挂起的线程,可能在您的 Java 程序之外的某个进程中。即使你实现了发送到用户模式的调用的异步完成,你可能希望你的调用有一个超时机制,这样如果用户模式程序没有完成调用,你可以清理任何相关的上下文,例如未决呼叫集合中的呼叫标识符。还要注意类似于多线程或多任务处理中的问题,例如死锁。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章