阅读:4267回复:5
问一下PIO_STACK_LOCATION 的结构问题
IRP_MJ_CREATE的例程:
NTSTATUS DispatchCreate(IN PDEVICE_OBJECT fdo,IN PIRP Irp) { PIO_STACK_LOCATION IrpStack = IoGetCurrentIrpStackLocation(Irp); DbgPrint( \"Create File is %ws\\n\",IrpStack->FileObject->FileName.Buffer); IrpStack->FileObject->FsContext = NULL; // Complete successfully Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Information = 0; IoCompleteRequest(Irp,IO_NO_INCREMENT); return STATUS_SUCCESS; } 为什么日志是Create File is (null)? 我看见ndisuio例子中也是直接使用IrpStack的 (pOpenContext = (PNDISUIO_OPEN_CONTEXT)pIrpSp->FileObject->FsContext;) |
|
|
沙发#
发布于:2005-06-14 17:48
--实际上就是你可以用FsContext保存你自的一个指针,需要你先设置
谢谢,就是要这句话,我先试试。 |
|
|
板凳#
发布于:2005-06-14 16:39
是这样的: 你在Create的时候,IrpStack->FileObject->FsContext = NULL; 当然在Read的时候,IrpStack->FileObject->FsContext还是NULL了,和FileName没有关系 实际上就是你可以用FsContext保存你自的一个指针,需要你先设置 |
|
地板#
发布于:2005-06-14 16:32
如果pIrpSp->FileObject->FsContex指向自定义的POPEN_CONTEXT结构指针,那这个值是系统写入的吗?
|
|
|
地下室#
发布于:2005-06-14 16:18
是这样的:
我用CreateFile获得了设备句柄,这时是有效句柄,我判断过,并且驱动中相应例程也调用了,在ReadFile时 提示The handle is invalid. 我是这样处理的: pOpenContext = (POPEN_CONTEXT)pIrpSp->FileObject->FsContext; if (pOpenContext == NULL) { NtStatus = STATUS_INVALID_HANDLE; break; } 所以我想可能是这里直接跳出了,又因为在DispatchCreate中不能显示IrpStack->FileObject->FileName.Buffer,以为是这个结构使用错了,我是看见ndisuio例子中这样写的。 [编辑 - 6/14/05 by xwtwho] |
|
|
5楼#
发布于:2005-06-14 16:06
IRP_MJ_CREATE的例程: FileObject->FileName.Buffer可以为空,在这种情况下就为空。 和FsContext有什么关系呢? 没有明白你想问什么 |
|