/******************************************************************************* * * (C) COPYRIGHT MICROSOFT CORP., 1997 * * TITLE: Helpers.h * * VERSION: 2.0 * * AUTHOR: ReedB * * DATE: 12 Mar, 1999 * * DESCRIPTION: * Declarations and definitions for WIA device manager object helpers. * *******************************************************************************/ #pragma once class CWiaDrvItem; // // Helper functions to build/destroy DEVICE_INFO structs // DEVICE_INFO* CreateDevInfoFromHKey(HKEY hKeyDev, DWORD dwDeviceState, SP_DEVINFO_DATA *pspDevInfoData, SP_DEVICE_INTERFACE_DATA *pspDevInterfaceData = NULL); DEVICE_INFO* CreateDevInfoForFSDriver(WCHAR *wszMountPoint); DEVICE_INFO* CreateDevInfoForRemoteDevice(HKEY hKeyDev); BOOL RefreshDevInfoFromHKey(DEVICE_INFO *pDeviceInfo,HKEY hKeyDev, DWORD dwDeviceState, SP_DEVINFO_DATA *pspDevInfoData, SP_DEVICE_INTERFACE_DATA *pspDevInterfaceData); BOOL RefreshDevInfoFromMountPoint(DEVICE_INFO *pDeviceInfo, WCHAR *wszMountPoint); VOID DestroyDevInfo(DEVICE_INFO *pInfo); VOID DumpDevInfo(DEVICE_INFO *pInfo); IWiaPropertyStorage* CreateDevInfoStg(DEVICE_INFO *pInfo); WCHAR* AllocCopyString(WCHAR* wszString); WCHAR* AllocCatString(WCHAR* wszString1, WCHAR* wszString2); HRESULT AllocReadRegistryString(HKEY hKey, WCHAR *wszValueName, WCHAR **pwszReturnValue); HRESULT ReadRegistryDWORD(HKEY hKey, WCHAR *wszValueName, DWORD *pdwReturnValue); BOOL GetDriverDLLVersion(DEVICE_INFO *pDeviceInfo, WCHAR *wszVersion, UINT uiSize); // // Exception handling covers for mini-driver entry points. // HRESULT _stdcall LockWiaDevice(IWiaItem*); HRESULT _stdcall UnLockWiaDevice(IWiaItem*); // // Validation helper functions. // HRESULT _stdcall ValidateWiaItem(IWiaItem*); HRESULT _stdcall ValidateWiaDrvItemAccess(CWiaDrvItem*); // // Error reporting helper functions. // LPOLESTR GetNameFromWiaPropId(PROPID propid); void _stdcall ReportReadWriteMultipleError(HRESULT, LPSTR, LPSTR, BOOL, ULONG, const PROPSPEC[]); // // Item navigation helpers // HRESULT _stdcall GetParentItem(CWiaItem *pItem, CWiaItem **ppParent); // // Property heplers // HRESULT _stdcall ReadPropStr(PROPID propid, IPropertyStorage *pIPropStg, BSTR *pbstr); HRESULT _stdcall ReadPropStr(PROPID propid, IWiaPropertyStorage *pIWiaPropStg, BSTR *pbstr); HRESULT _stdcall ReadPropStr(IUnknown *pDevice, PROPID propid, BSTR *pbstr); HRESULT _stdcall ReadPropLong(PROPID propid, IPropertyStorage *pIPropStg, LONG *plval); HRESULT _stdcall ReadPropLong(IUnknown *pDevice, PROPID propid, LONG *plval); HRESULT _stdcall WritePropStr(PROPID propid, IPropertyStorage *pIPropStg, BSTR bstr); HRESULT _stdcall WritePropStr(IUnknown *pDevice, PROPID propid, BSTR bstr); HRESULT _stdcall WritePropLong(PROPID propid, IPropertyStorage *pIPropStg, LONG lval); HRESULT _stdcall WritePropLong(IUnknown *pDevice, PROPID propid, LONG lval); HRESULT _stdcall GetPropertyAttributesHelper(IWiaItem*, LONG, PROPSPEC*, ULONG*, PROPVARIANT*); HRESULT _stdcall CheckXResAndUpdate(BYTE*, WIA_PROPERTY_CONTEXT*, LONG); HRESULT _stdcall CheckYResAndUpdate(BYTE*, WIA_PROPERTY_CONTEXT*, LONG); BOOL _stdcall AreWiaInitializedProps(ULONG, PROPSPEC*); HRESULT _stdcall FillICMPropertyFromRegistry(IWiaPropertyStorage *pDevInfoProps, IWiaItem *pIWiaItem); HRESULT _stdcall GetBufferValues(CWiaItem*, PWIA_EXTENDED_TRANSFER_INFO); HRESULT _stdcall BQADScale(BYTE* pSrcBuffer, LONG lSrcWidth, LONG lSrcHeight, LONG lSrcDepth, BYTE* pDestBuffer, LONG lDestWidth, LONG lDestHeight); HANDLE GetUserTokenForConsoleSession(); BOOL IsMassStorageCamera(WCHAR *wszMountPoint); HRESULT GetMountPointLabel(WCHAR *wszMountPoint, LPTSTR pszLabel, DWORD cchLabel); HRESULT CreateMSCRegEntries(HKEY hDevRegKey, WCHAR *wszMountPoint); // // Mini driver context helper functions. // HRESULT _stdcall InitMiniDrvContext(IWiaItem*, PMINIDRV_TRANSFER_CONTEXT ); // // COM helper functions // #define SESSION_MONIKER TEXT("Session:Console!clsid:") HRESULT _CoCreateInstanceInConsoleSession(REFCLSID rclsid, IUnknown* punkOuter, DWORD dwClsContext, REFIID riid, void** ppv); #ifndef __WAITCURS_H_INCLUDED #define __WAITCURS_H_INCLUDED class CWaitCursor { private: HCURSOR m_hCurOld; public: CWaitCursor(void) { m_hCurOld = SetCursor( LoadCursor( NULL, IDC_WAIT ) ); } ~CWaitCursor(void) { SetCursor(m_hCurOld); } }; #endif extern CRITICAL_SECTION g_semDeviceMan; /**************************************************************************\ * class CWiaCritSect * * Dev Manager auto-exiting critical section * * Arguments: * * * * Return Value: * * Status * * History: * * 4/8/1999 Original Version * \**************************************************************************/ class CWiaCritSect { private: CRITICAL_SECTION *m_pSect; BOOL bSucceeded; public: CWiaCritSect(CRITICAL_SECTION* pSect) { bSucceeded = FALSE; m_pSect = pSect; _try { EnterCriticalSection(m_pSect); } _except (EXCEPTION_EXECUTE_HANDLER) { #ifdef DEBUG OutputDebugString(TEXT("CWiaCritSect, could not grab critical section!!!!\n")); #endif return; } bSucceeded = TRUE; } ~CWiaCritSect() { if (bSucceeded) { LeaveCriticalSection(m_pSect); } } inline BOOL Succeeded() { return bSucceeded; } };