2010-12-28 5 views
6

Windows XPでネットワークインターフェイスが起動され、準備ができたら通知を受け取るにはどうすればよいですか?Windowsでネットワークインターフェイスが使用可能になった時点の通知

レディは、インターフェイスが既にDHCP経由でネットワークIPアドレスを取得し、使用する準備ができていることを意味します。

+0

Q1:アダプターについて教えてください。あなたはその名前を知っていますか?それは説明ですか? –

+0

質問2:あなたはどんなイベントを待っていますか?ネットワークケーブルの接続?システムの初期化完了? –

+0

@ Lior Kogan、ネットワークインタフェースがDHCP経由でIPアドレスを取得するのを待っています。 – unixman83

答えて

7

インターフェイスが準備完了したら、間違いなくイベントを受け取ることができます。ちょうどIPHelperを使用してください!あなたが探している機能は、NotifyAddrChange http://msdn.microsoft.com/en-us/library/aa366329%28v=VS.85%29.aspxであり、Windows 2000から利用可能です。アダプタが起動して実行されると、IPアドレスが割り当てられ、コールバックがトリガされます。

GetAdapterAddressは、必要な情報を表示するためにトリガされたときに使用できます。 Vista以上では、どのアダプタにIP変更があるかを直接通知するNotifyIpInterfaceChangeがあります。

1

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キーを確認します。

関連する問題