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

疑问--一个USB驱动源代码

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

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;

谢谢各位指教

最新喜欢:

r2109twr2109t...
HonestTreee
wavelight
驱动老牛
驱动老牛
  • 注册日期2002-08-15
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-20 08:49

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

    pipeHandle =  fileObject->FsContext;

谢谢各位指教
 

1,deviceExtension->AcceptingRequests 应该在AddDevice 里设定值
2,IoGetCurrentIrpStackLocation  例程的调用就会构造IRP填写FileObject 域
<table style="filter: glow(color=red, strength=6)"><br><font color=white><b>我cool 故我在!<br></b></font></table> [img]http://www.driverdevelop.com/forum/upload/wavelight/2002-12-13_1.gif[/img]<table style="filter: glow(color=red, strength=6)"><br><font color=white><b>我在 故我cool!<br></b></font></table>
ysy
ysy
驱动中牛
驱动中牛
  • 注册日期2002-02-18
  • 最后登录2008-08-25
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望29点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-20 13:53
可参照DDK里usb bulk传输的Sample,那里面就是这么做的。你问的几个问题里面都有。
cquwyb
驱动牛犊
驱动牛犊
  • 注册日期2002-05-10
  • 最后登录2010-10-23
  • 粉丝0
  • 关注0
  • 积分160分
  • 威望16点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-11-20 21:05
 :(
irpStack = IoGetCurrentIrpStackLocation (Irp);
fileObject = irpStack->FileObject;
pipeHandle = fileObject->FsContext;
 

这是源代码噢,还是看不懂上面的句子何来!
HonestTreee
ysy
ysy
驱动中牛
驱动中牛
  • 注册日期2002-02-18
  • 最后登录2008-08-25
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望29点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-11-21 09:21
好像是上层应用程序调用CreateFile是由系统创建的,你试试。另外这问题在那本机械工业那本书上好像有介绍。我也记不清了,你自己查查。
acidfish
驱动小牛
驱动小牛
  • 注册日期2002-05-20
  • 最后登录2009-11-11
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-02-20 15:16
呵呵,时隔一年半,炒一炒剩饭。看看这个。
http://www.wd-3.com/archive/namespace.htm
cquwyb
驱动牛犊
驱动牛犊
  • 注册日期2002-05-10
  • 最后登录2010-10-23
  • 粉丝0
  • 关注0
  • 积分160分
  • 威望16点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-02-20 16:52
这篇文章不错,谢谢!我也好久没有做window底下的driver了
HonestTreee
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-02-21 12:05
USB driver用DRIVER WORKS生成的框架来干. 方便得离谱. DDK下就麻烦多了.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
游客

返回顶部