xwtwho
驱动牛犊
驱动牛犊
  • 注册日期2003-12-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分216分
  • 威望23点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
阅读:4266回复:5

问一下PIO_STACK_LOCATION 的结构问题

楼主#
更多 发布于:2005-06-14 15:36
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;)
写程序,玩大话西游(情人谷)
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-06-14 16:06
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;)

FileObject->FileName.Buffer可以为空,在这种情况下就为空。
和FsContext有什么关系呢?
没有明白你想问什么
xwtwho
驱动牛犊
驱动牛犊
  • 注册日期2003-12-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分216分
  • 威望23点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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]
写程序,玩大话西游(情人谷)
xwtwho
驱动牛犊
驱动牛犊
  • 注册日期2003-12-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分216分
  • 威望23点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-06-14 16:32
如果pIrpSp->FileObject->FsContex指向自定义的POPEN_CONTEXT结构指针,那这个值是系统写入的吗?
写程序,玩大话西游(情人谷)
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2005-06-14 16:39
是这样的:
我用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]

你在Create的时候,IrpStack->FileObject->FsContext = NULL;
当然在Read的时候,IrpStack->FileObject->FsContext还是NULL了,和FileName没有关系
实际上就是你可以用FsContext保存你自的一个指针,需要你先设置

xwtwho
驱动牛犊
驱动牛犊
  • 注册日期2003-12-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分216分
  • 威望23点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-06-14 17:48
--实际上就是你可以用FsContext保存你自的一个指针,需要你先设置

谢谢,就是要这句话,我先试试。
写程序,玩大话西游(情人谷)
游客

返回顶部