阅读:2640回复:1
minifilter中fltWriteFile 的用法WriteBuff = FltAllocatePoolAlignedWithTag(Data->Iopb->TargetInstance, PagedPool, PAGE_SIZE, 'abcd'); if (WriteBuff != NULL) { RtlFillMemory(WriteBuff, PAGE_SIZE, 0xFF); ByteOffset.QuadPart = 0; while (ByteOffset.QuadPart < FileSize.QuadPart) { Size.QuadPart = (FileSize.QuadPart - ByteOffset.QuadPart) > PAGE_SIZE ? PAGE_SIZE : (FileSize.QuadPart - ByteOffset.QuadPart); status = FltWriteFile(Data->Iopb->TargetInstance, FileObject, &ByteOffset, Size.LowPart, WriteBuff, FILE_NO_INTERMEDIATE_BUFFERING|FLTFL_IO_OPERATION_PAGING | FLTFL_IO_OPERATION_NON_CACHED, &WriteBytes, NULL, NULL); ByteOffset.QuadPart += WriteBytes; if (!(NT_SUCCESS(status))) break; } FltFreePoolAlignedWithTag(Data->Iopb->TargetInstance, WriteBuff, 'abcd'); } |
|