C# 在Windows 7中使用C禁用NIC时获取MAC地址

C# 在Windows 7中使用C禁用NIC时获取MAC地址,c#,windows-7,mac-address,nic,C#,Windows 7,Mac Address,Nic,我需要一种方法来检索Windows 7的机器的MAC地址时,其网络接口卡被禁用,并使用C。我在网上搜索,并参考以下链接。使用第二个链接中的答案,我可以在Windows XP中成功获得所需的详细信息,但在禁用NIC时,在Windows 7中无法获得 有人知道如何完成这项任务吗 谢谢…以下是我提出的Win7 64位: var query = new SelectQuery("Win32_NetworkAdapter"); var scope = new ManagementScope("\\root

我需要一种方法来检索Windows 7的机器的MAC地址时,其网络接口卡被禁用,并使用C。我在网上搜索,并参考以下链接。使用第二个链接中的答案,我可以在Windows XP中成功获得所需的详细信息,但在禁用NIC时,在Windows 7中无法获得

有人知道如何完成这项任务吗


谢谢…

以下是我提出的Win7 64位:

var query = new SelectQuery("Win32_NetworkAdapter");
var scope = new ManagementScope("\\root\\cimv2");
scope.Connect();
var searcher = new ManagementObjectSearcher(scope, query);
var managementObjects = searcher.Get();
foreach (var mo in managementObjects)
{
    Debug.WriteLine("{0} : {1}", mo["Description"], mo["MACAddress"]);
}
我的蓝牙适配器如下所示:

蓝牙设备个人局域网:70:F3:95:88:F7:7E

但是,当其被禁用时,MAC地址显示为空白

您应该能够启用/禁用适配器以通过类上的方法查询MAC,但这有点繁琐,因为您必须手动包装Win32_NetworkAdapter类

您需要使用.Net Framework SDK工具“mgmtclassgen.exe”为WMI对象生成类包装器

像这样调用它生成的文件是80k:

 mgmtclassgen Win32_NetworkAdapter -p NetworkAdapter.cs
然后对代码进行如下扩充:

var query=new SelectQueryWin32\u NetworkAdapter; var scope=new ManagementScope\\root\\cimv2; 范围.连接; var searcher=新的ManagementObjectSearcherscope,查询; var managementObjects=searcher.Get; var adapters=managementObjects.Cast.Selects=>newnetworkadapters; 适配器中的foreach var适配器 { 适配器。启用; Console.WriteLine{0}:{1},adapter.Name,adapter.MACAddress; }
但我无法让它工作,因为调用Enable时什么也没发生,返回代码为0。我发布它的目的是希望您或其他人能够推断出缺失的细节,从而使它能够正常工作。

我认为您需要缓存MAC地址。例如,启用网卡后,您可以更新该网卡缓存中的MAC地址。稍后,当它被禁用并且无法从Windows获取MAC时,您可以从缓存中获取它

您无法从甚至未加载的驱动程序中获取MAC地址。驱动程序需要从网卡的ROM芯片加载MAC地址。因此,如果Windows确实有办法从禁用的网卡获取MAC地址,那么缓存MAC必须与Windows使用的技术相同