È possibile utilizzare GetAdaptersAddresses per ricevere lo stato di tutti gli adattatori, quindi controllare se è su o giù. Dovrai ripetere la procedura finché lo stato non cambia. Non sono a conoscenza di alcun modo per ricevere notifiche.
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;
Inoltre, per ciascun adattatore è possibile cercare il suo indirizzo IP nel registro. Sarebbe in SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters \ Interfaces ## ADAPTERNAME ##, Were ## ADAPTERNAME ## è il membro AdapterName della struttura IP_ADAPTER_ADDRESSES. Controllare EnableDHCP per trovare se si tratta di un indirizzo dinamico, quindi controllare la chiave DhcpIPAddress.
fonte
2010-12-28 16:47:10
Q1: Che cosa ne sai sull'adattatore? Conosci il suo nome? È la descrizione? –
Q2: quale evento stai cercando di aspettare? Connessione via cavo di rete? completamento dell'inizializzazione del sistema? –
@Lior Kogan, in attesa dell'interfaccia di rete per acquisire il proprio indirizzo IP tramite DHCP. – unixman83