Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1255 lines
29 KiB

/*++
Copyright (c) 1994 Microsoft Corporation
Module Name:
sysacc.c
Abstract:
This module performs APPLY and CHECK functions related to
SYSTEM ACCESS.
Author:
Jim Kelly (JimK) 22-Sep-1994
Revision History:
--*/
#include "secmgrp.h"
///////////////////////////////////////////////////////////////////////
// //
// Module-specific definitions //
// //
///////////////////////////////////////////////////////////////////////
#define SECMGRP_MAX_CAPTION_LENGTH 200
#define SECMGRP_MAX_BODY_LENGTH 2048
///////////////////////////////////////////////////////////////////////
// //
// Module-Wide variables //
// //
///////////////////////////////////////////////////////////////////////
//
// The following variables represent the current settings in the
// SYSTEM ACCESS dialog. The values for each are:
//
// CurrentCacheSize - ULONG, 0 to SECMGRP_MAX_LOGON_CACHE_COUNT
//
// CurrentUnlock -
// SECMGR_ID_RADIO_SYSACC_UNLOCK_ANYONE
// SECMGR_ID_RADIO_SYSACC_UNLOCK_ADMIN
//
// CurrentShutdown -
// SECMGR_ID_RADIO_SYSACC_SHUTDOWN_ANYONE
// SECMGR_ID_RADIO_SYSACC_SHUTDOWN_LOGGED_ON
// SECMGR_ID_RADIO_SYSACC_SHUTDOWN_OPERS
// SECMGR_ID_RADIO_SYSACC_SHUTDOWN_ADMIN
//
// CurrentLegalNotice -
// SECMGR_ID_RADIO_SYSACC_LEGAL_NOTICE_NONE
// SECMGR_ID_RADIO_SYSACC_LEGAL_NOTICE
//
// LegalNoticeCaption -
// Only valid when CurrentLegalNotice has the value
// SECMGR_ID_RADIO_SYSACC_LEGAL_NOTICE. In that case,
// points to a string containing the legal notice title
// bar text.
//
// LegalNoticeBody -
// Only valid when CurrentLegalNotice has the value
// SECMGR_ID_RADIO_SYSACC_LEGAL_NOTICE. In that case,
// points to a string containing the legal notice body
// text.
//
ULONG
SecMgrpCurrentCacheSize,
SecMgrpCurrentUnlock,
SecMgrpCurrentShutdown,
SecMgrpCurrentLegalNotice;
//
// Because setting some values takes so long, it is worth
// remembering the initial values so we can determine whether
// or not they have changed.
//
ULONG
SecMgrpOriginalCacheSize,
SecMgrpOriginalUnlock,
SecMgrpOriginalShutdown,
SecMgrpOriginalLegalNotice;
BOOLEAN
SecMgrpOriginalLegalNoticeChanged;
WCHAR
SecMgrpLegalNoticeCaptionBuffer[SECMGRP_MAX_CAPTION_LENGTH],
SecMgrpLegalNoticeBodyBuffer[SECMGRP_MAX_BODY_LENGTH];
UNICODE_STRING
SecMgrpCurrentLegalNoticeCaption =
{0, SECMGRP_MAX_CAPTION_LENGTH, SecMgrpLegalNoticeCaptionBuffer },
SecMgrpCurrentLegalNoticeBody =
{0, SECMGRP_MAX_BODY_LENGTH, SecMgrpLegalNoticeBodyBuffer };
///////////////////////////////////////////////////////////////////////
// //
// Module-Private Prototypes //
// //
///////////////////////////////////////////////////////////////////////
BOOLEAN
SecMgrpDisplayUnlock(
HWND hwnd,
BOOLEAN ChangesAllowed
);
BOOLEAN
SecMgrpDisplayShutdown(
HWND hwnd,
BOOLEAN ChangesAllowed
);
BOOLEAN
SecMgrpDisplayLogonCache(
HWND hwnd,
BOOLEAN ChangesAllowed
);
BOOLEAN
SecMgrpDisplayLegalNotice(
HWND hwnd,
BOOLEAN ChangesAllowed
);
BOOLEAN
SecMgrpSysAccInitDialog(
HWND hwnd,
BOOLEAN ChangesAllowed
);
VOID
SecMgrpGreyLegalNotice(
HWND hwnd,
BOOLEAN Grey
);
BOOLEAN
SecMgrpSysAccApplyCurrentSettings( HWND hwnd );
VOID
SecMgrpWarnOfAutologon( HWND hwnd );
LONG
SecMgrpDlgProcWarnOfAutologon(
HWND hwnd,
UINT wMsg,
DWORD wParam,
LONG lParam
);
///////////////////////////////////////////////////////////////////////
// //
// Externally callable functions //
// //
///////////////////////////////////////////////////////////////////////
LONG
SecMgrpDlgProcSysAccess(
HWND hwnd,
UINT wMsg,
DWORD wParam,
LONG lParam
)
/*++
Routine Description:
This function is the dialog process for the APPLY and CHECK
[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,
Changed;
ChangesAllowed = (BOOLEAN)(lParam);
switch (wMsg) {
case WM_INITDIALOG:
if (!SecMgrpSysAccInitDialog( 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_SYSACC_APPLY);
} else {
Button = GetDlgItem(hwnd, SECMGR_ID_BUTTON_SYSACC_APPLY);
ShowWindow( Button, SW_HIDE );
Button = GetDlgItem(hwnd, IDCANCEL);
ShowWindow( Button, SW_HIDE );
Button = GetDlgItem(hwnd, IDOK);
}
//
// Set the cursor
//
Index = (int)SendMessage(Button, CB_GETCURSEL, 0, 0);
SetForegroundWindow(hwnd);
ShowWindow(hwnd, SW_NORMAL);
//
// Now check a few things that this utility does not provide
// a UI to change. Put up a warning if an unusual setting
// is found...
//
SecMgrpWarnOfAutologon( hwnd );
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_SYSACC_LOGON_CACHE:
DialogBoxParam(SecMgrphInstance,
MAKEINTRESOURCE(SECMGR_ID_DLG_LOGON_CACHE_DESCR),
hwnd,
(DLGPROC)SecMgrpDlgProcHelp,
(LONG)0
);
return(TRUE);
case SECMGR_ID_RADIO_SYSACC_UNLOCK_ANYONE:
case SECMGR_ID_RADIO_SYSACC_UNLOCK_ADMIN:
SecMgrpCurrentUnlock = LOWORD(wParam);
return(TRUE);
case SECMGR_ID_RADIO_SYSACC_SHUTDOWN_ANYONE:
case SECMGR_ID_RADIO_SYSACC_SHUTDOWN_LOGGED_ON:
case SECMGR_ID_RADIO_SYSACC_SHUTDOWN_OPERS:
case SECMGR_ID_RADIO_SYSACC_SHUTDOWN_ADMIN:
SecMgrpCurrentShutdown = LOWORD(wParam);
return(TRUE);
case SECMGR_ID_EDIT_SYSACC_LEGAL_NOTICE_CAPTION:
case SECMGR_ID_EDIT_SYSACC_LEGAL_NOTICE_BODY:
//
// Just note that the notice has changed
//
if (HIWORD(lParam) == EN_UPDATE) {
SecMgrpOriginalLegalNoticeChanged = TRUE;
}
return(TRUE);
case SECMGR_ID_BUTTON_SYSACC_APPLY:
//
// Changing all the rights assignments takes
// a while. Change to an hourglass icon.
//
hCursor = SetCursor( LoadCursor(NULL, IDC_WAIT) );
ShowCursor(TRUE);
//
// Get the legal notice strings, if necessary
//
if (SecMgrpOriginalLegalNoticeChanged) {
if (SecMgrpCurrentLegalNotice == SECMGR_ID_RADIO_SYSACC_LEGAL_NOTICE ) {
SecMgrpCurrentLegalNoticeCaption.Length =
GetDlgItemText(hwnd,
SECMGR_ID_EDIT_SYSACC_LEGAL_NOTICE_CAPTION,
SecMgrpCurrentLegalNoticeCaption.Buffer,
SecMgrpCurrentLegalNoticeCaption.MaximumLength
);
SecMgrpCurrentLegalNoticeBody.Length =
GetDlgItemText(hwnd,
SECMGR_ID_EDIT_SYSACC_LEGAL_NOTICE_BODY,
SecMgrpCurrentLegalNoticeBody.Buffer,
SecMgrpCurrentLegalNoticeBody.MaximumLength
);
}
}
if (SecMgrpSysAccApplyCurrentSettings( hwnd )) {
EndDialog(hwnd, 0);
}
return(TRUE);
case SECMGR_ID_RADIO_SYSACC_LEGAL_NOTICE_NONE:
SecMgrpGreyLegalNotice( hwnd, TRUE );
SecMgrpCurrentLegalNotice = LOWORD(wParam);
if (SecMgrpOriginalLegalNotice != SecMgrpCurrentLegalNotice) {
SecMgrpOriginalLegalNoticeChanged = TRUE;
} else {
SecMgrpOriginalLegalNoticeChanged = FALSE;
}
return(TRUE);
case SECMGR_ID_RADIO_SYSACC_LEGAL_NOTICE:
SecMgrpGreyLegalNotice( hwnd, FALSE );
SecMgrpCurrentLegalNotice = LOWORD(wParam);
//
// If the original setting was "LEGAL NOTICE", we can't
// say that the original notice hasn't changed if we
// re-select this button. This is because the text of
// the message might have changed.
//
if (SecMgrpOriginalLegalNotice != SecMgrpCurrentLegalNotice) {
SecMgrpOriginalLegalNoticeChanged = TRUE;
}
return(TRUE);
case IDCANCEL:
case IDOK:
EndDialog(hwnd, 0);
return(TRUE);
default:
return FALSE;
}
case WM_VSCROLL:
Index = GetWindowLong((HWND)lParam, GWL_ID);
switch (Index) {
case SECMGR_ID_SPIN_SYSACC_LOGON_CACHE:
Changed = FALSE;
if (LOWORD(wParam) == SB_LINEUP) {
if (SecMgrpCurrentCacheSize < SECMGRP_MAX_LOGON_CACHE_COUNT) {
SecMgrpCurrentCacheSize++;
Changed = TRUE;
}
} else if (LOWORD(wParam) == SB_LINEDOWN) {
if (SecMgrpCurrentCacheSize > 0) {
SecMgrpCurrentCacheSize--;
Changed = TRUE;
}
}
if (Changed) {
SetDlgItemInt( hwnd,
SECMGR_ID_EDIT_SYSACC_LOGON_CACHE,
SecMgrpCurrentCacheSize,
FALSE // Not signed value
);
}
return(TRUE);
default:
break;
}
default:
break;
}
return FALSE;
}
BOOLEAN
SecMgrpSysAccInitDialog(
HWND hwnd,
BOOLEAN ChangesAllowed
)
/*++
Routine Description:
This function initializes the System Access 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 (SecMgrpDisplayUnlock( hwnd, ChangesAllowed )) {
if (SecMgrpDisplayShutdown( hwnd, ChangesAllowed )) {
if (SecMgrpDisplayLegalNotice( hwnd, ChangesAllowed )) {
if (SecMgrpDisplayLogonCache( hwnd, ChangesAllowed )) {
return(TRUE);
}
}
}
}
//
// Something didn't work
//
EndDialog(hwnd, 0);
return(FALSE);
}
BOOLEAN
SecMgrpDisplayUnlock(
HWND hwnd,
BOOLEAN ChangesAllowed
)
/*++
Routine Description:
This function retrieves the current unlock setting and establishes
the correct recommendation in the SYSTEM ACCESS dialog.
The current setting is placed in SecMgrpCurrentUnlock.
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.
--*/
{
BOOLEAN
UnlockByAnyone;
HWND
Control;
//
// Set the recommendation
//
// Administrator Only is always the recommended value
// EXCEPT for WinNt running Standard.
//
if ((SecMgrpProductType == NtProductWinNt) &&
(SecMgrpCurrentLevel == SECMGR_ID_LEVEL_STANDARD) ) {
//
// Anyone is default - hide the other recommendation
//
Control = GetDlgItem(hwnd, SECMGR_ID_RECOMMEND_SYSACC_UNLOCK_ADMIN);
ShowWindow(Control, SW_HIDE);
} else {
//
// Administrator only is default - hide the other recommendation
//
Control = GetDlgItem(hwnd, SECMGR_ID_RECOMMEND_SYSACC_UNLOCK_ANYONE);
ShowWindow(Control, SW_HIDE);
}
SecMgrpGetUnlockSetting( hwnd, &UnlockByAnyone );
//
// Set the radio buttons accordingly
//
if (UnlockByAnyone) {
SecMgrpCurrentUnlock = SECMGR_ID_RADIO_SYSACC_UNLOCK_ANYONE;
} else {
SecMgrpCurrentUnlock = SECMGR_ID_RADIO_SYSACC_UNLOCK_ADMIN;
}
CheckRadioButton( hwnd,
SECMGR_ID_RADIO_SYSACC_UNLOCK_ANYONE,
SECMGR_ID_RADIO_SYSACC_UNLOCK_ADMIN,
SecMgrpCurrentUnlock);
//
// If changes aren't allowed, then grey the radio buttons
//
if (!ChangesAllowed) {
Control = GetDlgItem(hwnd, SECMGR_ID_RADIO_SYSACC_UNLOCK_ANYONE);
EnableWindow( Control, FALSE );
Control = GetDlgItem(hwnd, SECMGR_ID_RADIO_SYSACC_UNLOCK_ADMIN);
EnableWindow( Control, FALSE );
}
SecMgrpOriginalUnlock = SecMgrpCurrentUnlock;
return(TRUE);
}
BOOLEAN
SecMgrpDisplayShutdown(
HWND hwnd,
BOOLEAN ChangesAllowed
)
/*++
Routine Description:
This function retrieves the current shutdown setting and establishes
the correct recommendation in the SYSTEM ACCESS dialog.
The current setting is placed in SecMgrpCurrentShutdown.
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
Result;
SECMGRP_WHO
Who;
//
// Set the recommendation
//
// Operators and Administrators is always the recommended value
// EXCEPT for WinNt running Standard.
//
Control = GetDlgItem(hwnd, SECMGR_ID_RECOMMEND_SYSACC_SHUTDOWN_LOGGED_ON);
ShowWindow(Control, SW_HIDE);
Control = GetDlgItem(hwnd, SECMGR_ID_RECOMMEND_SYSACC_SHUTDOWN_ADMIN);
ShowWindow(Control, SW_HIDE);
if ((SecMgrpProductType == NtProductWinNt) &&
(SecMgrpCurrentLevel == SECMGR_ID_LEVEL_STANDARD) ) {
//
// Anyone is default - hide the other recommendation
//
Control = GetDlgItem(hwnd, SECMGR_ID_RECOMMEND_SYSACC_SHUTDOWN_OPERS);
ShowWindow(Control, SW_HIDE);
} else {
//
// Operators and Administrators is default - hide the other recommendation
//
Control = GetDlgItem(hwnd, SECMGR_ID_RECOMMEND_SYSACC_SHUTDOWN_ANYONE);
ShowWindow(Control, SW_HIDE);
}
Result = SecMgrpGetShutdownSetting( hwnd, &Who );
if (!Result) {
//
// Display popup
//
return(FALSE);
}
switch (Who) {
case SecMgrpAnyone:
SecMgrpCurrentShutdown = SECMGR_ID_RADIO_SYSACC_SHUTDOWN_ANYONE;
break;
case SecMgrpAnyoneLoggedOn:
SecMgrpCurrentShutdown = SECMGR_ID_RADIO_SYSACC_SHUTDOWN_LOGGED_ON;
break;
case SecMgrpOpersAndAdmins:
SecMgrpCurrentShutdown = SECMGR_ID_RADIO_SYSACC_SHUTDOWN_OPERS;
break;
case SecMgrpAdminsOnly:
SecMgrpCurrentShutdown = SECMGR_ID_RADIO_SYSACC_SHUTDOWN_ADMIN;
break;
}
//
// Set the radio buttons accordingly
//
CheckRadioButton( hwnd,
SECMGR_ID_RADIO_SYSACC_SHUTDOWN_ANYONE,
SECMGR_ID_RADIO_SYSACC_SHUTDOWN_ADMIN,
SecMgrpCurrentShutdown);
//
// If changes aren't allowed, then grey the radio buttons
//
if (!ChangesAllowed) {
Control = GetDlgItem(hwnd, SECMGR_ID_RADIO_SYSACC_SHUTDOWN_ANYONE);
EnableWindow( Control, FALSE );
Control = GetDlgItem(hwnd, SECMGR_ID_RADIO_SYSACC_SHUTDOWN_LOGGED_ON);
EnableWindow( Control, FALSE );
Control = GetDlgItem(hwnd, SECMGR_ID_RADIO_SYSACC_SHUTDOWN_OPERS);
EnableWindow( Control, FALSE );
Control = GetDlgItem(hwnd, SECMGR_ID_RADIO_SYSACC_SHUTDOWN_ADMIN);
EnableWindow( Control, FALSE );
}
SecMgrpOriginalShutdown = SecMgrpCurrentShutdown;
return(TRUE);
}
BOOLEAN
SecMgrpDisplayLegalNotice(
HWND hwnd,
BOOLEAN ChangesAllowed
)
/*++
Routine Description:
This function retrieves the current legal notice setting and
establishes the correct recommendation in the SYSTEM ACCESS dialog.
It also greys the caption and body fields if no legal notice is
in effect.
The current setting is placed in SecMgrpCurrentLegalNotice, and
SecMgrpLegalNoticeCaption and SecMgrpLegalNoticeBody will be set
to either NULL, or to point to appropriate strings.
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;
//
// The recommendation is set in the dialog by default.
// We always recommend a legal notice.
//
if (!SecMgrpGetLegalNotice( hwnd,
&SecMgrpCurrentLegalNoticeCaption,
&SecMgrpCurrentLegalNoticeBody) ) {
return(FALSE);
}
if ( (SecMgrpCurrentLegalNoticeCaption.Length != 0) ||
(SecMgrpCurrentLegalNoticeBody.Length != 0) ) {
SecMgrpCurrentLegalNotice = SECMGR_ID_RADIO_SYSACC_LEGAL_NOTICE;
} else {
SecMgrpCurrentLegalNotice = SECMGR_ID_RADIO_SYSACC_LEGAL_NOTICE_NONE;
}
//
// Set the radio buttons accordingly
//
CheckRadioButton( hwnd,
SECMGR_ID_RADIO_SYSACC_LEGAL_NOTICE_NONE,
SECMGR_ID_RADIO_SYSACC_LEGAL_NOTICE,
SecMgrpCurrentLegalNotice);
//
// If we have a legal notice, then display it.
// Otherwise, grey the legal notice edit boxes.
//
if (SecMgrpCurrentLegalNotice == SECMGR_ID_RADIO_SYSACC_LEGAL_NOTICE) {
if (SecMgrpCurrentLegalNoticeCaption.Length != 0) {
SetDlgItemText( hwnd,
SECMGR_ID_EDIT_SYSACC_LEGAL_NOTICE_CAPTION,
SecMgrpCurrentLegalNoticeCaption.Buffer);
}
if (SecMgrpCurrentLegalNoticeBody.Length != 0) {
SetDlgItemText( hwnd,
SECMGR_ID_EDIT_SYSACC_LEGAL_NOTICE_BODY,
SecMgrpCurrentLegalNoticeBody.Buffer);
}
} else {
SecMgrpGreyLegalNotice( hwnd, TRUE );
}
//
// If changes aren't allowed, then grey the radio buttons
// and the text.
//
if (!ChangesAllowed) {
Control = GetDlgItem(hwnd, SECMGR_ID_RADIO_SYSACC_LEGAL_NOTICE_NONE);
EnableWindow( Control, FALSE );
Control = GetDlgItem(hwnd, SECMGR_ID_RADIO_SYSACC_LEGAL_NOTICE);
EnableWindow( Control, FALSE );
SecMgrpGreyLegalNotice( hwnd, TRUE );
}
SecMgrpOriginalLegalNotice = SecMgrpCurrentLegalNotice;
SecMgrpOriginalLegalNoticeChanged = FALSE;
return(TRUE);
}
BOOLEAN
SecMgrpDisplayLogonCache(
HWND hwnd,
BOOLEAN ChangesAllowed
)
/*++
Routine Description:
This function retrieves the current logon cache settings and
establishes the correct recommendation in the SYSTEM ACCESS dialog.
The current setting is placed in SecMgrpCurrentCacheSize.
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.
--*/
{
NTSTATUS
NtStatus;
ULONG
Recommendation;
HWND
Control;
NtStatus = SecMgrpGetLogonCache( hwnd,
&SecMgrpCurrentCacheSize,
&Recommendation);
if (!NT_SUCCESS(NtStatus)) {
//
// Put up a popup here.
//
return(FALSE);
}
SetDlgItemInt( hwnd,
SECMGR_ID_RECOMMEND_SYSACC_LOGON_CACHE,
Recommendation,
FALSE // Not signed value
);
SetDlgItemInt( hwnd,
SECMGR_ID_CURRENT_SYSACC_LOGON_CACHE,
SecMgrpCurrentCacheSize,
FALSE // Not signed value
);
SetDlgItemInt( hwnd,
SECMGR_ID_EDIT_SYSACC_LOGON_CACHE,
SecMgrpCurrentCacheSize,
FALSE // Not signed value
);
//
// If changes aren't allowed, then hide the modification controls
//
if (!ChangesAllowed) {
Control = GetDlgItem(hwnd, SECMGR_ID_TEXT_SYSACC_SIZE_TO_APPLY);
ShowWindow(Control, SW_HIDE);
Control = GetDlgItem(hwnd, SECMGR_ID_EDIT_SYSACC_LOGON_CACHE);
ShowWindow(Control, SW_HIDE);
Control = GetDlgItem(hwnd, SECMGR_ID_SPIN_SYSACC_LOGON_CACHE);
ShowWindow(Control, SW_HIDE);
}
SecMgrpOriginalCacheSize = SecMgrpCurrentCacheSize;
return(TRUE);
}
VOID
SecMgrpGreyLegalNotice(
HWND hwnd,
BOOLEAN Grey
)
/*++
Routine Description:
This function greys or ungreys the legal notice edit boxes.
Arguments
hwnd - Window handle.
Grey - If TRUE, the boxes will be greyed.
If FALSE, the boxes will be un-greyed.
Return Values:
None.
--*/
{
HWND
Control;
BOOLEAN
Enable;
if (Grey) {
Enable = FALSE;
} else {
Enable = TRUE;
}
Control = GetDlgItem(hwnd, SECMGR_ID_TEXT_SYSACC_TITLE_BAR);
EnableWindow( Control, Enable );
Control = GetDlgItem(hwnd, SECMGR_ID_EDIT_SYSACC_LEGAL_NOTICE_CAPTION);
EnableWindow( Control, Enable );
Control = GetDlgItem(hwnd, SECMGR_ID_TEXT_SYSACC_LEGAL_NOTICE_BODY);
EnableWindow( Control, Enable );
Control = GetDlgItem(hwnd, SECMGR_ID_EDIT_SYSACC_LEGAL_NOTICE_BODY);
EnableWindow( Control, Enable );
return;
}
BOOLEAN
SecMgrpSysAccApplyCurrentSettings(
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
UnlockByAnyone,
Result = TRUE;
SECMGRP_WHO
Shutdown;
if (SecMgrpCurrentUnlock == SECMGR_ID_RADIO_SYSACC_UNLOCK_ANYONE) {
UnlockByAnyone = TRUE;
} else {
UnlockByAnyone = FALSE;
}
switch (SecMgrpCurrentShutdown) {
case SECMGR_ID_RADIO_SYSACC_SHUTDOWN_ANYONE:
Shutdown = SecMgrpAnyone;
break;
case SECMGR_ID_RADIO_SYSACC_SHUTDOWN_LOGGED_ON:
Shutdown = SecMgrpAnyoneLoggedOn;
break;
case SECMGR_ID_RADIO_SYSACC_SHUTDOWN_OPERS:
Shutdown = SecMgrpOpersAndAdmins;
break;
case SECMGR_ID_RADIO_SYSACC_SHUTDOWN_ADMIN:
Shutdown = SecMgrpAdminsOnly;
break;
} //end_switch
if (SecMgrpCurrentLegalNotice == SECMGR_ID_RADIO_SYSACC_LEGAL_NOTICE_NONE) {
SecMgrpCurrentLegalNoticeCaption.Length = 0;
SecMgrpCurrentLegalNoticeCaption.Buffer[0] = TEXT('\0');
SecMgrpCurrentLegalNoticeBody.Length = 0;
SecMgrpCurrentLegalNoticeBody.Buffer[0] = TEXT('\0');
}
//
// We count on the called routines to put up appropriate
// pop-ups on error.
//
if (Result && (SecMgrpCurrentUnlock != SecMgrpOriginalUnlock)) {
Result = SecMgrpSetUnlockSetting(hwnd, UnlockByAnyone);
}
if (Result && (SecMgrpCurrentCacheSize != SecMgrpOriginalCacheSize)) {
Result = SecMgrpSetLogonCache(hwnd, SecMgrpCurrentCacheSize);
}
if (Result && (SecMgrpOriginalLegalNoticeChanged)) {
Result = SecMgrpSetLegalNotice(hwnd,
&SecMgrpCurrentLegalNoticeCaption,
&SecMgrpCurrentLegalNoticeBody);
}
if (Result && (SecMgrpCurrentShutdown != SecMgrpOriginalShutdown)) {
Result = SecMgrpSetShutdownSetting(hwnd, Shutdown);
}
return(Result);
}
VOID
SecMgrpWarnOfAutologon(
HWND hwnd
)
/*++
Routine Description:
This function checks to see if autologon is turned on.
If it is, a warning is put up to warn the user. There is
no UI in this utility which allows the user to change this.
Therefore, tell the user how to do it with REGEDT32.
Arguments
hwnd - Window handle.
Return Values:
None.
--*/
{
if (GetProfileInt( TEXT("Winlogon"), TEXT("AutoAdminLogon"), 0 ) != 0) {
DialogBoxParam(SecMgrphInstance,
MAKEINTRESOURCE(SECMGR_ID_DLG_AUTOLOGON_ENABLED),
hwnd,
(DLGPROC)SecMgrpDlgProcWarnOfAutologon,
(LONG)0
);
}
return;
}
LONG
SecMgrpDlgProcWarnOfAutologon(
HWND hwnd,
UINT wMsg,
DWORD wParam,
LONG lParam
)
/*++
Routine Description:
This function is the dialog process for a dialog informing the
user that autologon is enabled.
Arguments
Return Values:
--*/
{
HWND
OkButton;
int
Index;
switch (wMsg) {
case WM_INITDIALOG:
//
// Set the cursor
//
OkButton = GetDlgItem(hwnd, IDOK);
Index = (int)SendMessage(OkButton, 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 IDCANCEL:
case IDOK:
EndDialog(hwnd, 0);
return(TRUE);
break;
default:
return FALSE;
}
default:
break;
}
return FALSE;
}