阅读:3303回复:4
在minifilter的PreCreate中调用FltWriteFile
我在minifilter的PreCreate中调用FltCreateFile先创建一个文件,这一步成功了,并且获取到该文件的FileObject;
status = FltCreateFile(FltObjects->Filter, FltObjects->Instance, &hFile, uDesiredAccess, &ob, &IoStatus, NULL, uFileAttributes, uShareAccess, uCreateDisposition, uCreateOptions, NULL, 0, IO_IGNORE_SHARE_ACCESS_CHECK ) ; if (!NT_SUCCESS(status)) { if (STATUS_OBJECT_NAME_NOT_FOUND == status) FltStatus = FLT_PREOP_SUCCESS_NO_CALLBACK ; else FltStatus = FLT_PREOP_COMPLETE ; __leave ; } 但是调用FltWriteFile向里面写数据的时候确出问题了,偏移为0,缓冲区长度为4K,Buffer为缓冲区内容。调用后返回status = STATUS_SUCCESS,但是BytesReadWrite确为0,文件对象的Offset也没有变,感觉奇怪。 status = FltWriteFile( Instance, FileObject, &ByteOffset, Length, Buffer, FLTFL_IO_OPERATION_NON_CACHED|FLTFL_IO_OPERATION_PAGING, BytesReadWrite, NULL,NULL ); 大家有碰到过这个问题么? |
|
|
沙发#
发布于:2009-08-10 11:23
现在报的一个错误就是:内存或磁盘空间不足,保存失败。
|
|
|
板凳#
发布于:2009-08-10 10:36
我在调用FltWriteFile前先FltSetFileInformation设置文件长度,也还是写不进去。
|
|
|
地板#
发布于:2009-08-10 10:34
多谢版主指点,我在Write前的FileSize是0. 那这里应该如果处理呢,是不是在FltCreateFile的时候就指定Allocation Size为想要的长度呢? 我试验了一下,好像不行。
|
|
|
地下室#
发布于:2009-08-09 20:45
The file size must be 0. And paging WRITEs cannot extend file size.
|
|