NDIS_OID_REQUEST 구조체(ndis/oidrequest.h)

OID 정보를 쿼리하거나 설정하기 위해 NDIS는 드라이버를 필터링하고 드라이버를 최소화하기 위해 NDIS_OID_REQUEST 구조를 제출합니다.

구문

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;

멤버

Header

NDIS_OID_REQUEST 구조체의 NDIS_OBJECT_HEADER 구조체입니다. Type 멤버를 NDIS_OBJECT_TYPE_OID_REQUEST 설정합니다. NDIS_OID_REQUEST 구조체의 버전을 나타내려면 Revision 멤버를 다음 값 중 하나로 설정합니다.

NDIS_OID_REQUEST_REVISION_2

NDIS 6.50에 대한 SwitchId, VPortIdFlags 멤버가 추가되었습니다.

헤더크기 멤버를 NDIS_SIZEOF_OID_REQUEST_REVISION_2 설정합니다.

NDIS_OID_REQUEST_REVISION_1

NDIS 6.0의 원래 버전입니다.

헤더크기 멤버를 NDIS_SIZEOF_OID_REQUEST_REVISION_1 설정합니다.

RequestType

요청 형식은 NDIS_REQUEST_TYPE 열거형 값 중 하나입니다.

PortNumber

요청이 전송되는 포트입니다. 포트를 알 수 없거나 기본값인 경우 이 멤버는 0입니다.

Timeout

요청에 대한 제한 시간(초)입니다. 드라이버가 요청을 완료하기 전에 제한 시간이 만료되면 NDIS에서 드라이버를 다시 설정하거나 요청을 취소할 수 있습니다.

RequestId

요청에 대한 식별자입니다. 미니포트 드라이버가 요청을 즉시 완료해야 하고 NDIS_STATUS_INDICATION_REQUIRED 상태로 요청을 완료하는 경우 미니포트 드라이버는 이 RequestId 값을 사용하여 연결된 NDIS_STATUS_INDICATION 구조의 RequestId 멤버를 설정합니다.

NDIS 또는 지나치게 많은 드라이버는 RequestId 를 사용하여 요청을 취소할 수도 있습니다. 미니포트 드라이버가 취소 요청을 받으면 미니포트 드라이버는 일치하는 RequestId를 사용하여 보류 중인 모든 요청을 취소합니다. RequestId가 0이면 미니포트 드라이버는 이 멤버를 무시할 수 있습니다. 상태 표시에 대한 자세한 내용은 다음 주의 섹션을 참조하세요.

RequestHandle

OID 요청을 실행한 원본을 식별하는 핸들입니다. 미니포트 드라이버가 요청을 즉시 완료하고 NDIS_STATUS_INDICATION_REQUIRED 상태로 요청을 완료하는 경우 미니포트 드라이버는 이 RequestHandle 값을 사용하여 연결된 NDIS_STATUS_INDICATION 구조의 DestinationHandle 멤버를 설정합니다. 이 경우 NDIS는 OID 요청을 실행한 원본에 후속 상태 표시만 보냅니다.

상태 표시에 대한 자세한 내용은 다음 주의 섹션을 참조하세요.

DATA

요청 데이터를 정의하는 공용 구조체입니다. 데이터의 정보는 RequestType 멤버가 지정한 요청 유형에 따라 달라집니다. 다음 멤버 구조가 지정됩니다.

DATA.Oid

DATA.QUERY_INFORMATION

이 구조체에는 NdisRequestQueryInformation 또는 NdisRequestQueryStatistics 요청 형식에 대한 매개 변수가 포함됩니다. 이 구조는 다음과 같이 지정됩니다.


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

DATA.QUERY_INFORMATION.Oid

요청된 작업의 개체 식별자입니다. 값은 OID_ XXX 코드입니다.

DATA.QUERY_INFORMATION.InformationBuffer

기본 드라이버 또는 NDIS가 쿼리 정보 요청에 대해 요청된 정보를 반환하는 버퍼에 대한 포인터입니다.

DATA.QUERY_INFORMATION.InformationBufferLength

InformationBuffer의 버퍼 크기(바이트)입니다. Oid의 값에 따라 이 멤버에 적합한 값이 결정됩니다.

DATA.QUERY_INFORMATION.BytesWritten

쿼리 정보 요청을 위해 InformationBuffer 에서 기본 드라이버 또는 NDIS가 버퍼로 전송하는 바이트 수입니다. NdisOidRequest 함수가 NDIS_STATUS_INVALID_LENGTH 반환하는 경우 이 멤버의 값은 의미가 없습니다.

DATA.QUERY_INFORMATION.BytesNeeded

지정된 OID_ XXX 코드에서 요청한 쿼리 정보를 반환하는 데 필요한 바이트 수입니다.

NdisOidRequest가 NDIS_STATUS_SUCCESS 반환하는 경우 이 멤버의 값은 의미가 없습니다. 쿼리 요청에서 지정된 OID_ XXX에 대해 InformationBufferLength가 너무 작으면 이 멤버는 요청을 충족하는 데 필요한 버퍼의 크기를 나타냅니다.

DATA.SET_INFORMATION

이 구조체에는 NdisRequestSetInformation 요청 형식에 대한 매개 변수가 포함됩니다. 이 구조는 다음과 같이 지정됩니다.


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

DATA.SET_INFORMATION.Oid

요청된 작업의 개체 식별자입니다. 값은 OID_ XXX 코드입니다.

DATA.SET_INFORMATION.InformationBuffer

기본 드라이버가 set-information 요청에 대해 호출자 제공 정보를 읽는 버퍼에 대한 포인터입니다.

DATA.SET_INFORMATION.InformationBufferLength

InformationBuffer의 버퍼 크기(바이트)입니다. Oid의 값에 따라 이 멤버에 적합한 값이 결정됩니다.

DATA.SET_INFORMATION.BytesRead

정보 설정 요청에 대해 InformationBuffer 의 버퍼에서 기본 드라이버가 읽은 바이트 수입니다.

DATA.SET_INFORMATION.BytesNeeded

지정된 OID_ XXX 코드에서 요청한 집합 작업을 수행하는 데 필요한 바이트 수입니다.

NdisOidRequest가 NDIS_STATUS_SUCCESS 반환하는 경우 이 멤버의 값은 의미가 없습니다. InformationBuffer의 버퍼에 설정된 요청에서 지정된 OID_ XXX에 대한 충분한 데이터가 없는 경우 이 멤버는 필요한 데이터의 양을 나타냅니다.

DATA.METHOD_INFORMATION

이 구조체에는 NdisRequestMethod 요청 형식에 대한 매개 변수가 포함됩니다. 이 구조는 다음과 같이 지정됩니다.


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

요청된 작업의 개체 식별자입니다. 값은 OID_ XXX 코드입니다.

DATA.METHOD_INFORMATION.InformationBuffer

기본 드라이버 또는 NDIS가 쿼리 작업에 대해 요청된 정보를 반환하거나 기본 드라이버가 설정된 작업에 대해 호출자 제공 정보를 읽는 버퍼에 대한 포인터입니다. 이러한 작업은 수행 중인 NdisRequestMethod 요청 형식에 따라 다릅니다.

참고 이 버퍼는 set-information 및 쿼리 정보 요청 모두에 사용됩니다. 따라서 set-information 요청에 대한 버퍼의 데이터는 쿼리 정보 요청에 대해 반환되는 데이터로 덮어씁니다. 정확한 사용법은 Oid 멤버가 지정한 요청된 작업에 따라 달라집니다.
 

DATA.METHOD_INFORMATION.InputBufferLength

InformationBuffer의 버퍼에서 읽을 수 있는 데이터의 크기(바이트)입니다. Oid의 값에 따라 이 멤버에 적합한 값이 결정됩니다.

DATA.METHOD_INFORMATION.OutputBufferLength

드라이버가 쓸 수 있는 InformationBuffer 의 버퍼에 있는 바이트 수입니다.

DATA.METHOD_INFORMATION.MethodId

메서드 OID에 대해 실행할 메서드입니다. 메서드 OID 요청은 MethodId에 정의된 대로 여러 작업을 지원할 수 있습니다. 0보다 크거나 같은 모든 값일 수 있습니다. 0은 기본 메서드를 나타냅니다. NDIS는 미리 정의된 몇 가지 메서드를 사용하여 공용 메서드 OID를 정의할 수 있습니다. 미니포트 드라이버는 사용자 지정 메서드 OID를 정의할 수 있습니다. 사용자 지정 OID에 대한 자세한 내용은 OID_GEN_SUPPORTED_GUIDS 참조하세요.

DATA.METHOD_INFORMATION.BytesWritten

쿼리 정보 요청을 위해 InformationBuffer 에서 기본 드라이버 또는 NDIS가 버퍼로 전송하는 바이트 수입니다. NdisOidRequest 함수가 NDIS_STATUS_INVALID_LENGTH 반환하는 경우 이 멤버의 값은 의미가 없습니다.

메서드 OID의 경우 BytesWrittenOutputBufferLength 멤버의 값보다 작거나 같아야 합니다.

DATA.METHOD_INFORMATION.BytesRead

정보 설정 요청에 대해 InformationBuffer 의 버퍼에서 기본 드라이버가 읽은 바이트 수입니다.

메서드 OID의 경우 BytesReadInputBufferLength 멤버의 값보다 작거나 같아야 합니다.

DATA.METHOD_INFORMATION.BytesNeeded

쿼리 정보를 반환하거나 지정된 OID_ XXX 코드에서 요청한 집합 작업을 수행하는 데 필요한 바이트 수입니다.

NdisOidRequest가 NDIS_STATUS_SUCCESS 반환하는 경우 이 멤버의 값은 의미가 없습니다. 쿼리에서 지정된 OID_ XXX에 대해 InformationBufferLength가 너무 작으면 이 멤버는 요청을 충족하는 데 필요한 버퍼의 크기를 나타냅니다. InformationBuffer의 버퍼에 집합의 지정된 OID_ XXX에 대한 충분한 데이터가 없는 경우 이 멤버는 필요한 데이터의 양을 나타냅니다.

_REQUEST_DATA

NdisReserved[NDIS_OID_REQUEST_NDIS_RESERVED_SIZE * sizeof(PVOID)]

NDIS용으로 예약된 영역입니다.

MiniportReserved[2 * sizeof(PVOID)]

미니포트 드라이버용으로 예약된 영역입니다.

SourceReserved[2 * sizeof(PVOID)]

원래 드라이버용으로 예약된 영역입니다. NDIS_OID_REQUEST 구조체의 할당자용으로 예약됩니다. 일반적으로 NDIS 프로토콜 드라이버 또는 NDIS 필터 드라이버입니다.

SupportedRevision

OID 요청을 처리할 때 NDIS 6.0 이상 드라이버에서 지원한 NDIS 구조의 수정 버전입니다. 수정된 구조체는 내부에 NDIS_OBJECT_HEADER 구조체가 있는 NDIS 6.0 구조체입니다. 드라이버가 OID 설정에 성공하면 SupportedRevision 을 지원되는 구조의 수정 번호로 설정해야 합니다. NDIS 버전 정보에 대한 자세한 내용은 NDIS 버전 정보 지정을 참조하세요.

Reserved1

나중에 사용하기 위해 예약되어 있습니다.

Reserved2

나중에 사용하기 위해 예약되어 있습니다.

SwitchId

VPortId로 지정된 대상 VPort가 실행 중인 스위치를 식별하는 NDIS_NIC_SWITCH_ID 값입니다.

참고

이 필드는 NDIS 6.50 이상에서 지원됩니다.

VPortId

이 OID 요청이 대상으로 하는 VPort를 식별하는 NDIS_NIC_SWITCH_VPORT_ID 값입니다. 이 필드는 NDIS_OID_REQUEST_FLAGS_VPORT_ID_VALID 플래그가 설정된 경우에만 유효한 것으로 간주됩니다.

참고

이 필드는 NDIS 6.50 이상에서 지원됩니다.

Flags

이 OID 요청에 대한 비트 OR 플래그를 포함하는 ULONG 값입니다. 현재 이러한 플래그는 지원됩니다.

플래그 설명
NDIS_OID_REQUEST_FLAGS_VPORT_ID_VALID 0x0001 이 플래그가 설정되면 VportId 멤버는 유효한 것으로 간주되며 OID가 대상으로 지정된 VPort를 식별합니다. 이 플래그가 설정되지 않은 경우 OID는 미니포트 어댑터 자체에 대한 것입니다.

참고

이 필드는 NDIS 6.50 이상에서 지원됩니다.

설명

프로토콜 드라이버 또는 필터 드라이버는 InformationBuffer 의 버퍼 및 NDIS_OID_REQUEST 구조에 대해 페이지가 없는 메모리를 할당해야 합니다. 페이징된 메모리에서 할당된 데이터를 사용하면 기본 드라이버가 IRQL = DISPATCH_LEVEL 실행되어 요청된 작업을 수행하기 때문에 심각한 페이지 오류가 발생할 수 있습니다.

NDIS_OID_REQUEST 프로토콜 드라이버가 기본 드라이버를 요청할 수 있는 각 작업 유형에 대한 데이터 하위 구조를 포함합니다. NdisOidRequest를 호출하기 전에 프로토콜 드라이버는 Oid 멤버에 지정된 쿼리 또는 설정 작업을 나타내는 하위 구조의 관련 멤버를 채웁니다. NDIS 또는 기본 드라이버는 호출자에게 컨트롤을 반환하기 전에 나머지 멤버를 채웁니다.

일부 OID 요청을 사용하면 미니포트 드라이버가 상태 표시와 함께 OID 완료 상태를 제공할 수 있습니다. 이 경우 미니포트 드라이버는 OID 요청의 완료 상태에 대한 NDIS_STATUS_INDICATION_REQUIRED 반환합니다. 미니포트 드라이버는 특정 OID에서 허용하지 않는 한 이 상태를 반환할 수 없습니다. 이 상태가 허용되는지 확인하려면 OID 참조 페이지를 참조하세요.

상태 표시가 미니포트 드라이버가 NDIS_STATUS_INDICATION_REQUIRED 반환한 OID 요청과 연결된 경우 상태 표시를 만드는 드라이버는 NDIS_STATUS_INDICATION 구조에서 DestinationHandleRequestId 멤버를 설정해야 합니다.

이 경우 드라이버는 DestinationHandleRequestId 멤버를 각각 NDIS_OID_REQUEST 구조의 RequestHandleRequestId 멤버의 값으로 설정합니다.

예를 들어 무선 네트워킹에서 OID 요청 처리는 완료하는 데 매우 오랜 시간이 걸릴 수 있습니다. 이 경우 미니포트 드라이버는 OID 요청을 즉시 완료하고 나중에 상태 표시를 제공하여 OID 요청에 대한 최종 결과를 제공할 수 있습니다.

NdisRequestGenericn(1-4) 형식은 자체 내부 요청을 만드는 미니포트 드라이버에 사용할 수 있습니다. 이러한 요청을 구현하기 위해 미니포트 드라이버는 이러한 제네릭 형식 중 하나에 내부 변수를 할당합니다.

요구 사항

   
지원되는 최소 클라이언트 NDIS 6.0 이상에서 지원됩니다.
헤더 ndis/oidrequest.h(ndis.h 포함)

추가 정보

NDIS_OBJECT_HEADER

NDIS_REQUEST_TYPE

NDIS_STATUS_INDICATION

NdisOidRequest

OID_GEN_SUPPORTED_GUIDS