From: chris.aseltine on
On Apr 26, 1:35 pm, madhukar.gu...(a)gmail.com wrote:

> One other thing i forgot to mention is that if i register preprocessor
> routine IRP_MJ_READ instead of EvtIoRead then i wont be able to use
> the queues. This would change the entire design of my driver.

Sucks, doesn't it? Welcome to the club.

You don't have to totally get rid of your I/O queues. You can still
use them as cancel-safe containers for pended I/O.

However, you'll still need to do several checks in your IRP preprocess
routine to check if you can complete an incoming read synchronously,
or pass it off to your queues (and thus EvtIoRead).

Also, you mentioned something about XP versus Vista -- again, the bug
is in MSComm32.ocx, not the operating system, so that isn't a factor
here.
From: madhukar.gubba on
If the bug is in MSComm32.ocx the why not the MS folks fix it. I have
seen this problem is being asked in many places in other forums as
well. An alternative could be the possible fix in serial sample as
well.

My driver already passed DTM and other stress tests. If i had to make
any changes i need to repeat all the test procedures again.

One more question.

If i register IRP preprocess routine, when the callback function is
triggered i have support routines (Like SerialStartOrQueue(),
SerialStartRead() routines) using WDFREQUEST object instead of IRP .
Do i need to change all the WDFREQUEST objects to get the IRP pointer?
or is there any other way to do it?

Thank You.

Regards,
Madhukar
From: chris.aseltine on
On Apr 28, 7:16 am, madhukar.gu...(a)gmail.com wrote:

> If the bug is in MSComm32.ocx the why not the MS folks fix it.

Probably because they don't care?

> I have seen this problem is being asked in many places in other
> forums as well. An alternative could be the possible fix in serial
> sample as well.

Again, don't see why you're proposing to "fix" anything in the drivers
when the bug is with the OCX control.

> My driver already passed DTM and other stress tests. If i had to make
> any changes i need to repeat all the test procedures again.

Woe is you, it seems.

> If i register IRP preprocess routine, when the callback function is
> triggered i have support routines (Like SerialStartOrQueue(),
> SerialStartRead() routines) using WDFREQUEST object instead of IRP .
> Do i need to change all the WDFREQUEST objects to get the IRP pointer?
> or is there any other way to do it?

I already explained this in my prior post. Decide in your WDM
preprocess routine if you're going to complete the IRP synchronously
or not. If you're not, just pass it to your I/O queue, and your other
routines can stay the way they are.