Funzione NdisMRegisterIoPortRange (ndis.h)
NdisMRegisterIoPortRange configura l'accesso del driver alle porte di I/O del dispositivo con le funzioni NdisRawReadPortXxx e NdisRawwritePortXxx e richiede l'intervallo di indirizzi di porta di I/O nel Registro di sistema per la scheda di interfaccia di rete del driver.
Sintassi
NDIS_STATUS NdisMRegisterIoPortRange(
[out] PVOID *PortOffset,
[in] NDIS_HANDLE MiniportAdapterHandle,
[in] UINT InitialPort,
[in] UINT NumberOfPorts
);
Parametri
[out] PortOffset
Specifica una variabile fornita dal chiamante in cui questa funzione restituisce l'indirizzo virtuale di base mappato per l'intervallo di porte di I/O relativo al bus specificato da InitialPort e NumberOfPorts .
[in] MiniportAdapterHandle
Specifica l'input dell'handle per MiniportInitializeEx.
[in] InitialPort
Specifica l'indirizzo della porta di base relativa al bus per un intervallo di porte di cui eseguire il mapping.
[in] NumberOfPorts
Specifica il numero di porte nell'intervallo di cui eseguire il mapping.
Valore restituito
NdisMRegisterIoPortRange può restituire uno dei seguenti elementi:
Codice restituito | Descrizione |
---|---|
|
Il mapping dell'intervallo specificato di porte di I/O è stato eseguito correttamente in modo che il valore in PortOffset sia valido e che l'intervallo mappato sia stato richiesto nel Registro di sistema per la scheda di interfaccia di rete. |
|
Un tentativo di attestazione dell'intervallo di porte di I/O nel Registro di sistema non è riuscito, probabilmente perché un altro driver ha già richiesto l'intervallo per il dispositivo. NdisMRegisterIoPortRange registra un errore in questo caso. |
|
Impossibile eseguire il mapping dell'intervallo di porte o NDIS non è stato possibile allocare risorse per verificare la presenza di conflitti tra risorse hardware nel Registro di sistema. |
|
Il tipo di bus o il numero di bus non è compreso nell'intervallo oppure il valore InitialPort e NumberOfPorts specificato non sono validi (probabilmente non all'interno dello spazio della porta di I/O della piattaforma corrente). |
Commenti
Un driver miniport chiama NdisMRegisterIoPortRange dalla funzione MiniportInitializeEx . MiniportInitializeEx deve chiamare NdisMSetMiniportAttributes prima di chiamare NdisMRegisterIoPortRange.
NdisMRegisterIoPortRange esegue il mapping di un intervallo di indirizzi del dispositivo relativo al bus che il driver miniport può usare successivamente per accedere a un intervallo di porte di I/O su una scheda di interfaccia di rete chiamando le funzioni NdisRawXxx . Una chiamata riuscita richiede l'intervallo specificato di porte di I/O nel Registro di sistema per la scheda di interfaccia di rete del chiamante.
Poiché i parametri passati a NdisRawXxx sono stati mappati, queste funzioni vengono eseguite in modo significativamente più veloce rispetto a NdisImmediate corrispondente. PortaXxx. Una volta eseguita una chiamata a NdisMRegisterIoPortRange, un driver miniport non può chiamare alcun elemento NdisImmediate. Funzioni PortaXxx con indirizzi relativi al bus o indirizzi virtuali mappati all'interno di un intervallo di porte di I/O di questo tipo.
Se la chiamata a NdisMRegisterIoPortRange ha esito negativo, MiniportInitializeEx deve rilasciare tutte le risorse già allocate per una scheda di interfaccia di rete e quindi l'inizializzazione non riesce per tale scheda di interfaccia di rete.
I driver delle schede di interfaccia di rete con i registri dei dispositivi nello spazio di memoria host chiamano NdisMMapIoSpace e, successivamente, le funzioni NdisRead/WriteRegisterXxx per accedere ai registri della scheda di interfaccia di rete.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Supportato per i driver NDIS 6.0 e NDIS 5.1 (vedere NdisMRegisterIoPortRange (NDIS 5.1)) in Windows Vista. Supportato per i driver NDIS 5.1 (vedere NdisMRegisterIoPortRange (NDIS 5.1)) in Windows XP. |
Piattaforma di destinazione | Universale |
Intestazione | ndis.h (include Ndis.h) |
Libreria | Ndis.lib |
IRQL | PASSIVE_LEVEL |
Regole di conformità DDI | Irql_Miniport_Driver_Function(ndis), NdisMRegisterIoPortRange(ndis) |