C 处理IRP_MJ_停堆

C 处理IRP_MJ_停堆,c,windows,kernel,driver,filter-driver,C,Windows,Kernel,Driver,Filter Driver,我正在使用diskperf作为基础开发一个上层卷过滤器驱动程序。 我正在处理IRP_MJ_SHUTDOWNIRP,因此在关闭系统时,我希望保存一个大小从30Mb到500Mb的缓冲区。 那么,我可以将这个缓冲区写入一个文件吗?当系统再次重新启动时,我们的驱动程序应该从该文件中读取缓冲区,那么这是可能的吗? 如果是的话,那么有人能指导我使用哪些功能吗 等待积极的回应 提前感谢。内核为内核模式驱动程序提供了一组支持例程,包括(和各种相关函数)用于处理文件。因此,无需亲自构造对文件系统驱动程序的请求。您

我正在使用diskperf作为基础开发一个上层卷过滤器驱动程序。 我正在处理
IRP_MJ_SHUTDOWN
IRP,因此在关闭系统时,我希望保存一个大小从30Mb到500Mb的缓冲区。 那么,我可以将这个缓冲区写入一个文件吗?当系统再次重新启动时,我们的驱动程序应该从该文件中读取缓冲区,那么这是可能的吗? 如果是的话,那么有人能指导我使用哪些功能吗

等待积极的回应


提前感谢。

内核为内核模式驱动程序提供了一组支持例程,包括(和各种相关函数)用于处理文件。因此,无需亲自构造对文件系统驱动程序的请求。

您是否考虑过使用普通内核模式的文件管理功能?谢谢您的回复。你能说出你指的是哪些功能吗?我尝试使用
IoBuildSynchronousFsdRequest(IRP\u MJ\u WRITE…)
,但没有成功。我可以在高音量过滤器驱动程序中使用
IoBuildSynchronousFsdRequest
吗?更易于使用
ZwCreateFile
和朋友,虽然您需要启动一个单独的系统线程来执行该操作。@HarryJohnston:我已经使用了
ZwCreateFile
ZwWriteFile
功能,但在
ZwWriteFile
功能之后,我不断得到
0xC0000022->状态\访问被拒绝
状态。你能告诉我可能的解决办法吗<代码>状态=ZwCreateFile(&devhandle,文件读取数据,文件写入数据,文件属性,文件状态,NULL,文件属性,正常,文件共享,文件打开,文件非目录文件,NULL,0);lDiskOffset.QuadPart=(43680*扇区大小);status=ZwWriteFile(devhandle、NULL、NULL、NULL和ioStatus、wrtBuffer、sizeof(wrtBuffer)和lDiskOffset、NULL);}ZwClose(devhandle);}只是一个猜测,但请尝试使用
GENERIC\u ALL
权限,而不是
FILE\u READ\u DATA | FILE\u WRITE\u DATA
。另外,如果问题是您试图写入的文件系统已经关闭,请从不同的上下文(例如,通过IOCTL)尝试相同的代码。