阅读:1070回复:1
对DriverNetworks中例子有点疑问
请各位看看以下的代码有问题吗?
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呢?有问题吗?请指教,谢谢! |
|
沙发#
发布于: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 |
|