CM_Get_Device_ID_List

CM_Get_Device_ID_Listで、特定のデバイスインスタンスID一覧を取得する。

CM_Get_Device_ID_ListW関数 (cfgmgr32.h) - Win32 apps | Microsoft Learn
USBドライブのVID/PIDを調べる方法について
バグのある生活: Windows上でのUSBメモリとドライブの関係について

バイスインスタンスID一覧を取得したら、今度はそれを使ってデバイスインターフェースインスタンス一覧を取得する。
C_G_D_ID_L.cppで、

CM_GETIDLIST_FILTER_REMOVALRELATIONSを指定したCM_Get_Device_ID_Listを使ってptszDevIDListを取得出来たら、CM_Get_Device_Interface_ListでptszDevIDListを使う。

最終的なデバイスインターフェースインスタンス一覧
最終的なデバイスインターフェースインスタンス一覧

最終的なデバイスインターフェースインスタンス一覧。
どこかで見たことあるとおもったら、

ボリュームのデバイスパス
ボリュームのデバイスパス

大文字小文字の違いはあれど、ボリュームのデバイスパスと全く一緒である。
ここからボリューム名を求め、ドライブレターからボリューム名を求めた場合と比較して一致した場合、そのドライブレターと、このUSBデバイスが同じものであると判明する。
いやー、ここまで来るの大変だった・・・。

Sample/winapi/CM_Get_Device_ID_List/C_G_D_ID_L/src/C_G_D_ID_L at master · bg1bgst333/Sample · GitHub