NDIS_OID_REQUEST (Compact 2013)
3/26/2014
To query or set OID information, NDIS submits this structures to filter drivers and miniport drivers.
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 _REQUEST_DATA
{
struct QUERY
{
NDIS_OID Oid;
PVOID InformationBuffer;
UINT InformationBufferLength;
UINT BytesWritten;
UINT BytesNeeded;
} QUERY_INFORMATION;
struct _SET
{
NDIS_OID Oid;
PVOID InformationBuffer;
UINT InformationBufferLength;
UINT BytesRead;
UINT BytesNeeded;
} SET_INFORMATION;
struct _METHOD
{
NDIS_OID Oid;
PVOID InformationBuffer;
ULONG InputBufferLength;
ULONG OutputBufferLength;
ULONG MethodId;
UINT BytesWritten;
UINT BytesRead;
UINT BytesNeeded;
} METHOD_INFORMATION;
} 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_OID_REQUEST, *PNDIS_OID_REQUEST ;
Members
- Header
The NDIS_OBJECT_HEADER structure for the NDIS_OID_REQUEST structure. Set the Type member of the structure that Header specifies to NDIS_OBJECT_TYPE_OID_REQUEST, the Revision member to NDIS_OID_REQUEST_REVISION_1, and the Size member to NDIS_SIZEOF_OID_REQUEST_REVISION_1.
- RequestType
The request type as one of the NDIS_REQUEST_TYPE enumeration values.
- PortNumber
The port to which the request is sent. If the port is unknown or default, this member is zero.
- Timeout
A time-out, in seconds, for the request. NDIS can reset the driver or cancel the request if the time-out expires before the driver completes the request.
RequestId
An identifier for the request. If a miniport driver must complete a request immediately and it completes the request with a status of NDIS_STATUS_INDICATION_REQUIRED, the miniport driver uses this RequestId value to set the RequestId member of the associated NDIS_STATUS_INDICATION structure.NDIS or overlying drivers can also use the RequestId to cancel a request. When a miniport driver receives a cancellation request, the miniport driver cancels any pending requests with a matching RequestId. If RequestId is zero, the miniport driver can ignore this member. For more information about status indications, see the following Comments section.
RequestHandle
A handle that identifies the source that issued the OID request. If a miniport driver must complete the request immediately and completes the request with a status of NDIS_STATUS_INDICATION_REQUIRED, the miniport driver uses this RequestHandle value to set the DestinationHandle member of the associated NDIS_STATUS_INDICATION structure. In this case, NDIS will send only the subsequent status indication to the source that issued the OID request.For more information about status indications, see the following Comments section.
DATA
A union that defines the request data. The information in the data varies according to the type of request (QUERY_INFORMATION, SET_INFORMATION, or METHOD_INFORMATION). The following data members are specified.- Oid
The object identifier of the requested operation. The value is an OID_XXX code.
- InformationBuffer
A pointer to a buffer into which the underlying driver or NDIS returns the requested information for queries or from which the underlying driver reads caller-supplied information for set operations.
- InformationBufferLength
The size, in bytes, of the buffer at InformationBuffer. The value at Oid determines the value appropriate to this member.
- BytesWritten
The number of bytes that the underlying driver or NDIS transfers into the buffer at InformationBuffer for query-information requests. If the NdisOidRequest function returns NDIS_STATUS_INVALID_LENGTH, the value of this member is meaningless. If this is a method OID, BytesWritten should be less than or equal to the value in the OutputBufferLength member.
- BytesRead
The number of bytes that the underlying driver read from the buffer at InformationBuffer for set-information requests. If this is a method OID, BytesRead should be less than or equal to the value in the InputBufferLength member.
BytesNeeded
The number of bytes that are required to return query information or to perform the set operation requested by the given OID_XXX code.If NdisOidRequest returns NDIS_STATUS_SUCCESS, the value of this member is meaningless. If the InformationBufferLength is too small for the given OID_XXX on a query, this member indicates how large a buffer is required to satisfy the request. If the buffer at InformationBuffer does not contain sufficient data for the given OID_XXX on a set, this member indicates how much data is required.
- InputBufferLength
The number of bytes in the buffer at InformationBuffer that the driver can read.
- OutputBufferLength
The number of bytes in the buffer at InformationBuffer that the driver can write.
- MethodId
The method to run for a method OID. A method OID request can support multiple operations as defined by MethodId. It can be any value that is greater or equal to zero. Zero indicates the default method. NDIS can define public method OIDs with some predefined methods. Miniport drivers can define custom method OIDs. For more information about custom OIDs, see OID_GEN_SUPPORTED_GUIDS.
- Oid
- NdisReserved
An area that is reserved for NDIS.
- MiniportReserved
An area that is reserved for the miniport driver.
- SourceReserved
An area that is reserved for the originating driver. Reserved for the allocator of the NDIS_OID_REQUEST structure. This is usually an NDIS protocol driver or an NDIS filter driver.
- SupportedRevision
The revision of an NDIS 6.0 structure that is supported by an NDIS 6.0 or later versions miniport driver. A revisioned structure is any NDIS 6.0 structure that has an NDIS_OBJECT_HEADER structure inside it. When the miniport driver succeeds in setting an OID, it has to set SupportedRevision to the revision number of the structure it supports for the set operation.
- Reserved1
Reserved.
- Reserved2
Reserved.
Remarks
A protocol driver or a filter driver should allocate nonpaged memory for the buffer at InformationBuffer and for the NDIS_OID_REQUEST structure. By using data that is allocated from paged memory can cause fatal page faults because the underlying drivers run at IRQL = DISPATCH_LEVEL to perform the requested operation.
NDIS_OID_REQUEST contains a DATA substructure for each type of operation that a protocol driver can request of an underlying driver. Before calling NdisOidRequest, the protocol driver fills in the relevant members of the substructure that represents the query or set operation it specified in the Oid member. NDIS or the underlying driver fills in the remaining members before it returns control to the caller.
Some OID requests allow a miniport driver to provide an OID completion status with a status indication. In this case, the miniport driver returns NDIS_STATUS_INDICATION_REQUIRED for the completion status of the OID request. A miniport driver cannot return this status unless the particular OID allows it. To determine whether this status is allowed, see the OID reference page.
If a status indication is associated with an OID request where the miniport driver returned NDIS_STATUS_INDICATION_REQUIRED, the driver making the status indication must set the DestinationHandle and RequestId members in the NDIS_STATUS_INDICATION structure.
In this case, the driver sets the DestinationHandle and RequestId members to the values from the RequestHandle and RequestId members in the NDIS_OID_REQUEST structure, respectively.
For example, in wireless networking, the processing of an OID request can take a very long time to complete. In this case, the miniport driver can complete the OID request immediately and provide a status indication later to provide the final result for the OID request.
The NdisRequestGenericn (1-4) types are available for miniport drivers that create their own internal requests. To implement such a request, a miniport driver assigns an internal variable to one of these generic types.
Requirements
Header |
ndis.h |
See Also
Reference
NDIS OID Request Structures
NDIS_OBJECT_HEADER
NDIS_REQUEST_TYPE
NDIS_STATUS_INDICATION
NdisOidRequest
OID_GEN_SUPPORTED_GUIDS