NdisMRegisterIoPortRange, fonction (ndis.h)
NdisMRegisterIoPortRange configure l’accès du pilote aux ports d’E/S de périphérique avec les fonctions NdisRawReadPortXxx et NdisRawWritePortXxx et revendique la plage d’adresses de port d’E/S dans le Registre pour la carte réseau de ce pilote.
Syntaxe
NDIS_STATUS NdisMRegisterIoPortRange(
[out] PVOID *PortOffset,
[in] NDIS_HANDLE MiniportAdapterHandle,
[in] UINT InitialPort,
[in] UINT NumberOfPorts
);
Paramètres
[out] PortOffset
Spécifie une variable fournie par l’appelant dans laquelle cette fonction retourne l’adresse virtuelle de base mappée pour la plage de ports d’E/S relative du bus spécifiée par InitialPort et NumberOfPorts .
[in] MiniportAdapterHandle
Spécifie l’entrée de handle dans MiniportInitializeEx.
[in] InitialPort
Spécifie l’adresse de port de base relative du bus pour une plage de ports à mapper.
[in] NumberOfPorts
Spécifie le nombre de ports dans la plage à mapper.
Valeur retournée
NdisMRegisterIoPortRange peut retourner l’un des éléments suivants :
Code de retour | Description |
---|---|
|
La plage donnée de ports d’E/S a été correctement mappée, de sorte que la valeur dans PortOffset est valide et que la plage mappée a été revendiquée dans le Registre pour la carte réseau. |
|
Une tentative de revendication de la plage de ports d’E/S dans le Registre a échoué, peut-être parce qu’un autre pilote a déjà revendiqué la plage pour son appareil. NdisMRegisterIoPortRange enregistre une erreur si cela se produit. |
|
La plage de ports n’a pas pu être mappée ou NDIS n’a pas pu allouer de ressources à case activée le Registre pour les conflits de ressources matérielles. |
|
Le type de bus ou le numéro de bus est hors limites ou les valeurs InitialPort et NumberOfPorts spécifiées n’étaient pas valides (peut-être pas dans l’espace de port d’E/S de la plateforme actuelle). |
Remarques
Un pilote miniport appelle NdisMRegisterIoPortRange à partir de sa fonction MiniportInitializeEx . MiniportInitializeEx doit appeler NdisMSetMiniportAttributes avant d’appeler NdisMRegisterIoPortRange.
NdisMRegisterIoPortRange mappe une plage d’adresses de périphérique relative au bus que le pilote miniport peut utiliser par la suite pour accéder à une plage de ports d’E/S sur une carte réseau en appelant les fonctions NdisRawXxx . Un appel réussi revendique la plage spécifiée de ports d’E/S dans le Registre pour la carte réseau de l’appelant.
Étant donné que les paramètres passés au NdisRawXxx ont été mappés, ces fonctions s’exécutent beaucoup plus rapidement que le NdisImmediate correspondant. PortXxx. Après un appel réussi à NdisMRegisterIoPortRange, un pilote miniport ne peut appeler aucun des NdisImmediate. Le portXxx fonctionne avec des adresses relatives de bus ou des adresses virtuelles mappées dans une plage de ports d’E/S de ce type.
Si son appel à NdisMRegisterIoPortRange échoue, MiniportInitializeEx doit libérer toutes les ressources déjà allouées pour une carte réseau, puis échouer l’initialisation de cette carte réseau.
Les pilotes des cartes réseau avec des registres d’appareils dans l’espace mémoire hôte appellent NdisMMapIoSpace et, par la suite, les fonctions NdisRead/WriteRegisterXxx pour accéder aux registres de cartes réseau.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Pris en charge pour les pilotes NDIS 6.0 et NDIS 5.1 (voir NdisMRegisterIoPortRange (NDIS 5.1)) dans Windows Vista. Pris en charge pour les pilotes NDIS 5.1 (voir NdisMRegisterIoPortRange (NDIS 5.1)) dans Windows XP. |
Plateforme cible | Universal |
En-tête | ndis.h (inclure Ndis.h) |
Bibliothèque | Ndis.lib |
IRQL | PASSIVE_LEVEL |
Règles de conformité DDI | Irql_Miniport_Driver_Function(ndis), NdisMRegisterIoPortRange(ndis) |