wnl0008
驱动牛犊
驱动牛犊
  • 注册日期2007-06-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分2分
  • 威望33点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
阅读:1075回复:1

对DriverNetworks中例子有点疑问

楼主#
更多 发布于:2007-08-02 16:32
请各位看看以下的代码有问题吗?
NDIS_STATUS MyAdapter::Initialize
  (IN OUT KNdisMedium& Medium, IN KNdisConfig& Config)
{
// 1) Fill in the dispatch table
static PDRIVER_DISPATCH MajorFunctions[IRP_MJ_MAXIMUM_FUNCTION+1];

NdisZeroMemory(MajorFunctions, sizeof(MajorFunctions));
MajorFunctions[IRP_MJ_CREATE] =
MajorFunctions[IRP_MJ_CLOSE] =
MajorFunctions[IRP_MJ_CLEANUP] =
MajorFunctions[IRP_MJ_READ] =
MajorFunctions[IRP_MJ_WRITE] =
MajorFunctions[IRP_MJ_DEVICE_CONTROL] = IoDispatch;

// 2) Register the device
NDIS_STATUS Status = NdisMRegisterDevice(
  *KNdisMiniDriver::DriverInstance(),
  KNDIS_STRING_CONST("\\Device\\MyNdisDevice"),
  KNDIS_STRING_CONST("\\DosDevices\\MyNdisDevice"),
  MajorFunctions,
  &m_pDeviceObject,
  &m_DeviceHandle);

. . .
return NDIS_STATUS_SUCCESS;

}

NTSTATUS MyAdapter::IoDispatch (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{

NTSTATUS Status = STATUS_SUCCESS;
KIrp I(Irp);

switch (I.MajorFunction()) {
  case IRP_MJ_CREATE: // TODO
  case IRP_MJ_CLOSE: // TODO
  case IRP_MJ_CLEANUP: // TODO
  case IRP_MJ_READ: // TODO
  case IRP_MJ_WRITE: // TODO
  case IRP_MJ_DEVICE_CONTROL: // TODO

I.Information() = 0;
break;

default:

Status = STATUS_UNSUCCESSFUL;

};

return I.Complete(Status);

}
这是DriverNetWorks中的一段代码,在Initialize函数中指明了对IRP_MJ_DEVICE_CONTROL:的处理函数IoDispatch,但是在该函数中怎么又能处理IRP_MJ_CREATE等IRP呢?有问题吗?请指教,谢谢!
游客

返回顶部