|
|
#ifndef __TSMAIN_H__
#define __TSMAIN_H__
/*++
Copyright (C) 1997-1999 Microsoft Corporation
Module Name:
tsmain.h
Abstract:
header file for tsmain.cpp
Author:
William Hsieh (williamh) created
Revision History:
--*/
//
// Wizard32 command and parameter definitions
//
//
//
// INPUT:
// pParam -- troubleshooter parameter. The contents vary depends on
// the command specified in the block. See below
// for detail.
//
//
// OUTPUT:
// TRUE -- if the function succeeded.
// FALSE -- if the function failed. GetLastError() should be able
// to retreive the error code
typedef enum tagTShooterCommand { TSHOOTER_QUERY = 0, TSHOOTER_ABOUT, TSHOOTER_ADDPAGES }TSHOOTER_COMMAND, *PTSHOOTER_COMMAND;
// parameter header.
typedef struct tagTShooterParamHeader { DWORD cbSize; // size of the entire structure
TSHOOTER_COMMAND Command; // command
}TSHOOTER_PARAMHEADER, *PTSHOOTER_PARAMHEADER;
//
// QUERY command asks the troubleshooter the following questions:
// (1). if the troubleshooter supports the given DeviceId/Problem combination.
// (2). the brief description about the troubleshooter
// (3). the ranking on the DeviceId and the problem.
// If the troubleshooter does not support the device id and problem
// combination, it should resturn FALSE and set the error code
// to ERROR_INVALID_FUNCTION. The DescBuffer and DescBufferSize
// can be ignored. If the provided DescBuffer is too small, it should
// fill DescBufferSize with the required size, set the error code
// to ERROR_INSUFFICIENT_BUFFER and return FALSE.
//
// parameter definition for TSHOOTER_QUERY command
//
// The Header.Command must be TSHOOTER_QUERY;
// The header.cbSize must be sizeof(TSHOOTER_QUERY_PARAM);
//
// IN DeviceId -- device instance id
// IN Problem -- Configuration manager defined problem number
// IN OUT DescBuffer -- buffer to receive the troubleshooter description text
// IN OUT DescBufferSize -- Description buffer size in char(byte for ANSI)
// Troubleshooter should fill this field with required
// size on return.
// OUT DeviceRank -- to receive the device ranking
// OUT ProblemRank -- to receive the problem ranking
//
//
typedef struct tagTShooterQueryParam { TSHOOTER_PARAMHEADER Header; LPCTSTR DeviceId; ULONG Problem; LPTSTR DescBuffer; DWORD DescBufferSize; DWORD DeviceRank; DWORD ProblemRank; }TSHOOTER_QUERYPARAM, *PTSHOOTER_QUERYPARAM;
// The TSHOOTER_ABOUT asks the troubleshooter to display its about dialog box.
// The about dialog box should tell user what the troubleshooter is all about.
//
// The about dialog box is supposed to be Modal. If the troubleshooter
// implements a modaless about dialog box, it should disable
// the given hwndOwner after the dialog box is created and reenable
// it after the dialog box is destroyed.
//
// parameter definition for ABOUT troubleshooter command
//
// Header.Command must be TSHOOTER_ABOUT;
// Header.cbSize must be sizeof(TSHOOTER_ABOUT_PARAM);
//
// IN hwndOwner -- the window handle to serve as the owner window
// of the troubleshooter about dialog box
//
//
typedef struct tagTShooterAboutParam { TSHOOTER_PARAMHEADER Header; HWND hwndOwner; }TSHOOTER_ABOUTPARAM, *PTSHOOTER_ABOUTPARAM;
//
// The TSHOOTER_ADDPAGES asks the troubleshooter to add its wizard
// pages to the provided property sheet header.
//
//
// parameter definition for ADDPAGES troubleshooter command
//
// Header.Command must be TSHOOTER_ADDPAGRES;
// Header.cbSize must be sizeof(TSHOOTER_ADDPAGES_PARAM);
//
// IN DeviceId -- the hardware id of the device
// IN Problem -- Configuration Manager defined problem number
// IN OUT ppsh -- property sheet header to which the troubleshooter
// add its pages
// IN MaxPages -- total pages alloated for the ppsh.
// The troubleshooter should not add more than
// (MaxPages - ppsh.nPages) pages
//
typedef struct tagTShooterAddPagesParam { TSHOOTER_PARAMHEADER Header; LPCTSTR DeviceId; ULONG Problem; LPPROPSHEETHEADER PropSheetHeader; DWORD MaxPages; }TSHOOTER_ADDPAGESPARAM, *PTSHOOTER_ADDPAGESPARAM;
// Each Troubleshooting wizard must provide an entry point for Device Manager
// to call:
typedef BOOL (APIENTRY *WIZARDENTRY)(PTSHOOTER_PARAMHEADER pParam);
typedef enum tagTShooterWizadType { TWT_ANY = 0, // any type of troubleshooter wizard
TWT_PROBLEM_SPECIFIC, // problem specific wizards
TWT_CLASS_SPECIFIC, // class specific wizards
TWT_GENERAL_PURPOSE, // general purpose
TWT_DEVMGR_DEFAULT // device manager default
}TSHOOTERWIZARDTYPE, *PTSHOOTERWIZARTYPE;
//
// class that represent a wizard32 troubleshooter
//
class CWizard { public: CWizard(HMODULE hWizardDll, FARPROC WizardEntry) : m_WizardEntry((WIZARDENTRY)WizardEntry), m_hWizardDll(hWizardDll), m_Problem(0), m_DeviceRank(0), m_ProblemRank(0), m_AddedPages(0), m_pDevice(NULL) {} ~CWizard() { if (m_hWizardDll) FreeLibrary(m_hWizardDll); } LPCTSTR GetDescription() { return m_strDescription.IsEmpty() ? NULL : (LPCTSTR)m_strDescription; } virtual BOOL Query(CDevice* pDevice, ULONG Problem); virtual BOOL About(HWND hwndOwner); virtual BOOL AddPages(LPPROPSHEETHEADER ppsh, DWORD MaxPages); ULONG DeviceRank() { return m_DeviceRank; } ULONG ProblemRank() { return m_ProblemRank; } UINT m_AddedPages; protected: WIZARDENTRY m_WizardEntry; HINSTANCE m_hWizardDll; String m_strDescription; ULONG m_Problem; ULONG m_DeviceRank; ULONG m_ProblemRank; CDevice* m_pDevice; };
//
// Class that collects all available troubleshooter
//
class CWizardList { public: CWizardList(TSHOOTERWIZARDTYPE Type = TWT_ANY) : m_Type(Type) {} ~CWizardList(); BOOL Create(CDevice* pDevice, ULONG Problem); int NumberOfWizards() { return m_listWizards.GetCount(); } BOOL GetFirstWizard(CWizard** ppWizard, PVOID* pContext); BOOL GetNextWizard(CWizard** ppWizard, PVOID& Context); private: BOOL CreateWizardsFromStrings(LPTSTR msz, CDevice* pDevice, ULONG Problem); CList<CWizard*, CWizard*> m_listWizards; TSHOOTERWIZARDTYPE m_Type; };
//
// class that represents the troubleshooter wizard introduction page
//
class CWizardIntro : public CPropSheetPage { public: CWizardIntro() : m_pDevice(NULL), m_hFontBold(NULL), m_hFontBigBold(NULL), m_pSelectedWizard(NULL), m_Problem(0), CPropSheetPage(g_hInstance, IDD_WIZINTRO) { } virtual ~CWizardIntro() { if (m_hFontBold) DeleteObject(m_hFontBold); if (m_hFontBigBold) DeleteObject(m_hFontBigBold); } virtual BOOL OnInitDialog(LPPROPSHEETPAGE ppsp); virtual BOOL OnWizNext(); virtual BOOL OnSetActive(); virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam); HPROPSHEETPAGE Create(CDevice* pDevice); private: CDevice* m_pDevice; HFONT m_hFontBold; HFONT m_hFontBigBold; CWizardList m_Wizards; ULONG m_Problem; CWizard* m_pSelectedWizard; };
//
// class that represents the troubleshooter property sheet
//
class CWizard98 { public: CWizard98(HWND hwndParent, UINT MaxPages = 32);
BOOL CreateIntroPage(CDevice* pDevice); UINT GetMaxPages() { return m_MaxPages; } INT_PTR DoSheet() { return ::PropertySheet(&m_psh); } PROPSHEETHEADER m_psh; private: CDevice* m_pDevice; UINT m_MaxPages; };
class CTSLauncher { public: CTSLauncher() : m_hTSL(NULL) {} ~CTSLauncher() { Close(); } BOOL Open(LPCTSTR DeviceId, const GUID& ClassGuid, ULONG Problem) { return FALSE; } BOOL Close() { m_hTSL = NULL; return TRUE; } BOOL Go() { return FALSE; } BOOL EnumerateStatus(int Index, DWORD& Status) { return FALSE; } private: HANDLE m_hTSL; };
#if 0
typedef enum tagFixItCommand { FIXIT_COMMAND_DONOTHING = 0, FIXIT_COMMAND_UPGRADEDRIVERS, FIXIT_COMMAND_REINSTALL, FIXIT_COMMAND_ENABLEDEVICE FIXIT_COMMAND_RESTARTCOMPUTER } FIXIT_COMMAND, *PFIXIT_COMMAND;
class CProblemAgent { public: CProblemAgent(CDevice* pDevice, ULONG Problem, ULONG Status); ~CProblemAgent(); // retreive the problem description text
LPCTSTR ProblemText() { return m_strDescription.IsEmpty() ? NULL : (LPCTSTR)m_strDescription; } LPCTSTR InstructionText() { return m_strInstruction.IsEmpty() ? NULL : (LPCTSTR)m_strInstruction; } // fix the problem
virtual BOOL FixIt(HWND hwndOwner) { return TRUE; } protected: BOOL UpdateDriver(HWND hwndOwner, m_pDevice); BOOL Reinstall(HWND hwndOwner); BOOL RestartComputer(HWND hwndOwner); BOOL EnableDevice() CDevice* m_pDevice; ULONG m_Problem; ULONG m_Status; String m_strDescription; String m_strInstruction; FIXITCOMMAND m_Command; };
#endif
INT_PTR StartTroubleshootingWizard( HWND hWndParent, CDevice* pDevice ); #endif // __PROBLEM_H__
|