プラグを差し込んだ直後にハブのUsbスロットを取得するにはどうすればよいですか?

Aug 24 2020

USBを接続した直後にUSBのスロットを取得するシナリオを実装しています。15が取得したいものです。

1番目のUSBを接続すると、コードは正常に機能します。1番目のUSBを接続してから1分前に2番目のUSBを接続すると、すでに接続されている2番目のUSBの情報が得られません。スロット情報の取得を処理するコードを示します。このメソッドは、USBが接続されているときに発生したイベントの後に実行されます。

主なこと:1分以上待たなければならないので、2番目のUSBを接続してスロットを使用できます。最初のプラグが差し込まれてから1分待つ前にプラグを差し込んだ場合、最後に差し込まれたUsbの情報は取得されません。

static int GetPhysicalPort()
    {
        try
        {
            devices = new List<USBDeviceInfo>();
            
            ManagementObjectCollection collection;
            using (var searcher = new ManagementObjectSearcher(@"Select * From Win32_PnPSignedDriver WHERE DeviceId LIKE 'USB\\VID%' AND Description = 'USB Mass Storage Device' "))
            {
                collection = searcher.Get();
                searcher.Dispose();
            }
                

            foreach (var device in collection)
            {
                devices.Add(new USBDeviceInfo(
                (string)device.GetPropertyValue("DeviceId"),
                (string)device.GetPropertyValue("Description"),
                (string)device.GetPropertyValue("Location")
                ));
            }

            collection.Dispose();
           
            string LastAdded = devices[0].Location.Substring(6, 4);
            Console.WriteLine(LastAdded);
            return Convert.ToInt32(LastAdded);
        }

        catch (Exception e)
        {
            Console.WriteLine(e);
            return 0;
        }

回答

RitaHan-MSFT Oct 15 2020 at 10:14

WMI Win32_PnPSignedDriverクラスごとに、2回目に挿入されたUSBのクエリを実行したり、結果を表示したりするのに時間がかかるのはアプリケーションです。これは、アプリケーションごとに異なります。このWMIクエリを実行しているアプリケーションの極速度または応答速度は、1〜2分で結果が得られるように設計されているためです。

OSレベルまたはWMIレベルに関して同じことを確認して、WMI全体がマシン上でクエリ結果を提供するのに時間がかかっているかどうかを確認できます。

  1. Runコマンドを開き、WBEMTESTと入力します。
  2. CIMV2名前空間に接続するため、[接続]をクリックします。この名前空間の下には、クラスWin32_PnPSignedDriverがあります。
  3. このクラスをクエリselect * from win32_PnPSignedDriverでクエリすると、たとえば60-70のような結果がすぐに表示されます。
  4. これで、閉じて同じクエリを再度実行すると、OSなどに応じて複数または同じ結果が表示されます。

上記は、WMIクエリまたはWMIが全体として、マシン上での本来の動作をしていることを示しています。

この問題は、クエリを実行しているWMIクエリに従って2番目のUSBの内容を読み取るのにこれだけ時間がかかるアプリケーションが原因である可能性があります。