You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
3.5 KiB
132 lines
3.5 KiB
|
|
#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<CDriverFile*,CDriverFile* > m_listDriverFile;
|
|
CDevice* m_pDevice;
|
|
BOOL m_OnLocalMachine;
|
|
BOOL m_DriverListBuilt;
|
|
String m_DigitalSigner;
|
|
HSDB m_hSDBDrvMain;
|
|
};
|
|
|
|
#endif // _CDRIVER_H__
|