Updating the NDIS 6.0 Miniport Driver Characteristics Structure
Many entry points in the NDIS 5.x NDIS_MINIPORT_CHARACTERISTICS structure have been removed from the NDIS 6.0 version of the structure. The NDIS 6.0 version of the structure is named NDIS_MINIPORT_DRIVER_CHARACTERISTICS.
Most NDIS 6.0 data structures contain structure version information in the object header member, which is the first member of the structure. The version information is specified in the NDIS_OBJECT_HEADER structure.
The object header has three members: Type, Size, and Revision. Calls to NDIS 6.0 functions will succeed only if the header information is correct. The following example illustrates correct header initialization:
MPChar.Header.Type = NDIS_OBJECT_TYPE_MINIPORT_DRIVER_CHARACTERISTICS,
MPChar.Header.Size = sizeof(NDIS_MINIPORT_DRIVER_CHARACTERISTICS);
MPChar.Header.Revision = NDIS_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_1;
In the following examples, MPChar is a structure of type NDIS_MINIPORT_DRIVER_CHARACTERISTICS. The lines marked 5.x show NDIS 5.x initialization for comparison with the unmarked lines that illustrate replacement NDIS 6.0 initialization.
5.x MPChar.MajorNdisVersion = 5;
5.x MPChar.MinorNdisVersion = 1;
MPChar.MajorNdisVersion = 6;
MPChar.MinorNdisVersion = 0;
NDIS 6.0 miniport drivers can specify a driver version. The driver version is independent of the NDIS major and minor version shown above.
MPChar.MajorDriverVersion = NIC_MAJOR_DRIVER_VERSION;
MPChar.MinorDriverVersion = NIC_MINOR_DRIVER_VERSION;
Replace the MiniportInitialize function with the MiniportInitializeEx function as follows:
5.x MPChar.InitializeHandler = MiniportInitialize;
MPChar.InitializeHandlerEx = MiniportInitializeEx;
Replace the MiniportHalt function with the MiniportHaltEx function as follows:
5.x MPChar.HaltHandler = MiniportHalt;
MPChar.HaltHandlerEx = MiniportHaltEx;
Replace the MiniportPnPEventNotify function with the MiniportDevicePnPEventNotify function as follows:
5.x MPChar.PnPEventNotifyHandler = MiniportPnPEventNotify;
MPChar.DevicePnPEventNotifyHandler = MiniportDevicePnPEventNotify;
Replace the MiniportShutdown function with the MiniportShutdownEx function as follows:
5.x MPChar.AdapterShutdownHandler = MiniportShutdown;
MPChar.ShutdownHandlerEx = MiniportShutdownEx;
Replace the MiniportCheckForHang function with the MiniportCheckForHangEx function as follows:
5.x MPChar.CheckForHangHandler = MiniportCheckForHang;
MPChar.CheckForHangHandlerEx = MiniportCheckForHangEx;
Replace the MiniportReset function with the MiniportResetEx function as follows:
5.x MPChar.ResetHandler = MiniportReset;
MPChar.ResetHandlerEx = MiniportResetEx;
Remove the MiniportQueryInformation and MiniportSetInformation functions and replace them with the MiniportOidRequest function as follows:
5.x MPChar.QueryInformationHandler = MiniportQueryInformation;
5.x MPChar.SetInformationHandler = MiniportSetInformation;
MPChar.OidRequestHandler = MiniportOidRequest;
To register optional services, provide an entry point for the MiniportSetOptions function as follows:
MPChar.SetOptionsHandler = MiniportSetOptions;
Interrupt functions are not specified in the NDIS 6.0 driver characteristics structure. Remove the interrupt function entry points from the driver characteristics as follows:
5.x MPChar.HandleInterruptHandler = MiniportHandleInterrupt;
5.x MPChar.ISRHandler = MiniportISR;
(Removed in NDIS 6.0)
To register interrupt entry points with NDIS 6.0, call the NdisMRegisterInterruptEx function. The interrupt functions are specified in the NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS structure. For more information about interrupts, see Porting Miniport Driver Interrupt Operations to NDIS 6.0.
Send and receive functions that use the NET_BUFFER and NET_BUFFER_LIST structures replace functions that use NDIS_PACKET structures as follows:
5.x MPChar.ReturnPacketHandler = MiniportReturnPacket;
5.x MPChar.SendPacketsHandler = MiniportSendPackets;
5.x MPChar.CancelSendPacketsHandler = MiniportCancelSendPackets;
MPChar.SendNetBufferListsHandler = MiniportSendNetBufferLists;
MPChar.CancelSendHandler = MiniportCancelSendNetBufferLists;
MPChar.ReturnNetBufferListsHandler = MiniportReturnNetBufferLists;
For more information about the NET_BUFFER and NET_BUFFER_LIST structures, see NET_BUFFER Architecture.
To support unloading, pausing, and restarting the miniport driver, add the MiniportDriverUnload, MiniportPause, and MiniportRestart functions as follows:
MPChar.UnloadHandler = MiniportDriverUnload;
MPChar.PauseHandler = MiniportPause;
MPChar.RestartHandler = MiniportRestart;
For more information about pause and restart operations, see Driver Stack Management.