2

マシンが無効で を使用しているときにMAC、マシンのアドレスを取得する方法が必要です。Webで検索し、以下のリンクも参考にしました。2番目のリンクの回答を使用すると、必要な詳細を正常に取得できましたが、無効になっている場合は取得できませんでした。Windows 7Network Interface CardC#Windows XPWindows 7NIC

MAC アドレスの取得 C#

ネットワーク アダプタが無効になっているときに MAC アドレスを取得しますか?

このタスクを完了する方法を知っている人はいますか???

ありがとう...

4

2 に答える 2

1

MACアドレスをキャッシュする必要があると思います。たとえば、ネットワーク カードが有効になっている場合、そのカードのキャッシュ内の MAC アドレスを更新できます。後で、それが無効になり、Windows から MAC を取得できない場合は、キャッシュから取得できます。

ロードされていないドライバーから MAC アドレスを取得することはできません。また、ドライバは、ネットワーク カードの ROM チップから MAC アドレスをロードする必要があります。そのため、Windows が無効なネットワーク カードから MAC アドレスを取得する方法を持っている場合、MAC のキャッシュは Windows が使用するのと同じ手法でなければなりません。

于 2011-09-02T15:04:32.673 に答える
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"]);
}

私のBluetoothアダプタは次のようになります。

Bluetooth デバイス (パーソナル エリア ネットワーク) : 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 だったので、機能させることができませんでした。あなたまたは誰かが不足している詳細を推測して機能させることを期待して投稿しました。

于 2011-07-26T06:21:50.233 に答える