Enumerating WPD devices (Part 1)
The IPortableDeviceManager interface can be used to enumerate WPD devices. The GetDevices method returns a list of device paths for available WPD devices. This device path is typically a PnP path and can be used later to connect to the device.
Error-checking has been omitted in the interests of brevity.
HRESULT hr = S_OK;
CComPtr<IPortableDeviceManager> spDevMgr;
LPTSTR* ppszDeviceListArray = NULL;
DWORD cdwDevices = 0;
hr = CoCreateInstance(CLSID_PortableDeviceManager,
NULL,
CLSCTX_INPROC_SERVER,
IID_IPortableDeviceManager,
(VOID**) &spDevMgr);
// Get a count of the devices available by passing
// a NULL buffer
hr = spDevMgr->GetDevices(NULL, &cdwDevices);
// Allocate enough memory for the device path names
ppszDeviceListArray = new LPTSTR[cdwDevices];
// Get the list of device paths using the valid buffer
hr = spDevMgr->GetDevices(ppszDeviceListArray, &cdwDevices);
And that's it! ppszDeviceListArray now contains the list of available WPD device paths. We can loop through this list to either get some more information about the devices or connect to the device. In the next part, we'll use the other methods of the IPortableDeviceManager interface to display information about each device.
Comments
Anonymous
September 27, 2006
In part 1 we obtained a list of available WPD devices (the device paths to be precise). In this part,...Anonymous
September 27, 2006
This post covers how to connect to a WPD device. We obtained a list of device paths in Enumerating WPD...Anonymous
December 05, 2006
There currently is no managed/C# flavor of the WPD API. This, of course, doesn't mean that you are lockedAnonymous
December 05, 2006
Let's take a look at how we can enumerate WPD devices in C#. This post assumes that you already haveAnonymous
May 31, 2015
after declaring the variables you should do : hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED); And instead of "CComPtr" yu should write "ComPtr" ;) BTW GREAT TUT! :)