我目前正在撰寫一個簡單的應用程式來檢索我計算機的 PnP 設備串列。為此,我使用了 Windows PortableDeviceApi 庫。
到目前為止,我有以下代碼:
#include <iostream>
#include <PortableDeviceApi.h>
#include <wrl.h>
inline void getDeviceHWIDs() {
// Initialize
CoInitialize(nullptr);
// create portable device manager object
Microsoft::WRL::ComPtr<IPortableDeviceManager> device_manager;
HRESULT hr = CoCreateInstance(CLSID_PortableDeviceManager,
nullptr,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&device_manager));
if (FAILED(hr)) {
std::cout << "! Failed to CoCreateInstance CLSID_PortableDeviceManager, hr = " << std::hex << hr << std::endl;
}
// obtain amount of devices
DWORD pnp_device_id_count = 0;
if (SUCCEEDED(hr)) {
hr = device_manager->GetDevices(nullptr, &pnp_device_id_count);
if (FAILED(hr)) {
std::cout << "! Failed to get number of devices on the system, hr = " << std::hex << hr << std::endl;
}
}
std::cout << "Devices found: " << pnp_device_id_count << std::endl;
// Uninitialize
CoUninitialize();
}
代碼編譯運行成功,但是pnp_device_id_count回傳0,說明我的電腦上沒有PnP設備。這顯然是一個錯誤的結果,因為Get-PnpDevice在 PowerShell 中會回傳大量設備。
任何幫助將不勝感激,因為我對此感到有點難過':(
謝謝 :)
uj5u.com熱心網友回復:
這是意料之中的,Windows Portable Devices只提供了一種與音樂播放器、存盤設備、手機、相機和許多其他型別的連接設備進行通信的方式。
它不會列舉系統上的所有設備。連接一部 iPhone,你會看到pnp_device_id_count變成 1。
要列舉所有設備,您可以使用 WinRT 的Windows.Devices.Enumeration 命名空間或古老的Setup API。
這是使用 WinRT 的https://github.com/smourier/DeviceExplorer的(C# 但您可以使用 C 執行相同操作)示例和使用 Setup API 的 C 示例:https ://www.codeproject.com/Articles /14412/列舉視窗設備
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/504370.html
下一篇:PAGE_EXECUTE_READWRITE作為VirtualAlloc中的一個選項的存在是否意味著W^X僅在Windows中由DEP提供便利?
