Share via


PROTOCOL_CO_OID_REQUEST 콜백 함수(ndis.h)

ProtocolCoOidRequest 함수는 CoNDIS 클라이언트 또는 독립 실행형 호출 관리자가 NdisCoOidRequest 함수를 호출하여 시작하거나 MCM(미니포트 호출 관리자) 드라이버가 NdisMCmOidRequest 함수를 호출하여 시작하는 OID 요청을 처리합니다.

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

구문

PROTOCOL_CO_OID_REQUEST ProtocolCoOidRequest;

NDIS_STATUS ProtocolCoOidRequest(
  [in]      NDIS_HANDLE ProtocolAfContext,
  [in]      NDIS_HANDLE ProtocolVcContext,
  [in]      NDIS_HANDLE ProtocolPartyContext,
  [in, out] PNDIS_OID_REQUEST OidRequest
)
{...}

매개 변수

[in] ProtocolAfContext

AF(주소 패밀리) 컨텍스트 영역을 식별하는 핸들입니다. 드라이버가 클라이언트인 경우 를 호출할 때 이 핸들을 제공했습니다. NdisClOpenAddressFamilyEx 함수는 호출 관리자에 자신을 연결합니다. 드라이버가 호출 관리자인 경우 ProtocolCmOpenAf 함수에서 이 핸들을 제공했습니다.

[in] ProtocolVcContext

요청이 VC별인 경우 정보를 쿼리하거나 설정할 VC(가상 연결)를 식별하는 핸들입니다. 그렇지 않으면 이 매개 변수는 NULL입니다.

[in] ProtocolPartyContext

요청이 파티별인 경우 정보를 쿼리하거나 설정할 다중 포인트 VC의 파티를 식별하는 핸들입니다. 그렇지 않으면 이 매개 변수는 NULL입니다.

[in, out] OidRequest

대상 드라이버가 처리할 버퍼와 요청 패킷을 모두 포함하는 NDIS_OID_REQUEST 구조체에 대한 포인터입니다. 요청에 따라 드라이버는 OidRequest 가 가리키는 구조에서 요청된 정보를 반환합니다.

반환 값

ProtocolCoOidRequest 는 다음 중 하나를 반환할 수 있습니다.

반환 코드 설명
NDIS_STATUS_SUCCESS
클라이언트 또는 호출 관리자가 요청된 작업을 수행했습니다.
NDIS_STATUS_PENDING
클라이언트 또는 호출 관리자가 이 요청을 비동기적으로 처리하며 NdisCoOidRequestComplete 함수 또는요청된 작업이 완료되면 NdisMCmOidRequestComplete 함수입니다.
NDIS_STATUS_INVALID_LENGTH 또는 NDIS_STATUS_BUFFER_TOO_SHORT
NdisCoOidRequest 또는 NdisMCmOidRequest 함수의 호출자가 지정된 요청에 대한 NDIS_OID_REQUEST 구조체의 InformationBuffer 멤버에 대한 적절한 값을 제공하지 않았기 때문에 드라이버가 요청에 실패합니다. 드라이버는 OidRequest 매개 변수의 버퍼에 있는 NDIS_OID_REQUEST BytesNeeded 멤버를 요청된 작업을 수행하는 데 필요한 InformationBufferLength 멤버의 OID별 값으로 설정합니다.
NDIS_STATUS_XXX
클라이언트 또는 호출 관리자가 세트에 대해 지정된 잘못된 입력 데이터와 같은 드라이버 결정 이유로 요청을 실패했습니다.
NDIS_STATUS_NOT_SUPPORTED
클라이언트 또는 호출 관리자가 NdisRequest의 버퍼에 있는 Oid 멤버의 OID_GEN_CO_XXX 코드를 인식하지 못하여 이 요청에 실패했습니다.

설명

ProtocolCoOidRequest 함수는 CoNDIS 클라이언트, 호출 관리자 및 MCM에 필요합니다. ProtocolCoOidRequest 는 미니포트 드라이버의 MiniportCoOidRequest 함수와 유사합니다.

CoNDIS 클라이언트와 호출 관리자는 NdisCoOidRequest 함수를 호출할 때 NdisAfHandle 매개 변수에 NULL이 아닌 값을 지정하여 서로 정보를 보냅니다. 마찬가지로 MCM은 NdisAfHandle에 대한 명시적 값을 사용하여 NdisMCmOidRequest를 호출하여 클라이언트에 정보를 전달합니다. NdisCoOidRequest 또는 NdisMCmOidRequest를 호출하면 NDIS가 지정된 AF 핸들과 연결된 대상 클라이언트, 호출 관리자 또는 MCM의 ProtocolCoOidRequest 함수를 호출합니다.

ProtocolCoOidRequest를 클라이언트로 등록하기 위해 드라이버는 를 초기화합니다. 구조체를 NDIS_CO_CLIENT_OPTIONAL_HANDLERSNdisSetOptionalHandlers 함수의 OptionalHandlers 매개 변수에 전달합니다. ProtocolCoOidRequest를 호출 관리자로 등록하려면 드라이버가 를 초기화합니다. 구조체를 NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERSOptionalHandlers 매개 변수에 전달합니다.

NdisCoOidRequest 또는 NdisMCmOidRequestNdisVcHandleNdisPartyHandle 매개 변수가 NULL인 경우 요청은 기본적으로 전역적입니다. 즉, NdisVcHandle 또는 NdisPartyHandle 에 대한 명시적 값은 ProtocolCoOidRequest 가 각각 VC별 또는 파티 단위로 지정된 요청을 충족해야 했음을 나타냅니다.

OidRequest 매개 변수의 버퍼는 페이지가 없는 풀에서 할당되었으므로 발생한 IRQL에서 액세스할 수 있습니다. NdisCoOidRequest(또는 NdisMCmOidRequest)의 호출자는 OidRequest가 가리키는 NDIS_OID_REQUEST 구조체의 InformationBuffer 멤버에서 이 버퍼 및 내부 버퍼를 해제해야 합니다.

ProtocolCoOidRequest가 NDIS_STATUS_PENDING 반환하는 경우 드라이버는 이후에 를 호출해야 합니다. NdisCoOidRequestComplete 함수 또는드라이버가 요청을 완료할 때 MCM 드라이버에 대한 NdisMCmOidRequestComplete 함수입니다.

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

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

PROTOCOL_CO_OID_REQUEST MyCoOidRequest;

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

_Use_decl_annotations_
NDIS_STATUS
 MyCoOidRequest(
    NDIS_HANDLE  ProtocolAfContext,
    NDIS_HANDLE  ProtocolVcContext,
    NDIS_HANDLE  ProtocolPartyContext,
    PNDIS_OID_REQUEST  OidRequest
    )
  {...}

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

Use_decl_annotations 대한 자세한 내용은 함수 동작에 주석을 추가를 참조하세요.

요구 사항

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

추가 정보

MiniportCoOidRequest

NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS NDIS_CO_CLIENT_OPTIONAL_HANDLERS

NDIS_OID_REQUEST

NdisClOpenAddressFamilyEx

NdisCoOidRequest

NdisCoOidRequestComplete

NdisMCmOidRequest

NdisMCmOidRequestComplete

NdisSetOptionalHandlers

ProtocolCmOpenAf