Bug Check 0xD5: DRIVER_PAGE_FAULT_IN_FREED_SPECIAL_POOL

I got a very wired error from verifier:
Bug Check 0xD5: DRIVER_PAGE_FAULT_IN_FREED_SPECIAL_POOL
The wired thing is the place where the error came from:
Here is a standard piece of code. The BSOD occurred at “return
Irp->IoStatus.Status;”

Is there any chance someone called IoFreeIrp() on that irp and that’s
why it’s not valid?

Thanks.

Irp = IoBuildSynchronousFsdRequest(IRP_MJ_PNP,

dobj,

NULL,

0,

NULL,

&Event,

&IoStatusBlock);

if (!Irp)

{

ObDereferenceObject(fo);

return STATUS_SUCCESS;

}

else

{

IrpSp = IoGetNextIrpStackLocation(Irp);

IrpSp->MinorFunction = IRP_MN_QUERY_STOP_DEVICE;

IrpSp->FileObject = fo;

Status = IoCallDriver(dobj, Irp);

if (Status == STATUS_PENDING)

{

KeWaitForSingleObject(&Event,

Executive,

KernelMode,

FALSE,

NULL);

Status = IoStatusBlock.Status;

}

if (NT_SUCCESS(Status))
{
return Irp->IoStatus.Status; //BSOD here

}
}

Hii , i am new in the field of Windows driver development.I want to develop
a driver for the printer.In doing so i am facing with 2 problems:

  1. I want to customize Default " Printer Document Property page" . I am able
    to add a new Tab on that. But i am unable to rename the existing one i.e.
    “Layout” & “Paper/Quality” Tabs.
    How can i do that ?

  2. Is it possible to kill the default "Document Property page " & show my
    customize one.

Please tell me asap.Its very urgent.
Mail Id: xxxxx@netcreativemind.com

Regards
asim siddiqui

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com]On Behalf Of Omer B
Sent: 25. ágúst 2005 13:38
To: Windows System Software Devs Interest List
Subject: [ntdev] Bug Check 0xD5: DRIVER_PAGE_FAULT_IN_FREED_SPECIAL_POOL

I got a very wired error from verifier:
Bug Check 0xD5: DRIVER_PAGE_FAULT_IN_FREED_SPECIAL_POOL
The wired thing is the place where the error came from:
Here is a standard piece of code. The BSOD occurred at “return
Irp->IoStatus.Status;”

Is there any chance someone called IoFreeIrp() on that irp and that’s
why it’s not valid?

Thanks.

Irp = IoBuildSynchronousFsdRequest(IRP_MJ_PNP,

dobj,

NULL,

0,

NULL,

&Event,

&IoStatusBlock);

if (!Irp)

{

ObDereferenceObject(fo);

return STATUS_SUCCESS;

}

else

{

IrpSp = IoGetNextIrpStackLocation(Irp);

IrpSp->MinorFunction = IRP_MN_QUERY_STOP_DEVICE;

IrpSp->FileObject = fo;

Status = IoCallDriver(dobj, Irp);

if (Status == STATUS_PENDING)

{

KeWaitForSingleObject(&Event,

Executive,

KernelMode,

FALSE,

NULL);

Status = IoStatusBlock.Status;

}

if (NT_SUCCESS(Status))
{
return Irp->IoStatus.Status; //BSOD here

}
}


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com

Hi,

Read the documentation on IoBuildSynchronousFsdRequest in the DDK, all
should be clear.

Of course, this doesn’t address the issue of why on Earth you’re sending an
IRP_MN_QUERY_STOP request (and specifying a FILE_OBJECT, no less). Doesn’t
seem like a very good idea to me.

-scott


Scott Noone
Software Engineer
OSR Open Systems Resources, Inc.
http://www.osronline.com

“Omer B” wrote in message news:xxxxx@ntdev…
I got a very wired error from verifier:
Bug Check 0xD5: DRIVER_PAGE_FAULT_IN_FREED_SPECIAL_POOL
The wired thing is the place where the error came from:
Here is a standard piece of code. The BSOD occurred at “return
Irp->IoStatus.Status;”

Is there any chance someone called IoFreeIrp() on that irp and that’s
why it’s not valid?

Thanks.

Irp = IoBuildSynchronousFsdRequest(IRP_MJ_PNP,

dobj,

NULL,

0,

NULL,

&Event,

&IoStatusBlock);

if (!Irp)

{

ObDereferenceObject(fo);

return STATUS_SUCCESS;

}

else

{

IrpSp = IoGetNextIrpStackLocation(Irp);

IrpSp->MinorFunction = IRP_MN_QUERY_STOP_DEVICE;

IrpSp->FileObject = fo;

Status = IoCallDriver(dobj, Irp);

if (Status == STATUS_PENDING)

{

KeWaitForSingleObject(&Event,

Executive,

KernelMode,

FALSE,

NULL);

Status = IoStatusBlock.Status;

}

if (NT_SUCCESS(Status))
{
return Irp->IoStatus.Status; //BSOD here

}
}

  1. you are not allowed to send state changing pnp irps to driver.
    Never *EVER*. Only the pnp manager can send them. They are (not
    inclusive) start, stop, query stop, query stop canceled, query remove,
    query remove canceled remove, surprise remove. Furthermore, only one
    can be pending in a driver stack at a time. You cannot send them b/c
    you cannot coordinate state with the pnp manager. For instance, once a
    driver gets a query stop, it does not expect another state changing pnp
    irp. So,if you send the query stop and then the pnp manager decides to
    send a query remove, you will be hitting uknown territory.

  2. Once the event is set…well, ready the docs on this function :wink:

d

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Omer B
Sent: Thursday, August 25, 2005 1:08 AM
To: Windows System Software Devs Interest List
Subject: [ntdev] Bug Check 0xD5: DRIVER_PAGE_FAULT_IN_FREED_SPECIAL_POOL

I got a very wired error from verifier:
Bug Check 0xD5: DRIVER_PAGE_FAULT_IN_FREED_SPECIAL_POOL
The wired thing is the place where the error came from:
Here is a standard piece of code. The BSOD occurred at “return
Irp->IoStatus.Status;”

Is there any chance someone called IoFreeIrp() on that irp and that’s
why it’s not valid?

Thanks.

Irp = IoBuildSynchronousFsdRequest(IRP_MJ_PNP,

dobj,

NULL,

0,

NULL,

&Event,

&IoStatusBlock);

if (!Irp)

{

ObDereferenceObject(fo);

return STATUS_SUCCESS;

}

else

{

IrpSp = IoGetNextIrpStackLocation(Irp);

IrpSp->MinorFunction = IRP_MN_QUERY_STOP_DEVICE;

IrpSp->FileObject = fo;

Status = IoCallDriver(dobj, Irp);

if (Status == STATUS_PENDING)

{

KeWaitForSingleObject(&Event,

Executive,

KernelMode,

FALSE,

NULL);

Status = IoStatusBlock.Status;

}

if (NT_SUCCESS(Status))
{
return Irp->IoStatus.Status; //BSOD here

}
}


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument:
‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com

Firstly, you don’t touch an IRP after it’s passing to the lower driver
without a valid completion routine. This is the one crashing your system.

Secondly, you are no supposed to send a STOP_DEV, it’s reserved for the PNP
manager.

Calvin Guan (Windows DDK MVP)
NetXtreme Longhorn Miniport Prime
Broadcom Corp. www.broadcom.com

----- Original Message -----
From: “Omer B”
To: “Windows System Software Devs Interest List”
Sent: Thursday, August 25, 2005 1:07 AM
Subject: [ntdev] Bug Check 0xD5: DRIVER_PAGE_FAULT_IN_FREED_SPECIAL_POOL

I got a very wired error from verifier:
Bug Check 0xD5: DRIVER_PAGE_FAULT_IN_FREED_SPECIAL_POOL
The wired thing is the place where the error came from:
Here is a standard piece of code. The BSOD occurred at “return
Irp->IoStatus.Status;”

Is there any chance someone called IoFreeIrp() on that irp and that’s
why it’s not valid?

Thanks.

Irp = IoBuildSynchronousFsdRequest(IRP_MJ_PNP,

dobj,

NULL,

0,

NULL,

&Event,

&IoStatusBlock);

if (!Irp)

{

ObDereferenceObject(fo);

return STATUS_SUCCESS;

}

else

{

IrpSp = IoGetNextIrpStackLocation(Irp);

IrpSp->MinorFunction = IRP_MN_QUERY_STOP_DEVICE;

IrpSp->FileObject = fo;

Status = IoCallDriver(dobj, Irp);

if (Status == STATUS_PENDING)

{

KeWaitForSingleObject(&Event,

Executive,

KernelMode,

FALSE,

NULL);

Status = IoStatusBlock.Status;

}

if (NT_SUCCESS(Status))
{
return Irp->IoStatus.Status; //BSOD here

}
}


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com