NdisCoOidRequest 함수(ndis.h)

NdisCoOidRequest 함수는 대상 드라이버의 OID 지정 정보를 쿼리하거나 설정하기 위해 대상 CoNDIS 드라이버에 요청을 전달합니다.

구문

NDIS_STATUS NdisCoOidRequest(
  [in]           NDIS_HANDLE       NdisBindingHandle,
  [in, optional] NDIS_HANDLE       NdisAfHandle,
  [in, optional] NDIS_HANDLE       NdisVcHandle,
  [in, optional] NDIS_HANDLE       NdisPartyHandle,
  [in, out]      PNDIS_OID_REQUEST OidRequest
);

매개 변수

[in] NdisBindingHandle

바인딩의 대상 어댑터를 식별하는 NdisOpenAdapterEx 함수가 반환한 핸들입니다.

[in, optional] NdisAfHandle

클라이언트, 통화 관리자 및 NDIS 간에 공유되는 AF(주소 패밀리)를 식별하는 핸들입니다. 이 핸들은 다음과 같이 가져옵니다.

  • 호출자가 호출 관리자를 요청하는 클라이언트인 경우 클라이언트는 원래 에 대한 성공적인 호출에서 이 핸들을 얻었습니다. NdisClOpenAddressFamilyEx 함수입니다.
  • 호출자가 클라이언트에 요청을 하는 독립 실행형 호출 관리자 또는 MCM(미니포트 호출 관리자)인 경우 호출 관리자 또는 MCM은 원래 이 핸들을 ProtocolCmOpenAf 함수에 대한 입력 매개 변수로 획득했습니다.
클라이언트 또는 독립 실행형 호출 관리자에서 기본 미니포트 드라이버로 요청하려면 이 매개 변수가 NULL이어야 합니다.

[in, optional] NdisVcHandle

요청이 VC별인 경우 호출자가 요청하거나 정보를 설정하는 VC(가상 연결)를 식별하는 핸들입니다. 그렇지 않으면 이 매개 변수가 NULL이면 요청이 VC에 특정되지 않습니다. VC 관련 요청의 경우 호출자는 원래 NdisCoCreateVc 함수를 사용하여 VC를 만들 때 또는 ProtocolCoCreateVc 함수에 대한 입력 매개 변수로 이 핸들을 얻었습니다. 기본 미니포트 드라이버로 전달되는 VC 관련 요청의 경우 이 핸들은 VC를 식별하는 반면 NdisAfHandleNdisPartyHandleNULL입니다.

[in, optional] NdisPartyHandle

요청이 파티별인 경우 호출자가 요청하거나 정보를 설정하는 다중 포인트 VC의 파티를 식별하는 핸들입니다. 그렇지 않으면 이 매개 변수가 NULL이면 요청이 파티별이 아닙니다. 파티별 요청의 경우 클라이언트는 원래 NdisClAddParty 함수 또는 NdisClMakeCall 함수 또는 호출 관리자를 성공적으로 호출하여 이 핸들을 ProtocolCmAddParty 함수에 대한 입력 매개 변수로 획득했습니다. NdisAfHandleNULL이면 NdisPartyHandleNULL입니다.

[in, out] OidRequest

지정된 OID_XXX 코드로 요청된 작업을 쿼리하거나 정보를 설정하도록 지정하는 NDIS_OID_REQUEST 구조체에 대한 포인터입니다.

반환 값

대상 드라이버는 NdisCoOidRequest가 반환하는 NDIS_STATUS_XXX 코드(일반적으로 다음 값 중 하나)를 결정합니다.

반환 코드 설명
NDIS_STATUS_SUCCESS
요청 작업이 성공적으로 완료되었습니다.
NDIS_STATUS_PENDING
요청이 비동기적으로 처리되고 NDIS는 호출자의 를 호출합니다.요청 이 완료되면 ProtocolCoOidRequestComplete 함수입니다.
NDIS_STATUS_INVALID_OID
OidRequest 매개 변수에서 NDIS_OID_REQUEST 구조체의 Oid 멤버에 지정된 OID_XXX 코드는 기본 드라이버에서 유효하지 않거나 지원되지 않습니다.
NDIS_STATUS_INVALID_LENGTH 또는 NDIS_STATUS_BUFFER_TOO_SHORT
OidRequest에서 NDIS_OID_REQUEST 구조화된 버퍼의 InformationBufferLength 멤버에 지정된 값이 지정된 OID_XXX 코드에 대한 요구 사항과 일치하지 않습니다. 정보 버퍼가 너무 작으면 NdisCoOidRequest가 반환될 때 NDIS_OID_REQUEST BytesNeeded 멤버에 InformationBufferLength에 대한 올바른 값이 포함됩니다.
NDIS_STATUS_INVALID_DATA
지정된 NDIS_OID_REQUEST 구조의 InformationBuffer에 제공된 데이터는 지정된 OID_XXX 코드에 유효하지 않습니다.
NDIS_STATUS_NOT_SUPPORTED 또는 NDIS_STATUS_NOT_RECOGNIZED
기본 드라이버는 요청된 작업을 지원하지 않습니다.
NDIS_STATUS_RESOURCES
리소스 부족으로 인해 요청을 충족할 수 없습니다. 일반적으로 이 반환 값은 메모리 할당 시도가 실패했음을 나타내지만, 나중에 제출된 경우 동일한 요청이 동일한 이유로 실패함을 반드시 나타내는 것은 아닙니다.
NDIS_STATUS_NOT_ACCEPTED
기본 드라이버는 요청된 작업(일반적으로 설정된 요청)을 시도했지만 작업이 실패했습니다. 예를 들어 멀티캐스트 주소를 너무 많이 설정하려고 하면 NdisCoOidRequest 에서 이 값을 반환할 수 있습니다.
NDIS_STATUS_CLOSING 또는 NDIS_STATUS_CLOSING_INDICATING
닫기 작업이 진행 중이므로 기본 드라이버가 요청된 작업에 실패했습니다.
NDIS_STATUS_RESET_IN_PROGRESS
기본 미니포트 드라이버는 현재 영향을 받는 NIC를 다시 설정하기 때문에 현재 요청을 충족할 수 없습니다. 호출자의 ProtocolStatusEx 함수는 초기화가 진행 중임을 나타내기 위해 NDIS_STATUS_RESET_START 호출되거나 호출됩니다. 이 반환 값이 동일한 이유로 나중에 제출된 경우 동일한 요청이 실패함을 반드시 나타내는 것은 아닙니다.
NDIS_STATUS_FAILURE
이 값은 일반적으로 더 구체적인 NDIS_STATUS_XXX 로 인해 기본 드라이버가 요청에 실패하지 않을 때 반환되는 비특이적 기본값입니다.
NDIS_STATUS_REQUEST_ABORTED
미니포트 드라이버가 요청 처리를 중지했습니다. 예를 들어 NDIS는 기본 미니포트 드라이버의 MiniportResetEx 또는 MiniportCancelOidRequest 함수입니다.

설명

CoNDIS 클라이언트 및 독립 실행형 호출 관리자는 NdisCoOidRequest 함수를 호출하여 OID 요청을 보내 대상 드라이버에서 OID 지정 정보를 쿼리하거나 설정할 수 있습니다. 대상 드라이버는 다른 CoNDIS 프로토콜 드라이버 또는 기본 드라이버일 수 있습니다.

NdisCoOidRequest 호출자는 지정된 OID와 연결된 정보 버퍼를 보유할 수 있는 충분한 메모리를 할당해야 합니다. 또한 호출자는 NdisCoOidRequest를 호출하기 전에 OidRequest에서 버퍼를 할당하고 설정해야 합니다. 대상 드라이버가 요청을 처리하는 동안 발생한 IRQL에서 실행할 수 있으므로 두 버퍼는 모두 비페이지 풀에서 할당되어야 합니다.

NdisCoOidRequest가 반환하는 일부 오류는 다음을 포함하여 복구할 수 있습니다.

  • NDIS_STATUS_INVALID_OID
  • NDIS_STATUS_INVALID_LENGTH
  • NDIS_STATUS_BUFFER_TOO_SHORT
  • NDIS_STATUS_INVALID_DATA
  • NDIS_STATUS_RESOURCES
  • NDIS_STATUS_RESET_IN_PROGRESS
즉, 드라이버는 OidRequest에서 패킷을 적절하게 수정하여 informationBuffer에서 OID_XXX 코드 또는 버퍼의 크기 또는 내용을 수정하고 요청 패킷을 NdisCoOidRequest에 다시 제출할 수 있습니다. 드라이버가 NdisCoOidRequest 에 다시 제출할 때 원래 호출에서 초기화가 진행 중임을 나타내거나 일시적인 리소스 부족으로 인해 해당 요청이 수행되지 않도록 하면 동일한 패킷이 충족될 수 있습니다.

NdisAfHandle 매개 변수의 값에 따라 클라이언트 및 독립 실행형 호출 관리자는 NdisCoOidRequest를 호출하여 서로 또는 기본 연결 지향 미니포트 드라이버와 통신합니다.

드라이버가 NdisVcHandle에 대해 NULL을 전달하는 경우 요청이 클라이언트, 호출 관리자 또는 미니포트 드라이버로 전달되는지 여부에 관계없이 요청은 기본적으로 전역적입니다. 예를 들어 호출자가 NdisVcHandleNULL이 아닌 값을 제공하는 경우 기본 연결 지향 미니포트 드라이버에 대한 OID_GEN_CO_RCV_CRC_ERROR OID 요청은 특정 VC에 대해 발생한 CRC(순환 중복 검사) 오류 수를 반환합니다. NULL for NdisVcHandle과 동일한 요청의 경우 기본 미니포트 드라이버는 모든 VC에 대해 발생한 총 CRC 오류 수를 반환합니다.

클라이언트 및 독립 실행형 호출 관리자는 프로토콜 드라이버가 기본 NIC 드라이버에 바인딩된 후 초기화 중에 일반적으로 실행되는 OID_GEN_SUPPORTED_LIST 쿼리에서 반환되는 것과 같이 연결 지향적이지 않은 모든 OID에 대해 NdisOidRequest 함수를 호출해야 합니다.

NdisCoOidRequest가 NDIS_STATUS_PENDING 반환하면 요청이 비동기적으로 처리되고 NDIS가 드라이버의 를 호출합니다.요청 이 완료되면 ProtocolCoOidRequestComplete 함수입니다. NdisCoOidRequest가 다른 상태 반환하는 경우 NdisCoOidRequest가 반환되고 NDIS가 ProtocolCoOidRequestComplete를 호출하지 않으면 요청이 완료됩니다.

NdisCoOidRequestNdisOidRequest와 함께 사용하도록 정의된 OID 집합에 대한 자세한 내용은 NDIS OID를 참조하세요.

프로토콜 드라이버인 클라이언트 및 독립 실행형 통화 관리자만 NdisCoOidRequest를 호출할 수 있습니다. MCM은 NdisMCmOidRequest 함수를 호출하여 클라이언트와 통신합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 NDIS 6.0 이상에서 지원됩니다.
대상 플랫폼 데스크톱
머리글 ndis.h(Ndis.h 포함)
라이브러리 Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 규정 준수 규칙 Irql_Connection_Function(ndis)

추가 정보

MiniportCancelOidRequest

MiniportResetEx

NDIS_OID_REQUEST

NdisClAddParty

NdisClMakeCall

NdisClOpenAddressFamilyEx

NdisCoCreateVc

NdisMCmOidRequest

NdisOidRequest

NdisOpenAdapterEx

OID_GEN_CO_RCV_CRC_ERROR

OID_GEN_SUPPORTED_LIST

ProtocolCmAddParty

ProtocolCmOpenAf

ProtocolCoCreateVc

ProtocolCoOidRequestComplete

ProtocolStatusEx