cquwyb
驱动牛犊
驱动牛犊
  • 注册日期2002-05-10
  • 最后登录2010-10-23
  • 粉丝0
  • 关注0
  • 积分160分
  • 威望16点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
阅读:1208回复:2

疑惑---一个USB驱动例子

楼主#
更多 发布于:2002-11-19 18:12

NTSTATUS
D12_Read(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
{
    NTSTATUS ntStatus = STATUS_SUCCESS;
    PD12_PIPE pipeHandle = NULL;
    PFILE_OBJECT fileObject;
    PIO_STACK_LOCATION irpStack, nextStack;
    PDEVICE_EXTENSION deviceExtension;
    PURB urb;
    PD12_RW_CONTEXT context = NULL;

    D12_KdPrint ((\"D12TEST.SYS: enter D12_Read\\n\"));

    D12_IncrementIoCount(DeviceObject);

    deviceExtension = DeviceObject->DeviceExtension;

    if (deviceExtension->AcceptingRequests == FALSE) {
        ntStatus = STATUS_DELETE_PENDING;
        Irp->IoStatus.Status = ntStatus;
        Irp->IoStatus.Information = 0;

        IoCompleteRequest (Irp,
                           IO_NO_INCREMENT
                          );

        D12_DecrementIoCount(DeviceObject);                          
        return ntStatus;
    }
    
    irpStack = IoGetCurrentIrpStackLocation (Irp);
    fileObject = irpStack->FileObject;

    pipeHandle =  fileObject->FsContext;


    if (!pipeHandle) {
       ntStatus = STATUS_INVALID_HANDLE;
       goto D12_Read_Reject;
    }
???
D12_Read_Reject:

    Irp->IoStatus.Status = ntStatus;
    Irp->IoStatus.Information = 0;

    IoCompleteRequest (Irp,
                       IO_NO_INCREMENT
                       );

D12_Read_Done:

    return ntStatus;
}

诸位,这是我在看的一个例子,黑体字的地方颇感困惑:
1,app调用ReadFile后即产生此irp,那么谁有机会在什么地方修改
deviceExtension->AcceptingRequests == FALSE?
2,谁在什么地方有机会填写IRP stack中的域FileObject.
irpStack = IoGetCurrentIrpStackLocation (Irp);
    fileObject = irpStack->FileObject;

    pipeHandle =  fileObject->FsContext;

谢谢各位指教

最新喜欢:

Jkw_DevJkw_De...
HonestTreee
cquwyb
驱动牛犊
驱动牛犊
  • 注册日期2002-05-10
  • 最后登录2010-10-23
  • 粉丝0
  • 关注0
  • 积分160分
  • 威望16点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-20 21:01
 :(怎么没有回答?
HonestTreee
wfoog
驱动牛犊
驱动牛犊
  • 注册日期2002-11-20
  • 最后登录2003-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-21 10:06
1,app调用ReadFile后即产生此irp,那么谁有机会在什么地方修改
deviceExtension->AcceptingRequests == FALSE?

deviceExtension是和你创建的功能设备对象相联系的。
由于你给的代码不全我也说不清是在那设置的。但是可以
肯定是在某个地方通过PDEVICE_OBJECT的参数形式进行传
递并设置的。

阿弥陀佛!阿弥陀佛!阿弥陀佛!
游客

返回顶部