summaryrefslogtreecommitdiff
path: root/wpd/WpdServiceSampleDriver/helpers.h
diff options
context:
space:
mode:
Diffstat (limited to 'wpd/WpdServiceSampleDriver/helpers.h')
-rw-r--r--wpd/WpdServiceSampleDriver/helpers.h459
1 files changed, 0 insertions, 459 deletions
diff --git a/wpd/WpdServiceSampleDriver/helpers.h b/wpd/WpdServiceSampleDriver/helpers.h
deleted file mode 100644
index 5ea3967b..00000000
--- a/wpd/WpdServiceSampleDriver/helpers.h
+++ /dev/null
@@ -1,459 +0,0 @@
-#pragma once
-
-#ifndef SAFE_RELEASE
- #define SAFE_RELEASE(p) if( NULL != p ) { ( p )->Release(); p = NULL; }
-#endif
-
-// {CDD18979-A7B0-4D5E-9EB2-0A826805CBBD}
-DEFINE_PROPERTYKEY(PRIVATE_SAMPLE_DRIVER_WUDF_DEVICE_OBJECT, 0xCDD18979, 0xA7B0, 0x4D5E, 0x9E, 0xB2, 0x0A, 0x82, 0x68, 0x05, 0xCB, 0xBD, 2);
-// {9BD949E5-59CF-41AE-90A9-BE1D044F578F}
-DEFINE_PROPERTYKEY(PRIVATE_SAMPLE_DRIVER_WPD_SERIALIZER_OBJECT, 0x9BD949E5, 0x59CF, 0x41AE, 0x90, 0xA9, 0xBE, 0x1D, 0x04, 0x4F, 0x57, 0x8F, 2);
-// {4DF6C8C7-2CE5-457C-9F53-EFCECAA95C04}
-DEFINE_PROPERTYKEY(PRIVATE_SAMPLE_DRIVER_CLIENT_CONTEXT_MAP, 0x4DF6C8C7, 0x2CE5, 0x457C, 0x9F, 0x53, 0xEF, 0xCE, 0xCA, 0xA9, 0x5C, 0x04, 2);
-// {67BA8D9E-1DC4-431C-B89C-9D03F7D8C223}
-DEFINE_PROPERTYKEY(PRIVATE_SAMPLE_DRIVER_REQUEST_FILENAME, 0x67BA8D9E, 0x1DC4, 0x431C, 0xB8, 0x9C, 0x9D, 0x03, 0xF7, 0xD8, 0xC2, 0x23, 2);
-
-// Service event and parameters
-// {D93102D5-8FED-4A39-AF84-228FE15888D0}
-DEFINE_GUID(MyCustomEvent, 0xD93102D5, 0x8FED, 0x4A39, 0xAF, 0x84, 0x22, 0x8F, 0xE1, 0x58, 0x88, 0xD0);
-// {D93102D5-8FED-4A39-AF84-228FE15888D0}.2
-DEFINE_PROPERTYKEY(MyCustomEventParam0, 0xD93102D5, 0x8FED, 0x4A39, 0xAF, 0x84, 0x22, 0x8F, 0xE1, 0x58, 0x88, 0xD0, 2);
-// {D93102D5-8FED-4A39-AF84-228FE15888D0}.3
-DEFINE_PROPERTYKEY(MyCustomEventParam1, 0xD93102D5, 0x8FED, 0x4A39, 0xAF, 0x84, 0x22, 0x8F, 0xE1, 0x58, 0x88, 0xD0, 3);
-
-// Service method and parameters
-// {ECFC865F-7B43-4D76-9C6B-D67309A3F6F7}
-DEFINE_GUID(MyCustomMethod, 0xECFC865F, 0x7B43, 0x4D76, 0x9C, 0x6B, 0xD6, 0x73, 0x09, 0xA3, 0xF6, 0xF7);
-// {ECFC865F-7B43-4D76-9C6B-D67309A3F6F7}.2
-DEFINE_PROPERTYKEY(MyCustomMethodResult, 0xECFC865F, 0x7B43, 0x4D76, 0x9C, 0x6B, 0xD6, 0x73, 0x09, 0xA3, 0xF6, 0xF7, 2);
-// {ECFC865F-7B43-4D76-9C6B-D67309A3F6F7}.3
-DEFINE_PROPERTYKEY(MyCustomMethodParam, 0xECFC865F, 0x7B43, 0x4D76, 0x9C, 0x6B, 0xD6, 0x73, 0x09, 0xA3, 0xF6, 0xF7, 3);
-// {ECFC865F-7B43-4D76-9C6B-D67309A3F6F7}.4
-DEFINE_PROPERTYKEY(MyCustomMethodParamInOut, 0xECFC865F, 0x7B43, 0x4D76, 0x9C, 0x6B, 0xD6, 0x73, 0x09, 0xA3, 0xF6, 0xF7, 4);
-
-// Contact versioning property
-// {2B0D5AA4-7EB3-4674-BD36-23FE4C39A2C2}.2
-DEFINE_PROPERTYKEY(MyContactVersionIdentifier, 0x2B0D5AA4, 0x7EB3, 0x4674, 0xBD, 0x36, 0x23, 0xFE, 0x4C, 0x39, 0xA2, 0xC2, 2);
-
-// Full Enumeration Sync Replica ID
-// {81176f1e-2c42-4b4e-8f79-bc1a7f3da046}
-DEFINE_GUID(MyFullEnumSyncReplicaId, 0x81176f1e, 0x2c42, 0x4b4e, 0x8f, 0x79, 0xbc, 0x1a, 0x7f, 0x3d, 0xa0, 0x46);
-
-// Access Scope is a bit mask, where each bit enables access to a particular scope
-// for example, contacts service is bit 1.
-// The next scope, if any, will be in bit 2
-// Full device access is a combination of all, requires all bits to be set
-typedef enum tagACCESS_SCOPE
-{
- CONTACTS_SERVICE_ACCESS = 1,
- FULL_DEVICE_ACCESS = 0xFFFFFFFF
-}ACCESS_SCOPE;
-
-typedef enum tagFakeDevicePropertyAttributesType
-{
- UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast,
- UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast,
-} FakeDevicePropertyAttributesType;
-
-typedef struct tagPropertyAttributeInfo
-{
- const PROPERTYKEY* pKey;
- VARTYPE Vartype;
- FakeDevicePropertyAttributesType AttributesType;
- PCWSTR wszName;
-} PropertyAttributeInfo;
-
-typedef struct tagMethodParameterAttributeInfo
-{
- const PROPERTYKEY* pKey;
- VARTYPE Vartype;
- WPD_PARAMETER_USAGE_TYPES UsageType;
- WpdParameterAttributeForm Form;
- DWORD Order;
- PCWSTR wszName;
-} MethodParameterAttributeInfo;
-
-typedef struct tagEventParameterAttributeInfo
-{
- const GUID* pEventGuid;
- const PROPERTYKEY* pParameter;
- VARTYPE Vartype;
-} EventParameterAttributeInfo;
-
-typedef struct tagFormatAttributeInfo
-{
- const GUID* pFormatGuid;
- PCWSTR wszName;
-} FormatAttributeInfo;
-
-
-class ContextMap : public IUnknown
-{
-public:
- ContextMap() :
- m_cRef(1)
- {
-
- }
-
- ~ContextMap()
- {
- CComCritSecLock<CComAutoCriticalSection> Lock(m_CriticalSection);
-
- IUnknown* pUnk = NULL;
- POSITION elementPosition = NULL;
-
- elementPosition = m_Map.GetStartPosition();
- while(elementPosition != NULL)
- {
- pUnk = m_Map.GetNextValue(elementPosition);
- if(pUnk != NULL)
- {
- pUnk->Release();
- }
- }
- }
-
-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;
- }
-
-
-public: // Context accessor methods
-
- // If successful, this method AddRef's the context and returns
- // a context key
- HRESULT Add(
- _In_ IUnknown* pContext,
- _Out_ CAtlStringW& key)
- {
- CComCritSecLock<CComAutoCriticalSection> Lock(m_CriticalSection);
- HRESULT hr = S_OK;
- GUID guidContext = GUID_NULL;
- CComBSTR bstrContext;
- key = L"";
-
- // Create a unique context key
- hr = CoCreateGuid(&guidContext);
- if (hr == S_OK)
- {
- bstrContext = guidContext;
- if(bstrContext.Length() > 0)
- {
- key = bstrContext;
- }
- else
- {
- hr = E_OUTOFMEMORY;
- }
- }
-
- if (hr == S_OK)
- {
- // Insert this into the map
- POSITION elementPosition = m_Map.SetAt(key, pContext);
- if(elementPosition != NULL)
- {
- // AddRef since we are holding onto it
- pContext->AddRef();
- }
- else
- {
- hr = E_OUTOFMEMORY;
- }
- }
- return hr;
- }
-
- void Remove(
- const CAtlStringW& key)
- {
- CComCritSecLock<CComAutoCriticalSection> Lock(m_CriticalSection);
- // Get the element
- IUnknown* pContext = NULL;
-
- if (m_Map.Lookup(key, pContext) == true)
- {
- // Remove the entry for it
- m_Map.RemoveKey(key);
-
- // Release it
- pContext->Release();
- }
- }
-
- // Returns the context pointer. If not found, return value is NULL.
- // If non-NULL, caller is responsible for Releasing when it is done,
- // since this method will AddRef the context.
- IUnknown* GetContext(
- const CAtlStringW& key)
- {
- CComCritSecLock<CComAutoCriticalSection> Lock(m_CriticalSection);
- // Get the element
- IUnknown* pContext = NULL;
-
- if (m_Map.Lookup(key, pContext) == true)
- {
- // AddRef
- pContext->AddRef();
- }
- return pContext;
- }
-
-private:
- CComAutoCriticalSection m_CriticalSection;
- CAtlMap<CAtlStringW, IUnknown*> m_Map;
- DWORD m_cRef;
-};
-
-
-// This class is used to store the connected client information.
-class ClientContext : public IUnknown
-{
-public:
- ClientContext() :
- MajorVersion(0),
- MinorVersion(0),
- Revision(0),
- m_cRef(1)
- {
- }
-
- ~ClientContext()
- {
- }
-
-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;
-
-public:
- CAtlStringW ClientName;
- CAtlStringW EventCookie;
- DWORD MajorVersion;
- DWORD MinorVersion;
- DWORD Revision;
-};
-
-
-class PropVariantWrapper : public tagPROPVARIANT
-{
-public:
- PropVariantWrapper()
- {
- PropVariantInit(this);
- }
-
- PropVariantWrapper(LPCWSTR pszSrc)
- {
- PropVariantInit(this);
-
- *this = pszSrc;
- }
-
- virtual ~PropVariantWrapper()
- {
- Clear();
- }
-
- void Clear()
- {
- PropVariantClear(this);
- }
-
- PropVariantWrapper& operator= (const ULONG ulValue)
- {
- Clear();
- vt = VT_UI4;
- ulVal = ulValue;
-
- return *this;
- }
-
- PropVariantWrapper& operator= (_In_ LPCWSTR pszSrc)
- {
- Clear();
-
- pwszVal = AtlAllocTaskWideString(pszSrc);
- if(pwszVal != NULL)
- {
- vt = VT_LPWSTR;
- }
- return *this;
- }
-
- PropVariantWrapper& operator= (_In_ IUnknown* punkSrc)
- {
- Clear();
-
- // Need to AddRef as PropVariantClear will Release
- if (punkSrc != NULL)
- {
- vt = VT_UNKNOWN;
- punkVal = punkSrc;
- punkVal->AddRef();
- }
- return *this;
- }
-
- void SetErrorValue(const HRESULT hr)
- {
- Clear();
- vt = VT_ERROR;
- scode = hr;
- }
-
- void SetBoolValue(const bool bValue)
- {
- Clear();
- vt = VT_BOOL;
- if(bValue)
- {
- boolVal = VARIANT_TRUE;
- }
- else
- {
- boolVal = VARIANT_FALSE;
- }
- }
-};
-
-HRESULT UpdateDeviceFriendlyName(
- _In_ IPortableDeviceClassExtension* pPortableDeviceClassExtension,
- _In_ LPCWSTR wszDeviceFriendlyName);
-
-HRESULT RegisterServices(
- _In_ IPortableDeviceClassExtension* pPortableDeviceClassExtension,
- const bool bUnregister);
-
-HRESULT CheckRequestFilename(
- _In_ LPCWSTR pszRequestFilename);
-
-DWORD GetResourceSize(
- const UINT uiResource);
-
-PBYTE GetResourceData(
- const UINT uiResource);
-
-HRESULT AddStringValueToPropVariantCollection(
- _In_ IPortableDevicePropVariantCollection* pCollection,
- _In_ LPCWSTR wszValue);
-
-HRESULT PostWpdEvent(
- _In_ IPortableDeviceValues* pCommandParams,
- _In_ IPortableDeviceValues* pEventParams);
-
-HRESULT GetClientContextMap(
- _In_ IPortableDeviceValues* pParams,
- _Outptr_ ContextMap** ppContextMap);
-
-HRESULT GetClientContext(
- _In_ IPortableDeviceValues* pParams,
- _In_ LPCWSTR pszContextKey,
- _COM_Outptr_ IUnknown** ppContext);
-
-HRESULT GetClientEventCookie(
- _In_ IPortableDeviceValues* pParams,
- _Outptr_result_maybenull_ LPWSTR* ppszEventCookie);
-
-HRESULT AddPropertyAttributesByType(
- const FakeDevicePropertyAttributesType type,
- _In_ IPortableDeviceValues* pAttributes);
-
-HRESULT SetPropertyAttributes(
- _In_ REFPROPERTYKEY Key,
- _In_reads_(cAttributeInfo) const PropertyAttributeInfo* AttributeInfo,
- _In_ DWORD cAttributeInfo,
- _In_ IPortableDeviceValues* pAttributes);
-
-HRESULT SetMethodParameterAttributes(
- _In_ REFPROPERTYKEY Parameter,
- _In_reads_(cAttributeInfo) const MethodParameterAttributeInfo* AttributeInfo,
- _In_ DWORD cAttributeInfo,
- _In_ IPortableDeviceValues* pAttributes);
-
-HRESULT SetEventParameterAttributes(
- _In_ REFPROPERTYKEY Parameter,
- _In_reads_(cAttributeInfo) const EventParameterAttributeInfo* AttributeInfo,
- _In_ DWORD cAttributeInfo,
- _In_ IPortableDeviceValues* pAttributes);
-
-HRESULT SetEventParameters(
- _In_ REFGUID Event,
- _In_reads_(cAttributeInfo) const EventParameterAttributeInfo* AttributeInfo,
- _In_ DWORD cAttributeInfo,
- _In_ IPortableDeviceKeyCollection* pParameters);