CE系OSでMACアドレスを取得する方法

MACアドレスの取得というか、IPアドレスに始まるネットワークアダプタの情報を取得する方法です。
非常に簡単です。
ヘッダー「Iphlpapi.h」をインクルードして、ライブラリ「Iphlpapi.lib」をリンクすればOKです。
GetAdaptersInfo()関数で、各種NIC情報を取得できます。
構造体「PIP_ADAPTER_INFO」の情報をMSDNで調べれば他に取得できる情報がわかります。

早速サンプルです。
#include <windows.h>
#include <stdio.h>
#include <tchar.h>

//macアドレス取得に必要
#include <Iphlpapi.h>
//必要ライブラリ Iphlpapi.lib


int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
PIP_ADAPTER_INFO adapter_info = NULL;
PIP_ADAPTER_INFO adapter_info_temp;
ULONG adapter_info_size = 0;
DWORD ret;
DWORD len;
TCHAR *mac_address,*temp;

if(address_size == NULL){
return 0;
}

//NICの各種情報を取得
ret = GetAdaptersInfo( NULL, &adapter_info_size );//構造体のサイズを取得する
if(ret == ERROR_BUFFER_OVERFLOW){
if(!(adapter_info = (PIP_ADAPTER_INFO)malloc(adapter_info_size))){
return 1;
}
ret = GetAdaptersInfo( adapter_info, &adapter_info_size);//情報を取得
if(ret != ERROR_SUCCESS){
return 1;
}
}else if(ret == ERROR_NO_DATA){
return 1;
}else if(ret != ERROR_SUCCESS){
return 1;
}

adapter_info_temp = adapter_info;//freeするためにポインタを保存

if(adapter_info_size == 0){
adapter_info = NULL;
}

while (adapter_info != NULL) {
//ethernetアダプタ以外は除外する
if(adapter_info->Type != 6){
adapter_info = adapter_info->Next;
continue;
}

//IPとサブネットを表示
PIP_ADDR_STRING pAddressList = &(adapter_info->IpAddressList);
do {
_tprintf(TEXT("\t IP Address : %s\n"),pAddressList->IpAddress.String);
_tprintf(TEXT("\t Subnet Mask : %s\n"), pAddressList->IpMask.String);
pAddressList = pAddressList->Next;
}while(pAddressList != NULL);

//MACアドレスを表示
len = adapter_info->AddressLength * 3 + 1;
if((mac_address = new TCHAR[len]) != NULL){
//MACアドレスのデータを文字列に変換
temp = mac_address;
for(unsigned int i=0;i<adapter_info->AddressLength;i++){
temp += _stprintf(temp,!i ? TEXT("%02x") : TEXT("-%02x"),adapter_info->Address[i]);
}
_tprintf(TEXT("\t MAC Address : %s\n"),mac_address);
delete mac_address;
}
adapter_info = adapter_info->Next;
}

free(adapter_info_temp);

return 0;
}