Hi all,
In my disk filter driver I am trying to split I/O read requests into
different pieces and send them in PARALLEL to underlying disk device
drivers.
At first step I try do that without using of associated IRPs.
Here is part of my current test :
…
//
// Build all partial IRPs
//
for (i=0; i
//
// Create notification event object for request completion.
//
KeInitializeEvent(&event[i], NotificationEvent, FALSE);
pEvent[i]=&event[i];
//
// Build Read
//
irp[i] = IoBuildSynchronousFsdRequest(IRP_MJ_READ,
HbaDeviceObject[i],
PartialBuffer[i],
PartialLength[i],
&PartialByteOffset[i],
&event[i],
&PartialIoStatus[i] );
if (!irp[i]) {
…
return STATUS_UNSUCCESSFUL;
}
}
//
// Send all partial IRPs
//
for (i=0; i
//
// Pass request to port driver and wait for request to complete.
//
status = IoCallDriver( HbaDeviceObject[i], irp[i] );
…
}
//
// Wait for all partial IRP completion
//
KeWaitForMultipleObjects(
HBANUM,
pEvent,
WaitAll,
Executive,
KernelMode,
FALSE,
NULL,
NULL
);
…
If I use this code for reads with (Length > 100K) approx. everything is
fine, but if I call this code for all (Lenght > SECTOR_SIZE) - by some
reasons KeWaitForMultipleObjects() never returns from wait state!?
(!) As I read in Rajeev Nagar’s book for my purpose the ideal choice is
using Associated IRPs but I coudn’t find any appropriate sample code…
Any help will be appreciated!
Thanks in advance,
Kristian
—
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