NdisIMRegisterLayeredMiniport-Funktion (ndis.h)

Hinweis NDIS 5. x ist veraltet und wird durch NDIS 6 ersetzt. x. Informationen zur Entwicklung neuer NDIS-Treiber finden Sie unter Netzwerktreiber ab Windows Vista. Informationen zum Portieren von NDIS 5. x Treiber für NDIS 6. x, siehe Portieren von NDIS 5.x-Treibern zu NDIS 6.0.

NdisIMRegisterLayeredMiniport registriert die MiniportXxx-Einstiegspunkte und den Namen eines Zwischentreibers bei der NDIS-Bibliothek, wenn der Treiber initialisiert.

Syntax

NDIS_STATUS NdisIMRegisterLayeredMiniport(
  [in]  NDIS_HANDLE                    NdisWrapperHandle,
  [in]  PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
  [in]  UINT                           CharacteristicsLength,
  [out] PNDIS_HANDLE                   DriverHandle
);

Parameter

[in] NdisWrapperHandle

Gibt das von NdisMInitializeWrapper zurückgegebene Handle an.

[in] MiniportCharacteristics

Zeiger auf eine NDIS XX_MINIPORT_CHARACTERISTICS struktur, die vom Aufrufer eingerichtet wurde. Die Struktur bei MiniportCharacteristics ist wie folgt definiert:

        typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
            UCHAR MajorNdisVersion;
            UCHAR MinorNdisVersion;
            UINT Reserved;
            W_CHECK_FOR_HANG_HANDLER CheckForHangHandler;
            W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler;
            W_ENABLE_INTERRUPT_HANDLER  EnableInterruptHandler;
            W_HALT_HANDLER HaltHandler;
            W_HANDLE_INTERRUPT_HANDLER  HandleInterruptHandler;
            W_INITIALIZE_HANDLER InitializeHandler;
            W_ISR_HANDLER ISRHandler;
            W_QUERY_INFORMATION_HANDLER QueryInformationHandler;
            W_RECONFIGURE_HANDLER ReconfigureHandler;
            W_RESET_HANDLER ResetHandler;
            W_SEND_HANDLER SendHandler; 
            W_SET_INFORMATION_HANDLER SetInformationHandler;
            W_TRANSFER_DATA_HANDLER TransferDataHandler;
        //
        // Version used is V4.0 or V5.0
        // with following members
        //
            W_RETURN_PACKET_HANDLER ReturnPacketHandler;
            W_SEND_PACKETS_HANDLER SendPacketsHandler;
            W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
        //
        // Version used is V5.0 with the following members
        //
            W_CO_CREATE_VC_HANDLER CoCreateVcHandler;
            W_CO_DELETE_VC_HANDLER CoDeleteVcHandler;
            W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler;
            W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler;
            W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler;
            W_CO_REQUEST_HANDLER CoRequestHandler;
        //
        // Version used is V5.1 with the following members
        //
            W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler;
            W_MINIPORT_PNPEVENTNOTIFY_HANDLER PnPEventNotifyHandler;
            W_MINIPORT_SHUTDOWN_HANDLER AdapterShutdownHandler;
        } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;

Ein NDIS-Zwischentreiber sollte diese Struktur mit Nullen initialisieren, bevor eines der folgenden Member eingerichtet wird:

  • MajorNdisVersion
    Gibt die Hauptversion der NDIS-Bibliothek an, die der Treiber verwendet. Der aktuelle Wert ist 0x05, obwohl die NDIS-Bibliothek weiterhin vorhandene Miniporttreiber unterstützt, die für NDIS 4.0 entwickelt wurden.

  • MinorNdisVersion
    Gibt die Nebenversion der NDIS-Bibliothek an, die der Treiber verwendet. Der aktuelle Wert ist 0x00, obwohl NDIS weiterhin vorhandene Treiber unterstützt.

  • Reserved
    Dieses Element ist für die Systemverwendung reserviert.

  • CheckForHangHandler
    Gibt den Einstiegspunkt der MiniportCheckForHang-Funktion des Aufrufers (falls vorhanden) oder NULL an.

  • DisableInterruptHandler
    Gibt NULL an.

  • EnableInterruptHandler
    Gibt NULL an.

  • HaltHandler
    Gibt den Einstiegspunkt der MiniportHalt-Funktion des Aufrufers an.

  • HandleInterruptHandler
    Gibt NULL an.

  • InitializeHandler
    Gibt den Einstiegspunkt der MiniportInitialize-Funktion des Aufrufers an.

  • ISRHandler
    Gibt NULL an.

  • QueryInformationHandler
    Gibt den Einstiegspunkt der MiniportQueryInformation-Funktion des Aufrufers an.

  • ReconfigureHandler
    Gibt NULL an.

  • ResetHandler
    Gibt den Einstiegspunkt der MiniportReset-Funktion des Aufrufers an.

  • SendHandler
    Gibt den Einstiegspunkt der MiniportSend-Funktion des Aufrufers, der MiniportWanSend-Funktion oder null an, wenn der Aufrufer eine MiniportSendPackets-Funktion bereitstellt.

    Wenn der Treiber Multipacket-Senden oder medienspezifische Informationen unterstützt, legt er stattdessen das SendPacketsHandler-Element fest und legt dieses Element auf NULL fest.

  • SetInformationHandler Gibt den Einstiegspunkt der MiniportSetInformation-Funktion des Aufrufers an.

  • TransferDataHandler
    Gibt den Einstiegspunkt der MiniportTransferData-Funktion des Aufrufers an, falls vorhanden, oder NULL. Diese Miniporttreiberfunktion ist erforderlich, es sei denn, der Aufrufer ist der Treiber einer WAN-NIC oder der Aufrufer unterstützt Multipacket empfängt und stellt daher den Einstiegspunkt seiner MiniportReturnPacket-Funktion unter ReturnPacketHandler bereit.

  • ReturnPacketHandler
    Gibt den Einstiegspunkt der MiniportReturnPacket-Funktion des Aufrufers an, falls vorhanden, oder NULL.

  • SendPacketsHandler
    Gibt den Einstiegspunkt der MiniportSendPackets-Funktion des Aufrufers an, falls vorhanden, oder NULL.

  • AllocateCompleteHandler
    Gibt NULL an.

  • CoCreateVcHandler
    Gibt NULL an.

  • CoDeleteVcHandler
    Gibt NULL an.

  • CoActivateVcHandler
    Gibt NULL an.

  • CoDeactivateVcHandler
    Gibt NULL an.

  • CoSendPacketsHandler
    Gibt NULL an.

  • CoRequestHandler
    Gibt NULL an.

  • CancelSendPacketsHandler
    Gibt den Einstiegspunkt der MiniportCancelSendPackets-Funktion des Aufrufers an, falls vorhanden, oder NULL. Zwischentreiber, die Pakete länger als eine Sekunde in die Warteschlange senden, sollten eine MiniportCancelSendPackets-Funktion registrieren.

  • PnPEventNotifyHandler
    Gibt den Einstiegspunkt der MiniportPnPEventNotify-Funktion des Aufrufers an. NDIS 5.1-Miniporttreiber müssen eine MiniportPnPEventNotify-Funktion registrieren. Miniporttreiber "", die über eine WDM-Unterkante verfügen, sollten eine MiniportPnPEventNotify-Funktion registrieren.

  • AdapterShutdownHandler
    Gibt den Einstiegspunkt der MiniportShutdown-Funktion des Aufrufers an, falls vorhanden, oder NULL. NDIS 5.1-Zwischentreiber müssen eine MiniportShutdown-Funktion registrieren. NDIS 5.1-Zwischentreiber sollten eine MiniportShutdown-Funktion registrieren, indem sie NdisIMRegisterLayeredMiniport --not by calling NdisMRegisterAdapterShutdownHandler.

[in] CharacteristicsLength

Gibt die Länge des vom Aufrufer bereitgestellten Merkmalspuffers in Bytes an. Abhängig vom Wert von MajorNdisVersion muss dieser Parameter entweder sizeof(NDIS50_MINIPORT_CHARACTERISTICS) sein, wenn der Treiber eine NDIS50_MINIPORT_CHARACTERISTICS-Struktur bereitstellt, oder sizeof(NDIS40_MINIPORT_CHARACTERISTICS), wenn der Treiber eine NDIS40_MINIPORT_CHARACTERISTICS-Struktur bereitstellt.

Wenn der Treiber die Buildanweisung NDIS50_MINIPORT (oder ggf. NDIS40_MINIPORT) in seine Quellen einschließt oder wenn der Treiberschreiber die -NDIS50_MINIPORT (oder .) verwendet. 40..) Compilerschalter, dieser Parameter wird festgelegt, wenn der Treiber erstellt wird.

[out] DriverHandle

Zeiger auf eine Variable, in der NdisIMRegisterLayeredMiniport bei erfolgreichem Aufruf ein Handle zurückgibt, das der Aufrufer speichern soll. Der Aufrufer muss dieses Handle anschließend an NdisIMInitializeDeviceInstance übergeben, normalerweise über seine ProtocolBindAdapter-Funktion .

Rückgabewert

NdisIMRegisterLayeredMiniport gibt NDIS_STATUS_SUCCESS zurück, wenn der Aufrufer als Miniporttreiber registriert wurde oder einer der folgenden status Werte zurückgegeben werden kann:

Rückgabecode Beschreibung
NDIS_STATUS_BAD_CHARACTERISTICS Die CharacteristicsLength ist zu klein für die MajorNdisVersion , die im Puffer bei MiniportCharacteristics angegeben ist.
NDIS_STATUS_BAD_VERSION Die in der Merkmalsstruktur angegebene MajorNdisVersion oder MajorNdisVersion ist ungültig.
NDIS_STATUS_RESOURCES Ein Mangel an Ressourcen, möglicherweise Arbeitsspeicher, verhinderte, dass die NDIS-Bibliothek den Aufrufer als Miniporttreiber registriert.
NDIS_STATUS_FAILURE Dies ist ein Standardfehler status, der zurückgegeben wird, wenn keiner der vorherigen Fehler dazu geführt hat, dass die Registrierung fehlschlägt. Wenn die NDIS-Bibliothek beispielsweise das Image des Treibers nicht laden und im Systemspeicher sperren kann, gibt sie diesen Fehler zurück.

Hinweise

Jeder NDIS-Zwischentreiber, der sowohl MiniportXxx - als auch ProtocolXxx-Funktionen exportiert, richtet eine Merkmalsstruktur ein und ruft NdisIMRegisterLayeredMiniport von seiner DriverEntry-Funktion auf, nachdem DriverEntryNdisMInitializeWrapper aufgerufen hat. Diese Struktur wird in der NdisIMRegisterLayeredMiniport-Anforderung in den internen Speicher der NDIS-Bibliothek kopiert. Daher kann ein solcher Treiber nach der Registrierung seine Handlerfunktionen nicht mehr ändern.

Nachdem ein solcher NDIS-Zwischentreiber NdisIMRegisterLayeredMiniport erfolgreich aufgerufen hat, muss er NdisRegisterProtocol aufrufen, um seine ProtocolXxx-Funktionen bei der NDIS-Bibliothek zu registrieren. Ein solcher Treiber verfügt in der Regel über die Funktionen ProtocolBindAdapter und ProtocolUnbindAdapter . Die ProtocolBindAdapter-Funktion wird als Nächstes aufgerufen, wenn der zugrunde liegende NIC-Treiber erfolgreich initialisiert wurde. ProtocolBindAdapter kann dann mit NdisOpenAdapter eine Bindung an diesen NIC-Treiber einrichten.

Ein NDIS-Zwischentreiber sollte über eine MiniportSendPackets-Funktion verfügen, wenn ein zugrunde liegender NIC-Treiber Multipacketsendungen unterstützt oder medienspezifische Informationen wie Paketprioritäten nutzt, die in einem Paketarray aus einem Protokoll auf höherer Ebene gesendet werden. Ein NDIS-Zwischentreiber sollte über eine MiniportReturnPacket-Funktion verfügen, wenn ein zugrunde liegender NIC-Treiber Multipacket-Empfangsanzeigen unterstützt oder Paketarrays mit medienspezifischen Informationen angibt. Die NDIS-Bibliothek verarbeitet Paketarrays, die zwischen einem zugrunde liegenden NIC-Treiber und einem Protokoll auf höherer Ebene übertragen werden und nur Einzelpaketübertragungen im Namen eines solchen Zwischentreibers unterstützen.

Anforderungen

Anforderung Wert
Header ndis.h (einschließlich Ndis.h)
Bibliothek Ndis.lib
IRQL PASSIVE_LEVEL

Weitere Informationen