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

时间:2011-07-26 04:53:00

标签: c# windows-7 mac-address nic

我需要一种方法,在MAC被禁用并使用Windows 7时,使用Network Interface Card检索机器的C#地址。我在网上搜索并且还查看了以下链接。使用第二个链接中的答案,我可以在Windows XP中成功获取所需的详细信息,但在Windows 7被禁用时却无法在NIC中获得。

Getting MAC address C#

Get MAC Address when network adapter is disabled?

有谁知道如何完成这项任务?

...谢谢

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

这是我想出的(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 SelectQuery("Win32_NetworkAdapter");
var scope = new ManagementScope("\\root\\cimv2");
scope.Connect();
var searcher = new ManagementObjectSearcher(scope, query);
var managementObjects = searcher.Get();
var adapters = managementObjects.Cast<ManagementBaseObject>().Select(s => new NetworkAdapter(s));
foreach (var adapter in adapters)
{
    adapter.Enable();
    Console.WriteLine("{0} : {1}", adapter.Name, adapter.MACAddress);
}

但是当我调用Enable()并且返回代码为0时,我无法让它工作,因为没有发生任何事情。我发布它是希望你或某人可能推断出允许它工作的缺失细节。