summaryrefslogtreecommitdiff
path: root/wpd/WpdBasicHardwareDriver/Device.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/WpdBasicHardwareDriver/Device.h
parentef1905bf1e8825bb31120dfb27e0daf3154d859a (diff)
Initial publish
Diffstat (limited to 'wpd/WpdBasicHardwareDriver/Device.h')
-rw-r--r--wpd/WpdBasicHardwareDriver/Device.h89
1 files changed, 89 insertions, 0 deletions
diff --git a/wpd/WpdBasicHardwareDriver/Device.h b/wpd/WpdBasicHardwareDriver/Device.h
new file mode 100644
index 00000000..6b7ed2d0
--- /dev/null
+++ b/wpd/WpdBasicHardwareDriver/Device.h
@@ -0,0 +1,89 @@
+#pragma once
+
+#include "resource.h"
+#include "WpdBasicHardwareDriver.h"
+
+class ATL_NO_VTABLE CDevice :
+ public CComObjectRootEx<CComMultiThreadModel>,
+ public IPnpCallback,
+ public IPnpCallbackSelfManagedIo,
+ public IPnpCallbackHardware
+{
+public:
+ CDevice() :
+ m_pWpdBaseDriver(NULL)
+ {
+ }
+
+ DECLARE_NOT_AGGREGATABLE(CDevice)
+
+ BEGIN_COM_MAP(CDevice)
+ COM_INTERFACE_ENTRY(IPnpCallback)
+ COM_INTERFACE_ENTRY(IPnpCallbackSelfManagedIo)
+ COM_INTERFACE_ENTRY(IPnpCallbackHardware)
+ END_COM_MAP()
+
+public:
+ static HRESULT
+ CreateInstance(
+ _In_ IWDFDeviceInitialize* pDeviceInit,
+ _In_ WpdBaseDriver* pWpdBaseDriver,
+ _COM_Outptr_ IUnknown** ppUnkwn)
+ {
+ *ppUnkwn = NULL;
+
+ //
+ // Set device properties.
+ //
+ pDeviceInit->SetLockingConstraint(None);
+
+ CComObject< CDevice> *pMyDevice = NULL;
+ HRESULT hr = CComObject<CDevice>::CreateInstance( &pMyDevice );
+ if( SUCCEEDED (hr) )
+ {
+ pMyDevice->AddRef();
+ hr = pMyDevice->QueryInterface( __uuidof(IUnknown),(void **) ppUnkwn);
+ if (hr == S_OK)
+ {
+ pMyDevice->m_pWpdBaseDriver = pWpdBaseDriver;
+ }
+ pMyDevice->Release();
+ pMyDevice = NULL;
+ }
+
+ return hr;
+ }
+
+ // IPnpCallback
+ //
+ STDMETHOD_(HRESULT, OnD0Entry) (_In_ IWDFDevice* pDevice, WDF_POWER_DEVICE_STATE previousState);
+ STDMETHOD_(HRESULT, OnD0Exit) (_In_ IWDFDevice* pDevice, WDF_POWER_DEVICE_STATE newState);
+ STDMETHOD_(VOID, OnSurpriseRemoval)(_In_ IWDFDevice* pDevice);
+ STDMETHOD_(HRESULT, OnQueryRemove) (_In_ IWDFDevice* pDevice);
+ STDMETHOD_(HRESULT, OnQueryStop) (_In_ IWDFDevice* pDevice);
+
+ // IPnpCallbackSelfManagedIo
+ //
+ STDMETHOD_(VOID, OnSelfManagedIoCleanup)(_In_ IWDFDevice* pDevice);
+ STDMETHOD_(VOID, OnSelfManagedIoFlush) (_In_ IWDFDevice* pDevice);
+ STDMETHOD_(HRESULT, OnSelfManagedIoInit) (_In_ IWDFDevice* pDevice);
+ STDMETHOD_(HRESULT, OnSelfManagedIoSuspend)(_In_ IWDFDevice* pDevice);
+ STDMETHOD_(HRESULT, OnSelfManagedIoRestart)(_In_ IWDFDevice* pDevice);
+ STDMETHOD_(HRESULT, OnSelfManagedIoStop) (_In_ IWDFDevice* pDevice);
+
+ // IPnpCallbackHardware
+ //
+ STDMETHOD_(HRESULT, OnPrepareHardware)(_In_ IWDFDevice* pDevice);
+ STDMETHOD_(HRESULT, OnReleaseHardware)(_In_ IWDFDevice* pDevice);
+
+private:
+
+ HRESULT GetDeviceFriendlyName(
+ _Outptr_result_maybenull_ LPWSTR* pwszDeviceFriendlyName);
+
+private:
+
+ WpdBaseDriver* m_pWpdBaseDriver;
+ CComPtr<IPortableDeviceClassExtension> m_pPortableDeviceClassExtension;
+};
+