Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die ProtocolOidRequestComplete--Funktion schließt die Verarbeitung einer vom Protokolltreiber initiierten OID-Anforderung ab, für die die NdisOidRequest-Funktion NDIS_STATUS_PENDING zurückgegeben wurde.
Syntax
PROTOCOL_OID_REQUEST_COMPLETE ProtocolOidRequestComplete;
VOID ProtocolOidRequestComplete(
[in] NDIS_HANDLE ProtocolBindingContext,
[in] PNDIS_OID_REQUEST OidRequest,
[in] NDIS_STATUS Status
)
{...}
Parameter
[in] ProtocolBindingContext
Ein Handle zu einem vom Protokolltreiber zugewiesenen Kontextbereich, in dem der Protokolltreiber den Laufzeitzustand pro Bindung verwaltet. Der Treiber hat dieses Handle beim Aufrufen der funktion NdisOpenAdapterEx bereitgestellt.
[in] OidRequest
Ein Zeiger auf die vom Protokolltreiber bereitgestellte NDIS_OID_REQUEST Struktur, die zuvor an die NdisOidRequest-funktion übergeben wurde.
[in] Status
Der endgültige Status der Anforderung. Der zugrunde liegende Treiber oder NDIS bestimmt diesen endgültigen Status. Dieser Parameter bestimmt, was ProtocolOidRequestComplete- mit den Informationen unter OidRequest.
Rückgabewert
Nichts
Bemerkungen
ProtocolOidRequestComplete verwendet den Eingabewert Status wie folgt:
-
Wenn Status NDIS_STATUS_SUCCESS ist, die BytesRead oder BytesWritten Member der NDIS_OID_REQUEST-Struktur von NDIS oder dem zugrunde liegenden Treiber festgelegt wurde, um anzugeben, wie viel vom Protokolltreiber bereitgestellte Informationen vom Puffer bei InformationBuffer in einem Satzvorgang an die NIC übertragen wurden oder wie viele Informationen bei InformationBuffer- als Reaktion auf einen Abfragevorgang zurückgegeben wurden.
Wenn der Protokolltreiber eine Abfrage erstellt hat, kann ProtocolOidRequestComplete- die bei InformationBu ffer zurückgegebenen Daten in irgendeiner Weise verwenden, die vom Protokolltreiber abhängig vom Wert des Oid Members bestimmt werden.
Beispiel: Wenn der Protokolltreiber ursprünglich einen OID_GEN_MAXIMUM_SEND_PACKETS Abfrage kann ProtocolOidRequestComplete- Zustandsvariablen im ProtocolBindingContext Bereich einrichten, um die Anzahl der ausstehenden Sendedaten zu drosseln, die der Treiber für nachfolgende Aufrufe an die NdisSendNetBufferLIsts Funktion eingerichtet.
-
Wenn Status- NDIS_STATUS_INVALID_LENGTH oder NDIS_STATUS_BUFFER_TOO_SHORT ist, gibt das BytesNeededed- Element den OID-spezifischen Wert des InformationBufferLength Members an, das zum Ausführen des angeforderten Vorgangs erforderlich ist.
Unter diesen Umständen kann ProtocolOidRequestComplete- ausreichend Pufferplatz für die Anforderung zuweisen, eine weitere NDIS_OID_REQUEST Struktur mit der erforderlichen InformationBufferLength- und demselben Oid-einrichten und den Aufruf an die NdisOidRequest-Funktion wiederholen.
ProtocolOidRequestComplete- können Anforderungen für bestimmte andere NDIS_STATUS_ XXX--Argumente erneut versuchen, wie in der Referenz für die NdisOidRequest--Funktion beschrieben.
- Wenn Status- ein NDIS_STATUS_ XXX--Wert ist, der ein nicht behebbarer Fehler ist, sollte ProtocolOidRequestComplete- den für die NDIS_OID_REQUEST Struktur zugewiesenen Speicher freigeben und bestimmen, ob der Treiber die Bindung schließen soll, oder seine bindungsspezifischen Statusinformationen anpassen, um fortgesetzte Netzwerk-E/A-Vorgänge für die Bindung zu verarbeiten.
Für bindungsspezifische Abfragen ruft NDIS die ProtocolOidRequestComplete-Funktion selbst auf. Da die NDIS-Bibliothek Bindungen für alle Miniporttreiber verwaltet, kann NDIS bindungsspezifische Informationen nur zu zugrunde liegenden Treibern zurückgeben, die ihren mittleren Typ als eine melden, für die das System eine Filterbibliothek bereitstellt. NDIS gibt NDIS_STATUS_NOT_SUPPORTED für vom Protokolltreiber initiierte bindungsspezifische Abfragen an andere Miniporttreiber zurück.
Weitere Informationen zu systemdefinierte OIDs finden Sie unter NDIS OIDs.
ProtocolOidRequestComplete- kann aufgerufen werden, bevor der Protokolltreiber Zeit hatte, den Statuscode zu prüfen, der NdisOidRequest bei Statuszurückgibt.
NDIS ruft ProtocolOidRequestComplete- bei IRQL-<= DISPATCH_LEVEL auf.
beispiele für
Um eine ProtocolOidRequestComplete--Funktion zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der Funktion identifiziert, die Sie definieren. Windows stellt eine Reihe von Funktionstypen für Treiber bereit. Durch das Deklarieren einer Funktion mithilfe der Funktionstypen können Codeanalyse für Treiber, statische Treiberüberprüfung (SDV) und andere Überprüfungstools Fehler finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.Um beispielsweise eine ProtocolOidRequestComplete--Funktion zu definieren, die den Namen "MyOidRequestComplete" hat, verwenden Sie den PROTOCOL_OID_REQUEST_COMPLETE Typ, wie in diesem Codebeispiel gezeigt:
PROTOCOL_OID_REQUEST_COMPLETE MyOidRequestComplete;
Implementieren Sie dann Ihre Funktion wie folgt:
_Use_decl_annotations_
VOID
MyOidRequestComplete(
NDIS_HANDLE ProtocolBindingContext,
PNDIS_OID_REQUEST OidRequest,
NDIS_STATUS Status
)
{...}
Der PROTOCOL_OID_REQUEST_COMPLETE Funktionstyp wird in der Ndis.h-Headerdatei definiert. Um Fehler genauer zu identifizieren, wenn Sie die Codeanalysetools ausführen, müssen Sie der Funktionsdefinition die Use_decl_annotations Anmerkung hinzufügen. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen, die auf den Funktionstyp PROTOCOL_OID_REQUEST_COMPLETE in der Headerdatei angewendet werden, verwendet werden. Weitere Informationen zu den Anforderungen für Funktionsdeklarationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für NDIS-Treiber.
Informationen zu Use_decl_annotationsfinden Sie unter Annotating Function Behavior.
Anforderungen
| Anforderung | Wert |
|---|---|
| mindestens unterstützte Client- | Unterstützt in NDIS 6.0 und höher. |
| Zielplattform- | Fenster |
| Header- | ndis.h (include Ndis.h) |
| IRQL- | <= DISPATCH_LEVEL |