ASSOCIATORS OFステートメントのWHERE句の後に定義済みキーワードと値を指定できる。
ResultClassは、数ある関連インスタンスの中で、どのクラスのインスタンスだけを返すか絞り込める。
ASSOCIATORS OF ステートメント - Win32 apps | Microsoft Docs
SELECTなしに、いきなりASSOCIATORS OFいけるのか試してみる。
Win32_USBControllerのホストコントローラに関連するインスタンスを出してみる。
// クエリの実行. std::wstring q = L"ASSOCIATORS OF{Win32_USBController.Name=\'"; // "ASSOCIATORS OF{Win32_USBController.Name=\'"をqにセット. q = q + L"Intel(R) USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)"; // "Intel(R) USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)"を連結. q = q + L"\'}"; // "\'}"を連結. BSTR strQueryLanguage = SysAllocString(L"WQL"); // SysAllocStringでstrQueryLanguageを"WQL"で初期化. BSTR strQuery = SysAllocString(q.c_str()); // SysAllocStringでstrQueryをq.c_str()で初期化. hr6 = pServices->ExecQuery(strQueryLanguage, strQuery, WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator); // IWbemServices::ExecQueryでクエリ実行. if (FAILED(hr6)){ // FAILEDマクロで判定.
Nameを固定で指定する。
![あれ?出ない・・・。](https://cdn-ak.f.st-hatena.com/images/fotolife/B/BG1/20220518/20220518133222.png)
あれ?出ない・・・。
""指定したNameに当てはまるインスタンス"に関連したインスタンス"という単純な話ではないのか・・・。
DeviceIDならいけるのかなとおもったけど、固定だと見せにくいなあ・・・。
// クエリの実行. std::wstring q = L"ASSOCIATORS OF{Win32_USBController.DeviceID=\'"; // "ASSOCIATORS OF{Win32_USBController.DeviceID=\'"をqにセット. q = q + argv[1]; // argv[1]を連結. q = q + L"\'}"; // "\'}"を連結. BSTR strQueryLanguage = SysAllocString(L"WQL"); // SysAllocStringでstrQueryLanguageを"WQL"で初期化. BSTR strQuery = SysAllocString(q.c_str()); // SysAllocStringでstrQueryをq.c_str()で初期化. hr6 = pServices->ExecQuery(strQueryLanguage, strQuery, WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator); // IWbemServices::ExecQueryでクエリ実行. if (FAILED(hr6)){ // FAILEDマクロで判定.
引数で渡すことにした。
![DeviceIDは、ダブルクォートで囲み、しかもエスケープの'\'によって二重になってるから1つにする。](https://cdn-ak.f.st-hatena.com/images/fotolife/B/BG1/20220518/20220518133902.png)
DeviceIDは、ダブルクォートで囲み、しかもエスケープの'\'によって二重になってるから1つにする。
![成功した。Win32_PnPEntryはBLEとかいろんなデバイスがたくさん出てくる。](https://cdn-ak.f.st-hatena.com/images/fotolife/B/BG1/20220518/20220518134121.png)
成功した。
"DeviceIDに関連する"というところがキモなのかな・・・難しい・・・。
Win32_PnPEntryはBLEとかいろんなデバイスがたくさん出てくる。
![Win32_USBHub](https://cdn-ak.f.st-hatena.com/images/fotolife/B/BG1/20220518/20220518134338.png)
Win32_USBHubや、
![Win32_IRQResource](https://cdn-ak.f.st-hatena.com/images/fotolife/B/BG1/20220518/20220518134413.png)
Win32_IRQResource、
![Win32_DeviceMemoryAddress](https://cdn-ak.f.st-hatena.com/images/fotolife/B/BG1/20220518/20220518134455.png)
Win32_DeviceMemoryAddress、
![Win32_ComputerSystem](https://cdn-ak.f.st-hatena.com/images/fotolife/B/BG1/20220518/20220518134552.png)
Win32_ComputerSystemなど、関連するあらゆるものが出てくる・・・。
ResultClassにWin32_USBHubを指定すると、
![Win32_USBHubだけに絞り込める](https://cdn-ak.f.st-hatena.com/images/fotolife/B/BG1/20220518/20220518135305.png)
Win32_USBHubだけに絞り込める。
Sample/wmi/ASSOCIATORS_OF/ResultClass/src/ASSOCIATORS_OF at master · bg1bgst333/Sample · GitHub