windows-nt/Source/XPSP1/NT/shell/cpls/system/hardware.c
2020-09-26 16:20:57 +08:00

353 lines
6.2 KiB
C

/*++
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
--*/
{
SHELLEXECUTEINFO sei;
memset(&sei, 0, sizeof(sei));
sei.cbSize = sizeof(sei);
sei.hwnd = hDlg;
sei.lpFile = WIZARD_FILENAME;
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);
}
}