MB 미니포트 드라이버 IP 주소 알림에 대한 지침
INF 파일에서 EnableDhcp를 0과 동일하게 지정하는 MB 미니포트 드라이버는 커널 모드에서 IP 도우미 및 관련 함수를 사용하여 IP 주소를 만들고, 변경하고, 삭제할 수 있습니다.
커널 모드에서 IP 도우미 함수를 사용하려면 미니포트 드라이버에 Netioapi.h 헤더 파일과 Netio.lib에 대한 링크가 포함되어야 합니다.
미니포트 드라이버가 EnableDhcp를 0과 같게 지정하는 경우 다음 작업을 수행하여 MB 서비스에 다음 이벤트 중 어느 것에 대해서도 알려야 합니다.
MB 인터페이스에 대한 IP 주소 설정
기본 게이트웨이 주소 설정
DNS 주소 업데이트
IP 도우미 API를 사용하여 설정된 IP 주소 및 기본 게이트웨이는 네트워크 연결 또는 연결 끊기 이벤트를 유지하거나 둘 다 유지합니다. 따라서 새 IP 주소 또는 기본 게이트웨이 또는 둘 다 값이 현재 설정된 값과 다른 경우 미니포트 드라이버는 먼저 네트워크 연결 이벤트에서 새 값을 설정하기 전에 이전 값을 지워야 합니다.
참고 미니포트 드라이버는 미니포트 드라이버의 MiniportInitializeEx 함수에 전달되는 NDIS_MINIPORT_INIT_PARAMETERS 구조체의 NetLuid 또는 IfIndex 멤버에서 MB 인터페이스의 LUID 및 인덱스를 찾을 수 있습니다.
IP 주소 및 게이트웨이 주소 다시 설정
필수 필터 드라이버 로드와 같은 TCP/IP 스택의 특정 변경 내용은 IP 도우미 함수에서 설정한 IP 및 게이트웨이 주소를 제거할 수 있습니다. TCP/IP 스택의 변경 내용이 설정을 제거하는 경우 미니포트 드라이버는 IP 및 게이트웨이 주소를 다시 설정해야 합니다.
미니포트 드라이버는 주소가 제거될 때 알림을 받도록 다음 절차를 사용해야 하며 다시 설정해야 합니다.
드라이버 초기화 중에 미니포트 드라이버는 NotifyIpInterfaceChange를 사용하여 IP 인터페이스 변경 알림을 등록할 콜백 함수를 지정해야 합니다. Windows는 IP 인터페이스가 추가, 삭제 또는 변경될 때마다 함수를 호출합니다.
어댑터를 초기화하는 동안 미니포트 드라이버는 미니포트 드라이버의 로컬 어댑터 컨텍스트에서 미니포트 드라이버의 MiniportInitializeEx 함수로 전달되는 NDIS_MINIPORT_INIT_PARAMETERS 구조체의 LUID 값을 저장해야 합니다. 이 값에는 알림 콜백에 사용되는 어댑터의 인터페이스를 식별하는 NetLuid 가 포함됩니다.
알림 콜백에서 Windows는 NotifyIpInterfaceChange에 등록된 알림 함수에 다음 매개 변수를 전달합니다.
- 미니포트 어댑터 인터페이스의 NetLuid를 포함하는 MIB_IPINTERFACE_ROW 구조체에 대한 포인터 입니다.
- MibAddInstance, MibDeleteInstance 또는 MibParameterNotification일 수 있는 알림 유형입니다.
미니포트 드라이버는 어댑터가 연결된 상태이고 알림 유형이 MibAddInstance이고, MIB_IPINTERFACE_ROW NetLuid는 어댑터 초기화 중에 저장된 미니포트 드라이버의 어댑터 중 하나에 해당할 때 IP 및 게이트웨이 주소를 다시 설정해야 합니다.
그런 다음 미니포트 드라이버는 MB 인터페이스의 IP 주소 설정 및 기본 게이트웨이 주소 설정 절차에 따라 해당 주소를 다시 설정해야 합니다.
드라이버를 언로드하는 동안 미니포트 드라이버는 CancelMibChangeNotify2 IP 도우미 함수를 사용하여 알림 콜백 함수의 등록을 취소해야 합니다.
MB 인터페이스의 IP 주소 설정
IPv4 주소를 설정하려면 다음 절차를 사용합니다. 유사한 IP 도우미 기능을 사용하여 IPv6 주소를 설정할 수 있습니다.
GetUnicastIpAddressTable IP 도우미 함수를 사용하여 시스템의 모든 IP 주소 항목을 찾습니다.
InterfaceLuid 값이 MB 인터페이스의 InterfaceLuid와 일치하는 각 항목에 대해 다음을 수행합니다.
- 이전 연결에서 사용된 IP 주소와 일치하는 IP 주소 항목을 찾습니다. 처음 연결에는 이전 IP 주소가 없습니다.
- 새 IP 주소가 이전 IP 주소와 다른 경우 DeleteUnicastIpAddressEntry IP 도우미 함수를 사용하여 이전 연결 IP 주소에 대한 IP 주소 항목을 삭제합니다.
- 새 IP 주소가 이전 IP 주소와 동일한 경우 원하는 항목이 이미 있는지 확인합니다.
미니포트 드라이버가 이전 루프에서 원하는 IP 주소 항목을 찾지 못한 경우 새 항목을 추가해야 합니다.
InitializeUnicastIpAddressEntry IP 도우미 함수를 사용하여 MIB_UNICASTIPADDRESS_ROW 구조를 초기화하고 구조체의 다음 멤버를 설정합니다.
- InterfaceLuid 또는 InterfaceIndex 멤버를 적절하게 설정합니다.
- OnlinePrefixLength 멤버를 설정합니다. 서브넷 마스크에 값이 1인 비트 수입니다. 예를 들어 서브넷 마스크가 255.255.255.0이 면 OnlinePrefixLength 는 24여야 합니다.
- 주소 멤버를 설정합니다.
- PrefixOrigin 멤버를 IpPrefixOriginManual로 설정합니다.
초기화된 MIB_UNICASTADDRESS_ROW 구조를 CreateUnicastIpAddressEntry IP 도우미 함수에 전달하여 IP 주소 항목을 만듭니다.
기본 게이트웨이 주소 설정
IPv4 게이트웨이 주소를 설정하려면 다음 절차를 사용합니다. 유사한 IP 도우미 기능을 사용하여 IPv6 게이트웨이 주소를 설정할 수 있습니다.
GetIpForwardTable2 IP 도우미 함수를 사용하여 시스템의 모든 라우팅 항목을 가져옵니다.
InterfaceLuid 값이 MB 인터페이스의 InterfaceLuid 값과 일치하고 DestinationPrefix가 "0.0.0.0/0"인 각 항목에 대해 NextHop이 새 게이트웨이 주소와 같지 않은 경우 DeleteIpForwardEntry2 IP 도우미 함수를 호출하여 경로를 삭제합니다. 그렇지 않으면 라우팅 항목이 시스템에 이미 있습니다.
미니포트 드라이버가 이전 루프에서 원하는 라우팅 항목을 찾지 못한 경우 InitializeIpForwardEntry IP 도우미 함수를 사용하여 MIB_IPFORWARD_ROW2 구조를 초기화하여 새 항목을 추가해야 합니다. 구조체의 다음 멤버를 초기화합니다.
InterfaceLuid 또는 InterfaceIndex .
기본 게이트웨이의 경우 DestinationPrefix를 0.0.0.0/0으로 설정합니다. (접두사 = 0.0.0.0 및 PrefixLength = 0)
NextHop을 기본 게이트웨이의 IP 주소로 설정합니다.
다른 멤버는 초기화 중에 기본값으로 설정됩니다. 미니포트 드라이버는 해당 멤버에 대한 기본값을 사용해야 합니다.
MIB_IPFORWARD_ROW2 구조를 CreateIpForwardEntry2 IP 도우미 함수에 전달하여 새 기본 게이트웨이 주소를 설정합니다.
DNS 주소를 설정하려면
- MB DNS 업데이트 설명된 대로 NameServer 레지스트리 키를 설정하여 업데이트된 DNS 주소에 대해 Windows에 알립니다.