NDIS小端口驱动实现IOCTL分发

本文介绍了如何在NDIS小端口驱动中实现IOCTL分发,包括创建设备对象、IRP分发函数的实现以及应用程序如何通过CreateFile调用来发送IOCTL。重点在于理解NDIS驱动如何注册并处理IOCTL请求,以及如何在应用程序中与驱动进行通信。
摘要由CSDN通过智能技术生成

关键思路:为驱动创建一个设备对象

usbnwifi 例程中,MPInitialize函数通过NICRegisterDevice函数,注册了NICDispatch函数入口(该函数实现IRP的分发处理),从而为小端口驱动注册了一个IOCTL接口。这一过程根本上是调用了NDIS的NdisRegisterDeviceEx函数,传入了包含分发函数入口的_NDIS_DEVICE_OBJECT_ATTRIBUTES数据结构。

最近在编写 NDIS 小端口驱动程序时,需要利用 IOCTL 对网卡进行配置,但翻遍 NDIS 文档也没有找到 NDIS 的 IOCTL 实现。有幸在 WDK 7600 提供的 usbnwifi 例程中看到了实现思路,看起来基本上也就是 WDM 框架下 IOCTL 的简单封装。现在把思路写下来供思考,不全面的地方,建议直接参考 usbnwifi 例程的实现。

1. 创建设备对象

NDIS框架提供的NdisRegisterDeviceEx函数,可以为 NDIS 小端口驱动创建一个设备对象。函数原型如下:

NDIS_STATUS NdisRegisterDeviceEx(
  _In_  NDIS_HANDLE                    NdisHandle,
  _In_  PNDIS_DEVICE_OBJECT_ATTRIBUTES DeviceObjectAttributes,
  _Out_ PDEVICE_OBJECT                 *pDeviceObject,
  _Out_ PNDIS_HANDLE                   NdisDeviceHandle
);

第一个参数是 NDIS 句柄不提。

第二个参数是 IRP 的关键参数。NDIS_DEVICE_OBJECT_ATTRIBUTES结构定义了设备对象的若干属性。

先创建一个分发表,将分发函数入口点传入:

DispatchTable[IRP_MJ_CREATE] = NICDispatch_Create;
DispatchTable[IRP_MJ_CLEANUP] = NICDispatch_Cleanup;
DispatchTable[IRP_MJ_CLOSE] 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值