Freigeben über


NDIS_OID_REQUEST Struktur (ndis/oidrequest.h)

Um OID-Informationen abzufragen oder festzulegen, übermittelt NDIS NDIS_OID_REQUEST Strukturen zum Filtern von Treibern und Miniporttreibern.

Syntax

typedef struct _NDIS_OID_REQUEST {
  NDIS_OBJECT_HEADER       Header;
  NDIS_REQUEST_TYPE        RequestType;
  NDIS_PORT_NUMBER         PortNumber;
  UINT                     Timeout;
  PVOID                    RequestId;
  NDIS_HANDLE              RequestHandle;
  union {
    NDIS_OID Oid;
    struct {
      NDIS_OID Oid;
      PVOID    InformationBuffer;
      UINT     InformationBufferLength;
      UINT     BytesWritten;
      UINT     BytesNeeded;
    } QUERY_INFORMATION;
    struct {
      NDIS_OID Oid;
      PVOID    InformationBuffer;
      UINT     InformationBufferLength;
      UINT     BytesRead;
      UINT     BytesNeeded;
    } SET_INFORMATION;
    struct {
      NDIS_OID Oid;
      PVOID    InformationBuffer;
      ULONG    InputBufferLength;
      ULONG    OutputBufferLength;
      ULONG    MethodId;
      UINT     BytesWritten;
      UINT     BytesRead;
      UINT     BytesNeeded;
    } METHOD_INFORMATION;
  } DATA;
  _REQUEST_DATA            _REQUEST_DATA;
  UCHAR                    *NdisReserved[NDIS_OID_REQUEST_NDIS_RESERVED_SIZE  sizeof(PVOID)];
  UCHAR                    *MiniportReserved[2  sizeof(PVOID)];
  UCHAR                    *SourceReserved[2  sizeof(PVOID)];
  UCHAR                    SupportedRevision;
  UCHAR                    Reserved1;
  USHORT                   Reserved2;
  NDIS_NIC_SWITCH_ID       SwitchId;
  NDIS_NIC_SWITCH_VPORT_ID VPortId;
  ULONG                    Flags;
} NDIS_OID_REQUEST, *PNDIS_OID_REQUEST;

Angehörige

Header

Die NDIS_OBJECT_HEADER Struktur für die NDIS_OID_REQUEST Struktur. Legen Sie den Typ Mitglied auf NDIS_OBJECT_TYPE_OID_REQUEST fest. Um die Version der NDIS_OID_REQUEST-Struktur anzugeben, legen Sie das element Revision auf einen der folgenden Werte fest:

NDIS_OID_REQUEST_REVISION_2

Die SwitchId, VPortIdund Flags Member für NDIS 6.50 wurden hinzugefügt.

Legen Sie den HeaderSize Member auf NDIS_SIZEOF_OID_REQUEST_REVISION_2 fest.

NDIS_OID_REQUEST_REVISION_1

Originalversion für NDIS 6.0.

Legen Sie die Kopfzeile Member auf NDIS_SIZEOF_OID_REQUEST_REVISION_1 fest.

RequestType

Der Anforderungstyp als einer der NDIS_REQUEST_TYPE Enumerationswerte.

PortNumber

Der Port, an den die Anforderung gesendet wird. Wenn der Port unbekannt oder standard ist, ist dieses Element null.

Timeout

Ein Timeout in Sekunden für die Anforderung. NDIS kann den Treiber zurücksetzen oder die Anforderung abbrechen, wenn das Timeout abläuft, bevor der Treiber die Anforderung abgeschlossen hat.

RequestId

Ein Bezeichner für die Anforderung. Wenn ein Miniporttreiber eine Anforderung sofort ausführen muss und die Anforderung mit einem Status von NDIS_STATUS_INDICATION_REQUIRED abgeschlossen wird, verwendet der Miniporttreiber diesen RequestId- Wert, um das RequestId-element Member der zugeordneten NDIS_STATUS_INDICATION Struktur festzulegen.

NDIS- oder Überlauftreiber können auch die RequestId- verwenden, um eine Anforderung abzubrechen. Wenn ein Miniporttreiber eine Abbruchanforderung empfängt, bricht der Miniporttreiber alle ausstehenden Anforderungen mit einer übereinstimmenden RequestIdab. Wenn RequestId null ist, kann der Miniporttreiber dieses Element ignorieren. Weitere Informationen zu Statusanzeigen finden Sie im folgenden Abschnitt "Hinweise".

RequestHandle

Ein Handle, das die Quelle identifiziert, die die OID-Anforderung ausgestellt hat. Wenn ein Miniporttreiber die Anforderung sofort abschließen und die Anforderung mit einem Status von NDIS_STATUS_INDICATION_REQUIRED abschließt, verwendet der Miniporttreiber diesen RequestHandle- Wert, um das DestinationHandle Member der zugeordneten NDIS_STATUS_INDICATION Struktur festzulegen. In diesem Fall sendet NDIS nur die nachfolgenden Statusanzeigen an die Quelle, die die OID-Anforderung ausgestellt hat.

Weitere Informationen zu Statusanzeigen finden Sie im folgenden Abschnitt "Hinweise".

DATA

Eine Union, die die Anforderungsdaten definiert. Die Informationen in den Daten variieren je nach Anforderungstyp, wie vom RequestType Member angegeben. Die folgenden Memberstrukturen werden angegeben:

DATA.Oid

DATA.QUERY_INFORMATION

Diese Struktur enthält die Parameter für eine NdisRequestQueryInformation oder NdisRequestQueryStatistics Anforderungstyp. Diese Struktur wird wie folgt angegeben:


struct _QUERY
  {
    NDIS_OID    Oid;
    PVOID       InformationBuffer;
    UINT        InformationBufferLength;
    UINT        BytesWritten;
    UINT        BytesNeeded;
  } QUERY_INFORMATION;

DATA.QUERY_INFORMATION.Oid

Der Objektbezeichner des angeforderten Vorgangs. Der Wert ist ein OID_ XXX--Code.

DATA.QUERY_INFORMATION.InformationBuffer

Ein Zeiger auf einen Puffer, in den der zugrunde liegende Treiber oder NDIS die angeforderten Informationen für Abfrageinformationsanforderungen zurückgibt.

DATA.QUERY_INFORMATION.InformationBufferLength

Die Größe des Puffers in Byte bei InformationBuffer. Der Wert bei Oid bestimmt den wert, der diesem Element entspricht.

DATA.QUERY_INFORMATION.BytesWritten

Die Anzahl der Bytes, die der zugrunde liegende Treiber oder NDIS an den Puffer an InformationBuffer für Abfrageinformationsanforderungen überträgt. Wenn die NdisOidRequest Funktion NDIS_STATUS_INVALID_LENGTH zurückgibt, ist der Wert dieses Elements bedeutungslos.

DATA.QUERY_INFORMATION.BytesNeeded

Die Anzahl der Bytes, die zum Zurückgeben von Abfrageinformationen erforderlich sind, die vom angegebenen OID_ XXX Code angefordert werden.

Wenn NdisOidRequest NDIS_STATUS_SUCCESS zurückgibt, ist der Wert dieses Elements bedeutungslos. Wenn die InformationBufferLength- für die angegebene OID_ XXX- einer Abfrageanforderung zu klein ist, gibt dieses Element an, wie groß ein Puffer erforderlich ist, um die Anforderung zu erfüllen.

DATA.SET_INFORMATION

Diese Struktur enthält die Parameter für einen NdisRequestSetInformation Anforderungstyp. Diese Struktur wird wie folgt angegeben:


struct _SET
  {
    NDIS_OID    Oid;
    PVOID       InformationBuffer;
    UINT        InformationBufferLength;
    UINT        BytesRead;
    UINT        BytesNeeded;
  } SET_INFORMATION;

DATA.SET_INFORMATION.Oid

Der Objektbezeichner des angeforderten Vorgangs. Der Wert ist ein OID_ XXX--Code.

DATA.SET_INFORMATION.InformationBuffer

Ein Zeiger auf einen Puffer, aus dem der zugrunde liegende Treiber vom Aufrufer bereitgestellte Informationen für Set-Information-Anforderungen liest.

DATA.SET_INFORMATION.InformationBufferLength

Die Größe des Puffers in Byte bei InformationBuffer. Der Wert bei Oid bestimmt den wert, der diesem Element entspricht.

DATA.SET_INFORMATION.BytesRead

Die Anzahl der Bytes, die der zugrunde liegende Treiber aus dem Puffer bei InformationBuffer- für Set-Information-Anforderungen liest.

DATA.SET_INFORMATION.BytesNeeded

Die Anzahl der Bytes, die erforderlich sind, um den vom angegebenen OID_ XXX--Code angeforderten Festgelegten Vorgang auszuführen.

Wenn NdisOidRequest NDIS_STATUS_SUCCESS zurückgibt, ist der Wert dieses Elements bedeutungslos. Wenn der Puffer bei InformationBuffer- keine ausreichenden Daten für die angegebene OID_ XXX- für eine Setanforderung enthält, gibt dieses Element an, wie viele Daten erforderlich sind.

DATA.METHOD_INFORMATION

Diese Struktur enthält die Parameter für einen NdisRequestMethod Anforderungstyp. Diese Struktur wird wie folgt angegeben:


struct _METHOD
  {
    NDIS_OID            Oid;
    PVOID               InformationBuffer;
    ULONG               InputBufferLength;
    ULONG               OutputBufferLength;
    ULONG               MethodId;
    UINT                BytesWritten;
    UINT                BytesRead;
    UINT                BytesNeeded;
  } METHOD_INFORMATION;

DATA.METHOD_INFORMATION.Oid

Der Objektbezeichner des angeforderten Vorgangs. Der Wert ist ein OID_ XXX--Code.

DATA.METHOD_INFORMATION.InformationBuffer

Ein Zeiger auf einen Puffer, in den der zugrunde liegende Treiber oder NDIS die angeforderten Informationen für Abfragevorgänge zurückgibt oder von dem der zugrunde liegende Treiber vom Aufrufer bereitgestellte Informationen für Set-Vorgänge liest. Diese Vorgänge sind spezifisch für den Typ NdisRequestMethod Anforderungstyp, der ausgeführt wird.

Hinweis Dieser Puffer wird sowohl für Set-Information- als auch für Abfrageinformationsanforderungen verwendet. Daher würden Daten im Puffer für die Set-Information-Anforderung von Daten überschrieben, die für die Abfrageinformationsanforderung zurückgegeben werden. Die genaue Verwendung hängt von dem angeforderten Vorgang ab, wie vom Oid Member angegeben.
 

DATA.METHOD_INFORMATION.InputBufferLength

Die Größe der lesbaren Daten im Puffer in Byte bei InformationBuffer. Der Wert bei Oid bestimmt den wert, der diesem Element entspricht.

DATA.METHOD_INFORMATION.OutputBufferLength

Die Anzahl der Bytes im Puffer bei InformationBuffer, die der Treiber schreiben kann.

DATA.METHOD_INFORMATION.MethodId

Die Methode, die für eine Methode OID ausgeführt werden soll. Eine Methoden-OID-Anforderung kann mehrere Vorgänge unterstützen, wie durch MethodIddefiniert. Er kann ein beliebiger Wert sein, der größer oder gleich Null ist. Null gibt die Standardmethode an. NDIS kann öffentliche Methoden-OIDs mit einigen vordefinierten Methoden definieren. Miniport-Treiber können benutzerdefinierte Methoden-OIDs definieren. Weitere Informationen zu benutzerdefinierten OIDs finden Sie unter OID_GEN_SUPPORTED_GUIDS.

DATA.METHOD_INFORMATION.BytesWritten

Die Anzahl der Bytes, die der zugrunde liegende Treiber oder NDIS an den Puffer an InformationBuffer für Abfrageinformationsanforderungen überträgt. Wenn die NdisOidRequest Funktion NDIS_STATUS_INVALID_LENGTH zurückgibt, ist der Wert dieses Elements bedeutungslos.

Bei Methoden-OIDs sollte BytesWritten kleiner oder gleich dem Wert im OutputBufferLength Member sein.

DATA.METHOD_INFORMATION.BytesRead

Die Anzahl der Bytes, die der zugrunde liegende Treiber aus dem Puffer bei InformationBuffer- für Set-Information-Anforderungen liest.

Bei Methoden-OIDs sollte BytesRead- kleiner oder gleich dem Wert im InputBufferLength Member sein.

DATA.METHOD_INFORMATION.BytesNeeded

Die Anzahl der Bytes, die zum Zurückgeben von Abfrageinformationen oder zum Ausführen des vom angegebenen OID_ XXX--Code angeforderten Vorgangs erforderlich sind.

Wenn NdisOidRequest NDIS_STATUS_SUCCESS zurückgibt, ist der Wert dieses Elements bedeutungslos. Wenn die InformationBufferLength- für die angegebene OID_ XXX- einer Abfrage zu klein ist, gibt dieses Element an, wie groß ein Puffer erforderlich ist, um die Anforderung zu erfüllen. Wenn der Puffer bei InformationBuffer- keine ausreichenden Daten für die angegebene OID_ XXX- für einen Satz enthält, gibt dieses Element an, wie viele Daten erforderlich sind.

_REQUEST_DATA

NdisReserved[NDIS_OID_REQUEST_NDIS_RESERVED_SIZE * sizeof(PVOID)]

Ein Bereich, der für NDIS reserviert ist.

MiniportReserved[2 * sizeof(PVOID)]

Ein Bereich, der für den Miniporttreiber reserviert ist.

SourceReserved[2 * sizeof(PVOID)]

Ein Bereich, der für den ursprünglichen Treiber reserviert ist. Reserviert für den Zuweisungsgeber der NDIS_OID_REQUEST Struktur. Dies ist in der Regel ein NDIS-Protokolltreiber oder ein NDIS-Filtertreiber.

SupportedRevision

Die Überarbeitung einer NDIS-Struktur, die von einem NDIS 6.0- oder höher-Treiber unterstützt wurde, wenn eine OID-Anforderung behandelt wurde. Eine überarbeitete Struktur ist eine beliebige NDIS 6.0-Struktur, die eine NDIS_OBJECT_HEADER Struktur enthält. Wenn der Treiber erfolgreich ein OID festlegt, muss er SupportedRevision auf die Revisionsnummer der unterstützten Struktur festlegen. Weitere Informationen zu NDIS-Versionsinformationen finden Sie unter Angeben von NDIS-Versionsinformationen.

Reserved1

Reserviert für die zukünftige Verwendung.

Reserved2

Reserviert für die zukünftige Verwendung.

SwitchId

Ein NDIS_NIC_SWITCH_ID Wert, der den Schalter identifiziert, auf dem der durch VPortId-angegebene Ziel-VPort ausgeführt wird.

Anmerkung

Dieses Feld wird in NDIS 6.50 und höher unterstützt.

VPortId

Ein NDIS_NIC_SWITCH_VPORT_ID Wert, der den VPort identifiziert, auf den diese OID-Anforderung ausgerichtet ist. Dieses Feld gilt nur dann als gültig, wenn das NDIS_OID_REQUEST_FLAGS_VPORT_ID_VALID Flag festgelegt ist.

Anmerkung

Dieses Feld wird in NDIS 6.50 und höher unterstützt.

Flags

Ein ULONG-Wert, der ein bitweises OR von Flags für diese OID-Anforderung enthält. Derzeit werden diese Flags unterstützt:

Flagge Wert Beschreibung
NDIS_OID_REQUEST_FLAGS_VPORT_ID_VALID 0x0001 Wenn dieses Flag festgelegt ist, wird das VportId--Element als gültig betrachtet und identifiziert den VPort, auf den das OID ausgerichtet ist. Wenn diese Kennzeichnung nicht festgelegt ist, ist das OID für den Miniportadapter selbst vorgesehen.

Anmerkung

Dieses Feld wird in NDIS 6.50 und höher unterstützt.

Bemerkungen

Ein Protokolltreiber oder ein Filtertreiber sollte nicht ausgelagerten Speicher für den Puffer bei InformationBuffer- und für die NDIS_OID_REQUEST Struktur zuweisen. Die Verwendung von Daten, die aus dem ausgelagerten Speicher zugeordnet sind, kann zu schwerwiegenden Seitenfehlern führen, da die zugrunde liegenden Treiber bei IRQL = DISPATCH_LEVEL ausgeführt werden, um den angeforderten Vorgang auszuführen.

NDIS_OID_REQUEST enthält eine DATA-Unterstruktur für jeden Vorgangstyp, den ein Protokolltreiber für einen zugrunde liegenden Treiber anfordern kann. Vor dem Aufrufen NdisOidRequestfüllt der Protokolltreiber die relevanten Elemente der Unterstruktur aus, die die Abfrage darstellt oder den im Oid Member angegebenen Vorgang festlegt. NDIS oder der zugrunde liegende Treiber füllt die verbleibenden Elemente aus, bevor es die Steuerung an den Aufrufer zurückgibt.

Einige OID-Anforderungen ermöglichen es einem Miniporttreiber, einen OID-Abschlussstatus mit einer Statusanzeige bereitzustellen. In diesem Fall gibt der Miniporttreiber NDIS_STATUS_INDICATION_REQUIRED für den Abschlussstatus der OID-Anforderung zurück. Ein Miniporttreiber kann diesen Status nur zurückgeben, wenn der bestimmte OID ihn zulässt. Informationen dazu, ob dieser Status zulässig ist, finden Sie auf der OID-Referenzseite.

Wenn eine Statusanzeige einer OID-Anforderung zugeordnet ist, bei der der Miniporttreiber NDIS_STATUS_INDICATION_REQUIRED zurückgegeben hat, muss der Treiber, der die Statusanzeige macht, die DestinationHandle- und RequestId Member in der NDIS_STATUS_INDICATION-Struktur festlegen.

In diesem Fall legt der Treiber die DestinationHandle- und RequestId Member auf die Werte der RequestHandle und RequestId Member in der NDIS_OID_REQUEST Struktur fest.

Beispielsweise kann die Verarbeitung einer OID-Anforderung im Drahtlosnetzwerk sehr lange dauern. In diesem Fall kann der Miniporttreiber die OID-Anforderung sofort abschließen und später eine Statusanzeige bereitstellen, um das Endergebnis für die OID-Anforderung bereitzustellen.

Die NdisRequestGenericn(1-4) Typen sind für Miniporttreiber verfügbar, die eigene interne Anforderungen erstellen. Um eine solche Anforderung zu implementieren, weist ein Miniporttreiber einer dieser generischen Typen eine interne Variable zu.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Unterstützt in NDIS 6.0 und höher.
Header- ndis/oidrequest.h (include ndis.h)

Siehe auch

NDIS_OBJECT_HEADER

NDIS_REQUEST_TYPE

NDIS_STATUS_INDICATION

NdisOidRequest

OID_GEN_SUPPORTED_GUIDS