Sample Code
Windows Driver Samples/ WPDHelloWorld sample driver for portable devices/ C++/ WpdObjectResources.h/
#pragma once #define FILE_OPTIMAL_READ_BUFFER_SIZE_VALUE (2 * 1024 * 1024) #define FILE_OPTIMAL_WRITE_BUFFER_SIZE_VALUE (2 * 1024 * 1024) // This class is used to store the context for a specific resource operation. class WpdObjectResourceContext : public IUnknown { public: WpdObjectResourceContext() : m_cRef(1), m_Resource(WPD_RESOURCE_DEFAULT), m_BytesTransferred(0), m_BytesTotal(0) { } ~WpdObjectResourceContext() { } public: // IUnknown ULONG __stdcall AddRef() { InterlockedIncrement((long*) &m_cRef); return m_cRef; } _At_(this, __drv_freesMem(Mem)) ULONG __stdcall Release() { ULONG ulRefCount = m_cRef - 1; if (InterlockedDecrement((long*) &m_cRef) == 0) { delete this; return 0; } return ulRefCount; } HRESULT __stdcall QueryInterface( REFIID riid, void** ppv) { HRESULT hr = S_OK; if(riid == IID_IUnknown) { *ppv = static_cast<IUnknown*>(this); AddRef(); } else { *ppv = NULL; hr = E_NOINTERFACE; } return hr; } private: DWORD m_cRef; // WpdObjectResourceContext specific data public: CAtlStringW m_strObjectID; // object identifier of the object whose resource is being transferred PROPERTYKEY m_Resource; // the specific resource being transferred ULONGLONG m_BytesTransferred; // number of bytes transferred from the resource to the caller ULONGLONG m_BytesTotal; // total number of bytes of the resource data }; class WpdObjectResources { public: WpdObjectResources(); virtual ~WpdObjectResources(); HRESULT DispatchWpdMessage(_In_ REFPROPERTYKEY Command, _In_ IPortableDeviceValues* pParams, _In_ IPortableDeviceValues* pResults); HRESULT OnGetSupportedResources(_In_ IPortableDeviceValues* pParams, _In_ IPortableDeviceValues* pResults); HRESULT OnGetResourceAttributes(_In_ IPortableDeviceValues* pParams, _In_ IPortableDeviceValues* pResults); HRESULT OnOpenResource(_In_ IPortableDeviceValues* pParams, _In_ IPortableDeviceValues* pResults); HRESULT OnReadResource(_In_ IPortableDeviceValues* pParams, _In_ IPortableDeviceValues* pResults); HRESULT OnCloseResource(_In_ IPortableDeviceValues* pParams, _In_ IPortableDeviceValues* pResults); private: HRESULT GetSupportedResourcesForObject(_In_ LPCWSTR wszObjectID, _In_ IPortableDeviceKeyCollection* pKeys); HRESULT GetResourceAttributesForObject(_In_ LPCWSTR wszObjectID, _In_ REFPROPERTYKEY Key, _In_ IPortableDeviceValues* pAttributes); HRESULT ReadDataFromResource(_In_ WpdObjectResourceContext* pResourceContext, _Out_writes_to_(dwNumBytesToRead, *pdwNumBytesRead) BYTE* pBuffer, DWORD dwNumBytesToRead, _Out_ DWORD* pdwNumBytesRead); };
Our Services
-
What our customers say about us?
Read our customer testimonials to find out why our clients keep returning for their projects.
View Testimonials