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/WpdBasicHardwareDriver/Device.h | |
| parent | ef1905bf1e8825bb31120dfb27e0daf3154d859a (diff) | |
Initial publish
Diffstat (limited to 'wpd/WpdBasicHardwareDriver/Device.h')
| -rw-r--r-- | wpd/WpdBasicHardwareDriver/Device.h | 89 |
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; +}; + |
