NDIS_OID_REQUEST-Struktur (ndis/oidrequest.h)

Um OID-Informationen abzufragen oder festzulegen, übermittelt NDIS NDIS_OID_REQUEST Strukturen, um Treiber und Miniporttreiber zu filtern.

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;

Member

Header

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

NDIS_OID_REQUEST_REVISION_2

Die Elemente SwitchId, VPortId und Flags für NDIS 6.50 wurden hinzugefügt.

Legen Sie das Element Headergröße auf NDIS_SIZEOF_OID_REQUEST_REVISION_2 fest.

NDIS_OID_REQUEST_REVISION_1

Ursprüngliche Version für NDIS 6.0.

Legen Sie das Element Headergröße 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 standardmäßig ist, ist dieser Member 0.

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 abschließt, verwendet der Miniporttreiber diesen RequestId-Wert, um den RequestId-Member der zugeordneten NDIS_STATUS_INDICATION-Struktur festzulegen.

NDIS oder überlastende Treiber 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 RequestId ab. Wenn RequestId 0 ist, kann der Miniporttreiber diesen Member ignorieren. Weitere Informationen zu status Indikationen finden Sie im abschnitt "Hinweise".

RequestHandle

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

Weitere Informationen zu status Indikationen finden Sie im abschnitt "Hinweise".

DATA

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

DATA.Oid

DATA.QUERY_INFORMATION

Diese Struktur enthält die Parameter für einen Anforderungstyp "NdisRequestQueryInformation" oder "NdisRequestQueryStatistics ". 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 bei InformationBuffer in Bytes. Der Wert bei Oid bestimmt den für dieses Element geeigneten Wert.

DATA.QUERY_INFORMATION.BytesWritten

Die Anzahl der Bytes, die der zugrunde liegende Treiber oder NDIS in den Puffer von 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 Members bedeutungslos. Wenn die InformationBufferLength für den angegebenen OID_ XXX in 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 Setinformationsanforderungen liest.

DATA.SET_INFORMATION.InformationBufferLength

Die Größe des Puffers bei InformationBuffer in Bytes. Der Wert bei Oid bestimmt den für dieses Element geeigneten Wert.

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 zum Ausführen des vom angegebenen OID_ XXX-Code angeforderten Setvorgangs erforderlich sind.

Wenn NdisOidRequest NDIS_STATUS_SUCCESS zurückgibt, ist der Wert dieses Members bedeutungslos. Wenn der Puffer bei InformationBuffer nicht genügend Daten für die angegebene OID_ XXX für eine festgelegte Anforderung 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 aus dem der zugrunde liegende Treiber vom Aufrufer bereitgestellte Informationen für festgelegte Vorgänge liest. Diese Vorgänge sind spezifisch für den Typ des NdisRequestMethod-Anforderungstyps , der ausgeführt wird.

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

DATA.METHOD_INFORMATION.InputBufferLength

Die Größe der lesbaren Daten im Puffer bei InformationBuffer in Bytes. Der Wert bei Oid bestimmt den für dieses Element geeigneten Wert.

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 Methoden-OID ausgeführt werden soll. Eine Methoden-OID-Anforderung kann mehrere Vorgänge gemäß Der Definition von MethodId unterstützen. Es kann ein beliebiger Wert sein, der größer oder gleich 0 ist. Null gibt die Standardmethode an. NDIS kann öffentliche Methoden-OIDs mit einigen vordefinierten Methoden definieren. Miniporttreiber 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 in den Puffer von 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-Element 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.

Für Methoden-OIDs sollte BytesRead kleiner oder gleich dem Wert im InputBufferLength-Element 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 Setvorgangs erforderlich sind.

Wenn NdisOidRequest NDIS_STATUS_SUCCESS zurückgibt, ist der Wert dieses Members bedeutungslos. Wenn die InformationBufferLength für den angegebenen OID_ XXX in 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 nicht genügend Daten für die angegebene OID_ XXX in einem 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 Zuweisungsator der NDIS_OID_REQUEST-Struktur. Dies ist in der Regel ein NDIS-Protokolltreiber oder ein NDIS-Filtertreiber.

SupportedRevision

Die Revision einer NDIS-Struktur, die von einem NDIS 6.0- oder höher-Treiber unterstützt wurde, wenn eine OID-Anforderung verarbeitet wurde. Eine überarbeitete Struktur ist eine beliebige NDIS 6.0-Struktur, in der eine NDIS_OBJECT_HEADER-Struktur enthalten ist. Wenn der Treiber eine OID erfolgreich festlegt, muss supportedRevision auf die Revisionsnummer der unterstützten Struktur festgelegt werden. Weitere Informationen zu NDIS-Versionsinformationen finden Sie unter Angeben von NDIS-Versionsinformationen.

Reserved1

Für zukünftige Verwendung reserviert.

Reserved2

Für zukünftige Verwendung reserviert.

SwitchId

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

Hinweis

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 abzielt. Dieses Feld gilt nur dann als gültig, wenn das NDIS_OID_REQUEST_FLAGS_VPORT_ID_VALID-Flag festgelegt ist.

Hinweis

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:

Flag Wert BESCHREIBUNG
NDIS_OID_REQUEST_FLAGS_VPORT_ID_VALID 0x0001 Wenn dieses Flag festgelegt ist, gilt der VportId-Member als gültig und identifiziert den VPort, für den die OID als Ziel bestimmt ist. Wenn dieses Flag nicht festgelegt ist, ist die OID für den Miniportadapter selbst.

Hinweis

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

Hinweise

Ein Protokolltreiber oder ein Filtertreiber sollte nicht ausgestellten Arbeitsspeicher für den Puffer bei InformationBuffer und für die NDIS_OID_REQUEST-Struktur zuweisen. Die Verwendung von Daten, die aus dem Auslagerungsspeicher zugeordnet werden, kann schwerwiegende Seitenfehler verursachen, da die zugrunde liegenden Treiber mit 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 von NdisOidRequest füllt der Protokolltreiber die relevanten Member der Unterstruktur aus, die den Abfrage- oder Setvorgang darstellt, der im Oid-Member angegeben ist. NDIS oder der zugrunde liegende Treiber füllt die verbleibenden Member aus, bevor die Steuerung an den Aufrufer zurückgegeben wird.

Einige OID-Anforderungen ermöglichen es einem Miniporttreiber, eine OID-Vervollständigung status mit einer status Angabe bereitzustellen. In diesem Fall gibt der Miniporttreiber NDIS_STATUS_INDICATION_REQUIRED für die Vervollständigung status der OID-Anforderung zurück. Ein Miniporttreiber kann diese status nicht zurückgeben, es sei denn, die jeweilige OID lässt dies zu. Um festzustellen, ob diese status zulässig ist, finden Sie auf der OID-Referenzseite.

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

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

Bei drahtlosen Netzwerken kann die Verarbeitung einer OID-Anforderung beispielsweise sehr lange dauern. In diesem Fall kann der Miniporttreiber die OID-Anforderung sofort abschließen und später einen status Hinweis bereitstellen, um das Endergebnis für die OID-Anforderung bereitzustellen.

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Unterstützt in NDIS 6.0 und höher.
Kopfzeile ndis/oidrequest.h (include ndis.h)

Weitere Informationen

NDIS_OBJECT_HEADER

NDIS_REQUEST_TYPE

NDIS_STATUS_INDICATION

NdisOidRequest

OID_GEN_SUPPORTED_GUIDS