hammly
驱动牛犊
驱动牛犊
  • 注册日期2007-04-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分150分
  • 威望16点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
阅读:1350回复:3

请帮下忙,看下这段代码

楼主#
更多 发布于:2007-05-06 15:00
  DDK上的MUX例子,虚拟网卡
请哪位大大能帮忙注释下这段代码,非常感激!

NTSTATUS
PtDispatch(
    IN PDEVICE_OBJECT           DeviceObject,
    IN PIRP                     Irp
    )
/*++
程序IRP发给这个设备
Routine Description:

    Process IRPs sent to this device.

Arguments:

    DeviceObject - pointer to a device object
    Irp      - pointer to an I/O Request Packet

Return Value:

    NTSTATUS - STATUS_SUCCESS always - change this when adding
    real code to handle ioctls.

--*/
{
    PIO_STACK_LOCATION  irpStack;
    NTSTATUS            status = STATUS_SUCCESS;
    ULONG                   inlen, outlen;
    PVOID                   buffer;
    NDIS_STRING                        KeyName;
    WCHAR                           Device[100];

    irpStack = IoGetCurrentIrpStackLocation(Irp);
    DBGPRINT(MUX_LOUD, ("==>PtDispatch %d\n", irpStack->MajorFunction));
      
    switch (irpStack->MajorFunction)
    {
        case IRP_MJ_CREATE:
            break;
        case IRP_MJ_CLOSE:
            break;        
        case IRP_MJ_DEVICE_CONTROL: {

          buffer = Irp->AssociatedIrp.SystemBuffer;  
          inlen = irpStack->Parameters.DeviceIoControl.InputBufferLength;
          
          switch (irpStack->Parameters.DeviceIoControl.IoControlCode) {
            //
            // Add code here to handle ioctl commands.
            //
          }
          break;  
        }
        default:
            break;
    }
    Irp->IoStatus.Information = 0;
    Irp->IoStatus.Status = status;
    IoCompleteRequest(Irp, IO_NO_INCREMENT);

    DBGPRINT(MUX_LOUD, ("<== Pt Dispatch\n"));

    return status;

}
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
沙发#
发布于:2007-05-06 21:11
这段代码什么都没有作,除了直接返回成功操作。可以简单写为:

NTSTATUS
PtDispatch(
  IN PDEVICE_OBJECT       DeviceObject,
  IN PIRP               Irp
  )
{
  NTSTATUS         status = STATUS_SUCCESS;
  PIO_STACK_LOCATION irpStack = IoGetCurrentIrpStackLocation(Irp);

  DBGPRINT(MUX_LOUD, ("==>PtDispatch %d\n", irpStack->MajorFunction));
    
  Irp->IoStatus.Information = 0;
  Irp->IoStatus.Status = status;
  IoCompleteRequest(Irp, IO_NO_INCREMENT);

  DBGPRINT(MUX_LOUD, ("<== Pt Dispatch\n"));

  return status;

}
走走看看开源好 Solaris vs Linux
hammly
驱动牛犊
驱动牛犊
  • 注册日期2007-04-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分150分
  • 威望16点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-05-07 16:39
谢谢斑竹
ProPlayboy
驱动大牛
驱动大牛
  • 注册日期2005-07-07
  • 最后登录2022-02-15
  • 粉丝0
  • 关注0
  • 积分1016分
  • 威望811点
  • 贡献值0点
  • 好评度719点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2007-05-15 01:57
引用第0楼hammly于2007-05-06 15:00发表的 请帮下忙,看下这段代码 :
  DDK上的MUX例子,虚拟网卡
请哪位大大能帮忙注释下这段代码,非常感激!

NTSTATUS
PtDispatch(
.......

...过来晃一下...真的是除了完成IRP以外,什么都没有做...外加输出而已!!!
人不靓仔心灵美,版头不正红花仔!
游客

返回顶部