Funzione NdisIMRegisterLayeredMiniport (ndis.h)

Nota NDIS 5. x è stato deprecato ed è sostituito da NDIS 6. x. Per il nuovo sviluppo di driver NDIS, vedere Driver di rete a partire da Windows Vista. Per informazioni sulla conversione di NDIS 5. driver x a NDIS 6. x, vedere Conversione di driver NDIS 5.x in NDIS 6.0.

NdisIMRegisterLayeredMiniport registra i punti di ingresso MiniportXxx di un driver intermedio e il nome con la libreria NDIS quando il driver inizializza.

Sintassi

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

Parametri

[in] NdisWrapperHandle

Specifica l'handle restituito da NdisMInitializeWrapper.

[in] MiniportCharacteristics

Puntatore a una struttura NDIS XX_MINIPORT_CHARACTERISTICS configurata dal chiamante. La struttura in MiniportCharacteristics è definita come segue:

        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;

Un driver intermedio NDIS deve inizializzare questa struttura con zero prima di configurare uno dei membri seguenti:

  • MajorNdisVersion
    Specifica la versione principale della libreria NDIS che usa il driver. Il valore corrente è 0x05, anche se la libreria NDIS continua a supportare i driver miniport esistenti sviluppati per NDIS 4.0.

  • MinorNdisVersion
    Specifica la versione secondaria della libreria NDIS che usa il driver. Il valore corrente è 0x00, anche se NDIS continua a supportare i driver esistenti.

  • Reserved
    Questo membro è riservato per l'uso del sistema.

  • CheckForHangHandler
    Specifica il punto di ingresso della funzione MiniportCheckForHang del chiamante, se presente o NULL.

  • DisableInterruptHandler
    Specifica NULL.

  • EnableInterruptHandler
    Specifica NULL.

  • HaltHandler
    Specifica il punto di ingresso della funzione MiniportHalt del chiamante.

  • HandleInterruptHandler
    Specifica NULL.

  • InitializeHandler
    Specifica il punto di ingresso della funzione MiniportInitialize del chiamante.

  • ISRHandler
    Specifica NULL.

  • QueryInformationHandler
    Specifica il punto di ingresso della funzione MiniportQueryInformation del chiamante.

  • Riconfigurazione del gestore
    Specifica NULL.

  • ResetHandler
    Specifica il punto di ingresso della funzione MiniportReset del chiamante.

  • SendHandler
    Specifica il punto di ingresso della funzione MiniportSend del chiamante, della funzione MiniportWanSend o NULL se il chiamante fornisce una funzione MiniportSendPackets.

    Se il driver supporta l'invio multipacket o le informazioni specifiche del supporto, imposta invece il membro SendPacketsHandler e imposta questo membro su NULL.

  • SetInformationHandler Specifica il punto di ingresso della funzione MiniportSetInformation del chiamante.

  • TransferDataHandler
    Specifica il punto di ingresso della funzione MiniportTransferData del chiamante, se presente o NULL. Questa funzione del driver miniport è necessaria a meno che il chiamante non sia il driver di una scheda di interfaccia di rete WAN o il chiamante supporti la ricezione multipacket e, pertanto, fornisce il punto di ingresso della funzione MiniportReturnPacket in ReturnPacketHandler.

  • ReturnPacketHandler
    Specifica il punto di ingresso della funzione MiniportReturnPacket del chiamante, se presente o NULL.

  • SendPacketsHandler
    Specifica il punto di ingresso della funzione MiniportSendPackets del chiamante, se presente o NULL.

  • AllocateCompleteHandler
    Specifica NULL.

  • CoCreateVcHandler
    Specifica NULL.

  • CoDeleteVcHandler
    Specifica NULL.

  • CoActivateVcHandler
    Specifica NULL.

  • CoDeactivateVcHandler
    Specifica NULL.

  • CoSendPacketsHandler
    Specifica NULL.

  • CoRequestHandler
    Specifica NULL.

  • CancelSendPacketsHandler
    Specifica il punto di ingresso della funzione MiniportCancelSendPackets del chiamante, se presente o NULL. I driver intermedi che in coda inviano pacchetti per più di un secondo devono registrare una funzione MiniportCancelSendPackets .

  • PnPEventNotifyHandler
    Specifica il punto di ingresso della funzione MiniportPnPEventNotify del chiamante. I driver miniport NDIS 5.1 devono registrare una funzione MiniportPnPEventNotify . I driver Miniport ''con un bordo inferiore WDM devono registrare una funzione MiniportPnPEventNotify .

  • AdapterShutdownHandler
    Specifica il punto di ingresso della funzione MiniportShutdown del chiamante, se presente o NULL. I driver intermedi NDIS 5.1 devono registrare una funzione MiniportShutdown . I driver intermedi NDIS 5.1 devono registrare una funzione MiniportShutdown chiamando NdisIMRegisterLayeredMiniport--not chiamando NdisMRegisterAdapterShutdownHandler.

[in] CharacteristicsLength

Specifica la lunghezza in byte del buffer delle caratteristiche fornite dal chiamante. A seconda del valore di MajorNdisVersion, questo parametro deve essere sizeof(NDIS50_MINIPORT_CHARACTERISTICS) se il driver fornisce una struttura NDIS50_MINIPORT_CHARACTERISTICS o sizeof(NDIS40_MINIPORT_CHARACTERISTICS) se il driver fornisce una struttura NDIS40_MINIPORT_CHARACTERISTICS.

Se il driver include l'istruzione di compilazione NDIS50_MINIPORT (o NDIS40_MINIPORT, come appropriato) nelle relative origini o se il writer del driver usa il file -NDIS50_MINIPORT (o .. L'opzione del compilatore 40..) viene impostata quando viene compilato il driver.

[out] DriverHandle

Puntatore a una variabile in cui NdisIMRegisterLayeredMiniport, se questa chiamata ha esito positivo, restituisce un handle che il chiamante deve salvare. Il chiamante deve successivamente passare questo handle a NdisIMInitializeDeviceInstance, in genere dalla relativa funzione ProtocolBindAdapter .

Valore restituito

NdisIMRegisterLayeredMiniport restituisce NDIS_STATUS_SUCCESS se ha registrato il chiamante come driver miniport oppure può restituire uno dei valori di stato seguenti:

Codice restituito Descrizione
NDIS_STATUS_BAD_CHARACTERISTICS Le CaratteristicheLength sono troppo piccole per MajorNdisVersion specificate nel buffer in MiniportCharacteristics.
NDIS_STATUS_BAD_VERSION La proprietà MajorNdisVersion o MajorNdisVersion specificata nella struttura delle caratteristiche non è valida.
NDIS_STATUS_RESOURCES Una carenza di risorse, possibilmente memoria, impedisce alla libreria NDIS di registrare il chiamante come driver miniport.
NDIS_STATUS_FAILURE Si tratta di uno stato di errore predefinito, restituito quando nessuno degli errori precedenti ha causato l'esito negativo della registrazione. Ad esempio, se la libreria NDIS non può caricare l'immagine del driver e bloccarla nella memoria di sistema, restituisce questo errore.

Commenti

Qualsiasi driver intermedio NDIS che esporta entrambe le funzioni MiniportXxx e ProtocolXxx configura una struttura di caratteristiche e chiama NdisIMRegisterLayeredMiniport dalla funzione DriverEntry dopo che DriverEntry chiama NdisMInitializeWrapper. Questa struttura viene copiata nella richiesta NdisIMRegisterLayeredMiniport alla risorsa di archiviazione interna della libreria NDIS. Pertanto, una volta registrato, tale driver non può modificare le funzioni del gestore.

Dopo che un driver intermedio NDIS ha chiamato correttamente NdisIMRegisterLayeredMiniport , deve chiamare NdisRegisterProtocol per registrare le funzioni ProtocolXxx con la libreria NDIS. Un driver di questo tipo ha in genere entrambe le funzioni ProtocolBindAdapter e ProtocolUnbindAdapter . La funzione ProtocolBindAdapter verrà chiamata successivamente quando il driver della scheda di interfaccia di rete sottostante è stato inizializzato correttamente. ProtocolBindAdapter può quindi stabilire un'associazione a tale driver NIC con NdisOpenAdapter.

Un driver intermedio NDIS deve avere una funzione MiniportSendPackets se un driver della scheda di interfaccia di rete sottostante potrebbe supportare invii multipacket o utilizzare informazioni specifiche del supporto, ad esempio priorità di pacchetto, inviate in una matrice di pacchetti da un protocollo di livello superiore. Un driver intermedio NDIS deve avere una funzione MiniportReturnPacket se un driver NIC sottostante potrebbe supportare la ricezione di indicazioni multipacket o indicare matrici di pacchetti contenenti informazioni specifiche del supporto. La libreria NDIS gestisce le matrici di pacchetti trasferite tra un driver della scheda di interfaccia di rete sottostante e un protocollo di livello superiore che supportano solo trasferimenti a pacchetto singolo per conto di un driver intermedio di questo tipo.

Requisiti

Requisito Valore
Intestazione ndis.h (include Ndis.h)
Libreria Ndis.lib
IRQL PASSIVE_LEVEL

Vedi anche