주소 패밀리 등록 및 열기
통화 관리자는 연결 지향 클라이언트에 통화 관리자 서비스를 제공하는 각 NIC에 대한 주소 패밀리를 등록해야 합니다. 마찬가지로 MCM 드라이버는 관리하는 NIC에 대한 주소 패밀리를 등록해야 합니다.
주소 패밀리를 등록하면 통화 관리자 또는 MCM 드라이버로 인해 NDIS는 어댑터에 바인딩되는 모든 연결 지향 클라이언트에 통화 관리자 또는 MCM 드라이버의 서비스를 보급합니다.
연결 지향 클라이언트가 통화 관리자 또는 MCM 드라이버에서 보급한 서비스를 사용할 수 있는 경우 통화 관리자 또는 MCM 드라이버로 주소 패밀리를 열 수 있습니다.
통화 관리자에서 주소 패밀리 등록
ProtocolBindAdapterEx 함수가 NdisOpenAdapterEx를 사용하여 기본 미니포트 드라이버에 바인딩된 후 호출 관리자는 NdisCmRegisterAddressFamilyEx를 호출하여 바인딩에 대한 주소 패밀리를 등록합니다(다음 그림 참조).
NdisCmRegisterAddressFamilyEx에 대한 호출은 호출 관리자의 특정 신호 서비스를 보급합니다. 호출 관리자는 ProtocolBindAdapterEx 가 작동하고 호출되고 NdisOpenAdapterEx를 사용하여 NIC에 성공적으로 바인딩될 때마다 주소 패밀리를 등록해야 합니다.
호출 관리자는 바인딩된 모든 미니포트 드라이버에서 둘 이상의 주소 패밀리를 지원할 수 있습니다. 호출 관리자는 바인딩된 단일 NIC에서 둘 이상의 주소 패밀리를 지원할 수도 있습니다. 호출 관리자는 바인딩의 각 주소 패밀리에 대해 동일한 진입점을 등록해야 합니다. 하나의 호출 관리자만 특정 미니포트 드라이버에 바인딩된 클라이언트에 대해 특정 유형의 주소 패밀리를 지원할 수 있습니다. 호출 관리자의 진입점을 등록하는 방법에 대한 자세한 내용은 CoNDIS 등록을 참조하세요.
MCM 드라이버에서 주소 패밀리 등록
MCM 드라이버는 미니포트 드라이버 진입점을 NdisMRegisterMiniportDriver에 등록한 후 MiniportInitializeEx 함수에서 NdisMCmRegisterAddressFamilyEx를 호출합니다. 진입점을 다시 지정하는 방법에 대한 자세한 내용은 CoNDIS 등록을 참조하세요. MCM 드라이버는 NdisMCmRegisterAddressFamilyEx 를 한 번 호출하여 해당 서비스를 연결 지향 클라이언트에 보급합니다(다음 그림 참조).
온보드 연결 지향 신호 지원이 있는 NIC의 미니포트 드라이버는 통화 관리자를 사용할 수 있더라도 MCM 드라이버로 등록할 수 있습니다. 이렇게 하면 이러한 MCM 드라이버가 해당 NIC의 호출 관리자로 호출 관리자를 선점합니다.
주소 패밀리 열기
Ndis(M)CmRegisterAddressFamily에 대한 호출 관리자 또는 MCM 드라이버의 호출로 인해 NDIS는 바인딩에서 각 연결 지향 클라이언트의 ProtocolCoAfRegisterNotify 함수를 호출합니다(이전 두 그림과 같이).
ProtocolCoAfRegisterNotify 는 주소 패밀리 데이터를 검사하여 클라이언트가 이 특정 CM 또는 MCM 드라이버의 서비스를 사용할 수 있는지 여부를 확인합니다. 클라이언트가 (M)CM 제공 주소 패밀리 데이터를 수정할 수 있는지 여부는 호출 관리자 또는 MCM 드라이버의 특정 신호 프로토콜 지원에 따라 달라집니다.
클라이언트가 제공된 호출 관리 서비스가 허용된다고 판단되면 ProtocolCoAfRegisterNotify 는 클라이언트에 대한 AF별 컨텍스트 영역을 할당하고 NdisClOpenAddressFamilyEx를 호출합니다. NdisClOpenAddressFamilyEx 는 클라이언트의 연결 지향 진입점을 NDIS에 등록하지 않습니다. NDIS에 연결 지향 진입점을 등록하는 방법에 대한 자세한 내용은 CoNDIS 등록을 참조하세요.
NdisClOpenAddressFamilyEx를 호출하면 NDIS가 호출 관리자 또는 MCM 드라이버의 ProtocolCmOpenAf 함수를 호출합니다(이전 두 그림에 이미 표시된 대로). ProtocolCmOpenAf는 클라이언트가 유효한 주소 패밀리에 전달되도록 하고 주소 패밀리의 이 instance 여는 클라이언트를 대신하여 작업을 수행하는 데 필요한 리소스를 할당하고 초기화합니다. ProtocolCmOpenAf 는 열려 있는 주소 패밀리에 대한 호출 관리자와 클라이언트 간의 연결을 나타내는 NDIS 제공 NdisAfHandle 도 저장합니다.
ProtocolCmOpenAf 는 동기적으로 또는 비동기적으로 완료할 수 있습니다. 비동기적으로 완료하기 위해 호출 관리자의 ProtocolCmOpenAf 함수는 NdisCmOpenAddressFamilyComplete를 호출합니다. MCM 드라이버의 ProtocolCmOpenAf 함수는 NdisMCmOpenAddressFamilyComplete를 호출합니다. Ndis(M)CmOpenAddressFamilyComplete를 호출하면 NDIS가 원래 NdisClOpenAddressFamilyEx를 호출한 클라이언트의 ProtocolOpenAfComplete 함수를 호출합니다.
NdisClOpenAddressFamilyEx에 대한 클라이언트의 호출이 성공하면 NDIS는 열린 주소 패밀리에 대한 호출 관리자와 클라이언트 간의 연결을 나타내는 NdisAfHandle을 클라이언트에 반환합니다.
클라이언트가 들어오는 호출을 수락하는 경우 일반적으로 NdisClOpenAddressFamilyEx를 성공적으로 호출한 후 NdisClRegisterSap을 호출하여 ProtocolClOpenAfCompleteEx 함수에서 하나 이상의 SAP를 등록합니다.
클라이언트가 발신 호출을 하는 경우 하나 이상의 클라이언트가 발신 호출을 요청하는 것을 예상하여 ProtocolClOpenAfCompleteEx 함수에 하나 이상의 VC를 만들 수 있습니다.