Freigeben über


Deaktivieren eines NDIS-Ports

Um NDIS-Ports zu deaktivieren, sendet ein Miniporttreiber ein Portdeaktivierungsereignis Plug & Play (PnP) an NDIS. Nachdem ein Miniporttreiber einen Port erfolgreich aktiviert hat, muss der Treiber den Port deaktivieren, bevor er den Port freigeben kann. Außerdem kann der Treiber einen Port aus anwendungsspezifischen Gründen deaktivieren. Ein Port kann nach der Deaktivierung reaktiviert werden, aber ein Port kann nicht reaktiviert werden, wenn er freigegeben wird.

Um ein PnP-Ereignis zur Portdeaktivierung zu senden, verwenden Miniporttreiber den PnP-Ereigniscode NetEventPortDeactivation im Aufruf der NdisMNetPnPEvent-Funktion . Um Ports zu deaktivieren, muss der Miniporttreiber die Member der NET_PNP_EVENT_NOTIFICATION-Struktur festlegen, auf die der NetPnPEvent-Parameter von NdisMNetPnPEvent wie folgt verweist:

Portnumber
Der Quellport der Ereignisbenachrichtigung. Legen Sie diesen Member auf 0 fest, da die Portnummern im Pufferelement der Struktur bereitgestellt werden, die vom NetPnPEvent-Member angegeben wird.

NetPnPEvent
Eine NET_PNP_EVENT-Struktur , die das Ereignis zum Deaktivieren des Ports beschreibt. Legen Sie die Member dieser Struktur wie folgt fest:

NetEvent
Ein Ereigniscode, der das Ereignis beschreibt. Legen Sie dieses Element auf NetEventPortDeactivation fest.

Puffer
Ein Zeiger auf ein Array von NDIS_PORT_NUMBER elementen. Das Array enthält die Portnummern aller Ports, die der Miniporttreiber deaktiviert.

BufferLength
Die Anzahl der Bytes, die in Buffer angegeben werden. Legen Sie BufferLength auf die Größe des Arrays fest, auf das Buffer zeigt. Um die Anzahl der Elemente im Array abzurufen, dividieren Sie den Wert in BufferLength durch die Größe des datentyps NDIS_PORT_NUMBER.

Andere Mitglieder
Legen Sie die verbleibenden Member von NET_PNP_EVENT auf NULL fest.

Ein Miniporttreiber kann ein Array mit einer Liste der zu deaktivierenden Ports bereitstellen. Wenn der Standardport eines Miniportadapters jedoch das Ziel eines NetEventPortDeactivation-PnP-Ereignisses ist, muss der Standardport der einzige Port sein, der im Array angegeben wird.

Miniport-Treiber können aktive Ports jederzeit deaktivieren. Bevor ein Miniporttreiber jedoch einen Port deaktiviert, muss er sicherstellen, dass keine ausstehenden status- oder Empfangsanzeigen vorhanden sind, die diesem Port zugeordnet sind. Nachdem der Miniporttreiber das PnP-Ereignis zur Port deaktivierung gesendet hat, darf er keine status initiieren oder Hinweise empfangen, die den deaktivierten Ports zugeordnet sind.

Ein Miniporttreiber kann auch einen Port reaktivieren. Weitere Informationen zum Aktivieren von NDIS-Ports finden Sie unter Aktivieren von NDIS-Ports.

Wenn ein Miniporttreiber Ports deaktiviert, benachrichtigt NDIS alle Protokolltreiber, die mit dem NetEventPortDeactivation-PnP-Ereignis an den Miniporttreiber gebunden sind. Dieses PnP-Ereignis listet die Ports auf, die in den zugeordneten Zustand geändert wurden, und enthält keine Ports, die bereits deaktiviert sind. Weitere Informationen zum Behandeln von Port-Deaktivierungsereignissen in einem Protokolltreiber finden Sie unter Behandeln des PnP-Ereignisses zur Port deaktivierung.

Bevor ein Miniporttreiber einen NDIS-Port zuordnet, muss der Treiber die Funktion NdisMSetMiniportAttributes aufrufen, um die Registrierungsattribute in der NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES-Struktur festzulegen. Miniport-Treiber können die Aktivierung des Standardports steuern, indem sie das attributflag NDIS_MINIPORT_CONTROLS_DEFAULT_PORT festlegen, wenn sie NdisMSetMiniportAttributes aufrufen. Wenn ein Miniporttreiber die Verantwortung für die Aktivierung des Standardports übernimmt und der Miniporttreiber den Standardport aktiviert hat, muss er den Standardport deaktivieren, bevor er von der MiniportHaltEx-Funktion zurückkehrt.

Alle Ports, die durch das Array von NDIS_PORT_NUMBER Elementen angegeben werden, müssen sich im aktivierten Zustand befinden. Ein Miniporttreiber sollte nicht versuchen, einen port zu deaktivieren, der bereits deaktiviert wurde.

Wenn NDIS keine Ports im Portarray deaktiviert, ändert sich keiner der Ports im Portarray den Zustand. Wenn die Deaktivierung fehlschlägt, weil einige der angegebenen Ports nicht vorhanden sind, gibt die NdisMNetPnPEvent-Funktion den NDIS_STATUS_INVALID_PORT Rückgabewert zurück. Wenn die Deaktivierung fehlschlägt, weil sich einige ports nicht im aktivierten Zustand befinden, gibt NdisMNetPnPEvent den NDIS_STATUS_INVALID_PORT_STATE Rückgabewert zurück.

Bis der Aufruf von NdisMNetPnPEvent zurückgegeben wird, wird ein Port nicht deaktiviert, und Miniporttreiber müssen in der Lage sein, OID-Anforderungen zu verarbeiten und Anforderungen zu senden, die diesem Port zugeordnet sind.

Wenn ein Miniporttreiber den Standardport deaktiviert, schließt NDIS alle Bindungen zwischen den überlastenden Protokolltreibern und dem Miniportadapter. Wenn ein Miniporttreiber versucht, den Standardport zu deaktivieren, und der Standardport bereits deaktiviert ist, schlägt NdisMNetPEvent fehl und gibt den NDIS_STATUS_INVALID_PORT_STATE Rückgabewert zurück. Wenn ein Miniporttreiber versucht, den Standardport zu deaktivieren und der Standardport nicht der einzige Port ist, der im Array der NDIS_PORT_NUMBER-Elemente angegeben ist, schlägt NdisMNetPnPEvent fehl und gibt den NDIS_STATUS_INVALID_PORT Rückgabewert zurück. Wenn ein Miniporttreiber das Buffer-Element auf NULL oder bufferLength-Member auf 0 (null) festlegt, schlägt NDIS den NdisMNetPEvent-Aufruf fehl und gibt den NDIS_STATUS_INVALID_PARAMETER Rückgabewert zurück.

Nachdem ein Port erfolgreich deaktiviert wurde, befindet sich der Port im zugeordneten Zustand. Miniport-Treiber können keine empfangenen Daten oder status für den Port im zugeordneten Zustand angeben.