다음을 통해 공유


PROTOCOL_BIND_ADAPTER_EX 콜백 함수(ndis.h)

NDIS는 프로토콜 드라이버의 ProtocolBindAdapterEx 함수를 호출하여 드라이버가 미니포트 어댑터에 바인딩하도록 요청합니다.

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

구문

PROTOCOL_BIND_ADAPTER_EX ProtocolBindAdapterEx;

NDIS_STATUS ProtocolBindAdapterEx(
  [in] NDIS_HANDLE ProtocolDriverContext,
  [in] NDIS_HANDLE BindContext,
  [in] PNDIS_BIND_PARAMETERS BindParameters
)
{...}

매개 변수

[in] ProtocolDriverContext

드라이버가 상태 및 구성 정보를 유지하는 드라이버 할당 컨텍스트 영역에 대한 핸들입니다. 프로토콜 드라이버는 이 컨텍스트 영역을 에 전달했습니다. NdisRegisterProtocolDriver 함수.

[in] BindContext

이 바인딩 작업의 NDIS 컨텍스트 영역을 식별하는 핸들입니다.

[in] BindParameters

NDIS에서 만든 NDIS_BIND_PARAMETERS 구조체에 대한 포인터입니다.

반환 값

ProtocolBindAdapterEx는 다음 상태 값 중 하나를 반환합니다.

반환 코드 설명
NDIS_STATUS_SUCCESS
ProtocolBindAdapterEx 가 기본 미니포트 어댑터에 대한 바인딩을 성공적으로 완료했습니다.
NDIS_STATUS_PENDING
ProtocolBindAdapterEx 가 바인딩 작업을 완료하지 않았으며 작업이 비동기적으로 완료됩니다. 프로토콜 드라이버는 다음을 호출해야 합니다.작업이 완료되면 NdisCompleteBindAdapterEx 함수입니다.
NDIS_STATUS_RESOURCES
ProtocolBindAdapterEx 는 드라이버가 네트워크 I/O 작업을 수행하는 데 필요한 리소스를 할당할 수 없습니다.
NDIS_STATUS_XXX 또는 NTSTATUS_XXX
프로토콜 드라이버의 바인딩 설정 시도가 실패했습니다. 일반적으로 이러한 오류 상태 NdisXxx 함수 또는 커널 모드 지원 루틴에서 전파됩니다.

설명

ProtocolBindAdapterEx 는 필수 함수입니다. NDIS는 ProtocolBindAdapterEx 를 호출하여 프로토콜 드라이버가 바인딩할 수 있는 기본 미니포트 어댑터를 사용할 수 있게 될 때마다 바인딩 작업을 수행합니다.

ProtocolBindAdapterEx 는 바인딩 컨텍스트 정보를 유지하기에 충분한 메모리를 할당하고 NdisOpenAdapterEx 함수를 호출하여 기본 미니포트 어댑터에 자신을 바인딩합니다. ProtocolBindAdapterExNdisOpenAdapterExProtocolBindingContext 매개 변수에서 바인딩 컨텍스트 정보에 대한 포인터를 전달합니다. ProtocolBindAdapterExBindParameters 매개 변수의 AdapterName 멤버 값을 NdisOpenAdapterExOpenParameters 매개 변수의 AdapterName 멤버로 전달합니다.

드라이버가 NdisOpenAdapterEx를 호출하기 전에 드라이버는 BindParameters 의 포인터를 NdisOpenConfigurationEx 함수에 전달하여 미니포트 어댑터와 연결된 구성 매개 변수를 읽을 수 있습니다.

미니포트 어댑터를 성공적으로 연 후 드라이버는 NdisOpenAdapterExNdisHandle 매개 변수에서 NdisOpenConfigurationEx로 핸들을 전달하여 프로토콜 바인딩에 대한 구성 매개 변수가 저장된 레지스트리 위치에 대한 핸들을 가져올 수 있습니다.

ProtocolBindAdapterEx 는 프로토콜 드라이버가 지원할 수 있는 미디어 형식을 나열하는 중간 형식 값 배열에 대한 포인터를 NdisOpenAdapterEx 에 전달합니다. 이 목록은 NDIS_MEDIUM 형식의 하위 집합입니다. NDIS는 OpenParameters 구조체의 SelectedMediumIndex 매개 변수에서 선택한 중간 형식을 나타냅니다.

NdisOpenAdapterEx에서 오류 상태 반환하는 경우 ProtocolBindAdapterEx는 해당 오류 상태 반환하고, 프로토콜 드라이버가 할당한 바인딩별 리소스를 해제하고, 컨트롤을 즉시 반환합니다.

NdisOpenAdapterEx가 NDIS_STATUS_SUCCESS 반환하는 경우 ProtocolBindAdapterEx는 프로토콜 드라이버가 바인딩에서 네트워크 I/O를 수행하는 데 필요한 나머지 리소스를 할당할 수 있습니다. 또한 드라이버는 드라이버가 네트워크 I/O 작업을 추적하는 데 사용하는 바인딩별 컨텍스트 정보를 구성할 수 있습니다.

NdisOpenAdapterEx가 NDIS_STATUS_PENDING 반환하는 경우 NDIS는 프로토콜 드라이버의 를 호출합니다.열린 작업이 완료된 후 ProtocolOpenAdapterCompleteEx 함수입니다. ProtocolOpenAdapterCompleteEx 는 바인딩 작업을 완료할 수 있습니다. ProtocolBindAdapterEx 는 바인딩 컨텍스트 영역에 BindContext 핸들을 저장할 수 있습니다. NDIS는 ProtocolBindingContext를 입력 매개 변수로 드라이버의 ProtocolOpenAdapterCompleteEx 함수에 전달합니다.

NdisOpenAdapterEx가 NDIS_STATUS_PENDING 반환하면 NDIS는 구조체의 SelectedMediumIndex 멤버를 OpenParameters 매개 변수로 설정하고 NdisOpenAdapterEx가 반환된 후 NdisBindingHandle 매개 변수의 값을 설정합니다. NDIS는 ProtocolOpenAdapterCompleteEx를 호출하기 전에 이러한 값을 설정합니다. 따라서 프로토콜 드라이버는 개방형 매개 변수 구조와 프로토콜 바인딩 핸들 을 ProtocolBindingContext(또는 NDIS가 ProtocolOpenAdapterCompleteEx를 호출할 때까지 유효한 모든 위치)의 컨텍스트 영역에 저장해야 합니다.

프로토콜 드라이버는 열린 작업이 완료될 때까지 바인딩에 대해 OID 요청을 수행할 수 없습니다. 열기 작업이 완료된 후 바인딩이 일시 중지된 상태이므로 프로토콜 드라이버는 NDIS가 바인딩을 다시 시작할 때까지 보내기 요청을 수행할 수 없습니다.

열기 작업이 완료되면 ProtocolBindAdapterEx 는 NDIS_STATUS_SUCCESS 반환하여 바인딩 작업을 완료할 수 있습니다. ProtocolBindAdapterEx 는 NDIS_STATUS_PENDING 반환하여 바인딩 작업의 완료를 나중에 연기할 수 있습니다. ProtocolBindAdapterEx가 NDIS_STATUS_PENDING 반환하는 경우 드라이버는 를 호출해야 합니다.바인딩 작업이 완료 된 후 NdisCompleteBindAdapterEx 함수입니다.

프로토콜 드라이버는 NDIS_BIND_PARAMETERS 구조를 사용하여 기본 미니포트 어댑터의 기능을 결정해야 합니다. 열기 작업이 완료된 후 기본 미디어에 따라 프로토콜 드라이버는 NdisOidRequest 함수를 호출하여 기본 미니포트 드라이버(또는 NDIS)에 추가 미니포트 어댑터 기능을 쿼리할 수 있습니다. OID 요청에 대한 자세한 내용은 프로토콜 드라이버 OID 요청을 참조하세요.

NDIS는 프로토콜 드라이버의 를 호출할 수 있습니다.드라이버가 를 사용하여 바인딩에 대한 패킷 필터를 설정한 후 ProtocolReceiveNetBufferLists 함수 OID_GEN_CURRENT_PACKET_FILTER Oid. 기본 미니포트 어댑터가 들어오는 패킷에 패킷 필터를 사용하지 않는 경우 열기 작업이 완료된 후 수신 표시가 사용하도록 설정됩니다. 프로토콜 드라이버는 열린 작업이 완료된 후 ProtocolStatusEx 함수에서 상태 표시를 받을 수 있습니다.

모든 프로토콜 드라이버는 충분한 NET_BUFFERNET_BUFFER_LIST 구조 풀을 할당해야 합니다. 드라이버는 후속 보내기 작업을 위해 이러한 풀에서 네트워크 데이터 설명자를 할당합니다.

ProtocolBindAdapterEx가 후속 네트워크 I/O 작업을 수행하는 데 필요한 리소스를 할당할 수 없는 경우 이미 할당된 모든 리소스를 해제하고 적절한 오류 값을 반환해야 합니다.

NDIS는 프로토콜 드라이버의 를 호출합니다. ProtocolUnbindAdapterEx 함수는 드라이버가 기본 미니포트 어댑터에서 바인딩 해제되도록 요청합니다.

프로토콜 드라이버가 미니포트 어댑터를 성공적으로 열지만 바인딩 작업이 실패하는 경우(예: 실패한 OID 요청의 결과로) 드라이버는 ProtocolBindAdapterEx 또는 ProtocolUnbindAdapterEx의 컨텍스트 내에서 미니포트 어댑터를 닫아야 합니다. 예를 들어 드라이버는 ProtocolBindAdapterEx에서 NdisCloseAdapterEx를 호출하고 드라이버가 ProtocolBindAdapterEx에서 반환되기 전에 닫기 작업이 완료되기를 기다립니다. 또는 드라이버가 ProtocolBindAdapterEx에서 NDIS_STATUS_PENDING 반환하는 경우 드라이버는 NdisUnbindAdapter 함수를 호출하고 ProtocolUnbindAdapterEx 함수에서 NdisCloseAdapterEx를 호출할 수 있습니다.

NDIS는 IRQL = PASSIVE_LEVEL ProtocolBindAdapterEx 를 호출합니다.

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

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

PROTOCOL_BIND_ADAPTER_EX MyBindAdapterEx;

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

_Use_decl_annotations_
NDIS_STATUS
 MyBindAdapterEx(
    NDIS_HANDLE  ProtocolDriverContext,
    NDIS_HANDLE  BindContext,
    PNDIS_BIND_PARAMETERS  BindParameters
    )
  {...}

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

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

요구 사항

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

추가 정보

NDIS_BIND_PARAMETERS

NDIS_MEDIUM

NET_BUFFER

NET_BUFFER_LIST

NdisCloseAdapterEx

NdisCompleteBindAdapterEx

NdisOidRequest

NdisOpenAdapterEx

NdisOpenConfigurationEx

NdisRegisterProtocolDriver

NdisUnbindAdapter

OID_GEN_CURRENT_PACKET_FILTER

ProtocolOpenAdapterCompleteEx ProtocolReceiveNetBufferLists

ProtocolStatusEx

ProtocolUnbindAdapterEx