The basic strategy is to use SetupDi to enumerate: hDeviceInfoSet = SetupDiGetClassDevs( &GUID_NDIS_LAN_CLASS, NULL, // Define no enumerator (global) NULL, // Define no (DIGCF_PRESENT | // Only Devices present DIGCF_PROFILE | // In Current Hardware Profile DIGCF_INTERFACEDEVICE) // Function class devices. ); Then SetupDiEnumDeviceInterfaces and finally SetupDiGetDeviceInterfaceDetail on each interface. Gets kind of messy. You will finally get the information you need to make the call on IOCTL_NDIS_QUERY_GLOBAL_STATS to fetch the permanent address.