PROTOCOL_UNBIND_ADAPTER_EX 콜백 함수(ndis.h)

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

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

구문

PROTOCOL_UNBIND_ADAPTER_EX ProtocolUnbindAdapterEx;

NDIS_STATUS ProtocolUnbindAdapterEx(
  [in] NDIS_HANDLE UnbindContext,
  [in] NDIS_HANDLE ProtocolBindingContext
)
{...}

매개 변수

[in] UnbindContext

이 바인딩되지 않은 작업에 대한 NDIS 컨텍스트 영역을 식별하는 핸들입니다.

[in] ProtocolBindingContext

프로토콜 드라이버에서 할당한 컨텍스트 영역에 대한 핸들입니다. 프로토콜 드라이버는 이 컨텍스트 영역에서 바인딩별 컨텍스트 정보를 유지 관리합니다. 드라이버가 NdisOpenAdapterEx 함수를 호출할 때 드라이버가 NDIS에 이 핸들을 제공했습니다.

반환 값

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

반환 코드 설명
NDIS_STATUS_SUCCESS
ProtocolUnbindAdapterEx가 기본 미니포트 어댑터에서 성공적으로 바인딩 해제되었습니다.
NDIS_STATUS_PENDING
ProtocolUnbindAdapterEx 가 바인딩되지 않은 작업을 완료하지 않았으며 작업이 비동기적으로 완료됩니다. 프로토콜 드라이버는 다음을 호출해야 합니다.바인딩 해제 작업이 완료된 후 NdisCompleteUnbindAdapterEx 함수입니다.

설명

ProtocolUnbindAdapterEx 는 필수 함수입니다. ProtocolBindAdapterEx 함수의 상호로서 NDIS는 ProtocolUnbindAdapterEx를 호출하여 바인딩과 관련된 네트워크 I/O 작업에 대해 드라이버가 할당한 리소스를 해제합니다. 프로토콜 드라이버는 바인딩되지 않은 작업을 실패할 수 없습니다.

ProtocolUnbindAdapterEx를 호출하기 전에 NDIS는 프로토콜 바인딩을 일시 중지합니다. 바인딩을 일시 중지하기 위해 NDIS 는 ProtocolNetPnPEvent 함수를 호출하고 NetEventPause 이벤트를 구체적으로 지정합니다.

ProtocolUnbindAdapterExNdisCloseAdapterEx 함수를 호출하여 기본 미니포트 어댑터에 대한 바인딩을 닫아야 합니다. NdisCloseAdapterEx가 NDIS_STATUS_SUCCESS 반환하면 닫기 작업이 완료됩니다. NdisCloseAdapterEx가 NDIS_STATUS_PENDING 반환하는 경우 NDIS는 프로토콜 드라이버의 를 호출합니다.닫기 작업이 완료 된 후 ProtocolCloseAdapterCompleteEx 함수입니다.

NdisCloseAdapterEx를 호출하기 전에 프로토콜 드라이버는 바인딩에 대한 멀티캐스트 주소 목록 및 패킷 필터를 지워야 합니다. 프로토콜 드라이버는 바인딩 멀티캐스트 주소 목록을 NULL로 설정하고 패킷 필터를 0으로 설정합니다. 자세한 내용은 OID_802_3_MULTICAST_LIST 및 를 참조하세요. OID_GEN_CURRENT_PACKET_FILTER.

절전 모드 해제 패턴을 지정한 경우 프로토콜 드라이버는 OID_PNP_REMOVE_WAKE_UP_PATTERN OID를 사용하여 제거하고 OID_GEN_RECEIVE_SCALE_PARAMETERS OID를 사용하여 수신 쪽 크기 조정 매개 변수를 지 워야 합니다. NDIS 6.20 이상 프로토콜 드라이버는 OID_PM_REMOVE_WOL_PATTERN OID를 사용하여 wake-on-LAN 패턴을 제거하고 OID_PM_REMOVE_PROTOCOL_OFFLOAD OID를 사용하여 저전력 프로토콜 오프로드를 제거해야 합니다.

ProtocolUnbindAdapterEx 는 닫기 작업이 완료될 때까지 ProtocolBindingContext 에서 메모리를 해제해서는 안됩니다. NDIS는 ProtocolBindingContext 의 핸들을 ProtocolCloseAdapterCompleteEx에 전달합니다.

프로토콜 드라이버가 바인딩 해제 작업을 완료한 경우 ProtocolUnbindAdapterEx 는 NDIS_STATUS_SUCCESS 반환할 수 있습니다. NdisCloseAdapterEx가 NDIS_STATUS_PENDING 반환하는 경우 ProtocolUnbindAdapterEx는 NDIS가 ProtocolCloseAdapterCompleteEx를 호출할 때까지 기다려야 NDIS_STATUS_SUCCESS 반환할 수 있습니다.

ProtocolUnbindAdapterEx 는 NDIS_STATUS_PENDING 반환하여 바인딩되지 않은 작업의 완료를 나중에 연기할 수 있습니다. ProtocolUnbindAdapterEx가 NDIS_STATUS_PENDING 반환하는 경우 드라이버는 결국 을 호출해야 합니다.바인딩 해제 작업을 완료하는 NdisCompleteUnbindAdapterEx 함수입니다. NdisCloseAdapterEx 함수가 NDIS_STATUS_PENDING 반환된 경우 드라이버는 ProtocolCloseAdapterCompleteEx에서 바인딩되지 않은 작업을 완료할 수 있습니다. ProtocolUnbindAdapterExNdisCloseAdapterEx를 호출하기 전에 ProtocolBindingContext의 컨텍스트 영역에 있는 UnbindContext에 핸들을 저장할 수 있습니다. ProtocolUnbindAdapterEx가 핸들을 저장한 경우 ProtocolCloseAdapterCompleteEx는 핸들을 NdisCompleteUnbindAdapterEx에 전달하여 바인딩되지 않은 작업을 완료할 수 있습니다.

ProtocolUnbindAdapterExNdisCloseAdapterEx를 호출하는 즉시 NdisBindingHandle 매개 변수의 NdisOpenAdapterEx 함수에서 가져온 핸들이 잘못됩니다. ProtocolUnbindAdapterEx 는 이 핸들을 사용하여 NdisXxx 함수를 후속 호출할 수 없습니다. 드라이버는 닫기 작업이 완료될 때까지 기본 미니포트 어댑터에서 수신 및 상태 표시를 받을 수 있습니다.

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

전원 관리 및 RSS 설정 업데이트

NDIS 6.0 및 6.1 프로토콜 드라이버는 해당하는 경우 다음 작업을 수행해야 합니다.
  1. 를 사용하여 미니포트 어댑터에서 WOL(전원 관리 절전 모드 해제) 패턴을 제거합니다. OID_PNP_REMOVE_WAKE_UP_PATTERN Oid.
  2. 다음을 사용하여 수신 쪽 크기 조정 매개 변수를 지웁 OID_GEN_RECEIVE_SCALE_PARAMETERS Oid.
NDIS 6.20 이상 프로토콜 드라이버는 다음 작업을 수행해야 합니다.
  1. OID_PM_REMOVE_WOL_PATTERN OID를 사용하여 미니포트 어댑터에서 전원 관리 WOL 패턴을 제거합니다.
  2. 를 사용하여 미니포트 어댑터에서 전원 관리 프로토콜 오프로드 제거 OID_PM_REMOVE_PROTOCOL_OFFLOAD Oid.

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

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

PROTOCOL_UNBIND_ADAPTER_EX MyUnbindAdapterEx;

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

_Use_decl_annotations_
NDIS_STATUS
 MyUnbindAdapterEx(
    NDIS_HANDLE  UnbindContext,
    NDIS_HANDLE  ProtocolBindingContext
    )
  {...}

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

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

요구 사항

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

추가 정보

NdisCloseAdapterEx

NdisCompleteUnbindAdapterEx

NdisOpenAdapterEx

OID_802_3_MULTICAST_LIST

OID_GEN_CURRENT_PACKET_FILTER

OID_GEN_RECEIVE_SCALE_PARAMETERS

OID_PNP_REMOVE_WAKE_UP_PATTERN

ProtocolBindAdapterEx

ProtocolCloseAdapterCompleteEx

ProtocolNetPnPEvent