windows-nt/Source/XPSP1/NT/printscan/wia/setup/clsinst/device.h
2020-09-26 16:20:57 +08:00

234 lines
6.8 KiB
C++

/*******************************************************************************
*
* (C) COPYRIGHT MICROSOFT CORP., 2000
*
* TITLE: device.h
*
* VERSION: 1.0
*
* AUTHOR: KeisukeT
*
* DATE: 27 Mar, 2000
*
* DESCRIPTION:
* Class to handle device un/installation for WIA class installer.
*
*******************************************************************************/
#ifndef _DEVICE_H_
#define _DEVICE_H_
//
// Include
//
#include "sti_ci.h"
#include "exports.h"
//
// Define
//
#ifndef StiDeviceTypeStreamingVideo
#define StiDeviceTypeStreamingVideo 3
#endif
typedef BOOL (CALLBACK FAR * DEVNODESELCALLBACK)(LPTSTR szPortName, HDEVINFO *phDevInfo, PSP_DEVINFO_DATA pspDevInfoData);
//
// Class
//
class CDevice {
// Mutex for unique DeviceID/FriendlName creation.
HANDLE m_hMutex;
// // These members are set in constructor.
// HDEVINFO m_hDevInfo;
// PSP_DEVINFO_DATA m_pspDevInfoData;
CString m_csInf; // INF filename.
CString m_csInstallSection; // INF section name.
// These members are set during installation process.
CString m_csPort; // Port name.
DEVNODESELCALLBACK m_pfnDevnodeSelCallback;// Callback for devnode selection.
HKEY m_hkInterfaceRegistry; // RegKey to created interface.
CString m_csWiaSection; // WIA Section nane.
CString m_csSubClass; // Subclass.
CString m_csConnection; // Connection type.
CString m_csVendor; // Vendor name.
CString m_csFriendlyName; // Friendly name.
CString m_csPdoDescription; // Device Desc. of Devnode..
CString m_csDriverDescription; // Driver Description.
CString m_csUninstallSection; // UninstallSection.
CString m_csPropPages; // VendorPropertyPage.
CString m_csVendorSetup; // Vendor setup extention.
CString m_csDataSection; // DeviceDataSection name.
CString m_csEventSection; // EventSection name.
CString m_csIcmProfile; // ICM Profile.
CString m_csUSDClass; // USD Class GUID.
CString m_csDeviceID; // Unique device ID.
CString m_csSymbolicLink; // Symbolic link to the PDO.
CString m_csPortSelect; // Indicate needs of port selection page..
CStringArray m_csaAllNames; // Array to keep all device FriendlyName.
CStringArray m_csaAllId; // Array to keep all device ID.
DWORD m_dwCapabilities; // Capabilities.
DWORD m_dwDeviceType; // DeviceType.
DWORD m_dwDeviceSubType; // DeviceSubType.
DWORD m_dwNumberOfWiaDevice; // Number of WIA device.
DWORD m_dwNumberOfStiDevice; // Number of STI device.
DWORD m_dwInterfaceIndex; // Index of interface.
BOOL m_bVideoDevice; // Flag to indicate video device.
BOOL m_bIsPnP; // Flag to indicate PnP device.
BOOL m_bDefaultDevice; //
BOOL m_bInfProceeded; // Flag to indicate INF is proceeded.
BOOL m_bInterfaceOnly; // Flag to indicate Interface-onle device.
BOOL m_bIsMigration; // Flag to indicate migration.
PPARAM_LIST m_pExtraDeviceData; // DeviceData migrated from Win9x.
BOOL GetInfInforamtion();
VOID ProcessEventsSection(HINF hInf, HKEY hkDrv);
VOID ProcessDataSection(HINF hInf, HKEY hkDrv);
VOID ProcessICMProfiles();
VOID ProcessVendorSetupExtension();
VOID ProcessVideoDevice(HKEY hkDrv);
BOOL HandleFilesInstallation();
BOOL IsInterfaceOnlyDevice(){ return m_bInterfaceOnly; };
BOOL IsPnpDevice(){ return m_bIsPnP; };
BOOL IsFeatureInstallation(){ return ( m_bIsPnP && m_bInterfaceOnly); };
BOOL CreateDeviceInterfaceAndInstall();
BOOL IsMigration(){return m_bIsMigration;};
public:
// These members are set in constructor. These really should be in private.
HDEVINFO m_hDevInfo;
PSP_DEVINFO_DATA m_pspDevInfoData;
CDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pspDevInfoSet, BOOL bIsPnP);
CDevice(HDEVINFO hDevInfo, DWORD dwDeviceIndex);
CDevice(PDEVICE_INFO pMigratingDevice);
CDevice::~CDevice();
BOOL CollectNames();
BOOL IsDefault() const { return m_bDefaultDevice; }
VOID Default(BOOL bNew) { m_bDefaultDevice = bNew; }
DWORD GetCapabilities(){ return m_dwCapabilities; };
LPTSTR GetConnection(){ return m_csConnection; };
LPTSTR GetFriendlyName(){ return m_csFriendlyName; };
VOID SetPort (LPTSTR szPortName);
VOID SetDevnodeSelectCallback (DEVNODESELCALLBACK pfnDevnodeSelCallback);
VOID SetFriendlyName(LPTSTR szFriendlyName);
BOOL IsDeviceIdUnique(LPTSTR szDeviceId);
BOOL IsFriendlyNameUnique(LPTSTR szFriendlyName);
BOOL IsSameDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pspDevInfoSet);
BOOL NameDefaultUniqueName();
BOOL GenerateUniqueDeviceId();
BOOL Install();
DWORD Remove(PSP_REMOVEDEVICE_PARAMS lprdp);
BOOL PreInstall();
BOOL PostInstall(BOOL bSucceeded);
BOOL PreprocessInf();
BOOL UpdateDeviceRegistry();
DWORD GetPortSelectMode(VOID);
DWORD AcquireInstallerMutex(DWORD dwTimeout);
VOID ReleaseInstallerMutex();
};
//
// Prototype
//
// from device.cpp
VOID
GetDeviceCount(
DWORD *pdwWiaCount,
DWORD *pdwStiCount
);
BOOL
ExecCommandLine(
LPTSTR szCommandLine
);
// from service.cpp
DWORD
WINAPI
StiServiceRemove(
VOID
);
DWORD
WINAPI
StiServiceInstall(
BOOL UseLocalSystem,
BOOL DemandStart,
LPTSTR lpszUserName,
LPTSTR lpszUserPassword
);
BOOL
SetServiceStart(
LPTSTR ServiceName,
DWORD StartType
);
BOOL
StartWiaService(
VOID
);
BOOL
StopWiaService(
VOID
);
//PSP_FILE_CALLBACK StiInstallCallback;
//PSP_FILE_CALLBACK StiUninstallCallback;
UINT
CALLBACK
StiInstallCallback (
PVOID Context,
UINT Notification,
UINT_PTR Param1,
UINT_PTR Param2
);
UINT
CALLBACK
StiUninstallCallback (
PVOID Context,
UINT Notification,
UINT_PTR Param1,
UINT_PTR Param2
);
HANDLE
GetDeviceInterfaceIndex(
LPSTR pszLocalName,
DWORD *pdwIndex
);
PPARAM_LIST
MigrateDeviceData(
HKEY hkDeviceData,
PPARAM_LIST pExtraDeviceData,
LPSTR pszKeyName
);
#endif // _DEVICE_H_