Freigeben über


PROTOCOL_DIRECT_OID_REQUEST_COMPLETE Rückruffunktion (ndis.h)

Die ProtocolDirectOidRequestComplete--Funktion schließt die Verarbeitung einer vom Protokolltreiber initiierten direkten OID-Anforderung ab, für die die NdisDirectOidRequest-Funktion NDIS_STATUS_PENDING zurückgegeben wurde.

Hinweis Sie müssen die Funktion mithilfe des PROTOCOL_DIRECT_OID_REQUEST_COMPLETE Typs deklarieren. Weitere Informationen finden Sie im folgenden Abschnitt "Beispiele".
 

Syntax

PROTOCOL_DIRECT_OID_REQUEST_COMPLETE ProtocolDirectOidRequestComplete;

VOID ProtocolDirectOidRequestComplete(
  [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 NdisDirectOidRequest 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 ProtocolDirectOidRequestComplete- mit den Informationen bei OidRequest.

Rückgabewert

Nichts

Bemerkungen

ProtocolDirectOidRequestComplete ist eine optionale Funktion. Wenn ein Protokolltreiber keine direkten OID-Anforderungen verwendet, kann er den Einstiegspunkt für diese Funktion auf NULL- festlegen, wenn er die NdisRegisterProtocolDriver Funktion.

ProtocolDirectOidRequestComplete verwendet den Eingabewert des parameters Status wie folgt:

  • Wenn Status- NDIS_STATUS_SUCCESS ist, wurde das BytesRead- oder ByteWritten Member der NDIS_OID_REQUEST-Struktur durch NDIS oder den zugrunde liegenden Treiber festgelegt. Diese Werte geben an, wie viele vom Protokolltreiber bereitgestellte Informationen aus dem 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 ProtocolDirectOidRequestComplete die daten verwenden, die bei InformationBuffer- zurückgegeben werden, je nach Wert des Oid Members.

    Beispiel: Wenn der Protokolltreiber ursprünglich einen OID_GEN_MAXIMUM_SEND_PACKETS Abfrage kann ProtocolDirectOidRequestComplete- Zustandsvariablen im ProtocolBindingContext Bereich einrichten, um die Anzahl der ausstehenden Sende zu drosseln, die der Treiber für nachfolgende Aufrufe an den NdisSendNetBufferLists Funktion.

  • 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 ProtocolDirectOidRequestComplete- ausreichendEn Pufferraum für die Anforderung zuweisen, eine weitere NDIS_OID_REQUEST Struktur mit dem erforderlichen InformationBufferLength- wert und demselben Oid--Wert einrichten und den Aufruf der NdisDirectOidRequest-Funktion wiederholen.

    ProtocolDirectOidRequestComplete können Anforderungen für bestimmte andere NDIS_STATUS_ Xxx--Argumente erneut versuchen, wie in NdisDirectOidRequestbeschrieben.

  • Wenn Status- ein NDIS_STATUS_ Xxx--Wert ist, der ein nicht behebbarer Fehler ist, ProtocolDirectOidRequestComplete- den Speicher freigeben soll, der der NDIS_OID_REQUEST Struktur zugeordnet ist, und bestimmen, ob der Treiber die Bindung schließen oder seine bindungsspezifischen Statusinformationen anpassen soll, um fortgesetzte Netzwerk-E/A-Vorgänge für die Bindung zu verarbeiten.
ProtocolDirectOidRequestComplete- kann aufgerufen werden, bevor der Protokolltreiber Zeit hatte, den Statuscode zu prüfen, der NdisDirectOidRequest bei Statuszurückgibt.

NDIS ruft ProtocolDirectOidRequestComplete- bei IRQL-<= DISPATCH_LEVEL auf.

beispiele für

Um eine ProtocolDirectOidRequestComplete--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 ProtocolDirectOidRequestComplete--Funktion zu definieren, die den Namen "MyDirectOidRequestComplete" hat, verwenden Sie den PROTOCOL_DIRECT_OID_REQUEST_COMPLETE Typ, wie in diesem Codebeispiel gezeigt:

PROTOCOL_DIRECT_OID_REQUEST_COMPLETE MyDirectOidRequestComplete;

Implementieren Sie dann Ihre Funktion wie folgt:

_Use_decl_annotations_
VOID
 MyDirectOidRequestComplete(
    NDIS_HANDLE  ProtocolBindingContext,
    PNDIS_OID_REQUEST  OidRequest,
    NDIS_STATUS  Status
    )
  {...}

Der PROTOCOL_DIRECT_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 PROTOCOL_DIRECT_OID_REQUEST_COMPLETE Funktionstyp 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.1 und höher.
Zielplattform- Fenster
Header- ndis.h (include Ndis.h)
IRQL- <= DISPATCH_LEVEL

Siehe auch

NDIS_OID_REQUEST

NdisDirectOidRequest

NdisMDirectOidRequestComplete-

NdisOpenAdapterEx

NdisRegisterProtocolDriver-

OID_GEN_MAXIMUM_SEND_PACKETS