SetupDiEnumDeviceInfo

SetupDiEnumDeviceInfoで、SP_DEVINFO_DATAを列挙できる。

パソコンに接続されているデバイスを一覧する(UsefullCode.net)

接続されているすべてのデバイスのSP_DEVINFO_DATAを列挙する。
SetupDiEnumDeviceInfo.cppで、

SetupDiGetClassDevsの第1引数をNULL、第4引数をDIGCF_PRESENT | DIGCF_ALLCLASSESで、接続されているすべてのデバイスらしい。
spdd.ClassGuidを出力してみる。

何かわからんけどいっぱい出てくる。
何かわからんけどいっぱい出てくる。

何かわからんけどいっぱい出てくる。

Sample/winapi/SetupDiEnumDeviceInfo/SetupDiEnumDeviceInfo/src/SetupDiEnumDeviceInfo at master · bg1bgst333/Sample · GitHub

IsEqualGUID

IsEqualGUIDで、2つのGUIDが同じか判定する。

IsEqualGUID - Win32 apps | Microsoft Learn

IsEqualGUID.cppで、

GUID文字列"{53F5630D-B6BF-11D0-94F2-00A0C91EFB8B}"は、GUID_DEVINTERFACE_VOLUMEのことなので、GUID構造体guid1にして、IsEqualGUIDでGUID_DEVINTERFACE_VOLUMEと比較する。

当然2つは同じ
当然2つは同じ

当然2つは同じ。

Sample/com/IsEqualGUID/IsEqualGUID/src/IsEqualGUID at master · bg1bgst333/Sample · GitHub

CLSIDFromString

CLSIDFromStringは、GUID文字列をCLSIDつまりGUIDに変換する。

CLSIDFromString 関数 (combaseapi.h) - Win32 apps | Microsoft Learn

CLSIDFromString.cppで、

GUID_DEVINTERFACE_VOLUMEを文字列に変換して出力、GUIDに戻して中身をGUID文字列書式で出力。

こうなる。
こうなる。

こうなる。

Sample/com/CLSIDFromString/CLSIDFromString/src/CLSIDFromString at master · bg1bgst333/Sample · GitHub

CoTaskMemFree

CoTaskMemFreeは、CoTaskMemAlloc(これについてはいずれ取り扱う。)などで確保したメモリを解放する。

CoTaskMemFree 関数 (combaseapi.h) - Win32 apps | Microsoft Learn

StringFromCLSIDで取得した文字列も、内部でメモリ確保してる。CoTaskMemFreeで解放しないといけないとある。
CoTaskMemFree.cppで、

今回は、GUID_DEVINTERFACE_DISKを文字列に変換する。

取得できた時は、こうだが、
取得できた時は、こうだが、

取得できた時は、こうだが、解放後は、

こうなる。
こうなる。

こうなる。

最終結果
終結

終結果。

Sample/com/CoTaskMemFree/CoTaskMemFree/src/CoTaskMemFree at master · bg1bgst333/Sample · GitHub

StringFromCLSID

StringFromCLSIDでも、GUIDから文字列に変換できる。

StringFromCLSID 関数 (combaseapi.h) - Win32 apps | Microsoft Learn

WCHARバッファではなく、ポインタのアドレスを渡すと内部で自動でバッファを確保するので、終わったらCoTaskMemFreeで解放する必要がある。
StringFromCLSID.cppで、

GUID_DEVINTERFACE_VOLUMEを文字列に変換してみる。

こうなる。
こうなる。

こうなる。

Sample/com/StringFromCLSID/StringFromCLSID/src/StringFromCLSID at master · bg1bgst333/Sample · GitHub

StringFromGUID2

StringFromGUID2で、指定のGUID構造体の内容を、GUID文字列に変換する。

StringFromGUID2 関数 (combaseapi.h) - Win32 apps | Microsoft Learn

StringFromGUID2.cppで、

こう書く。

楽にGUID文字列に変換できた。
楽にGUID文字列に変換できた。

楽にGUID文字列に変換できた。

Sample/com/StringFromGUID2/StringFromGUID2/src/StringFromGUID2 at master · bg1bgst333/Sample · GitHub