Hi All,
I am trying to implement a miniport-intermediate driver. From MSDN documentation it is clear that I need to call NdisMRegisterMiniportDriver twice.
So the two calls to NdisRegisterMiniportDriver are as follows:
NdisZeroMemory(&MChars, sizeof(MChars));
MChars.Header.Type = NDIS_OBJECT_TYPE_MINIPORT_DRIVER_CHARACTERISTICS,
MChars.Header.Size = sizeof(NDIS_MINIPORT_DRIVER_CHARACTERISTICS);
MChars.Header.Revision = NDIS_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_1;
MChars.MajorNdisVersion = ATH_WLAN_NDIS_MAJOR_VERSION;
MChars.MinorNdisVersion = ATH_WLAN_NDIS_MINOR_VERSION;
MChars.CancelOidRequestHandler = Ar6kMpCancelRequest;
MChars.CancelSendHandler = Ar6kMpCancelSendNetBufferLists;
MChars.CheckForHangHandlerEx = Ar6kMpCheckForHang;
MChars.DevicePnPEventNotifyHandler = Ar6kMpDevicePnPEvent;
MChars.HaltHandlerEx = Ar6kMpHalt;
MChars.InitializeHandlerEx = Ar6kMpInitialize;
MChars.OidRequestHandler = Ar6kMpRequest;
MChars.PauseHandler = Ar6kMpPause;
MChars.ResetHandlerEx = Ar6kMpReset;
MChars.RestartHandler = Ar6kMpRestart;
MChars.ReturnNetBufferListsHandler = Ar6kMpReturnNetBufferLists;
MChars.SendNetBufferListsHandler = Ar6kMpSendNetBufferLists;
MChars.SetOptionsHandler = Ar6kMpSetOptions;
MChars.ShutdownHandlerEx = Ar6kMpAdapterShutdown;
MChars.UnloadHandler = DriverUnload;
MChars.MajorDriverVersion = ATH_MAJOR_DRIVER_VERSION;
MChars.MinorDriverVersion = ATH_MINOR_DRIVER_VERSION;
//
// Register the miniport driver with NDIS
//
Status = NdisMRegisterMiniportDriver(
pDriverObject,
RegistryPath,
GlobalDriverContext,
&MChars,
&GlobalDriverHandle
);
if ( Status != NDIS_STATUS_SUCCESS )
{
ATH_DISPLAY_MSG(“AR6K: ERROR - NdisMRegisterMiniport failed to register for STA %d.%d Miniport[Status %d]\r\n”,MChars.MajorNdisVersion,MChars.MinorNdisVersion,Status);
NdisMDeregisterMiniportDriver(GlobalDriverHandle);
}
NdisZeroMemory(&MApChars, sizeof(MApChars));
MApChars.Header.Type = NDIS_OBJECT_TYPE_MINIPORT_DRIVER_CHARACTERISTICS,
MApChars.Header.Size = sizeof(NDIS_MINIPORT_DRIVER_CHARACTERISTICS);
MApChars.Header.Revision = NDIS_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_1;
MApChars.MajorNdisVersion = ATH_WLAN_NDIS_MAJOR_VERSION;
MApChars.MinorNdisVersion = ATH_WLAN_NDIS_MINOR_VERSION;
MApChars.CancelOidRequestHandler = Ar6kMpCancelRequestAP;
MApChars.CancelSendHandler = Ar6kMpCancelSendNetBufferListsAP;
MApChars.CheckForHangHandlerEx = Ar6kMpCheckForHangAP;
MApChars.DevicePnPEventNotifyHandler = Ar6kMpDevicePnPEventAP;
MApChars.HaltHandlerEx = Ar6kMpHaltAP;
MApChars.InitializeHandlerEx = Ar6kMpInitializeAP;
MApChars.OidRequestHandler = Ar6kMpRequestAP;
MApChars.PauseHandler = Ar6kMpPauseAP;
MApChars.ResetHandlerEx = Ar6kMpResetAP;
MApChars.RestartHandler = Ar6kMpRestartAP;
MApChars.ReturnNetBufferListsHandler = Ar6kMpReturnNetBufferListsAP;
MApChars.SendNetBufferListsHandler = Ar6kMpSendNetBufferListsAP;
MApChars.SetOptionsHandler = Ar6kMpSetOptionsAP;
MApChars.ShutdownHandlerEx = Ar6kMpAdapterShutdownAP;
MApChars.UnloadHandler = DriverUnloadAP;
MApChars.MajorDriverVersion = ATH_MAJOR_DRIVER_VERSION;
MApChars.MinorDriverVersion = ATH_MINOR_DRIVER_VERSION;
MApChars.Flags = NDIS_INTERMEDIATE_DRIVER;
Status = NdisMRegisterMiniportDriver(
pDriverObject,
RegistryPath,
GlobalDriverContextAP,
&MApChars,
&GlobalDriverHandleAP
);
The first call succeeds. The second call fails with NDIS_STATUS_RESOURCES.
Is there anything else apart from the above calls one needs to do for the API call to succeed?.
Open to any suggestions/responses.
Regards,
Balaji.