- //From rlib.cf
- #include <stdio.h>
- #include <RLib_Import.h>
- #include <native/RLib_Native.h>
- #if _DEBUG
- #pragma comment(lib, "RLib_d.lib")
- #else
- #pragma comment(lib, "RLib.lib")
- #endif // _DEBUG
- #pragma comment(lib, "native/ntdll_x86.lib")
- //#pragma comment(lib, "native/ntdll_x64.lib")
- using namespace System;
- using namespace System::IO;
- //-------------------------------------------------------------------------
- #include <iphlpapi.h>
- #include <NtDDNdis.h>
- #pragma comment ( lib, "iphlpapi.lib" )
- //-------------------------------------------------------------------------
- String getAdapterMacAddress(const String &serviceName, int addressType)
- {
- ManagedObject<FileStream> devObj = File::Create(_T("\\\\??\\\\" + serviceName),
- File::OpenMode,
- File::ReadAccess,
- File::NormalAttribute,
- File::ReadShare);
- String physicalAddress = _T("00-00-00-00-00-00");
- if (!devObj.IsNull()){
- unsigned char addressBytes[6];
- IO_STATUS_BLOCK io_status;
- auto status = NtDeviceIoControlFile(devObj->GetSafeFileHandle(),
- NULL,
- NULL,
- NULL,
- &io_status,
- IOCTL_NDIS_QUERY_GLOBAL_STATS,
- &addressType,
- sizeof(addressType),
- addressBytes,
- sizeof(addressBytes));
- if (status == STATUS_SUCCESS) {
- physicalAddress.Format(_T("%02X-%02X-%02X-%02X-%02X-%02X"),
- addressBytes[0],
- addressBytes[1],
- addressBytes[2],
- addressBytes[3],
- addressBytes[4],
- addressBytes[5]);
- } //if
- } //if
- return physicalAddress;
- }
- //-------------------------------------------------------------------------
- int _tmain(int argc, _TCHAR* argv[])
- {
- ULONG size = 0;
- if (GetAdaptersInfo(NULL, &size) == ERROR_BUFFER_OVERFLOW)
- {
- ManagedMemoryBlock<unsigned char> adapterInfoArray(size);
- if (adapterInfoArray.IsSatisfied() &&
- GetAdaptersInfo(adapterInfoArray.ToAny<IP_ADAPTER_INFO>(), &size) == ERROR_SUCCESS)
- {
- auto adapterInfo = adapterInfoArray.ToAny<IP_ADAPTER_INFO>();
- while (adapterInfo)
- {
- getAdapterMacAddress(String(adapterInfo->AdapterName), OID_802_3_CURRENT_ADDRESS);
- getAdapterMacAddress(String(adapterInfo->AdapterName), OID_802_3_PERMANENT_ADDRESS);
- adapterInfo = adapterInfo->Next;
- }
- }
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/2207201513204.html
来源: http://www.codesnippet.cn/detail/2207201513204.html