A
Ich habe eine kleine Funktion zum Auslesen der MAC-Adresse (der im Moment der Abfrage aktiven Karte) gefunden und sie ein wenig modifiziert. Nun habe ich durch Rumfummeln eine interessante Eigenschaft gefunden stAdapterStatus.adapt.adapter_type weiß aber nicht so recht, was die 3 stellige Zahl, die da zurückgegeben wird, bedeutet. Auf jeden Fall werden unterschiedliche Werte zurückggegeben, je nachdem ob WLAN oder LAN, aber auch nicht besonders reproduzierbar. Weiß jemand mehr zu der Eiegenschaft?
AnsiString TForm1::GetMacAddresses(bool bMacAdr)
{
//---------------------------------------------------------------------------------------------------------------------
// Liest die MAC-Adresse des iTV-Clients aus
// Aber vorsicht, hat der iTV-Client mehrer Netzwerkkarten, ist das Ergebnis nicht mehr eindeutig
//---------------------------------------------------------------------------------------------------------------------
typedef struct _ASTAT
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff[30];
}
ASTAT;
int ilRetVal; // Rückgabewert
AnsiString slTyp = "";//Adapter-Typ
AnsiString slMacAddress;//MAC-Adresse
NCB stNetCtrlBlock; // Network Control Block - Instanz
LPVOID pASTAT; // Zeiger auf die ASTAT-Struktur
ASTAT stAdapterStatus; // AdapterStatus-Struktur
LANA_ENUM stLanEnum; // Struktur für die Enumerierung der Netzwerkkarten
// die Anzahl der Netzwerkkarten ermitteln:
memset(&stNetCtrlBlock, 0, sizeof(stNetCtrlBlock));
stNetCtrlBlock.ncb_command = NCBENUM;
stNetCtrlBlock.ncb_buffer = (UCHAR *)&stLanEnum;
stNetCtrlBlock.ncb_length = sizeof(stLanEnum);
Netbios(&stNetCtrlBlock);
ilRetVal = stLanEnum.length;
// MAC-Adressen auslesen und in die Stringliste einfügen:
for(int ilAdapter=0; ilAdapter < ilRetVal; ilAdapter++)
{
memset(&stNetCtrlBlock, 0, sizeof(stNetCtrlBlock));
stNetCtrlBlock.ncb_command = NCBRESET;
stNetCtrlBlock.ncb_lana_num = stLanEnum.lana[ilAdapter] ;
Netbios(&stNetCtrlBlock);
memset( &stNetCtrlBlock, 0, sizeof(stNetCtrlBlock) );
stNetCtrlBlock.ncb_command = NCBASTAT;
stNetCtrlBlock.ncb_lana_num = stLanEnum.lana[ilAdapter] ;
strcpy(stNetCtrlBlock.ncb_callname,"* ");
stNetCtrlBlock.ncb_length = sizeof(stAdapterStatus);
pASTAT=HeapAlloc(GetProcessHeap(),HEAP_GENERATE_EXCEPTIONS|
HEAP_ZERO_MEMORY, stNetCtrlBlock.ncb_length);
slTyp += stAdapterStatus.adapt.adapter_type;
if(pASTAT != NULL)
{
stNetCtrlBlock.ncb_buffer=(UCHAR *)pASTAT;
Netbios(&stNetCtrlBlock);
CopyMemory(&stAdapterStatus,stNetCtrlBlock.ncb_buffer,
sizeof(stAdapterStatus));
for(int i =0; i < 6; i++)
{
slMacAddress +=IntToHex(stAdapterStatus.adapt.adapter_address[i],2);
if(i<5) slMacAddress+=":";
}
HeapFree(GetProcessHeap(),0,pASTAT);
}
else ilRetVal = 0;
}
if(bMacAdr==true)return slMacAddress;
else return slTyp;
}