PROTOCOL_DIRECT_OID_REQUEST_COMPLETE 콜백 함수(ndis.h)

ProtocolDirectOidRequestComplete 함수는 NdisDirectOidRequest 함수가 NDIS_STATUS_PENDING 반환한 프로토콜 드라이버 시작 직접 OID 요청의 처리를 완료합니다.

참고PROTOCOL_DIRECT_OID_REQUEST_COMPLETE 형식을 사용하여 함수를 선언해야 합니다. 자세한 내용은 다음 예제 섹션을 참조하세요.
 

구문

PROTOCOL_DIRECT_OID_REQUEST_COMPLETE ProtocolDirectOidRequestComplete;

void ProtocolDirectOidRequestComplete(
  [in] NDIS_HANDLE ProtocolBindingContext,
  [in] PNDIS_OID_REQUEST OidRequest,
  [in] NDIS_STATUS Status
)
{...}

매개 변수

[in] ProtocolBindingContext

프로토콜 드라이버가 바인딩당 런타임 상태를 유지하는 프로토콜 드라이버 할당 컨텍스트 영역에 대한 핸들입니다. 드라이버는 NdisOpenAdapterEx 함수를 호출할 때 이 핸들을 제공했습니다.

[in] OidRequest

이전에 NdisDirectOidRequest 함수에 전달된 프로토콜 드라이버 제공 NDIS_OID_REQUEST 구조체에 대한 포인터입니다.

[in] Status

요청의 최종 상태. 기본 드라이버 또는 NDIS는 이 최종 상태 결정합니다. 이 매개 변수는 OidRequest의 정보로 ProtocolDirectOidRequestComplete가 수행하는 작업을 결정합니다.

반환 값

없음

설명

ProtocolDirectOidRequestComplete 는 선택적 함수입니다. 프로토콜 드라이버가 직접 OID 요청을 사용하지 않는 경우 를 호출할 때 이 함수의 진입점을 NULL 로 설정할 수 있습니다. NdisRegisterProtocolDriver 함수.

ProtocolDirectOidRequestComplete 는 다음과 같이 Status 매개 변수의 입력 값을 사용합니다.

  • 상태가 NDIS_STATUS_SUCCESS 경우 NDIS_OID_REQUEST 구조체의 BytesRead 또는 BytesWritten 멤버가 NDIS 또는 기본 드라이버에 의해 설정됩니다. 이러한 값은 설정된 작업에서 InformationBuffer 의 버퍼에서 NIC로 전송된 프로토콜 드라이버 제공 정보의 양 또는 쿼리 작업에 대한 응답으로 InformationBuffer 에서 반환된 정보의 양을 지정합니다.

    프로토콜 드라이버가 쿼리를 수행한 경우 ProtocolDirectOidRequestCompleteOid 멤버의 값에 따라 프로토콜 드라이버가 결정하는 모든 방식으로 InformationBuffer에서 반환되는 데이터를 사용할 수 있습니다.

    예를 들어 프로토콜 드라이버가 원래 을 시작한 경우 쿼리를 OID_GEN_MAXIMUM_SEND_PACKETSProtocolDirectOidRequestCompleteProtocolBindingContext 영역에서 상태 변수를 설정하여 드라이버가 후속 호출에 대해 설정할 미해결 전송 수를 제한할 수 있습니다. NdisSendNetBufferLists 함수입니다 .

  • Status가 NDIS_STATUS_INVALID_LENGTH 또는 NDIS_STATUS_BUFFER_TOO_SHORT 경우 BytesNeeded 멤버는 요청된 작업을 수행하는 데 필요한 InformationBufferLength 멤버의 OID별 값을 지정합니다.

    이러한 상황에서 ProtocolDirectOidRequestComplete 는 요청에 충분한 버퍼 공간을 할당하고, 필요한 InformationBufferLength 값과 동일한 Oid 값을 사용하여 다른 NDIS_OID_REQUEST 구조를 설정하고, NdisDirectOidRequest 함수에 대한 호출을 다시 시도할 수 있습니다.

    ProtocolDirectOidRequestCompleteNdisDirectOidRequest에 설명된 것처럼 다른 특정 NDIS_STATUS_ Xxx 인수에 대한 요청을 다시 시도할 수 있습니다.

  • Status가 복구할 수 없는 오류인 NDIS_STATUS_ Xxx 값인 경우 ProtocolDirectOidRequestComplete는 NDIS_OID_REQUEST 구조에 할당된 메모리를 해제하고 드라이버가 바인딩을 닫거나 바인딩에 대한 지속적인 네트워크 I/O 작업을 처리하기 위해 바인딩 관련 상태 정보를 조정해야 하는지 여부를 결정해야 합니다.
ProtocolDirectOidRequestComplete는 프로토콜 드라이버가 NdisDirectOidRequest가 Status에서 반환하는 상태 코드를 검사할 시간이 되기 전에 호출할 수 있습니다.

NDIS는 IRQL <= DISPATCH_LEVEL ProtocolDirectOidRequestComplete를 호출합니다.

ProtocolDirectOidRequestComplete 함수를 정의하려면 먼저 정의 중인 함수의 형식을 식별하는 함수 선언을 제공해야 합니다. Windows는 드라이버에 대한 함수 형식 집합을 제공합니다. 함수 형식을 사용하여 함수를 선언하면 드라이버에 대한 코드 분석, SDV( 정적 드라이버 검증 도구 ) 및 기타 확인 도구에서 오류를 찾을 수 있으며 Windows 운영 체제용 드라이버를 작성하기 위한 요구 사항입니다.

예를 들어 " MyDirectOidRequestComplete"라는 ProtocolDirectOidRequestComplete 함수를 정의하려면 다음 코드 예제와 같이 PROTOCOL_DIRECT_OID_REQUEST_COMPLETE 형식을 사용합니다.

PROTOCOL_DIRECT_OID_REQUEST_COMPLETE MyDirectOidRequestComplete;

그런 다음 다음과 같이 함수를 구현합니다.

_Use_decl_annotations_
VOID
 MyDirectOidRequestComplete(
    NDIS_HANDLE  ProtocolBindingContext,
    PNDIS_OID_REQUEST  OidRequest,
    NDIS_STATUS  Status
    )
  {...}

PROTOCOL_DIRECT_OID_REQUEST_COMPLETE 함수 형식은 Ndis.h 헤더 파일에 정의되어 있습니다. 코드 분석 도구를 실행할 때 오류를 보다 정확하게 식별하려면 함수 정의에 Use_decl_annotations 주석을 추가해야 합니다. Use_decl_annotations 주석은 헤더 파일의 PROTOCOL_DIRECT_OID_REQUEST_COMPLETE 함수 형식에 적용되는 주석이 사용되도록 합니다. 함수 선언 요구 사항에 대한 자세한 내용은 NDIS 드라이버에 함수 역할 형식을 사용하여 함수 선언을 참조하세요.

Use_decl_annotations 대한 자세한 내용은 함수 동작 주석 지정을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 NDIS 6.1 이상에서 지원됩니다.
대상 플랫폼 Windows
헤더 ndis.h(Ndis.h 포함)
IRQL <= DISPATCH_LEVEL

추가 정보

NDIS_OID_REQUEST

NdisDirectOidRequest

NdisMDirectOidRequestComplete

NdisOpenAdapterEx

NdisRegisterProtocolDriver

OID_GEN_MAXIMUM_SEND_PACKETS