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キーを確認します。
Q1:アダプターについて教えてください。あなたはその名前を知っていますか?それは説明ですか? –
質問2:あなたはどんなイベントを待っていますか?ネットワークケーブルの接続?システムの初期化完了? –
@ Lior Kogan、ネットワークインタフェースがDHCP経由でIPアドレスを取得するのを待っています。 – unixman83