|
|
/*++
Microsoft Confidential Copyright (c) 1992-1997 Microsoft Corporation All rights reserved
Module Name:
hardware.c
Abstract:
Implements the Hardware tab of the System Control Panel Applet
Author:
William Hsieh (williamh) 03-Jul-1997
Revision History:
17-Oct-1997 scotthal Complete overhaul
--*/ #include "sysdm.h"
//
// Help IDs
//
DWORD aHardwareHelpIds[] = { IDC_WIZARD_ICON, (IDH_HARDWARE + 0), IDC_WIZARD_TEXT, (IDH_HARDWARE + 0), IDC_WIZARD_START, (IDH_HARDWARE + 1), IDC_DEVMGR_ICON, (IDH_HARDWARE + 2), IDC_DEVMGR_TEXT, (IDH_HARDWARE + 2), IDC_DEVMGR_START, (IDH_HARDWARE + 3), IDC_HWPROFILES_ICON, (IDH_HARDWARE + 4), IDC_HWPROFILES_START_TEXT, (IDH_HARDWARE + 4), IDC_HWPROFILES_START, (IDH_HARDWARE + 5), IDC_DRIVER_SIGNING, (IDH_HARDWARE + 6), 0, 0 };
//
// Function prototypes
//
void InitHardwareDlg( IN HWND hDlg );
BOOL HardwareHandleCommand( IN HWND hDlg, IN WPARAM wParam, IN LPARAM lParam );
void StartHardwareWizard( IN HWND hDlg );
void StartDeviceManager( IN HWND hDlg );
typedef HRESULT (WINAPI *PFNDRIVERSIGNING)(HWND hwnd, DWORD dwFlags);
BOOL ShowDriverSigning(HWND hDlg) { BOOL bFound = FALSE; HMODULE hmod = LoadLibrary(TEXT("sigtab.dll")); if (hmod) { PFNDRIVERSIGNING pfn = (PFNDRIVERSIGNING)GetProcAddress(hmod, "DriverSigningDialog"); if (pfn) { bFound = TRUE; if (hDlg) pfn(hDlg, 0); } FreeLibrary(hmod); } return bFound; }
VOID InitHardwareDlg( IN HWND hDlg ) /*++
Routine Description:
Initialize the hardware page
Arguments:
hDlg - Supplies the window handle
Return Value:
None
--*/ {
HICON hIconNew; HICON hIconOld;
hIconNew = ExtractIcon(hInstance, WIZARD_FILENAME, 0);
if (hIconNew && (HICON)1 != hIconNew) { hIconOld = (HICON)SendDlgItemMessage(hDlg, IDC_WIZARD_ICON, STM_SETICON, (WPARAM)hIconNew, 0); if(hIconOld) { DestroyIcon(hIconOld); } }
hIconNew = ExtractIcon(hInstance, DEVMGR_FILENAME, 0); if (hIconNew && (HICON)1 != hIconNew) { hIconOld = (HICON)SendDlgItemMessage(hDlg, IDC_DEVMGR_ICON, STM_SETICON, (WPARAM)hIconNew, 0); if(hIconOld) { DestroyIcon(hIconOld); } }
if (!ShowDriverSigning(NULL)) ShowWindow(GetDlgItem(hDlg, IDC_DRIVER_SIGNING), SW_HIDE); }
INT_PTR APIENTRY HardwareDlgProc( IN HWND hDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) /*++
Routine Description:
Handles messages sent to the hardware tab
Arguments:
hDlg - Supplies window handle
uMsg - Supplies message being sent
wParam - Supplies message parameter
lParam - Supplies message parameter
Return Value:
TRUE if message was handled FALSE if message was unhandled
--*/ {
switch (uMsg) { case WM_INITDIALOG: InitHardwareDlg(hDlg); break; case WM_COMMAND: return HardwareHandleCommand(hDlg, wParam, lParam); break;
case WM_HELP: // F1
WinHelp((HWND)((LPHELPINFO) lParam)->hItemHandle, HELP_FILE, HELP_WM_HELP, (DWORD_PTR) (LPSTR) aHardwareHelpIds); break; case WM_CONTEXTMENU: // right mouse click
WinHelp((HWND) wParam, HELP_FILE, HELP_CONTEXTMENU, (DWORD_PTR) (LPSTR) aHardwareHelpIds); break;
default: return(FALSE); } // switch
return(TRUE); }
BOOL HardwareHandleCommand( IN HWND hDlg, IN WPARAM wParam, IN LPARAM lParam ) /*++
Routine Description:
Handles WM_COMMAND messages sent to the Hardware tab
Arguments:
hDlg - Supplies the window handle
wParam - Supplies message parameter
lParam - Supplies message parameter
Return Value:
TRUE if message was handled FALSE if message was unhandled
--*/ { DWORD_PTR dwResult = 0;
switch (LOWORD(wParam)) { case IDC_WIZARD_START: StartHardwareWizard(hDlg); break;
case IDC_DEVMGR_START: StartDeviceManager(hDlg); break;
case IDC_DRIVER_SIGNING: ShowDriverSigning(hDlg); break;
case IDC_HWPROFILES_START: dwResult = DialogBox( hInstance, MAKEINTRESOURCE(DLG_HWPROFILES), hDlg, HardwareProfilesDlg ); break; default: return(FALSE); } // switch
return(TRUE); }
void StartHardwareWizard( IN HWND hDlg ) /*++
Routine Description:
Start the Hardware wizard
Arguments:
hDlg - Supplies window handle
Return Value:
None --*/ { TCHAR szWizardPath[MAX_PATH];
if (GetSystemDirectory(szWizardPath, ARRAYSIZE(szWizardPath)) && PathAppend(szWizardPath, WIZARD_FILENAME)) { SHELLEXECUTEINFO sei = {0};
sei.cbSize = sizeof(sei); sei.hwnd = hDlg; sei.lpFile = szWizardPath; sei.lpParameters = WIZARD_PARAMETERS; sei.lpVerb = WIZARD_VERB; sei.nShow = SW_NORMAL; sei.hInstApp = hInstance; if (!ShellExecuteEx(&sei)) { if (ERROR_FILE_NOT_FOUND == GetLastError() || ERROR_PATH_NOT_FOUND == GetLastError()) { // reinitialize the contents of the dialog in case
// user has fixed the problem
InitHardwareDlg(hDlg); } } } }
void StartDeviceManager( IN HWND hDlg ) /*++
Routine Description:
Start Device Manager
Arguments:
hDlg - Supplies window handle
Return Value:
None
--*/ { HINSTANCE hDevMgr;
PDEVMGR_EXECUTE_PROC DevMgrProc; hDevMgr = LoadLibrary(DEVMGR_FILENAME);
if (hDevMgr) {
HourGlass(TRUE);
DevMgrProc = (PDEVMGR_EXECUTE_PROC) GetProcAddress(hDevMgr, DEVMGR_EXECUTE_PROC_NAME); if (DevMgrProc) (*DevMgrProc)(hDlg, hInstance, NULL, SW_NORMAL); else MsgBoxParam(hDlg, IDS_SYSDM_NOEXPORTS_DEVMANPROG, IDS_SYSDM_TITLE, MB_OK | MB_ICONEXCLAMATION, DEVMGR_FILENAME);
FreeLibrary(hDevMgr);
HourGlass(FALSE);
} else { MsgBoxParam(hDlg, IDS_SYSDM_NOLOAD_DEVMANPROG, IDS_SYSDM_TITLE, MB_OK | MB_ICONEXCLAMATION, DEVMGR_FILENAME); }
}
|