From: Brian Catlin [MVP] on
From your description, it would appear that the PNP enumeration IRPs
(QUERY_*) are not being processed correctly. Without seeing the code and
the INF file, I cannot be more precise. Which OS are you testing on? Can
you enable the PNP debug spew in the debugger?

-Brian

Brian Catlin, Azius Developer Training, 888-238-4050 x4
Windows device driver training and consulting
See www.azius.com for a list of classes


"Dennis Ginley" <DennisGinley(a)discussions.microsoft.com> wrote in message
news:4B4A8F10-6AA4-477A-88CD-5B352295B6C4(a)microsoft.com...
> I'm a lower filter, sitting just below the storage class driver. My
> AddDevice
> is called for hard disks, CDs, and for USB keys that were inserted into
> the
> test box before my driver was installed, but not for "new" USB dirves. So
> new
> drives don't ever get added to my list of things to filter, and in fact
> the
> system doesn't even load drivers for them.
>
> So technically it's true that I'm not passing down any IRPs, because I'm
> not
> seeing them.
>
> Dennis
>
> Based upon the symptoms you're reporting, you're not passing down the PNP
> enumeration IRPs properly. It isn't clear to me where you want to be
> loaded. Are you trying to create a lower-level Function Filter Device
> Object (FFDO) or a Bus Filter Device Object (BFDO)?
>
> -Brian


From: Dennis Ginley on
I turned on debug spew and got the following:

When I plug in and then remove a USB drive that has been seen before my
driver installation,
NTWIOT5: *AddDevice() entered [pdo=028DA060].
NTWIOT5: Attached to device [hookDev=03172040] [targetDev=03037E00].
NTWIOT5: *DispatchPnp(IRP_MN_START_DEVICE) entered [03172040].
NTWIOT5: *PnpStartDevice() entered [03172040].
NTWIOT5: NtioInitializeHook() entered [03172040].
NTWIOT5: *DispatchPnp(IRP_MN_REMOVE_DEVICE) entered [03172040].
NTWIOT5: *PnpRemoveDevice() entered [03172040].

When I plug in a "new" USB drive, i.e. one that had not been plugged in
before the driver was installed, I see no spew at all.

I added stubs for the QUERY_*) as Brian suggested, but since my driver is
never entered for a new device, none of them are ever hit.

It really seems like the presence of my lower filter is interfering with the
PNP process.

I'm attaching to the DiskDrive and CDROM classes in
HKLM/System/CurrentControlSet/Control/Class/... Is there some other way to
attach as a lower filter to USB removable devices?

Thanks,
Dennis

"Brian Catlin [MVP]" wrote:

> From your description, it would appear that the PNP enumeration IRPs
> (QUERY_*) are not being processed correctly. Without seeing the code and
> the INF file, I cannot be more precise. Which OS are you testing on? Can
> you enable the PNP debug spew in the debugger?
>
> -Brian
>
> Brian Catlin, Azius Developer Training, 888-238-4050 x4
> Windows device driver training and consulting
> See www.azius.com for a list of classes
>
>
> "Dennis Ginley" <DennisGinley(a)discussions.microsoft.com> wrote in message
> news:4B4A8F10-6AA4-477A-88CD-5B352295B6C4(a)microsoft.com...
> > I'm a lower filter, sitting just below the storage class driver. My
> > AddDevice
> > is called for hard disks, CDs, and for USB keys that were inserted into
> > the
> > test box before my driver was installed, but not for "new" USB dirves. So
> > new
> > drives don't ever get added to my list of things to filter, and in fact
> > the
> > system doesn't even load drivers for them.
> >
> > So technically it's true that I'm not passing down any IRPs, because I'm
> > not
> > seeing them.
> >
> > Dennis
> >
> > Based upon the symptoms you're reporting, you're not passing down the PNP
> > enumeration IRPs properly. It isn't clear to me where you want to be
> > loaded. Are you trying to create a lower-level Function Filter Device
> > Object (FFDO) or a Bus Filter Device Object (BFDO)?
> >
> > -Brian
>
>
From: David Craig on
Is this a new install of the OS on the target system? I have found that XP
after about a year will not see a new USB stick even where other, previously
seen ones, are currently working. Just Windows rot.

"Dennis Ginley" <DennisGinley(a)discussions.microsoft.com> wrote in message
news:AB798903-7257-482E-90B0-FF28246BCD10(a)microsoft.com...
>I turned on debug spew and got the following:
>
> When I plug in and then remove a USB drive that has been seen before my
> driver installation,
> NTWIOT5: *AddDevice() entered [pdo=028DA060].
> NTWIOT5: Attached to device [hookDev=03172040] [targetDev=03037E00].
> NTWIOT5: *DispatchPnp(IRP_MN_START_DEVICE) entered [03172040].
> NTWIOT5: *PnpStartDevice() entered [03172040].
> NTWIOT5: NtioInitializeHook() entered [03172040].
> NTWIOT5: *DispatchPnp(IRP_MN_REMOVE_DEVICE) entered [03172040].
> NTWIOT5: *PnpRemoveDevice() entered [03172040].
>
> When I plug in a "new" USB drive, i.e. one that had not been plugged in
> before the driver was installed, I see no spew at all.
>
> I added stubs for the QUERY_*) as Brian suggested, but since my driver is
> never entered for a new device, none of them are ever hit.
>
> It really seems like the presence of my lower filter is interfering with
> the
> PNP process.
>
> I'm attaching to the DiskDrive and CDROM classes in
> HKLM/System/CurrentControlSet/Control/Class/... Is there some other way to
> attach as a lower filter to USB removable devices?
>
> Thanks,
> Dennis
>
> "Brian Catlin [MVP]" wrote:
>
>> From your description, it would appear that the PNP enumeration IRPs
>> (QUERY_*) are not being processed correctly. Without seeing the code and
>> the INF file, I cannot be more precise. Which OS are you testing on?
>> Can
>> you enable the PNP debug spew in the debugger?
>>
>> -Brian
>>
>> Brian Catlin, Azius Developer Training, 888-238-4050 x4
>> Windows device driver training and consulting
>> See www.azius.com for a list of classes
>>
>>
>> "Dennis Ginley" <DennisGinley(a)discussions.microsoft.com> wrote in message
>> news:4B4A8F10-6AA4-477A-88CD-5B352295B6C4(a)microsoft.com...
>> > I'm a lower filter, sitting just below the storage class driver. My
>> > AddDevice
>> > is called for hard disks, CDs, and for USB keys that were inserted into
>> > the
>> > test box before my driver was installed, but not for "new" USB dirves.
>> > So
>> > new
>> > drives don't ever get added to my list of things to filter, and in fact
>> > the
>> > system doesn't even load drivers for them.
>> >
>> > So technically it's true that I'm not passing down any IRPs, because
>> > I'm
>> > not
>> > seeing them.
>> >
>> > Dennis
>> >
>> > Based upon the symptoms you're reporting, you're not passing down the
>> > PNP
>> > enumeration IRPs properly. It isn't clear to me where you want to be
>> > loaded. Are you trying to create a lower-level Function Filter Device
>> > Object (FFDO) or a Bus Filter Device Object (BFDO)?
>> >
>> > -Brian
>>
>>


From: Dennis Ginley on
I enabled debug spew as Brian suggested.

When I insert and then remove a USB drive that had been installed in the
test system before my lower filter was installed, this is what I see:

NTWIOT5: *AddDevice() entered [pdo=028DA060].
NTWIOT5: Attached to device [hookDev=03172040] [targetDev=03037E00].
NTWIOT5: *DispatchPnp(IRP_MN_START_DEVICE) entered [03172040].
NTWIOT5: *PnpStartDevice() entered [03172040].
NTWIOT5: NtioInitializeHook() entered [03172040].
NTWIOT5: *DispatchPnp(IRP_MN_REMOVE_DEVICE) entered [03172040].
NTWIOT5: *PnpRemoveDevice() entered [03172040].

When I insert a "new" USB drive, i.e. one that had not been insterted into
the test system before installing the filter driver, there is no spew at all.
On the test box I see a message that the system is loading a driver, then
another that the driver load failed.

I also created stubs for the (QUERY_*) PNP enumeration IRPs, but none of
them were ever hit. It seems as if the presence of the lower filter driver is
interfering with the PNP process itself.

I'm attaching to the Disk Drive and CD_ROM classes in
HKLM/System/CurrentControlSet/Control/Class... Is there another place to
attach so I see USB drive discovery IRPs?

Thanks,
Dennis

"Brian Catlin [MVP]" wrote:

> From your description, it would appear that the PNP enumeration IRPs
> (QUERY_*) are not being processed correctly. Without seeing the code and
> the INF file, I cannot be more precise. Which OS are you testing on? Can
> you enable the PNP debug spew in the debugger?
>
> -Brian
>
> Brian Catlin, Azius Developer Training, 888-238-4050 x4
> Windows device driver training and consulting
> See www.azius.com for a list of classes
>
>
> "Dennis Ginley" <DennisGinley(a)discussions.microsoft.com> wrote in message
> news:4B4A8F10-6AA4-477A-88CD-5B352295B6C4(a)microsoft.com...
> > I'm a lower filter, sitting just below the storage class driver. My
> > AddDevice
> > is called for hard disks, CDs, and for USB keys that were inserted into
> > the
> > test box before my driver was installed, but not for "new" USB dirves. So
> > new
> > drives don't ever get added to my list of things to filter, and in fact
> > the
> > system doesn't even load drivers for them.
> >
> > So technically it's true that I'm not passing down any IRPs, because I'm
> > not
> > seeing them.
> >
> > Dennis
> >
> > Based upon the symptoms you're reporting, you're not passing down the PNP
> > enumeration IRPs properly. It isn't clear to me where you want to be
> > loaded. Are you trying to create a lower-level Function Filter Device
> > Object (FFDO) or a Bus Filter Device Object (BFDO)?
> >
> > -Brian
>
>
From: Dennis Ginley on
I'd like to report that I figured it out, or at least I got it working. After
almost three weeks of research and trying different things, I discovered that
I needed to add the key "ErrorControl = 1" to
HKLM\System\CurrentControlSet\Services\ntwiot5.

I really don't know why that fixed the problem, but it did. This tool has
existed for ten years as an upper filter without that key, but when I
switched it to a lower filter it broke. With that key in place, all USB
drives are recognized, and drivers are loaded for them.

Thanks for the help and suggestions,
Dennis

"Dennis Ginley" wrote:

> I enabled debug spew as Brian suggested.
>
> When I insert and then remove a USB drive that had been installed in the
> test system before my lower filter was installed, this is what I see:
>
> NTWIOT5: *AddDevice() entered [pdo=028DA060].
> NTWIOT5: Attached to device [hookDev=03172040] [targetDev=03037E00].
> NTWIOT5: *DispatchPnp(IRP_MN_START_DEVICE) entered [03172040].
> NTWIOT5: *PnpStartDevice() entered [03172040].
> NTWIOT5: NtioInitializeHook() entered [03172040].
> NTWIOT5: *DispatchPnp(IRP_MN_REMOVE_DEVICE) entered [03172040].
> NTWIOT5: *PnpRemoveDevice() entered [03172040].
>
> When I insert a "new" USB drive, i.e. one that had not been insterted into
> the test system before installing the filter driver, there is no spew at all.
> On the test box I see a message that the system is loading a driver, then
> another that the driver load failed.
>
> I also created stubs for the (QUERY_*) PNP enumeration IRPs, but none of
> them were ever hit. It seems as if the presence of the lower filter driver is
> interfering with the PNP process itself.
>
> I'm attaching to the Disk Drive and CD_ROM classes in
> HKLM/System/CurrentControlSet/Control/Class... Is there another place to
> attach so I see USB drive discovery IRPs?
>
> Thanks,
> Dennis
>
> "Brian Catlin [MVP]" wrote:
>
> > From your description, it would appear that the PNP enumeration IRPs
> > (QUERY_*) are not being processed correctly. Without seeing the code and
> > the INF file, I cannot be more precise. Which OS are you testing on? Can
> > you enable the PNP debug spew in the debugger?
> >
> > -Brian
> >
> > Brian Catlin, Azius Developer Training, 888-238-4050 x4
> > Windows device driver training and consulting
> > See www.azius.com for a list of classes
> >
> >
> > "Dennis Ginley" <DennisGinley(a)discussions.microsoft.com> wrote in message
> > news:4B4A8F10-6AA4-477A-88CD-5B352295B6C4(a)microsoft.com...
> > > I'm a lower filter, sitting just below the storage class driver. My
> > > AddDevice
> > > is called for hard disks, CDs, and for USB keys that were inserted into
> > > the
> > > test box before my driver was installed, but not for "new" USB dirves. So
> > > new
> > > drives don't ever get added to my list of things to filter, and in fact
> > > the
> > > system doesn't even load drivers for them.
> > >
> > > So technically it's true that I'm not passing down any IRPs, because I'm
> > > not
> > > seeing them.
> > >
> > > Dennis
> > >
> > > Based upon the symptoms you're reporting, you're not passing down the PNP
> > > enumeration IRPs properly. It isn't clear to me where you want to be
> > > loaded. Are you trying to create a lower-level Function Filter Device
> > > Object (FFDO) or a Bus Filter Device Object (BFDO)?
> > >
> > > -Brian
> >
> >