651 lines
14 KiB
C
651 lines
14 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1994 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
baseobj.c
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
This module performs APPLY and CHECK functions related to
|
|||
|
base objects.
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Jim Kelly (JimK) 22-Sep-1994
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#include "secmgrp.h"
|
|||
|
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////
|
|||
|
// //
|
|||
|
// Module-specific definitions //
|
|||
|
// //
|
|||
|
///////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////
|
|||
|
// //
|
|||
|
// Module-Wide variables //
|
|||
|
// //
|
|||
|
///////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// The following variables represent the current settings in the
|
|||
|
// BASE OBJECTS dialog. The values for each are:
|
|||
|
//
|
|||
|
// ExecObjects -
|
|||
|
// SECMGR_ID_RADIO_EXEC_OBJECTS_SECURE
|
|||
|
// SECMGR_ID_RADIO_EXEC_OBJECTS_UNSECURE
|
|||
|
//
|
|||
|
// FontLoading -
|
|||
|
// SECMGR_ID_RADIO_FONT_SECURE
|
|||
|
// SECMGR_ID_RADIO_FONT_UNSECURE
|
|||
|
//
|
|||
|
//
|
|||
|
|
|||
|
LONG
|
|||
|
SecMgrpCurrentExecObjects,
|
|||
|
SecMgrpCurrentFontLoading;
|
|||
|
|
|||
|
//
|
|||
|
// Because setting some values takes so long, it is worth
|
|||
|
// remembering the initial values so we can determine whether
|
|||
|
// or not they have changed.
|
|||
|
//
|
|||
|
|
|||
|
LONG
|
|||
|
SecMgrpOriginalExecObjects,
|
|||
|
SecMgrpOriginalFontLoading;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////
|
|||
|
// //
|
|||
|
// Module-Private Prototypes //
|
|||
|
// //
|
|||
|
///////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
LONG
|
|||
|
SecMgrpDlgProcExecObjectsDescr(
|
|||
|
HWND hwnd,
|
|||
|
UINT wMsg,
|
|||
|
DWORD wParam,
|
|||
|
LONG lParam
|
|||
|
);
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SecMgrpDisplayExecObjects(
|
|||
|
HWND hwnd,
|
|||
|
BOOLEAN ChangesAllowed
|
|||
|
);
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SecMgrpDisplayFontLoading(
|
|||
|
HWND hwnd,
|
|||
|
BOOLEAN ChangesAllowed
|
|||
|
);
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SecMgrpBaseObjInitDialog(
|
|||
|
HWND hwnd,
|
|||
|
BOOLEAN ChangesAllowed
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SecMgrpBaseObjApplyCurrentSettings( HWND hwnd );
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////
|
|||
|
// //
|
|||
|
// Externally callable functions //
|
|||
|
// //
|
|||
|
///////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
|
|||
|
LONG
|
|||
|
SecMgrpDlgProcBaseObj(
|
|||
|
HWND hwnd,
|
|||
|
UINT wMsg,
|
|||
|
DWORD wParam,
|
|||
|
LONG lParam
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This function is the dialog process for the APPLY [SYSTEM ACCESS...]
|
|||
|
dialog.
|
|||
|
|
|||
|
Arguments
|
|||
|
|
|||
|
lParam - If FALSE, changes are NOT allowed to any of the settings.
|
|||
|
If TRUE, changes ARE allowed.
|
|||
|
|
|||
|
Return Values:
|
|||
|
|
|||
|
TRUE - the message was handled.
|
|||
|
|
|||
|
FALSE - the message was not handled.
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
HWND
|
|||
|
Button;
|
|||
|
|
|||
|
HCURSOR
|
|||
|
hCursor;
|
|||
|
|
|||
|
int
|
|||
|
Index;
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
ChangesAllowed;
|
|||
|
|
|||
|
|
|||
|
ChangesAllowed = (BOOLEAN)(lParam);
|
|||
|
|
|||
|
switch (wMsg) {
|
|||
|
|
|||
|
case WM_INITDIALOG:
|
|||
|
|
|||
|
|
|||
|
if (!SecMgrpBaseObjInitDialog( hwnd, ChangesAllowed ) ) {
|
|||
|
//
|
|||
|
// Couldn't init the dialog. It has been terminated.
|
|||
|
//
|
|||
|
return(TRUE);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// If ChangesAllowed, Hide the [OK] button.
|
|||
|
// Otherwise, hide the [APPLY] and [CANCEL] buttons.
|
|||
|
// Also select the button for the cursor to start at.
|
|||
|
//
|
|||
|
|
|||
|
if (ChangesAllowed) {
|
|||
|
Button = GetDlgItem(hwnd, IDOK);
|
|||
|
ShowWindow( Button, SW_HIDE );
|
|||
|
Button = GetDlgItem(hwnd, SECMGR_ID_BUTTON_BASE_OBJ_APPLY);
|
|||
|
} else {
|
|||
|
Button = GetDlgItem(hwnd, SECMGR_ID_BUTTON_BASE_OBJ_APPLY);
|
|||
|
ShowWindow( Button, SW_HIDE );
|
|||
|
Button = GetDlgItem(hwnd, IDCANCEL);
|
|||
|
ShowWindow( Button, SW_HIDE );
|
|||
|
Button = GetDlgItem(hwnd, IDOK);
|
|||
|
}
|
|||
|
|
|||
|
Index = (int)SendMessage(Button, CB_GETCURSEL, 0, 0);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
SetForegroundWindow(hwnd);
|
|||
|
ShowWindow(hwnd, SW_NORMAL);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
return(TRUE);
|
|||
|
|
|||
|
case WM_SYSCOMMAND:
|
|||
|
switch (wParam & 0xfff0) {
|
|||
|
case SC_CLOSE:
|
|||
|
EndDialog(hwnd, 0);
|
|||
|
return(TRUE);
|
|||
|
}
|
|||
|
return(FALSE);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
case WM_COMMAND:
|
|||
|
switch(LOWORD(wParam)) {
|
|||
|
|
|||
|
|
|||
|
case SECMGR_ID_BUTTON_EXEC_OBJ_DESCRIPTION:
|
|||
|
DialogBoxParam(SecMgrphInstance,
|
|||
|
MAKEINTRESOURCE(SECMGR_ID_DLG_EXEC_OBJ_DESCRIPTION),
|
|||
|
hwnd,
|
|||
|
(DLGPROC)SecMgrpDlgProcHelp,
|
|||
|
(LONG)0
|
|||
|
);
|
|||
|
return(TRUE);
|
|||
|
|
|||
|
|
|||
|
case SECMGR_ID_BUTTON_FONT_DESCRIPTION:
|
|||
|
DialogBoxParam(SecMgrphInstance,
|
|||
|
MAKEINTRESOURCE(SECMGR_ID_DLG_FONT_DESCRIPTION),
|
|||
|
hwnd,
|
|||
|
(DLGPROC)SecMgrpDlgProcHelp,
|
|||
|
(LONG)0
|
|||
|
);
|
|||
|
return(TRUE);
|
|||
|
|
|||
|
|
|||
|
case SECMGR_ID_RADIO_EXEC_OBJECTS_SECURE:
|
|||
|
case SECMGR_ID_RADIO_EXEC_OBJECTS_UNSECURE:
|
|||
|
SecMgrpCurrentExecObjects = LOWORD(wParam);
|
|||
|
return(TRUE);
|
|||
|
|
|||
|
|
|||
|
case SECMGR_ID_RADIO_FONT_SECURE:
|
|||
|
case SECMGR_ID_RADIO_FONT_UNSECURE:
|
|||
|
SecMgrpCurrentFontLoading = LOWORD(wParam);
|
|||
|
return(TRUE);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
case SECMGR_ID_BUTTON_BASE_OBJ_APPLY:
|
|||
|
|
|||
|
//
|
|||
|
// Changing all the rights assignments takes
|
|||
|
// a while. Change to an hourglass icon.
|
|||
|
//
|
|||
|
|
|||
|
hCursor = SetCursor( LoadCursor(NULL, IDC_WAIT) );
|
|||
|
ShowCursor(TRUE);
|
|||
|
|
|||
|
|
|||
|
if (SecMgrpBaseObjApplyCurrentSettings( hwnd )) {
|
|||
|
EndDialog(hwnd, 0);
|
|||
|
}
|
|||
|
|
|||
|
return(TRUE);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
case IDCANCEL:
|
|||
|
case IDOK:
|
|||
|
EndDialog(hwnd, 0);
|
|||
|
return(TRUE);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
default:
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
default:
|
|||
|
|
|||
|
break;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
return FALSE;
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SecMgrpBaseObjInitDialog(
|
|||
|
HWND hwnd,
|
|||
|
BOOLEAN ChangesAllowed
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This function initializes the Base Objects dialog box with
|
|||
|
current values and recommended values. This may be used for
|
|||
|
both [APPLY] and [CHECK] operations.
|
|||
|
|
|||
|
For [CHECK] operations, the caller is responsible for greying
|
|||
|
all controls in the dialog box (except the [HELP] button) and
|
|||
|
making the [APPLY] and [CANCEL] buttons invisible.
|
|||
|
|
|||
|
For [APPLY] operations, the caller is responsible for making the
|
|||
|
[OK] button invisible.
|
|||
|
|
|||
|
|
|||
|
Current settings are placed in the module-wide current-setting
|
|||
|
variables.
|
|||
|
|
|||
|
|
|||
|
Arguments
|
|||
|
|
|||
|
ChangesAllowed - TRUE: Leave change controls enabled.
|
|||
|
FALSE: Disable change controls.
|
|||
|
|
|||
|
Return Values:
|
|||
|
|
|||
|
TRUE - The dialog has been initialized without problem.
|
|||
|
|
|||
|
FALSE - A problem was encountered. A popup has been displayed
|
|||
|
and the dialog has been ended.
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////
|
|||
|
// //
|
|||
|
// Get current settings and recommended settings. //
|
|||
|
// //
|
|||
|
///////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
|
|||
|
if (SecMgrpDisplayExecObjects( hwnd, ChangesAllowed )) {
|
|||
|
if (SecMgrpDisplayFontLoading( hwnd, ChangesAllowed )) {
|
|||
|
return(TRUE);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// Something didn't work
|
|||
|
//
|
|||
|
|
|||
|
EndDialog(hwnd, 0);
|
|||
|
return(FALSE);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SecMgrpDisplayExecObjects(
|
|||
|
HWND hwnd,
|
|||
|
BOOLEAN ChangesAllowed
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This function retrieves the current executive objects protection
|
|||
|
setting and establishes the correct recommendation in the
|
|||
|
Base Objects dialog.
|
|||
|
|
|||
|
The current setting is placed in SecMgrpCurrentExecObjects.
|
|||
|
|
|||
|
|
|||
|
Arguments
|
|||
|
|
|||
|
ChangesAllowed - TRUE: Leave change controls enabled.
|
|||
|
FALSE: Disable change controls.
|
|||
|
|
|||
|
Return Values:
|
|||
|
|
|||
|
TRUE - Completed successfully.
|
|||
|
|
|||
|
FALSE - Did not complete successfully.
|
|||
|
A popup has been displayed.
|
|||
|
The dialog should be terminated.
|
|||
|
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
HWND
|
|||
|
Control;
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
Secure,
|
|||
|
Result;
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Set the recommendation
|
|||
|
//
|
|||
|
// For STANDARD WinNt system, run unsecure.
|
|||
|
// For server, or HIGH or C2, run secure.
|
|||
|
//
|
|||
|
|
|||
|
if ((SecMgrpProductType == NtProductWinNt) &&
|
|||
|
(SecMgrpCurrentLevel == SECMGR_ID_LEVEL_STANDARD) ) {
|
|||
|
Control = GetDlgItem(hwnd, SECMGR_ID_RECOMMEND_EXEC_OBJ_SECURE);
|
|||
|
ShowWindow(Control, SW_HIDE);
|
|||
|
} else {
|
|||
|
Control = GetDlgItem(hwnd, SECMGR_ID_RECOMMEND_EXEC_OBJ_UNSECURE);
|
|||
|
ShowWindow(Control, SW_HIDE);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Result = SecMgrpGetExecObjectsSetting( hwnd, &Secure );
|
|||
|
|
|||
|
if (!Result) {
|
|||
|
|
|||
|
//
|
|||
|
// popup has already been displayed.
|
|||
|
//
|
|||
|
|
|||
|
return(FALSE);
|
|||
|
}
|
|||
|
|
|||
|
if (Secure) {
|
|||
|
SecMgrpCurrentExecObjects = SECMGR_ID_RADIO_EXEC_OBJECTS_SECURE;
|
|||
|
} else {
|
|||
|
SecMgrpCurrentExecObjects = SECMGR_ID_RADIO_EXEC_OBJECTS_UNSECURE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Set the radio buttons accordingly
|
|||
|
//
|
|||
|
|
|||
|
|
|||
|
CheckRadioButton( hwnd,
|
|||
|
SECMGR_ID_RADIO_EXEC_OBJECTS_SECURE,
|
|||
|
SECMGR_ID_RADIO_EXEC_OBJECTS_UNSECURE,
|
|||
|
SecMgrpCurrentExecObjects);
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// If changes aren't allowed, then grey the radio buttons
|
|||
|
//
|
|||
|
|
|||
|
if (!ChangesAllowed) {
|
|||
|
|
|||
|
Control = GetDlgItem(hwnd, SECMGR_ID_RADIO_EXEC_OBJECTS_SECURE);
|
|||
|
EnableWindow( Control, FALSE );
|
|||
|
Control = GetDlgItem(hwnd, SECMGR_ID_RADIO_EXEC_OBJECTS_UNSECURE);
|
|||
|
EnableWindow( Control, FALSE );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
SecMgrpOriginalExecObjects = SecMgrpCurrentExecObjects;
|
|||
|
|
|||
|
return(TRUE);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SecMgrpDisplayFontLoading(
|
|||
|
HWND hwnd,
|
|||
|
BOOLEAN ChangesAllowed
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This function retrieves the current Font Loading mode (secure
|
|||
|
or unsecure).
|
|||
|
|
|||
|
The current setting is placed in SecMgrpCurrentFontLoading.
|
|||
|
|
|||
|
|
|||
|
Arguments
|
|||
|
|
|||
|
ChangesAllowed - TRUE: Leave change controls enabled.
|
|||
|
FALSE: Disable change controls.
|
|||
|
|
|||
|
Return Values:
|
|||
|
|
|||
|
TRUE - Completed successfully.
|
|||
|
|
|||
|
FALSE - Did not complete successfully.
|
|||
|
A popup has been displayed.
|
|||
|
The dialog should be terminated.
|
|||
|
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
HWND
|
|||
|
Control;
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
Secure,
|
|||
|
Result;
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Set the recommendation
|
|||
|
//
|
|||
|
// For STANDARD WinNt system, run unsecure.
|
|||
|
// For server, or HIGH or C2, run secure.
|
|||
|
//
|
|||
|
|
|||
|
if ((SecMgrpProductType == NtProductWinNt) &&
|
|||
|
(SecMgrpCurrentLevel == SECMGR_ID_LEVEL_STANDARD) ) {
|
|||
|
Control = GetDlgItem(hwnd, SECMGR_ID_RECOMMEND_FONT_SECURE);
|
|||
|
ShowWindow(Control, SW_HIDE);
|
|||
|
} else {
|
|||
|
Control = GetDlgItem(hwnd, SECMGR_ID_RECOMMEND_FONT_UNSECURE);
|
|||
|
ShowWindow(Control, SW_HIDE);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Result = SecMgrpGetFontLoadingSetting( hwnd, &Secure );
|
|||
|
|
|||
|
if (!Result) {
|
|||
|
|
|||
|
//
|
|||
|
// popup has already been displayed.
|
|||
|
//
|
|||
|
|
|||
|
return(FALSE);
|
|||
|
}
|
|||
|
|
|||
|
if (Secure) {
|
|||
|
SecMgrpCurrentFontLoading = SECMGR_ID_RADIO_FONT_SECURE;
|
|||
|
} else {
|
|||
|
SecMgrpCurrentFontLoading = SECMGR_ID_RADIO_FONT_UNSECURE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Set the radio buttons accordingly
|
|||
|
//
|
|||
|
|
|||
|
|
|||
|
CheckRadioButton( hwnd,
|
|||
|
SECMGR_ID_RADIO_FONT_SECURE,
|
|||
|
SECMGR_ID_RADIO_FONT_UNSECURE,
|
|||
|
SecMgrpCurrentFontLoading);
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// If changes aren't allowed, then grey the radio buttons
|
|||
|
//
|
|||
|
|
|||
|
if (!ChangesAllowed) {
|
|||
|
|
|||
|
Control = GetDlgItem(hwnd, SECMGR_ID_RADIO_FONT_SECURE);
|
|||
|
EnableWindow( Control, FALSE );
|
|||
|
Control = GetDlgItem(hwnd, SECMGR_ID_RADIO_FONT_UNSECURE);
|
|||
|
EnableWindow( Control, FALSE );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
SecMgrpOriginalFontLoading = SecMgrpCurrentFontLoading;
|
|||
|
|
|||
|
return(TRUE);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SecMgrpBaseObjApplyCurrentSettings(
|
|||
|
HWND hwnd
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This function applies the current settings to the operational system.
|
|||
|
If necessary, the RebootRequired flag will be set to TRUE.
|
|||
|
|
|||
|
Also, if necessary, a pop-up describing any problems will be
|
|||
|
presented to the user.
|
|||
|
|
|||
|
|
|||
|
Arguments
|
|||
|
|
|||
|
hwnd - Window handle.
|
|||
|
|
|||
|
|
|||
|
Return Values:
|
|||
|
|
|||
|
TRUE - Everything was assigned correctly.
|
|||
|
|
|||
|
FALSE - Something was not assigned correctly. A popup has been
|
|||
|
presented to the user.
|
|||
|
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
ExecObjectsSecure,
|
|||
|
FontLoadingSecure,
|
|||
|
Result = TRUE;
|
|||
|
|
|||
|
|
|||
|
if (SecMgrpCurrentExecObjects == SECMGR_ID_RADIO_EXEC_OBJECTS_SECURE) {
|
|||
|
ExecObjectsSecure = TRUE;
|
|||
|
} else {
|
|||
|
ExecObjectsSecure = FALSE;
|
|||
|
}
|
|||
|
|
|||
|
if (SecMgrpCurrentFontLoading == SECMGR_ID_RADIO_FONT_SECURE) {
|
|||
|
FontLoadingSecure = TRUE;
|
|||
|
} else {
|
|||
|
FontLoadingSecure = FALSE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// We count on the called routines to put up appropriate
|
|||
|
// pop-ups on error.
|
|||
|
//
|
|||
|
|
|||
|
if (Result && (SecMgrpCurrentExecObjects != SecMgrpOriginalExecObjects)) {
|
|||
|
Result = SecMgrpSetExecObjectsSetting(hwnd, ExecObjectsSecure);
|
|||
|
}
|
|||
|
|
|||
|
if (Result && (SecMgrpCurrentFontLoading != SecMgrpOriginalFontLoading)) {
|
|||
|
Result = SecMgrpSetFontLoadingSetting(hwnd, FontLoadingSecure);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
return(Result);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|