[c#]USB接続デバイス管理 1-[System.Management]の参照

ある事情で、PCに接続するデバイスを制限する必要があったため、その内容を書いていきます。
改善点やおかしな点等があれば、御教授頂けると助かります。

まず、通常のUSBメモリだけでなく、スマホ等の機器接続も防ぐ必要があるため、「WMI」を利用します。
DriveInfo.GetDriversでは取得できないケースもあるため。
その為、参照設定に[System.Management]を追加。

※脱着検知を行うのであれば、Windowsメッセージの受信処理を行えばよいが、Windows起動前からUSBメモリをポートに差しているケースなどがあるため、全PnPデバイスを常時監視対象に置く事としました。
<Windowsメッセージ処理Memo>
WM_DEVICECHANGE 0x0219
Control.WndProcをoverrideする。(定義のためFormのサブクラスが必要)

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Management;

namespace ConsoleCheck
{
    class Program
    {
        // 情報取得コマンド
        static ManagementObjectSearcher MyOCS = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity");
        // 取得Object格納
        static ManagementObjectCollection MyOC;
        static void Main(string[] args)
        {}
    }
}


ここで、プログラム起動後にループさせ、一周ごとの検知デバイス数の変化によって、抜き差しの検知を行う処理を記入。
(増減の管理を切り分け可)

        static void Main(string[] args)
        {
            //接続されてるPnPDeviceの総数
            int CountDevice = MyOCS.Get().Count;
            //1Scan前のPnPDeviceの総数
            int CountDeviceBefour = CountDevice;
            //ループ動作(←ループ条件は、後程要検証)
            while (true)
            {
        MyOC = MyOCS.Get();
                CountDevice = MyOC.Count;
                if (CountDevice != CountDeviceBefour)
                {
                    //ここでデバイス数変化時の処理を行う。
                }
                CountDeviceBefour = CountDevice;
            }
        }

ちょっと長くなりそうなので、今回はここまで。

【各ページへのリンク】

この記事へのコメント