#ifndef _CDRIVER_H__ #define _CDRIVER_H__ /*++ Copyright (C) Microsoft Corporation Module Name: cdriver.h Abstract: header file for cdriver.cpp. Defined CDriverFile, CDriver and CService Author: William Hsieh (williamh) created Revision History: --*/ class CDriverFile { public: CDriverFile() : m_Win32Error(ERROR_FILE_NOT_FOUND), m_Attributes(0xFFFFFFFF), m_IsDriverBlocked(FALSE) {}; BOOL Create(LPCTSTR ServiceName, BOOL LocalMachine, DWORD Win32Error = ERROR_FILE_NOT_FOUND, LPCTSTR pszDigitalSigner = NULL, HSDB hSDBDrvMain = NULL); LPCTSTR GetProvider() { return m_strProvider.IsEmpty() ? NULL : (LPCTSTR)m_strProvider; } LPCTSTR GetCopyright(void) { return m_strCopyright.IsEmpty() ? NULL : (LPCTSTR)m_strCopyright; } LPCTSTR GetVersion(void) { return m_strVersion.IsEmpty() ? NULL : (LPCTSTR)m_strVersion; } LPCTSTR GetFullPathName(void) { return m_strFullPathName.IsEmpty() ? NULL : (LPCTSTR)m_strFullPathName; } BOOL HasVersionInfo() { return m_HasVersionInfo; } DWORD GetWin32Error() { return m_Win32Error; } DWORD GetAttributes() { return m_Attributes; } LPCTSTR GetInfDigitalSigner(void) { return m_strDigitalSigner.IsEmpty() ? NULL : (LPCTSTR)m_strDigitalSigner; } BOOL IsDriverBlocked() { return m_IsDriverBlocked; } LPCTSTR GetBlockedDriverHtmlHelpID(void) { return m_strHtmlHelpID.IsEmpty() ? NULL : (LPCTSTR)m_strHtmlHelpID; } BOOL operator ==(CDriverFile& OtherDrvFile); private: BOOL GetVersionInfo(); String m_strFullPathName; String m_strProvider; String m_strCopyright; String m_strVersion; String m_strDigitalSigner; String m_strHtmlHelpID; BOOL m_HasVersionInfo; BOOL m_IsDriverBlocked; DWORD m_Win32Error; DWORD m_Attributes; }; class CDriver { public: CDriver() : m_pDevice(NULL), m_OnLocalMachine(TRUE), m_DriverListBuilt(FALSE), m_hSDBDrvMain(NULL) { m_DigitalSigner.Empty(); } ~CDriver(); BOOL Create(SC_HANDLE hscManager, LPTSTR tszServiceName); BOOL Create(CDevice* pDevice); BOOL GetFirstDriverFile(CDriverFile** ppDrvFile, PVOID& Context); BOOL GetNextDriverFile(CDriverFile** ppDrvFile, PVOID& Context); void AddDriverFile(CDriverFile* pDrvFile); BOOL IsLocal() { return m_OnLocalMachine; } int GetCount() { return m_listDriverFile.GetCount(); } BOOL BuildDriverList(BOOL bFunctionAndFiltersOnly = FALSE); void GetDriverSignerString(String& strDriverSigner); private: // call back must be a static function(because of the hidden this parameter static UINT ScanQueueCallback(PVOID Context, UINT Notification, UINT_PTR Param1, UINT_PTR Param2); void AddFunctionAndFilterDrivers(CDevice* pDevice, HSPFILEQ hFileQueue = INVALID_HANDLE_VALUE); void CreateFromService(CDevice* pDevice, PCTSTR ServiceName, HSPFILEQ hFileQueue = INVALID_HANDLE_VALUE); BOOL GetFullPathFromImagePath(LPCTSTR ImagePath, LPTSTR FullPath, UINT FullPathLength); CList m_listDriverFile; CDevice* m_pDevice; BOOL m_OnLocalMachine; BOOL m_DriverListBuilt; String m_DigitalSigner; HSDB m_hSDBDrvMain; }; #endif // _CDRIVER_H__