1

経由で USB デバイスが挿入されているかどうかを確認できましたWM_DEVICECHANGE

case WM_DEVICECHANGE:
{
    PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;

    switch(wParam)
    {
        case DBT_DEVICEARRIVAL:
        {
            if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)
            {
                  // Get Information about the usb device inserted
            }
            return TRUE;
        }
    }
}

ここで、ある種の ID を照合して正しい USB デバイスが挿入されていることを確認したいと思います。また、USB デバイスで使用可能なスペースを確認する必要があります。

私が言える解決策の 1 つは、情報と一致するまですべてのハードウェア デバイスを反復処理することです。

挿入時にデバイスを認識する別の方法はありますか?

4

1 に答える 1

4

VID と PID は DBT_DEVTYP_DEVICEINTERFACE メッセージで送信されます。次に、SetupDiGetClassDevs/SetupDiEnumDeviceInfo/SetupDiGetDeviceInstanceId/SetupDiGetDeviceRegistryProperty を介して、デバイス ドライバーで詳細を確認できます。

接続時にメディアが利用可能である必要はありません。カード リーダーについて考えてみましょう。ドライブ文字は登録されますが、カードが挿入されて Windows がGUID_IO_MEDIA_ARRIVAL device eventを生成するまで、ドライブの準備はできません。次に、ドライブ文字で GetDiskFreeSpaceEx を呼び出して、空き領域を取得できます。

于 2011-08-25T23:04:05.360 に答える