注册 登录
编程论坛 操作系统内核开发

[求助]IO栈单元的问题~~

gpp6025 发布于 2010-08-19 08:25, 1429 次点击
问题一:'PIO_STACK_LOCATION' : illegal use of this type as an expression(非法使用此类型表达式吧?可是我不清楚我下面的代码错编译错在哪~~)
NTSTATUS pnpdispatch(PDEVICE_OBJECT devobj,PIRP irp)
{
    Ptyf_dev_ext devext;
    NTSTATUS status=STATUS_SUCCESS;
    devext=(Ptyf_dev_ext)devobj->DeviceExtension;
    PIO_STACK_LOCATION irpstack;//主要问题是在这,问题一:
    irpstack=IoGetCurrentIrpStackLocation(irp);
    switch(irpstack->MinorFunction)
    {
        case IRP_MN_REMOVE_DEVICE:
        {
            IoSkipCurrentIrpStackLocation(irp);
            IoCallDriver(devext->attachedo,irp);
            KdPrint(("have device remove"));
            IoDetachDevice(devext->attachedo);
            IoDeleteDevice(devext->attachedo);
            break;
        }
        default:
        {
            IoSkipCurrentIrpStackLocation(irp);
            return IoCallDriver(devext->attachedo,irp);
        }
    }
    return status;
}
还有个问题:在DriverEntry主函数中,里面的一个IRP_MJ_READ功能码居然说未声明~~~还有PDRIVER_OBJECT类型 的变量在指向DriverUnLoad说没有这个成员~~??

[ 本帖最后由 gpp6025 于 2010-8-19 08:30 编辑 ]
5 回复
#2
chengstone2010-08-19 10:23
是头文件的问题么? 哪个头文件没有加进去??
#3
gpp60252010-08-19 10:28
回复 2楼 chengstone
我还是初学,只加了个ntddk.h这个头~~~
#4
chengstone2010-08-19 10:57


[ 本帖最后由 chengstone 于 2010-8-19 10:58 编辑 ]
#5
gpp60252010-08-19 12:18
回复 4楼 chengstone
那一般都需要包含哪些头文件啊???
#6
你们都要疼我哦2010-12-25 18:25
前面代码没看出什么问题,

IoDetachDevice(devext->attachedo);
这个解除绑定以后,需要删除的是你自己生成的过滤设备,而不是devext->attachedo。
改成 IoDeleteDevice(DeviceObject);

其他没看到你的全代码。


1