When rolling an IRP_MJ_WRITE, it is possible to specify that you want to
use MDL-based I/O. But apparently not all file systems support this
functionality. How does one determine which file systems support this? Or
if this is a discrete list, which ones?
Also, when calling IRP_MJ_WRITE I am getting STATUS_INVALID_USER_BUFFER
(0xc00000e8). My irp prep code is as follows:
TIA! - jb
// --------------------------------------------------
// Build the irp
// --------------------------------------------------
irp->MdlAddress = NULL;
irp->AssociatedIrp.SystemBuffer = buffer;
irp->UserEvent = &event;
irp->UserIosb = &ioStatusBlock;
irp->Tail.Overlay.Thread = PsGetCurrentThread();
irp->RequestorMode = KernelMode;
irp->Flags = IRP_BUFFERED_IO | IRP_WRITE_OPERATION;
// --------------------------------------------------
// Build the io stack location
// --------------------------------------------------
ioStackLocation = IoGetNextIrpStackLocation(irp);
ioStackLocation->MajorFunction = IRP_MJ_WRITE;
ioStackLocation->DeviceObject = pDeviceObject;
ioStackLocation->FileObject = pFileObject;
ioStackLocation->Parameters.Write.Length = (size*count);
// --------------------------------------------------
// Set the Completion Routine
// --------------------------------------------------
IoSetCompletionRoutine( irp, ScFileWriteComplete, NULL, TRUE, TRUE, TRUE
);
// --------------------------------------------------
// Call driver and if necessary, wait for event
// --------------------------------------------------
ntStatus = IoCallDriver(pDeviceObject, irp);
You are currently subscribed to ntfsd as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntfsd-$subst(‘Recip.MemberIDChar’)@lists.osr.com