diff options
| author | Dave Wilson <[email protected]> | 2015-03-17 19:50:07 -0700 |
|---|---|---|
| committer | Dave Wilson <[email protected]> | 2015-03-17 19:50:07 -0700 |
| commit | 97cf5197cf5b882b2c689d8dc2b555f2edf8f418 (patch) | |
| tree | 46f3701832d70b420eb0fc0eb93261f9da45db3f /wpd/WpdServiceSampleDriver/WpdObjectPropertiesBulk.h | |
| parent | ef1905bf1e8825bb31120dfb27e0daf3154d859a (diff) | |
Initial publish
Diffstat (limited to 'wpd/WpdServiceSampleDriver/WpdObjectPropertiesBulk.h')
| -rw-r--r-- | wpd/WpdServiceSampleDriver/WpdObjectPropertiesBulk.h | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/wpd/WpdServiceSampleDriver/WpdObjectPropertiesBulk.h b/wpd/WpdServiceSampleDriver/WpdObjectPropertiesBulk.h new file mode 100644 index 00000000..52ec7ed1 --- /dev/null +++ b/wpd/WpdServiceSampleDriver/WpdObjectPropertiesBulk.h @@ -0,0 +1,148 @@ +#pragma once + +// This class is used to store the context for a specific enumeration. +// Currently, this is done by storing the object index. +class BulkPropertiesContext : public IUnknown +{ +public: + BulkPropertiesContext() : + Scope(FULL_DEVICE_ACCESS), + NextObject(0), + m_cRef(1) + { + + } + + ~BulkPropertiesContext() + { + + } + + ACCESS_SCOPE Scope; + CComPtr<IPortableDevicePropVariantCollection> ObjectIDs; + DWORD NextObject; + CComPtr<IPortableDeviceKeyCollection> Properties; + CComPtr<IPortableDeviceValuesCollection> ValuesCollection; + +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; +}; + +class WpdObjectPropertiesBulk +{ +public: + WpdObjectPropertiesBulk(); + ~WpdObjectPropertiesBulk(); + + HRESULT Initialize(_In_ FakeDevice *pDevice); + + HRESULT DispatchWpdMessage( + _In_ REFPROPERTYKEY Command, + _In_ IPortableDeviceValues* pParams, + _In_ IPortableDeviceValues* pResults); + + HRESULT OnGetValuesByObjectListStart( + _In_ IPortableDeviceValues* pParams, + _In_ IPortableDeviceValues* pResults); + + HRESULT OnGetValuesByObjectListNext( + _In_ IPortableDeviceValues* pParams, + _In_ IPortableDeviceValues* pResults); + + HRESULT OnGetValuesByObjectListEnd( + _In_ IPortableDeviceValues* pParams, + _In_ IPortableDeviceValues* pResults); + + HRESULT OnGetValuesByObjectFormatStart( + _In_ IPortableDeviceValues* pParams, + _In_ IPortableDeviceValues* pResults); + + HRESULT OnGetValuesByObjectFormatNext( + _In_ IPortableDeviceValues* pParams, + _In_ IPortableDeviceValues* pResults); + + HRESULT OnGetValuesByObjectFormatEnd( + _In_ IPortableDeviceValues* pParams, + _In_ IPortableDeviceValues* pResults); + + HRESULT OnSetValuesByObjectListStart( + _In_ IPortableDeviceValues* pParams, + _In_ IPortableDeviceValues* pResults); + + HRESULT OnSetValuesByObjectListNext( + _In_ IPortableDeviceValues* pParams, + _In_ IPortableDeviceValues* pResults); + + HRESULT OnSetValuesByObjectListEnd( + _In_ IPortableDeviceValues* pParams, + _In_ IPortableDeviceValues* pResults); + +private: + HRESULT CreateBulkPropertiesContext( + _In_ ACCESS_SCOPE Scope, + _In_ ContextMap* pContextMap, + _In_ IPortableDevicePropVariantCollection* pObjectIDs, + _In_ IPortableDeviceKeyCollection* pProperties, + _Outptr_result_nullonfailure_ LPWSTR* ppszBulkPropertiesContext); + + HRESULT CreateBulkPropertiesContext( + _In_ ACCESS_SCOPE Scope, + _In_ ContextMap* pContextMap, + _In_ REFGUID guidObjectFormat, + _In_ LPCWSTR pszParentObjectID, + _In_ DWORD dwDepth, + _In_ IPortableDeviceKeyCollection* pProperties, + _Outptr_result_nullonfailure_ LPWSTR* ppszBulkPropertiesContext); + + HRESULT CreateBulkPropertiesContext( + _In_ ACCESS_SCOPE Scope, + _In_ ContextMap* pContextMap, + _In_ IPortableDeviceValuesCollection* pValuesCollection, + _Outptr_result_nullonfailure_ LPWSTR* ppszBulkPropertiesContext); + + HRESULT DestroyBulkPropertiesContext( + _In_ ContextMap* pContextMap, + _In_ LPCWSTR pszBulkPropertiesContext); + + FakeDevice* m_pDevice; +}; |
