内核-从IRP说起

【推荐阅读】

浅谈linux 内核网络 sk_buff 之克隆与复制

深入linux内核架构--进程&线程

了解Docker 依赖的linux内核技术

IRP(I/O request package)是操作系统内核的一个数据结构。应用程序与驱动程序进行通信需要通过IRP包。当上层应用程序需要与驱动通信的时候,通过调用一定的 API函数,IO管理器针对不同的API产生不同的IRP,IRP被传递到驱动内部不同的分发函数进行处理。对于不会处理的IRP包需要提供一个默认的分 发函数来处理。

现在我们来看一下IRP的结构:

typedef struct _IRP {

   …

  PMDL  MdlAddress;

  ULONG  Flags;

  union {

struct _IRP  *MasterIrp;

…

    PVOID  SystemBuffer;

  } AssociatedIrp;

  LIST_ENTRY  ThreadListEntry;  //用来将 IRP挂入某个线程的 IrpList队列  

  IO_STATUS_BLOCK  IoStatus;  //用来返回操作的完成状况   

  KPROCESSOR_MODE  RequestorMode;  

  BOOLEAN  PendingReturned;  

  CHAR  StackCount;  

  CHAR  CurrentLocation;  

  …

  BOOLEAN  Cancel;

  KIRQL  CancelIrql;

  …

  PDRIVER_CANCEL  CancelRoutine;

  PVOID UserBuffer;

  union {

    struct {

    …

    union {

      KDEVICE_QUEUE_ENTRY DeviceQueueEntry;

      struct {

        PVOID  DriverContext[4];

      };

    };

    …

    PETHREAD  Thread;

    …

LIST_ENTRY  ListEntry;

…

    } Overlay;

    …

  } Tail;

} IRP, *PIRP;

MSDN 说IRP是一个半透明结构,开发者只能访问其中透明的部分。

其实数据结构 IRP 只是"I/O 请

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值