我真的不同意Rogan 的回答,因为该文件很可能被记事本之前的任何其他进程锁定。这不是这里的问题,或者至少不是你应该如何看待这个问题。
如果你想让记事本对 A.txt 有一定的看法,只需使用记事本的 FILE_OBJECT 并从内核自己编写。请记住使用ObReferenceObjectByPointer并请求WRITE访问权限。由于访问模式将是内核模式,因此您将被允许。
或者,如果您真的希望它由您的服务完成,请自己从驱动程序打开文件并为您的服务提供句柄。从内核模式打开文件可能会抑制共享模式等,您需要阅读FltCreateFileEx2的文档以确保您拥有所有必要的参数。在您刚刚打开的 FileObject 上使用ObOpenObjectByPointer并访问模式 UserMode。确保您将通过KeStackAttachProcess连接到您的用户模式的进程地址空间。
PostCreate 中的操作顺序:
- FltCreateFileEx2(the_file、ignore_share_access 等)
- KeStackAttachProcess (your_service_eprocess)
- ObOpenObjectByPointer (UserMode=access_mode) -> 现在你的 um 进程有了文件的句柄
- KeUnstackDetachProcess ()
- 将HANDLE指针发送到用户模式进程,因为它现在可以使用它。
- 等待用户模式服务写入数据并关闭句柄取消引用获得的 FileObject 以及关闭来自FltCreateFileEx2的句柄。
- 让创建去记事本
- 利润。
祝你好运。