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.
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) |