原文:http://www.cnblogs.com/watsonyin/p/3457175.html
private static string GetPhysicalAddr(string cardId)
{
string macAddress = string.Empty;
uint device = 0;
try {
string driveName = "\\\\.\\" + cardId;
device = Win32Utils.CreateFile (driveName,
Win32Utils.GENERIC_READ | Win32Utils.GENERIC_WRITE,
Win32Utils.FILE_SHARE_READ | Win32Utils.FILE_SHARE_WRITE,
0, Win32Utils.OPEN_EXISTING, 0, 0);
if (device != Win32Utils.INVALID_HANDLE_VALUE) {
byte[] outBuff = new byte[6];
uint bytRv = 0;
int intBuff = Win32Utils.PERMANENT_ADDRESS;
if (0 != Win32Utils.DeviceIoControl (device, Win32Utils.IOCTL_NDIS_QUERY_GLOBAL_STATS,
ref intBuff, 4, outBuff, 6, ref bytRv, 0))
{
string temp = string.Empty;
foreach (byte b in outBuff) {
temp = Convert.ToString (b, 16).PadLeft (2, '0');
macAddress += temp;
temp = string.Empty;
}
}
}
} finally {
if (device != 0) {
Win32Utils.CloseHandle (device);
}
}
return macAddress;
}