Windows XP에서 네트워크 인터페이스가 준비되고 준비되면 알림을 어떻게 받습니까?Windows에서 네트워크 인터페이스가 준비되었을 때의 알림
준비은 이미 DHCP를 통해 네트워크 IP 주소를 얻었으며 사용할 준비가되었음을 의미합니다.
Windows XP에서 네트워크 인터페이스가 준비되고 준비되면 알림을 어떻게 받습니까?Windows에서 네트워크 인터페이스가 준비되었을 때의 알림
준비은 이미 DHCP를 통해 네트워크 IP 주소를 얻었으며 사용할 준비가되었음을 의미합니다.
인터페이스가 준비되면 분명히 이벤트를받을 수 있습니다! 그냥 IPHelper를 사용하십시오! 찾으려는 기능은 NotifyAddrChange http://msdn.microsoft.com/en-us/library/aa366329%28v=VS.85%29.aspx이며 Windows 2000부터 사용할 수 있습니다. 어댑터가 실행 중일 때 IP 주소가 지정되고 콜백이 트리거됩니다.
필요한 정보를 얻기 위해 GetAdapterAddress를 트리거 할 때 사용할 수 있습니다. Vista 이상에서는 IP 변경이있는 어댑터를 직접 알려주는 NotifyIpInterfaceChange가 있습니다.
GetAdaptersAddresses를 사용하여 모든 어댑터의 상태를 수신 한 다음 위 또는 아래에 있는지 확인할 수 있습니다. 상태가 변경 될 때까지 프로세스를 반복해야합니다. 통지를받을 수있는 방법을 모르겠습니다.
ULONG nFlags = 0;
DWORD dwVersion = ::GetVersion();
DWORD dwMajorVersion= (DWORD)(LOBYTE(LOWORD(dwVersion)));
if (dwMajorVersion>=6) // flag supported in Vista and later
nFlags= 0x0100; // GAA_FLAG_INCLUDE_ALL_INTERFACES*/
// during system initialization, GetAdaptersAddresses may return ERROR_BUFFER_OVERFLOW and supply nLen,
// but in a subsequent call it may return ERROR_BUFFER_OVERFLOW and supply greater nLen !
ULONG nLen= sizeof (IP_ADAPTER_ADDRESSES);
BYTE* pBuf= NULL;
DWORD nErr= 0 ;
do
{
delete[] pBuf;
pBuf= new BYTE[nLen];
nErr= ::GetAdaptersAddresses(AF_INET, nFlags, NULL, (IP_ADAPTER_ADDRESSES*&)pBuf, &nLen);
}
while (ERROR_BUFFER_OVERFLOW == nErr);
if (NO_ERROR != nErr)
{
delete[] pBuf;
// report GetAdaptersAddresses failed
return false;
}
const IP_ADAPTER_ADDRESSES* pAdaptersAddresses= (IP_ADAPTER_ADDRESSES*&)pBuf;
while (pAdaptersAddresses) // for each adapter
{
// todo: check if this is your adapter...
// pAdaptersAddresses->AdapterName
// pAdaptersAddresses->Description
// pAdaptersAddresses->FriendlyName
const IF_OPER_STATUS& Stat= pAdaptersAddresses->OperStatus; // 1:up, 2:down...
pAdaptersAddresses= pAdaptersAddresses->Next;
}
delete[] pBuf;
return false;
또한 각 어댑터에 대해 레지스트리에서 IP 주소를 검색 할 수 있습니다. 그것은 SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters \ Interfaces에있을 것입니다. ## ADAPTERNAME ##, ADAPTERNAME ##은 IP_ADAPTER_ADDRESSES 구조체의 AdapterName 멤버입니다. EnableDHCP가 동적 주소인지 확인한 다음 DhcpIPAddress 키를 확인하십시오.
1 : 어댑터에 대해 알고 계십니까? 그 이름을 아십니까? 설명이야? –
Q2 : 어떤 이벤트가 기다리고 계십니까? 네트워크 케이블 연결? 시스템 초기화 완료? –
@Lior Kogan, 네트워크 인터페이스가 DHCP를 통해 IP 주소를 얻으려고 대기 중입니다. – unixman83