IRP.Tail.Overlay.DriverContext
2023-10-13
9
0
都知道IRP是给用户存储自定义信息的,不过也只是听说。第一次见,做个标记
urbr = ExAllocateFromNPagedLookasideList(&g_lookaside);
if (urbr == NULL)
{
DBGE(DBG_URB, "create_urbr: out of memory\n");
return NULL;
}
RtlZeroMemory(urbr, sizeof(*urbr));
urbr->vpdo = vpdo;
urbr->irp = irp;
if (irp != NULL)
{
irp->Tail.Overlay.DriverContext[0] = vpdo;
irp->Tail.Overlay.DriverContext[1] = urbr;
}
其实DriverContext是一个数组,最多可以存储4个自定义指针。
struct {
//
// The following are available to the driver to use in
// whatever manner is desired, while the driver owns the
// packet.
//
PVOID DriverContext[4];
} ;
即:当驱动程序拥有数据包时,以下内容可供驱动程序以所需的任何方式使用。