From: akapoor on
I am writing a KMDF filter driver attached to the boot drive, so it loads
with start_type = 0. I only want one read/write request in flight at a time.


When I set the following in addDevice, I get a crash with "Inaccessible Boot
Device:"

WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE
(&ioQueueConfig,WdfIoQueueDispatchSequential);
ioQueueConfig.EvtIoRead = FilterEvtIoReadWrite;
ioQueueConfig.EvtIoWrite = FilterEvtIoReadWrite;
ioQueueConfig.EvtIoDeviceControl = FilterEvtIoDeviceControl;
status = WdfIoQueueCreate(device, &ioQueueConfig, WDF_NO_OBJECT_ATTRIBUTES,
WDF_NO_HANDLE
);

The above also works fine if the drive isn't the boot drive, and the
following works even if it is the boot device:

WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE(&ioQueueConfig,
WdfIoQueueDispatchParallel);
ioQueueConfig.EvtIoRead = FilterEvtIoReadWrite;
ioQueueConfig.EvtIoWrite = FilterEvtIoReadWrite;
ioQueueConfig.EvtIoDeviceControl = FilterEvtIoDeviceControl;
status = WdfIoQueueCreate(device, &ioQueueConfig, WDF_NO_OBJECT_ATTRIBUTES,
WDF_NO_HANDLE
);

However, I wanted the queue to be sequential.

Thanks for your help.
From: Don Burn on
You are changing the semantics of the device model by making the disk
requests sequential that is why it crashes. Even if it does work, your
performance will stink, so this is a bad desing.


Don Burn (MVP, Windows DKD)
Windows Filesystem and Driver Consulting
Website: http://www.windrvr.com
Blog: http://msmvps.com/blogs/WinDrvr



> -----Original Message-----
> From: akapoor [mailto:akapoor(a)discussions.microsoft.com]
> Posted At: Wednesday, March 10, 2010 2:19 PM
> Posted To: microsoft.public.development.device.drivers
> Conversation: Filter driver on boot device
> Subject: Filter driver on boot device
>
> I am writing a KMDF filter driver attached to the boot drive, so it
> loads with start_type = 0. I only want one read/write request in
> flight at a time.
>
>
> When I set the following in addDevice, I get a crash with "Inaccessible
> Boot
> Device:"
>
> WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE
> (&ioQueueConfig,WdfIoQueueDispatchSequential);
> ioQueueConfig.EvtIoRead = FilterEvtIoReadWrite;
> ioQueueConfig.EvtIoWrite = FilterEvtIoReadWrite;
> ioQueueConfig.EvtIoDeviceControl = FilterEvtIoDeviceControl;
> status = WdfIoQueueCreate(device, &ioQueueConfig,
> WDF_NO_OBJECT_ATTRIBUTES,
> WDF_NO_HANDLE
> );
>
> The above also works fine if the drive isn't the boot drive, and the
> following works even if it is the boot device:
>
> WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE(&ioQueueConfig,
> WdfIoQueueDispatchParallel);
> ioQueueConfig.EvtIoRead = FilterEvtIoReadWrite;
> ioQueueConfig.EvtIoWrite = FilterEvtIoReadWrite;
> ioQueueConfig.EvtIoDeviceControl = FilterEvtIoDeviceControl;
> status = WdfIoQueueCreate(device, &ioQueueConfig,
> WDF_NO_OBJECT_ATTRIBUTES,
> WDF_NO_HANDLE
> );
>
> However, I wanted the queue to be sequential.
>
> Thanks for your help.
>
>
> __________ Information from ESET Smart Security, version of virus
> signature database 4932 (20100310) __________
>
> The message was checked by ESET Smart Security.
>
> http://www.eset.com
>