wnl0008
驱动牛犊
驱动牛犊
  • 注册日期2007-06-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分2分
  • 威望33点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
阅读:1070回复: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呢?有问题吗?请指教,谢谢!
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2007-08-02 17:36
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;
处理函数都是IoDispatch,而不仅仅是IRP_MJ_DEVICE_CONTROL的处理函数是IoDispatch
游客

返回顶部