none
WMIのMSNdis_PhysicalMediumTypeのドキュメントのありか RRS feed

  • 質問

  • Hyper-Vの仮想スイッチのブリッジを構成していたために、無線LAN経由でのプリンタのセットアップに失敗したので、いろいろ技術的な面で調べています。

    (内部セットワークに切り替えればセットアップは出来ますので、あくまでも興味本位です)

    https://msdn.microsoft.com/en-us/library/windows/desktop/aa394216(v=vs.85).aspx

    ところが、Win32_NetworkAdapterのAdapterTypeIdが無線LAN(=9)でもBluetooth(=10)でも殆どのケースで、有線LAN(=0)になってしまいます。

    http://stackoverflow.com/questions/10114455/determine-network-adapter-type-via-wmi

    などには、既知の不具合で、MSNdis_PhysicalMediumTypeのNdisPhysicalMediumTypeが正しい値を返すとあり、実際にLinqPadで確認スクリプトを書くと正しく取得できているようです。

    ところが、MSNdis_PhysicalMediumTypeについてのドキュメントをMSDNで探すことができません。

    NdisPhysicalMediumTypeとAdapterTypeIdの値は同じ定義のように見えますが、公式ドキュメントが見つからないとしっくりきません。

    たぶん、この辺だと思うのですが・・・

    https://msdn.microsoft.com/en-us/library/windows/desktop/aa394572(v=vs.85).aspx

    何か情報をお持ちではないでしょうか?

    確認プログラム

    ManagementObjectSearcher.linq

    https://www.linqpad.net/

    <Query Kind="Program">
      <Reference>&lt;RuntimeDirectory&gt;\System.Management.dll</Reference>
      <Namespace>System.Management</Namespace>
    </Query>
    
    void Main()
    {
    	var WiFiAdapter = "Intel(R) Dual Band Wireless-AC 3165";	// Your Wireless Adapter is here.
    	var vEthernet = "Hyper-V Virtual Ethernet Adapter";			// Hyper-V Virtual Switch.
    	var Multiplexor = "Microsoft Network Adapter Multiplexor Driver";	// Network Bridge.
    
    	var networkAdaptersQuery = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter").Get()
    		.Cast<ManagementObject>()
    		.Where(x => (bool)x["PhysicalAdapter"]);
    	//networkAdaptersQuery.Dump();
    
    	var networkTypeQuery = new ManagementObjectSearcher(@"root\WMI", "SELECT * FROM MSNdis_PhysicalMediumType").Get()
    		.Cast<ManagementObject>()
    		.Select(x => x.Properties);
    	//networkTypeQuery.Dump();
    	
    	var networkAdapterConfigurationsQuery = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration").Get()
    		.Cast<ManagementObject>()
    		.Select(x => x.Properties);
    	//networkAdapterConfigurationsQuery.Dump();
    
    	var networkAdapters =
    		networkAdaptersQuery
    		.Select(x => x.Properties);
    		
    	foreach (var networkAdapter in networkAdapters)
    	{
    		if ((string)networkAdapter["Description"].Value != WiFiAdapter &&
    		    (string)networkAdapter["Description"].Value != vEthernet &&
    			(string)networkAdapter["Description"].Value != Multiplexor) continue;
    		
    		networkAdapter.GetNetworkAdapterProperties(networkTypeQuery, networkAdapterConfigurationsQuery).Dump();
    	}
    
    }
    
    public static class DisplayHelper
    {
    	public static IEnumerable<object> GetNetworkAdapterProperties(this PropertyDataCollection networkAdapterProperties,
    		IEnumerable<PropertyDataCollection> networkAdapterTypePropertiesList,
            IEnumerable<PropertyDataCollection> networkAdapterConfigurationPropertiesList)
    	{
    		var networkAdapterTypeProperties =
    			networkAdapterTypePropertiesList
    			.Where(x => (string)x["InstanceName"].Value == (string)networkAdapterProperties["Description"].Value)
    			.FirstOrDefault();
    
    		var networkAdapterConfigurationProperties =
    			networkAdapterConfigurationPropertiesList
    			.Where(x => (uint)x["Index"].Value == (uint)networkAdapterProperties["Index"].Value)
    			.FirstOrDefault();
    
    		yield return networkAdapterProperties["Description"].Value;
    		yield return networkAdapterProperties["NetConnectionID"].Value;
    		yield return networkAdapterProperties["GUID"].Value;
    		yield return networkAdapterProperties["MACAddress"].Value;
    		yield return networkAdapterProperties["AdapterType"].Value;
    		yield return networkAdapterProperties["AdapterTypeId"].Value;
    		yield return networkAdapterTypeProperties["NdisPhysicalMediumType"].Value;
    
    		if ((bool)networkAdapterConfigurationProperties["IPEnabled"].Value)
    		{
    			var addressList = networkAdapterConfigurationProperties["IPAddress"].Value as string[];
    			if (addressList != null && addressList.Count() > 0) yield return addressList[0];
    		}
    
    		yield return networkAdapterProperties;
    		yield return networkAdapterTypeProperties;
    		yield return networkAdapterConfigurationProperties;
    	}
    }




    • 編集済み tmori3y2 2017年1月18日 10:01 NdisPhysicalMediumTypeとAdapterTypeIdの値は違ったので修正
    2017年1月17日 12:38

すべての返信