Netbios 関数を使用したMACアドレスの取得方法です。
#include <tchar.h>
#include <windows.h>
#include <assert.h>
#include <stdio.h>
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
typedef struct _ASTAT
{
ADAPTER_STATUS adapter;
NAME_BUFFER buffer[30];
} ASTAT;
NCB ncb;
LANA_ENUM lenum;
//NICの数を取得
ZeroMemory(&ncb,sizeof(ncb));
ncb.ncb_command = NCBENUM;
ncb.ncb_buffer = (UCHAR*)&lenum;
ncb.ncb_length = sizeof(lenum);
Netbios(&ncb);
for(int i = 0; i < lenum.length; i++)
{
//リセット
ZeroMemory(&ncb, sizeof(ncb));
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = lenum.lana[i];
UCHAR retCode = Netbios(&ncb);
assert(retCode == 0);
//MACアドレスの取得
ASTAT adapter;
ZeroMemory(&ncb, sizeof(ncb));
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = lenum.lana[i];
strcpy(ncb.ncb_callname, "*");
ncb.ncb_buffer = (UCHAR*)&adapter;
ncb.ncb_length = sizeof(adapter);
retCode = Netbios(&ncb);
assert(retCode == 0);
printf("%02X-%02X-%02X-%02X-%02X-%02X",
adapter.adapter.adapter_address[0],
adapter.adapter.adapter_address[1],
adapter.adapter.adapter_address[2],
adapter.adapter.adapter_address[3],
adapter.adapter.adapter_address[4],
adapter.adapter.adapter_address[5]);
}
return 0;
}