다음을 통해 공유


프로토콜 드라이버 초기화

시스템은 드라이버를 로드한 후 프로토콜 드라이버의 DriverEntry 루틴을 호출합니다. 프로토콜 드라이버는 시스템 서비스로 로드됩니다. 미니포트 드라이버가 로드되기 전, 도중 또는 후에 언제든지 로드할 수 있습니다.

프로토콜 드라이버는 드라이버 리소스를 할당하고 DriverEntry내에서 ProtocolXxx 함수를 등록합니다. 여기에는 CoNDIS 클라이언트 및 독립 실행형 통화 관리자가 포함됩니다. 프로토콜 드라이버는 ProtocolXxx 함수를 NDIS에 등록하기 위해 NdisRegisterProtocolDriver 함수를 호출합니다.

DriverEntry는 드라이버가 NDIS 프로토콜 드라이버로 성공적으로 등록된 경우 STATUS_SUCCESS 또는 NDIS_STATUS_SUCCESS를 반환합니다. DriverEntryNdisXxx 함수 또는 커널 모드 지원 루틴에서 반환된 오류 상태를 전파하여 초기화에 실패하면 드라이버가 로드되지 않습니다. DriverEntry 동기적으로 실행해야 합니다. 즉, STATUS_PENDING 또는 해당 NDIS_STATUS_PENDING 반환할 수 없습니다.

NDIS 프로토콜 드라이버의 DriverEntry 함수는 NdisRegisterProtocolDriver 함수를 호출해야 합니다. NDIS 라이브러리에 드라이버의 ProtocolXxx 진입점을 등록하기 위해 프로토콜 드라이버는 NDIS_PROTOCOL_DRIVER_CHARACTERISTICS 구조를 초기화하고 NdisRegisterProtocolDriver전달합니다.

NdisRegisterProtocolDriver를 호출하는 드라이버는 ProtocolXxx 함수에 대한 즉각적인 호출을 준비해야 합니다.

NDIS 프로토콜 드라이버는 레거시 드라이버가 제공하는 함수의 업데이트된 버전인 다음 ProtocolXxx 함수를 제공합니다.

프로토콜 설정 옵션

ProtocolBindAdapterEx

ProtocolUnbindAdapterEx

ProtocolOpenAdapterCompleteEx

ProtocolCloseAdapterCompleteEx

ProtocolNetPnPEvent

protocolUninstall

NDIS 프로토콜 드라이버는 송신 및 수신 작업에 대해 다음과 같은 ProtocolXxx 함수를 제공합니다.

ProtocolReceiveNetBufferLists

ProtocolSendNetBufferListsComplete

모든 유형의 NDIS 프로토콜 드라이버는 PnP(플러그 앤 플레이)를 지원하기 위해 ProtocolBindAdapterExProtocolUnbindAdapterEx 함수들을 완전한 기능으로 등록해야 합니다. 일반적으로 DriverEntry 함수는 상태 값이 STATUS_SUCCESS 또는 NDIS_STATUS_SUCCESS 있는 컨트롤을 반환하기 직전에 NdisRegisterProtocolDriver 호출해야 합니다.

NDIS 정의 ProtocolXxx 함수 외에도 표준 커널 모드 드라이버 루틴 집합을 내보내는 모든 프로토콜 드라이버는 DriverEntry 함수에 전달되는 지정된 드라이버 개체에서 해당 드라이버 루틴의 진입점을 설정해야 합니다. 이러한 프로토콜 드라이버의 DriverEntry 함수의 기능에 대한 자세한 내용은 DriverEntry 루틴작성을 참조하세요.

드라이버가 네트워크 I/O 작업을 수행하는 데 필요한 리소스를 할당하려고 시도했을 때 실패하면, DriverEntry는 이미 할당된 모든 리소스를 해제하고 STATUS_SUCCESS 또는 NDIS_STATUS_SUCCESS 이외의 상태로 컨트롤을 반환해야 합니다.

NdisRegisterProtocolDriver성공적으로 호출한 후 오류가 발생하는 경우 드라이버는 DriverEntry 반환하기 전에 NdisDeregisterProtocolDriver 함수를 호출해야 합니다.

프로토콜 드라이버가 선택적 서비스를 구성할 수 있도록 NDIS는 프로토콜 드라이버가 NdisRegisterProtocolDriver호출한 컨텍스트 내에서 ProtocolSetOptions 함수를 호출합니다. 선택적 서비스에 대한 자세한 내용은 선택적 프로토콜 드라이버 서비스 구성하는참조하세요.

CoNDIS 클라이언트 드라이버는 ProtocolSetOptions 함수에서 NdisSetOptionalHandlers 함수를 호출해야 합니다. 드라이버는 NDIS_CO_CLIENT_OPTIONAL_HANDLERS 구조체를 초기화하고 이를 NdisSetOptionalHandlersOptionalHandlers 매개변수에 전달합니다.

또한 CoNDIS 독립 실행형 호출 관리자는 ProtocolSetOptions 함수에서 NdisSetOptionalHandlers 함수를 호출해야 합니다. 드라이버는 NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS 구조체를 초기화한 후, 이를 OptionalHandlers 매개 변수로 NdisSetOptionalHandlers에 전달합니다.

MCM은 프로토콜 드라이버가 아닙니다. 따라서 MiniportSetOptions 함수에서 NdisSetOptionalHandlers 함수를 호출해야 합니다. MCM은 NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS 구조를 초기화한 후, NdisSetOptionalHandlers함수의 OptionalHandlers 매개 변수로 전달합니다.

프로토콜 드라이버는 NDIS를 사용하여 등록을 취소하기 위해 언로드 루틴에서 NdisDeregisterProtocolDriver 호출합니다.

프로토콜 드라이버를 제거하기 전에 정리 작업을 수행하려면 프로토콜 드라이버가 ProtocolUninstall 함수를 등록할 수 있습니다. ProtocolUninstall 함수는 선택 사항입니다. 예를 들어 중간 드라이버의 프로토콜 아래쪽 가장자리에는 ProtocolUninstall 함수가 필요할 수 있습니다. 중간 드라이버는 NDIS가 MiniportDriverUnload 함수를 호출하기 전에 프로토콜 에지 리소스를 ProtocolUninstall 해제할 수 있습니다.