Updating the NDIS 6.0 Protocol Driver characteristics Structure
Many entry points that are found in the NDIS 5.x NDIS_PROTOCOL_CHARACTERISTICS structure are removed from the NDIS 6.0 version of the structure. The NDIS 6.0 version of the structure is named NDIS_PROTOCOL_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 . If the header information is incorrect, calls to NDIS 6.0 functions will fail. The following example illustrates the header initialization:
ProtocolChar.Header.Type = NDIS_OBJECT_TYPE_PROTOCOL_DRIVER_CHARACTERISTICS,
ProtocolChar.Header.Size = sizeof(NDIS_PROTOCOL_DRIVER_CHARACTERISTICS);
ProtocolChar.Header.Revision = NDIS_PROTOCOL_DRIVER_CHARACTERISTICS_REVISION_1;
In the following examples, ProtocolChar is a structure of type NDIS_PROTOCOL_DRIVER_CHARACTERISTICS. Strikeouts indicate the changed NDIS 5.x driver equivalent.
Set the NDIS 6.0 protocol drivers' major and minor version numbers to 6 and 0, respectively.
ProtocolChar.MajorNdisVersion = 5;
ProtocolChar.MajorNdisVersion = 6;
ProtocolChar.MinorNdisVersion = 1;
ProtocolChar.MinorNdisVersion = 0;
NDIS 6.0 protocol drivers must specify a driver version. The driver version is independent of the NDIS major and minor version.
ProtocolChar.MajorDriverVersion = PROTOCOL_MAJOR_DRIVER_VERSION;
ProtocolChar.MinorDriverVersion = PROTOCOL_MINOR_DRIVER_VERSION;
Replace the ProtocolBindAdapter function with the ProtocolBindAdapterEx function.
ProtocolChar.BindAdapterHandler = ProtocolBindAdapter;
ProtocolChar.BindAdapterHandlerEx = ProtocolBindAdapterEx;
Replace the ProtocolUnbindAdapter function with the ProtocolUnbindAdapterEx function.
ProtocolChar.UnbindAdapterHandler = ProtocolUnbindAdapter;
ProtocolChar.UnbindAdapterHandlerEx = ProtocolUnbindAdapterEx;
Replace the ProtocolOpenAdapterComplete function with the ProtocolOpenAdapterCompleteEx function.
ProtocolChar.OpenAdapterCompleteHandler = ProtocolOpenAdapterComplete;
ProtocolChar.OpenAdapterCompleteHandlerEx = ProtocolOpenAdapterCompleteEx;
Replace the ProtocolCloseAdapterComplete function with the ProtocolCloseAdapterCompleteEx function.
ProtocolChar.CloseAdapterCompleteHandler = ProtocolCloseAdapterComplete;
ProtocolChar.CloseAdapterCompleteHandlerEx = ProtocolCloseAdapterCompleteEx;
Replace the ProtocolPnPEvent function with the ProtocolNetPnPEvent function.
ProtocolChar.PnPEventHandler = ProtocolPnPEvent;
ProtocolChar.NetPnPEventHandler = ProtocolNetPnPEvent;
Replace the ProtocolRequestComplete function with the ProtocolOidRequestComplete function:
ProtocolChar.RequestCompleteHandler = ProtocolRequestComplete;
ProtocolChar.OidRequestCompleteHandler = ProtocolOidRequestComplete;
To register optional services, provide an entry point for the ProtocolSetOptions function.
ProtocolChar.SetOptionsHandler = ProtocolSetOptions;
Send and receive functions that use the NET_BUFFER and NET_BUFFER_LIST structures replace functions that use NDIS_PACKET structures:
ProtocolChar.ReceivePacketHandler = ProtocolReceivePacket;
ProtocolChar.SendPacketsCompleteHandler = ProtocolSendPacketsComplete;
ProtocolChar.ReceiveNetBufferListsHandler = ProtocolReceiveNetBufferLists;
ProtocolChar.SendNetBufferListsCompleteHandler = ProtocolSendNetBufferListsComplete;
For more information about the NET_BUFFER and NET_BUFFER_LIST structures, see NET_BUFFER Architecture.
To support system uninstall of a driver, replace the ProtocolUnload function, if any, with the ProtocolUninstall function.
ProtocolChar.UnloadHandler = ProtocolUnload;
ProtocolChar.UninstallHandler = ProtocolUninstall;