NdisMRegisterIoPortRange-Funktion (ndis.h)
NdisMRegisterIoPortRange richtet den Treiberzugriff auf Geräte-E/A-Ports mit den Xxx-Funktionen NdisRawReadPort und NdisRawWritePort ein und beansprucht den Bereich der E/A-Portadressen in der Registrierung für die NIC dieses Treibers.
Syntax
NDIS_STATUS NdisMRegisterIoPortRange(
[out] PVOID *PortOffset,
[in] NDIS_HANDLE MiniportAdapterHandle,
[in] UINT InitialPort,
[in] UINT NumberOfPorts
);
Parameter
[out] PortOffset
Gibt eine vom Aufrufer bereitgestellte Variable an, in der diese Funktion die zugeordnete virtuelle Basisadresse für den angegebenen busrelativen E/A-Portbereich zurückgibt, der durch InitialPort und NumberOfPorts angegeben wird.
[in] MiniportAdapterHandle
Gibt die Handleeingabe für MiniportInitializeEx an.
[in] InitialPort
Gibt die busrelative Basisportadresse für einen Portbereich an, der zugeordnet werden soll.
[in] NumberOfPorts
Gibt die Anzahl der Ports im zu zuordnenden Bereich an.
Rückgabewert
NdisMRegisterIoPortRange kann eine der folgenden Aktionen zurückgeben:
Rückgabecode | Beschreibung |
---|---|
|
Der angegebene E/A-Portbereich wurde erfolgreich zugeordnet, sodass der Wert bei PortOffset gültig ist und der zugeordnete Bereich in der Registrierung für die NIC beansprucht wurde. |
|
Ein Versuch, den E/A-Portbereich in der Registrierung zu beanspruchen, ist fehlgeschlagen, möglicherweise weil ein anderer Treiber den Bereich für sein Gerät bereits in Anspruch genommen hat. NdisMRegisterIoPortRange protokolliert in diesem Fall einen Fehler. |
|
Der Portbereich konnte nicht zugeordnet werden, oder NDIS konnte keine Ressourcen zuordnen, um die Registrierung auf Hardwareressourcenkonflikte zu überprüfen. |
|
Entweder liegt der Bustyp oder die Busnummer außerhalb des Bereichs, oder die angegebenen InitialPort - und NumberOfPorts waren ungültig (möglicherweise nicht innerhalb des E/A-Portbereichs der aktuellen Plattform). |
Hinweise
Ein Miniporttreiber ruft NdisMRegisterIoPortRange über seine MiniportInitializeEx-Funktion auf. MiniportInitializeEx muss aufrufen NdisMSetMiniportAttributes vor dem Aufruf von NdisMRegisterIoPortRange.
NdisMRegisterIoPortRange ordnet einen busrelativen Geräteadressbereich zu, den der Miniporttreiber anschließend verwenden kann, um durch Aufrufen der Xxx-Funktionen von NdisRaw auf einen E/A-Portbereich auf einer NIC zuzugreifen. Bei einem erfolgreichen Aufruf wird der angegebene Bereich von E/A-Ports in der Registrierung für die NIC des Aufrufers beansprucht.
Da die an NdisRawXxx übergebenen Parameter zugeordnet wurden, werden diese Funktionen deutlich schneller ausgeführt als die entsprechende NdisImmediate.. PortXxx. Nach einem erfolgreichen Aufruf von NdisMRegisterIoPortRange kann ein Miniporttreiber keines der NdisImmediate aufrufen. Portiert Xxx-Funktionen entweder mit busrelativen Adressen oder zugeordneten virtuellen Adressen innerhalb eines E/A-Portbereichs.
Wenn der Aufruf von NdisMRegisterIoPortRange fehlschlägt, sollte MiniportInitializeEx alle Ressourcen freigeben, die es bereits für eine NIC zugewiesen hat, und dann die Initialisierung für diese NIC fehlschlägt.
Treiber von NICs mit Geräteregistern im Hostspeicherbereich rufen NdisMMapIoSpace und anschließend die Xxx-Funktionen NdisRead/WriteRegister auf, um auf die NIC-Register zuzugreifen.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Unterstützt für NDIS 6.0- und NDIS 5.1-Treiber (siehe NdisMRegisterIoPortRange (NDIS 5.1)) in Windows Vista. Unterstützt für NDIS 5.1-Treiber (siehe NdisMRegisterIoPortRange (NDIS 5.1)) in Windows XP. |
Zielplattform | Universell |
Header | ndis.h (include Ndis.h) |
Bibliothek | Ndis.lib |
IRQL | PASSIVE_LEVEL |
DDI-Complianceregeln | Irql_Miniport_Driver_Function(ndis), NdisMRegisterIoPortRange(ndis) |