#include #include #include #include # pragma comment(lib, "wbemuuid.lib") int main() { HRESULT hres; // Step 1: Initialize COM hres = CoInitializeEx(0, COINIT_APARTMENTTHREADED); if (FAILED(hres)) { std::cerr / Step 2: Initialize WMI hres = CoInitializeSecurity( NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL ); if (FAILED(hres)) { std::cerr / Step 3: Connect to WMI IWbemLocator* pLoc = NULL; hres = CoCreateInstance( CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*)&pLoc ); if (FAILED(hres)) { std::cerr / Step 4: Connect to the root\cimv2 namespace IWbemServices* pSvc = NULL; hres = pLoc->ConnectServer( _bstr_t(L"ROOT\\CIMV2"), NULL, NULL, 0, NULL, 0, 0, &pSvc ); if (FAILED(hres)) { std::cerr Release(); CoUninitialize(); return 1; } std::cout / Query WMI for disk information IEnumWbemClassObject* pEnumerator = NULL; hres = pSvc->ExecQuery( _bstr_t("WQL"), _bstr_t("SELECT * FROM Win32_DiskDrive"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator ); if (FAILED(hres)) { std::cerr Release(); pLoc->Release(); CoUninitialize(); return 1; } // Step 5: Iterate over the query results if (pEnumerator) { IWbemClassObject* pclsObj = NULL; ULONG uReturn = 0; while (pEnumerator) { // Code for iterating over the disk drives and retrieving properties // Check the 'RotationSpeed' property to determine if the disk is an SSD // SSDs typically have a 'RotationSpeed' of 0 pclsObj->Release(); } pEnumerator->Release(); } // Cleanup pSvc->Release(); pLoc->Release(); CoUninitialize(); return 0; }