summaryrefslogtreecommitdiff
path: root/wpd/WpdServiceSampleDriver/WpdObjectPropertiesBulk.h
diff options
context:
space:
mode:
authorDave Wilson <[email protected]>2015-03-17 19:50:07 -0700
committerDave Wilson <[email protected]>2015-03-17 19:50:07 -0700
commit97cf5197cf5b882b2c689d8dc2b555f2edf8f418 (patch)
tree46f3701832d70b420eb0fc0eb93261f9da45db3f /wpd/WpdServiceSampleDriver/WpdObjectPropertiesBulk.h
parentef1905bf1e8825bb31120dfb27e0daf3154d859a (diff)
Initial publish
Diffstat (limited to 'wpd/WpdServiceSampleDriver/WpdObjectPropertiesBulk.h')
-rw-r--r--wpd/WpdServiceSampleDriver/WpdObjectPropertiesBulk.h148
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;
+};