2020-09-30 17:12:29 +02:00

3356 lines
79 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
Copyright (c) 1994 Microsoft Corporation
Module Name:
A_SysAcc.c
Abstract:
This module contains the code related to the System Access
security area and it's corresponding items.
Author:
Jim Kelly (JimK) 22-Mar-1995
Revision History:
--*/
#include "Missyp.h"
//
// Number of items in this area and their index in various item-arrays
//
#define MISSYP_SYSACC_ITEM_COUNT (5)
#define MISSYP_ITEM_LOGON_CACHE (0)
#define MISSYP_ITEM_UNLOCK (1)
#define MISSYP_ITEM_SHUTDOWN (2)
#define MISSYP_ITEM_LAST_USERNAME (3)
#define MISSYP_ITEM_LEGAL_NOTICE (4)
//
// Legal notice length limitations
//
#define MISSYP_MAX_CAPTION_LENGTH 200
#define MISSYP_MAX_BODY_LENGTH 2048
///////////////////////////////////////////////////////////////////////
// //
// Module-wide variables //
// //
///////////////////////////////////////////////////////////////////////
//
// The index of this area within the array of area descriptors
// in the Smedly control structure.
//
ULONG
MissypSysAccIndex ;
PSECMGR_AREA_DESCRIPTOR
MissypSysAccArea;
WCHAR
MissypSysAccAreaName[SECMGR_MAX_AREA_NAME_LENGTH],
MissypSysAccAreaDesc[SECMGR_MAX_AREA_DESC_LENGTH];
//
// Array of items within this area
//
SECMGR_ITEM_DESCRIPTOR
MissypSysAccItems[MISSYP_SYSACC_ITEM_COUNT];
//
// The following variables represent the current settings in the
// SYSTEM ACCESS dialog. The values for each are:
//
// CurrentCacheSize - ULONG, 0 to MISSYP_MAX_LOGON_CACHE_COUNT
//
// CurrentUnlock -
// MISSYP_ID_RADIO_UNLOCK_ADMIN
//
// CurrentShutdown -
// MISSYP_ID_RADIO_SHUTDOWN_ANYONE
// MISSYP_ID_RADIO_SHUTDOWN_LOGGED_ON
// MISSYP_ID_RADIO_SHUTDOWN_OPERS
// MISSYP_ID_RADIO_SHUTDOWN_ADMIN
//
// CurrentLastName -
// MISSYP_ID_RADIO_LASTNAME_DISPLAY
// MISSYP_ID_RADIO_LASTNAME_DONT_DISPLAY
//
// CurrentLegalNotice -
// MISSYP_ID_RADIO_LEGAL_NOTICE_NONE
// MISSYP_ID_RADIO_LEGAL_NOTICE
//
// LegalNoticeCaption -
// Only valid when CurrentLegalNotice has the value
// MISSYP_ID_RADIO_LEGAL_NOTICE. In that case,
// points to a string containing the legal notice title
// bar text.
//
// LegalNoticeBody -
// Only valid when CurrentLegalNotice has the value
// MISSYP_ID_RADIO_LEGAL_NOTICE. In that case,
// points to a string containing the legal notice body
// text.
//
ULONG
MissypCurrentCacheSize,
MissypCurrentUnlock,
MissypCurrentShutdown,
MissypCurrentLastName,
MissypCurrentLegalNotice;
//
// 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
MissypOriginalCacheSize,
MissypOriginalUnlock,
MissypOriginalShutdown,
MissypOriginalLastName,
MissypOriginalLegalNotice;
BOOLEAN
MissypOriginalLegalNoticeChanged;
WCHAR
MissypLegalNoticeCaptionBuffer[MISSYP_MAX_CAPTION_LENGTH],
MissypLegalNoticeBodyBuffer[MISSYP_MAX_BODY_LENGTH];
UNICODE_STRING
MissypCurrentLegalNoticeCaption =
{0, MISSYP_MAX_CAPTION_LENGTH, MissypLegalNoticeCaptionBuffer },
MissypCurrentLegalNoticeBody =
{0, MISSYP_MAX_BODY_LENGTH, MissypLegalNoticeBodyBuffer };
///////////////////////////////////////////////////////////////////////
// //
// Local Function Prototypes //
// //
///////////////////////////////////////////////////////////////////////
LONG
MissypDlgProcSysAccess(
HWND hwnd,
UINT wMsg,
DWORD wParam,
LONG lParam
);
BOOLEAN
MissypDisplayUnlock(
IN HWND hwnd,
IN BOOL ChangesAllowed,
IN BOOL Interactive
);
BOOLEAN
MissypDisplayShutdown(
IN HWND hwnd,
IN BOOL ChangesAllowed,
IN BOOL Interactive
);
BOOLEAN
MissypDisplayLastName(
IN HWND hwnd,
IN BOOL ChangesAllowed,
IN BOOL Interactive
);
BOOLEAN
MissypDisplayLogonCache(
IN HWND hwnd,
IN BOOL ChangesAllowed,
IN BOOL Interactive
);
BOOLEAN
MissypDisplayLegalNotice(
IN HWND hwnd,
IN BOOL ChangesAllowed,
IN BOOL Interactive
);
BOOLEAN
MissypSysAccInitDialog(
IN HWND hwnd,
IN BOOL ChangesAllowed,
IN BOOL Interactive
);
VOID
MissypGreyLegalNotice(
HWND hwnd,
BOOLEAN Grey
);
BOOLEAN
MissypSysAccApplyCurrentSettings( HWND hwnd );
VOID
MissypWarnOfAutologon( HWND hwnd );
LONG
MissypDlgProcWarnOfAutologon(
HWND hwnd,
UINT wMsg,
DWORD wParam,
LONG lParam
);
BOOLEAN
MissypLastNameInitDialog(
IN HWND hwnd,
IN BOOL ChangesAllowed
);
BOOLEAN
MissypLogonCacheInitDialog(
IN HWND hwnd,
IN BOOL ChangesAllowed
);
BOOLEAN
MissypUnlockInitDialog(
IN HWND hwnd,
IN BOOL ChangesAllowed
);
BOOLEAN
MissypShutdownInitDialog(
IN HWND hwnd,
IN BOOL ChangesAllowed
);
BOOLEAN
MissypLegalNoticeInitDialog(
IN HWND hwnd,
IN BOOL ChangesAllowed
);
///////////////////////////////////////////////////////////////////////
// //
// Externally callable functions //
// //
///////////////////////////////////////////////////////////////////////
BOOL
MissypSysAccInitialize(
IN ULONG AreaIndex
)
/*++
Routine Description:
This function is called to initialize the System Access area
and corresponding items. This includes adding the System Access
area/item information to the smedly control structure (MissypControl).
The security manager control information (in the global variable
MissypSecMgrControl) must be available before this routine is called.
Arguments
AreaIndex - The index of this area in the array of areas kept in the
Missy control structure.
Return Values:
TRUE - The call completed successfully.
FALSE - Something went wrong. GetLastError() contains
details on the exact cause of the error. Possible
values include:
ERROR_NOT_ENOUGH_MEMORY
--*/
{
ULONG
ItemIndex;
MissypSysAccIndex = AreaIndex;
LoadString( MissyphInstance,
MISSYP_STRING_AREA_SYSTEM_ACCESS_NAME,
&MissypSysAccAreaName[0],
SECMGR_MAX_AREA_NAME_LENGTH
);
LoadString( MissyphInstance,
MISSYP_STRING_AREA_SYSTEM_ACCESS_DESC,
&MissypSysAccAreaDesc[0],
SECMGR_MAX_AREA_DESC_LENGTH
);
//
// Initialize our area
//
//
MissypSysAccArea = &MissypControl.Areas[AreaIndex];
MissypSysAccArea->Revision.Major = SECMGR_REVISION_MAJOR_1;
MissypSysAccArea->Revision.Minor = SECMGR_REVISION_MINOR_0;
MissypSysAccArea->Flags = SECMGR_AREA_FLAG_AREA_VIEW;
MissypSysAccArea->SmedlyContext = NULL; // Missy doesn't use this yet
MissypSysAccArea->SmedlyControl = (PVOID)(&MissypControl);
MissypSysAccArea->AreaIndex = AreaIndex;
MissypSysAccArea->Name = MissypSysAccAreaName;
MissypSysAccArea->Description = MissypSysAccAreaDesc;
MissypSysAccArea->ItemCount = MISSYP_SYSACC_ITEM_COUNT;
MissypSysAccArea->Items = &MissypSysAccItems[0];
//
// Initialize each item
// NOTE: We should add Interactive, network, Service, and Batch logon types
// to these items.
//
if (!MissypLogonCacheInitialize( MissypSysAccArea,
&MissypSysAccItems[MISSYP_ITEM_LOGON_CACHE],
MISSYP_ITEM_LOGON_CACHE )) {
return(FALSE);
}
if (!MissypUnlockInitialize( MissypSysAccArea,
&MissypSysAccItems[MISSYP_ITEM_UNLOCK],
MISSYP_ITEM_UNLOCK )) {
return(FALSE);
}
if (!MissypShutdownInitialize( MissypSysAccArea,
&MissypSysAccItems[MISSYP_ITEM_SHUTDOWN],
MISSYP_ITEM_SHUTDOWN )) {
return(FALSE);
}
if (!MissypLastNameInitialize( MissypSysAccArea,
&MissypSysAccItems[MISSYP_ITEM_LAST_USERNAME],
MISSYP_ITEM_LAST_USERNAME )) {
return(FALSE);
}
if (!MissypLegalNoticeInitialize( MissypSysAccArea,
&MissypSysAccItems[MISSYP_ITEM_LEGAL_NOTICE],
MISSYP_ITEM_LEGAL_NOTICE )) {
return(FALSE);
}
}
BOOL
MissypSysAccInvokeArea(
IN HWND hwnd,
IN BOOL AllowChanges,
IN BOOL Interactive,
IN PSECMGR_AREA_DESCRIPTOR Area
)
/*++
Routine Description:
This function is called to activate this area's full-screen dialog
Arguments
hwnd - A handle to a Security Manager window which is the parent
of the dialog the smedly is expected to display.
AllowChanges - If TRUE, then the user may make changes to values
displayed in the area. Otherwise, the area should be presented
in a view-only mode.
Interactive - Indicates whether or not the area should be displayed or
not. If TRUE, then UI showing the area information to the user
should be presented. If FALSE, then the area should initialize its
item values, but return immediately without actually displaying any
UI.
Area - Pointer to this Area's descriptor.
Return Values:
TRUE - The routine completed successfully. Item values may or may not
have changed.
FALSE - The routine failed to complete successfully. GetLastError()
contains further information about the cause of failure.
--*/
{
if (Interactive) {
DialogBoxParam(MissyphInstance,
MAKEINTRESOURCE(MISSYP_ID_DLG_AREA_SYSACC),
hwnd,
(DLGPROC)MissypDlgProcSysAccess,
(LONG)AllowChanges
);
} else {
MissypSysAccInitDialog( hwnd, AllowChanges, FALSE ); // Non-interactive
}
return(TRUE);
}
BOOL
MissypSysAccInvokeItem(
IN HWND hwnd,
IN BOOL AllowChanges,
IN PSECMGR_AREA_DESCRIPTOR Area,
IN PSECMGR_ITEM_DESCRIPTOR Item
)
/*++
Routine Description:
This function is called when the dialog view of
a particular item is requested. The smedly is responsible
for providing the dialogs of this view to the user.
This routine will only be invoked for items for which
SECMGR_ITEM_FLAG_ITEM_VIEW is specified in the Flags field
of the SECMGR_ITEM_DESCRIPTOR.
Arguments
hwnd - A handle to a Security Manager window which is the parent
of the dialog the smedly is expected to display.
AllowChanges - If TRUE, then the user may make changes to values
displayed for the item. Otherwise, the item should be presented
in a view-only mode.
Area - Pointer to this area.
Item - Pointer to the item of this area to be displayed.
Return Values:
TRUE - The routine completed successfully. The current item value
may or may not have changed.
FALSE - The routine failed to complete successfully. GetLastError()
contains further information about the cause of failure.
--*/
{
BOOL
Result;
if (!(Item->Flags & SECMGR_ITEM_FLAG_ITEM_VIEW)) {
return(TRUE);
}
switch (Item->ItemIndex) {
case MISSYP_ITEM_LOGON_CACHE:
Result = MissypInvokeLogonCache( hwnd, AllowChanges, Area, Item );
break;
case MISSYP_ITEM_UNLOCK:
Result = MissypInvokeUnlock( hwnd, AllowChanges, Area, Item );
break;
case MISSYP_ITEM_SHUTDOWN:
Result = MissypInvokeShutdown( hwnd, AllowChanges, Area, Item );
break;
case MISSYP_ITEM_LEGAL_NOTICE:
Result = MissypInvokeLegalNotice( hwnd, AllowChanges, Area, Item );
break;
case MISSYP_ITEM_LAST_USERNAME:
Result = MissypInvokeLastName( hwnd, AllowChanges, Area, Item );
break;
default:
Result = FALSE;
break;
} //end_switch
return(Result);
}
BOOL
MissypSysAccNewSecurityLevel( VOID )
/*++
Routine Description:
This function is called when a new system security level has
been selected. This may cause a Smedly to go out and re-evaluate
its recommended values for the specified area.
Arguments
Area - Pointer to this Area.
Return Values:
TRUE - The routine completed successfully. Item values and recommendations
may or may not have changed.
FALSE - The routine failed to complete successfully. GetLastError()
contains further information about the cause of failure.
--*/
{
//
// Have each item update its recommended value
//
MissypUpdateLogonCacheRecommendation( NULL );
MissypUpdateUnlockRecommendation( );
MissypUpdateShutdownRecommendation();
MissypUpdateLastNameRecommendation();
MissypUpdateLegalNoticeRecommendation( NULL );
return(TRUE);
}
VOID
MissypSysAccReportFileChange(
IN BOOL ReportFileActive,
IN DWORD Pass
)
/*++
Routine Description:
This function is called to notify us that a new report
file has been activated. This gives us an opportunity
to put some area-specific information into the report file.
Arguments
ReportFileActive - If TRUE indicates that a new report file has been opened.
If FALSE, indicates that a report file has been closed, and another was
not opened.
Return Values:
None.
--*/
{
return;
}
BOOL
MissypSysAccGenerateProfile( VOID )
/*++
Routine Description:
This function is called to request a security profile of this area.
Arguments
None
Return Values:
TRUE - The routine completed successfully.
FALSE - The routine failed to complete successfully. GetLastError()
contains further information about the cause of failure.
--*/
{
BOOL
Result;
SetLastError( ERROR_CALL_NOT_IMPLEMENTED );
Result = FALSE;
return(Result);
}
BOOL
MissypSysAccApplyProfile( VOID )
/*++
Routine Description:
This function is called to request a profile of this area be applied
to the current system.
Arguments
None.
Return Values:
TRUE - The routine completed successfully.
FALSE - The routine failed to complete successfully. GetLastError()
contains further information about the cause of failure.
--*/
{
BOOL
Result;
SetLastError( ERROR_CALL_NOT_IMPLEMENTED );
Result = FALSE;
return(Result);
}
///////////////////////////////////////////////////////////////////////
// //
// Locally callable functions //
// //
///////////////////////////////////////////////////////////////////////
LONG
MissypDlgProcSysAccess(
HWND hwnd,
UINT wMsg,
DWORD wParam,
LONG lParam
)
/*++
Routine Description:
This function is the dialog process for the 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;
WORD
NotificationCode,
ControlId;
int
Index;
BOOLEAN
ChangesAllowed,
Changed;
ChangesAllowed = (BOOLEAN)(lParam);
switch (wMsg) {
case WM_INITDIALOG:
if (!MissypSysAccInitDialog( hwnd, ChangesAllowed, TRUE ) ) {
//
// 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, MISSYP_ID_BUTTON_APPLY);
} else {
Button = GetDlgItem(hwnd, MISSYP_ID_BUTTON_APPLY);
ShowWindow( Button, SW_HIDE );
Button = GetDlgItem(hwnd, IDCANCEL);
ShowWindow( Button, SW_HIDE );
Button = GetDlgItem(hwnd, IDOK);
}
//
// Put up our "recommended" symbols
//
MissypDisplayXGraphic( hwnd, MISSYP_ID_SYMBOL_STRONGER, TRUE );
MissypDisplayXGraphic( hwnd, MISSYP_ID_SYMBOL_WEAKER, FALSE );
MissypDisplayCheckGraphic( hwnd, MISSYP_ID_SYMBOL_RECOMMEND );
//
// 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...
//
MissypWarnOfAutologon( hwnd );
return(TRUE);
case WM_SYSCOMMAND:
switch (wParam & 0xfff0) {
case SC_CLOSE:
EndDialog(hwnd, 0);
return(TRUE);
}
return(FALSE);
case WM_COMMAND:
//
// wParam WIN32- HIWORD = notification code,
// LOWORD = ID of control
// WIN16- ID of control
//
// lParam WIN32- hWnd of Control
// WIN16- HIWORD = notification code
// LOWORD = hWnd of control
//
//NotificationCode = GET_NOTIFY_MSG(wParam, lParam);
//ControlId = GET_CONTROL_ID(wParam);
NotificationCode = HIWORD(wParam);
ControlId = LOWORD(wParam);
switch(ControlId) {
case MISSYP_ID_BUTTON_LOGCAC_HINT:
MissypDisplayHint( hwnd, MISSYP_ID_DLG_HINT_LOGON_CACHE );
return(TRUE);
case MISSYP_ID_BUTTON_UNLOCK_HINT:
MissypDisplayHint( hwnd, MISSYP_ID_DLG_HINT_UNLOCK_WORKSTATION );
return(TRUE);
case MISSYP_ID_BUTTON_SHUTDOWN_HINT:
MissypDisplayHint( hwnd, MISSYP_ID_DLG_HINT_SHUTDOWN_SYSTEM );
return(TRUE);
case MISSYP_ID_BUTTON_LASTNAME_HINT:
MissypDisplayHint( hwnd, MISSYP_ID_DLG_HINT_LAST_USERNAME );
return(TRUE);
case MISSYP_ID_BUTTON_LEGAL_NOTICE_HINT:
MissypDisplayHint( hwnd, MISSYP_ID_DLG_HINT_LEGAL_NOTICE );
return(TRUE);
case MISSYP_ID_RADIO_UNLOCK_ANYONE:
MissypCurrentUnlock = SecMgrAnyone;
return(TRUE);
case MISSYP_ID_RADIO_UNLOCK_ADMIN:
MissypCurrentUnlock = SecMgrAdminsOnly;
return(TRUE);
case MISSYP_ID_RADIO_SHUTDOWN_ANYONE:
MissypCurrentShutdown = SecMgrAnyone;
return(TRUE);
case MISSYP_ID_RADIO_SHUTDOWN_LOGGED_ON:
MissypCurrentShutdown = SecMgrAnyoneLoggedOn;
return(TRUE);
case MISSYP_ID_RADIO_SHUTDOWN_OPERS:
MissypCurrentShutdown = SecMgrOpersAndAdmins;
return(TRUE);
case MISSYP_ID_RADIO_SHUTDOWN_ADMIN:
MissypCurrentShutdown = SecMgrAdminsOnly;
return(TRUE);
case MISSYP_ID_RADIO_LASTNAME_DISPLAY:
case MISSYP_ID_RADIO_LASTNAME_DONT_DISPLAY:
MissypCurrentLastName = LOWORD(wParam);
return(TRUE);
case MISSYP_ID_EDIT_LEGAL_NOTICE_CAPTION:
case MISSYP_ID_EDIT_LEGAL_NOTICE_BODY:
//
// Just note that the notice has changed
//
if (NotificationCode == EN_UPDATE) {
MissypOriginalLegalNoticeChanged = TRUE;
}
return(TRUE);
case MISSYP_ID_RADIO_LEGAL_NOTICE_NONE:
MissypGreyLegalNotice( hwnd, TRUE );
MissypCurrentLegalNotice = ControlId;
if (MissypOriginalLegalNotice != MissypCurrentLegalNotice) {
MissypOriginalLegalNoticeChanged = TRUE;
} else {
;
//MissypOriginalLegalNoticeChanged = FALSE;
}
return(TRUE);
case MISSYP_ID_RADIO_LEGAL_NOTICE:
MissypGreyLegalNotice( hwnd, FALSE );
MissypCurrentLegalNotice = ControlId;
//
// 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 (MissypOriginalLegalNotice != MissypCurrentLegalNotice) {
MissypOriginalLegalNoticeChanged = TRUE;
}
return(TRUE);
case MISSYP_ID_BUTTON_APPLY:
//
// Changing some of the values takes
// a while. Change to an hourglass icon.
//
hCursor = SetCursor( LoadCursor(NULL, IDC_WAIT) );
ShowCursor(TRUE);
//
// Get the legal notice strings, if necessary
//
if (MissypOriginalLegalNoticeChanged) {
if (MissypCurrentLegalNotice == MISSYP_ID_RADIO_LEGAL_NOTICE ) {
MissypCurrentLegalNoticeCaption.Length =
GetDlgItemText(hwnd,
MISSYP_ID_EDIT_LEGAL_NOTICE_CAPTION,
MissypCurrentLegalNoticeCaption.Buffer,
MissypCurrentLegalNoticeCaption.MaximumLength
);
MissypCurrentLegalNoticeBody.Length =
GetDlgItemText(hwnd,
MISSYP_ID_EDIT_LEGAL_NOTICE_BODY,
MissypCurrentLegalNoticeBody.Buffer,
MissypCurrentLegalNoticeBody.MaximumLength
);
}
}
if (MissypSysAccApplyCurrentSettings( hwnd )) {
EndDialog(hwnd, 0);
}
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 MISSYP_ID_SPIN_LOGCAC_APPLY:
Changed = FALSE;
if (LOWORD(wParam) == SB_LINEUP) {
if (MissypCurrentCacheSize < MISSYP_MAX_LOGON_CACHE_COUNT) {
MissypCurrentCacheSize++;
Changed = TRUE;
}
} else if (LOWORD(wParam) == SB_LINEDOWN) {
if (MissypCurrentCacheSize > 0) {
MissypCurrentCacheSize--;
Changed = TRUE;
}
}
if (Changed) {
SetDlgItemInt( hwnd,
MISSYP_ID_TEXT_LOGCAC_APPLY,
MissypCurrentCacheSize,
FALSE // Not signed value
);
}
return(TRUE);
default:
break;
}
default:
break;
}
return FALSE;
}
BOOLEAN
MissypSysAccInitDialog(
IN HWND hwnd,
IN BOOL ChangesAllowed,
IN BOOL Interactive
)
/*++
Routine Description:
This function retrieves current values and recommended values
for the items of this area. These values are set in both the
item control structures and in module-wide current-setting
variables.
If we are in Interactive Mode his function also initializes the
System Access dialog box with the current values and recommended
values. This may be used for both Read-only and Read-Write
operations.
For Read-Only 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 Read-Write operations, the caller is responsible for making the
[OK] button invisible.
Arguments
hwnd - dialog handle
ChangesAllowed - TRUE: Leave change controls enabled.
FALSE: Disable change controls.
InteractiveMode - TRUE: Interactive Mode
FALSE: Non-Interactive Mode
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. //
// //
///////////////////////////////////////////////////////////////////
//
// There are two ways to go about retrieving current settings.
// One way is to retrieve them at Utility init time and just
// keep their value around. The other is to get the values each
// time our dialog is activated. We use the later approach here
// to allow for changes that might be made outside the Security
// Manager (perhaps directly via a registry editor or via the User
// Manager).
//
if (MissypDisplayUnlock( hwnd, ChangesAllowed, Interactive )) {
if (MissypDisplayShutdown( hwnd, ChangesAllowed, Interactive )) {
if (MissypDisplayLastName( hwnd, ChangesAllowed, Interactive)) {
if (MissypDisplayLegalNotice( hwnd, ChangesAllowed, Interactive )) {
if (MissypDisplayLogonCache( hwnd, ChangesAllowed, Interactive )) {
return(TRUE);
}
}
}
}
}
//
// Something didn't work
//
EndDialog(hwnd, 0);
return(FALSE);
}
BOOLEAN
MissypDisplayLogonCache(
IN HWND hwnd,
IN BOOL ChangesAllowed,
IN BOOL Interactive
)
/*++
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 MissypCurrentCacheSize.
Arguments
hwnd - handle to dialog
ChangesAllowed - TRUE: Leave change controls enabled.
FALSE: Disable change controls.
InteractiveMode - TRUE: Interactive Mode
FALSE: Non-Interactive Mode
Return Values:
TRUE - Completed successfully.
FALSE - Did not complete successfully.
A popup has been displayed.
The dialog should be terminated.
--*/
{
BOOLEAN
Result;
ULONG
Recommendation;
HWND
Control;
Result = MissypGetLogonCacheCount( hwnd,
&MissypCurrentCacheSize,
&Recommendation);
if (!Result) {
//
// Put up a popup here.
//
return(FALSE);
}
if (Interactive) {
//
// Setting is stronger than Recommendation if fewer entries in the cache.
//
if (Recommendation == MissypCurrentCacheSize) {
MissypDisplayCheckGraphic( hwnd, MISSYP_ID_RECOMMEND_LOGON_CACHE );
} else if ( Recommendation > MissypCurrentCacheSize) {
MissypDisplayXGraphic( hwnd, MISSYP_ID_RECOMMEND_LOGON_CACHE, TRUE ); // Green X
} else {
MissypDisplayXGraphic( hwnd, MISSYP_ID_RECOMMEND_LOGON_CACHE, FALSE ); // Red X
}
SetDlgItemInt( hwnd,
MISSYP_ID_TEXT_LOGCAC_RECOMMEND,
Recommendation,
FALSE // Not signed value
);
SetDlgItemInt( hwnd,
MISSYP_ID_TEXT_LOGCAC_CURRENT,
MissypCurrentCacheSize,
FALSE // Not signed value
);
SetDlgItemInt( hwnd,
MISSYP_ID_TEXT_LOGCAC_APPLY,
MissypCurrentCacheSize,
FALSE // Not signed value
);
//
// If changes aren't allowed, then hide the modification controls
//
if (!ChangesAllowed) {
Control = GetDlgItem(hwnd, MISSYP_ID_TEXT_LOGCAC_APPLY);
ShowWindow(Control, SW_HIDE);
Control = GetDlgItem(hwnd, MISSYP_ID_TEXT_LOGCAC_APPLY_LINE);
ShowWindow(Control, SW_HIDE);
Control = GetDlgItem(hwnd, MISSYP_ID_SPIN_LOGCAC_APPLY);
ShowWindow(Control, SW_HIDE);
}
} // end_if (Interactive)
MissypOriginalCacheSize = MissypCurrentCacheSize;
return(TRUE);
}
BOOLEAN
MissypDisplayUnlock(
IN HWND hwnd,
IN BOOL ChangesAllowed,
IN BOOL Interactive
)
/*++
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 MissypCurrentUnlock.
Arguments
hwnd - handle to dialog
ChangesAllowed - TRUE: Leave change controls enabled.
FALSE: Disable change controls.
InteractiveMode - TRUE: Interactive Mode
FALSE: Non-Interactive Mode
Return Values:
TRUE - Completed successfully.
FALSE - Did not complete successfully.
A popup has been displayed.
The dialog should be terminated.
--*/
{
SECMGR_WHO
Who;
HWND
Control;
ULONG
RecommendedId,
CurrentlySetId;
SECMGR_WHO
Recommendation;
//
// This not only gets the value, but sets it and the recommended
// setting in the Unlock Item control block
//
MissypGetUnlockSetting( hwnd, &Who );
//
// Get the right radio button setting
//
if (Who == SecMgrAnyone) {
MissypCurrentUnlock = MISSYP_ID_RADIO_UNLOCK_ANYONE;
CurrentlySetId = MISSYP_ID_RECOMMEND_UNLOCK_ANYONE;
} else {
ASSERT(Who == SecMgrAdminsOnly);
MissypCurrentUnlock = MISSYP_ID_RADIO_UNLOCK_ADMIN;
CurrentlySetId = MISSYP_ID_RECOMMEND_UNLOCK_ADMIN;
}
//
// set the dialog controls appropriately
//
if (Interactive) {
//
// Clear all recommendation boxes and then set the correct one
//
MissypEraseGraphic( hwnd, MISSYP_ID_RECOMMEND_UNLOCK_ANYONE );
MissypEraseGraphic( hwnd, MISSYP_ID_RECOMMEND_UNLOCK_ADMIN );
Recommendation = MissypGetUnlockRecommendation( SECMGR_LEVEL_CURRENT );
switch (Recommendation) {
case SecMgrAnyone:
RecommendedId = MISSYP_ID_RECOMMEND_UNLOCK_ANYONE;
break;
case SecMgrAdminsOnly:
RecommendedId = MISSYP_ID_RECOMMEND_UNLOCK_ADMIN;
break;
} //end_switch
MissypDisplayCheckGraphic( hwnd, RecommendedId );
//
// If this isn't what is set, then put an X on the currently set value
//
if (CurrentlySetId != RecommendedId) {
if (RecommendedId > CurrentlySetId) {
MissypDisplayXGraphic( hwnd, CurrentlySetId, FALSE ); //Weaker
} else {
MissypDisplayXGraphic( hwnd, CurrentlySetId, TRUE ); //Stronger
}
}
//
// Set the right radio button
//
CheckRadioButton( hwnd,
MISSYP_ID_RADIO_UNLOCK_ANYONE,
MISSYP_ID_RADIO_UNLOCK_ADMIN,
MissypCurrentUnlock);
//
// If we don't match the recommended setting, then put an
// X by the current setting.
//
//
// If changes aren't allowed, then grey the radio buttons
//
if (!ChangesAllowed) {
Control = GetDlgItem(hwnd, MISSYP_ID_RADIO_UNLOCK_ANYONE);
EnableWindow( Control, FALSE );
Control = GetDlgItem(hwnd, MISSYP_ID_RADIO_UNLOCK_ADMIN);
EnableWindow( Control, FALSE );
}
}
//
// Save the original value
//
MissypOriginalUnlock = MissypCurrentUnlock;
return(TRUE);
}
BOOLEAN
MissypDisplayShutdown(
IN HWND hwnd,
IN BOOL ChangesAllowed,
IN BOOL Interactive
)
/*++
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 MissypCurrentShutdown.
Arguments
hwnd - handle to dialog
ChangesAllowed - TRUE: Leave change controls enabled.
FALSE: Disable change controls.
InteractiveMode - TRUE: Interactive Mode
FALSE: Non-Interactive Mode
Return Values:
TRUE - Completed successfully.
FALSE - Did not complete successfully.
A popup has been displayed.
The dialog should be terminated.
--*/
{
BOOLEAN
Result;
SECMGR_WHO
Who,
Recommendation;
HWND
Control;
INT
RecommendedId,
CurrentlySetId;
Result = MissypGetShutdownSetting( hwnd, &Who, Interactive );
if (!Result) {
//
// Display popup
//
//bugbug PopUp
return(FALSE);
}
//
// Select the appropriate button
//
switch (Who) {
case SecMgrAnyone:
MissypCurrentShutdown = MISSYP_ID_RADIO_SHUTDOWN_ANYONE;
CurrentlySetId = MISSYP_ID_RECOMMEND_SHUTDOWN_ANYONE;
break;
case SecMgrAnyoneLoggedOn:
MissypCurrentShutdown = MISSYP_ID_RADIO_SHUTDOWN_LOGGED_ON;
CurrentlySetId = MISSYP_ID_RECOMMEND_SHUTDOWN_LOGGED_ON;
break;
case SecMgrOpersAndAdmins:
MissypCurrentShutdown = MISSYP_ID_RADIO_SHUTDOWN_OPERS;
CurrentlySetId = MISSYP_ID_RECOMMEND_SHUTDOWN_OPERS;
break;
case SecMgrAdminsOnly:
MissypCurrentShutdown = MISSYP_ID_RADIO_SHUTDOWN_ADMIN;
CurrentlySetId = MISSYP_ID_RECOMMEND_SHUTDOWN_ADMIN;
break;
}
if (Interactive) {
//
// Clear all recommendation boxes and then set the correct one
//
MissypEraseGraphic( hwnd, MISSYP_ID_RECOMMEND_SHUTDOWN_ANYONE );
MissypEraseGraphic( hwnd, MISSYP_ID_RECOMMEND_SHUTDOWN_LOGGED_ON );
MissypEraseGraphic( hwnd, MISSYP_ID_RECOMMEND_SHUTDOWN_OPERS );
MissypEraseGraphic( hwnd, MISSYP_ID_RECOMMEND_SHUTDOWN_ADMIN );
//
// Set the recommendation
//
Recommendation = MissypGetShutdownRecommendation( SECMGR_LEVEL_CURRENT );
switch (Recommendation) {
case SecMgrAnyone:
RecommendedId = MISSYP_ID_RECOMMEND_SHUTDOWN_ANYONE;
break;
case SecMgrAnyoneLoggedOn:
RecommendedId = MISSYP_ID_RECOMMEND_SHUTDOWN_LOGGED_ON;
break;
case SecMgrOpersAndAdmins:
RecommendedId = MISSYP_ID_RECOMMEND_SHUTDOWN_OPERS;
break;
case SecMgrAdminsOnly:
RecommendedId = MISSYP_ID_RECOMMEND_SHUTDOWN_ADMIN;
break;
} //end_switch
MissypDisplayCheckGraphic( hwnd, RecommendedId );
//
// If this isn't what is set, then put an X on the currently set value
//
if (CurrentlySetId != RecommendedId) {
if (RecommendedId > CurrentlySetId) {
MissypDisplayXGraphic( hwnd, CurrentlySetId, FALSE ); // Weaker
} else {
MissypDisplayXGraphic( hwnd, CurrentlySetId, TRUE ); // Stronger
}
}
//
// Set the radio buttons accordingly
//
CheckRadioButton( hwnd,
MISSYP_ID_RADIO_SHUTDOWN_ANYONE,
MISSYP_ID_RADIO_SHUTDOWN_ADMIN,
MissypCurrentShutdown);
//
// If changes aren't allowed, then grey the radio buttons
//
if (!ChangesAllowed) {
Control = GetDlgItem(hwnd, MISSYP_ID_RADIO_SHUTDOWN_ANYONE);
EnableWindow( Control, FALSE );
Control = GetDlgItem(hwnd, MISSYP_ID_RADIO_SHUTDOWN_LOGGED_ON);
EnableWindow( Control, FALSE );
Control = GetDlgItem(hwnd, MISSYP_ID_RADIO_SHUTDOWN_OPERS);
EnableWindow( Control, FALSE );
Control = GetDlgItem(hwnd, MISSYP_ID_RADIO_SHUTDOWN_ADMIN);
EnableWindow( Control, FALSE );
}
}
MissypOriginalShutdown = MissypCurrentShutdown;
return(TRUE);
}
BOOLEAN
MissypDisplayLastName(
IN HWND hwnd,
IN BOOL ChangesAllowed,
IN BOOL Interactive
)
/*++
Routine Description:
This function retrieves the current LastName setting and establishes
the correct recommendation in the SYSTEM ACCESS dialog.
The current setting is placed in MissypCurrentLastName.
Arguments
hwnd - handle to dialog
ChangesAllowed - TRUE: Leave change controls enabled.
FALSE: Disable change controls.
InteractiveMode - TRUE: Interactive Mode
FALSE: Non-Interactive Mode
Return Values:
TRUE - Completed successfully.
FALSE - Did not complete successfully.
A popup has been displayed.
The dialog should be terminated.
--*/
{
BOOL
Display;
HWND
Control;
INT
RecommendedId,
CurrentlySetId;
MissypGetLastNameSetting( hwnd, &Display );
//
// Set the radio buttons accordingly
//
if (Display) {
MissypCurrentLastName = MISSYP_ID_RADIO_LASTNAME_DISPLAY;
CurrentlySetId = MISSYP_ID_RECOMMEND_LASTNAME_DISPLAY;
} else {
MissypCurrentLastName = MISSYP_ID_RADIO_LASTNAME_DONT_DISPLAY;
CurrentlySetId = MISSYP_ID_RECOMMEND_LASTNAME_DONT_DISPLAY;
}
if (Interactive) {
//
// Clear all recommendation boxes and then set the correct one
//
MissypEraseGraphic( hwnd, MISSYP_ID_RECOMMEND_LASTNAME_DISPLAY);
MissypEraseGraphic( hwnd, MISSYP_ID_RECOMMEND_LASTNAME_DONT_DISPLAY );
if (MissypGetLastNameRecommendation( SECMGR_LEVEL_CURRENT )) {
RecommendedId = MISSYP_ID_RECOMMEND_LASTNAME_DISPLAY;
} else {
RecommendedId = MISSYP_ID_RECOMMEND_LASTNAME_DONT_DISPLAY;
}
MissypDisplayCheckGraphic( hwnd, RecommendedId );
//
// If this isn't what is set, then put an X on the currently set value
//
if (CurrentlySetId != RecommendedId) {
MissypDisplayXGraphic( hwnd, CurrentlySetId, !Display );
}
CheckRadioButton( hwnd,
MISSYP_ID_RADIO_LASTNAME_DISPLAY,
MISSYP_ID_RADIO_LASTNAME_DONT_DISPLAY,
MissypCurrentLastName);
//
// If changes aren't allowed, then grey the radio buttons
//
if (!ChangesAllowed) {
Control = GetDlgItem(hwnd, MISSYP_ID_RADIO_LASTNAME_DISPLAY);
EnableWindow( Control, FALSE );
Control = GetDlgItem(hwnd, MISSYP_ID_RADIO_LASTNAME_DONT_DISPLAY);
EnableWindow( Control, FALSE );
}
}
MissypOriginalLastName = MissypCurrentLastName;
return(TRUE);
}
BOOLEAN
MissypDisplayLegalNotice(
IN HWND hwnd,
IN BOOL ChangesAllowed,
IN BOOL Interactive
)
/*++
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 MissypCurrentLegalNotice, and
MissypLegalNoticeCaption and MissypLegalNoticeBody will be set
to either NULL, or to point to appropriate strings.
Arguments
hwnd - handle to dialog
ChangesAllowed - TRUE: Leave change controls enabled.
FALSE: Disable change controls.
InteractiveMode - TRUE: Interactive Mode
FALSE: Non-Interactive Mode
Return Values:
TRUE - Completed successfully.
FALSE - Did not complete successfully.
A popup has been displayed.
The dialog should be terminated.
--*/
{
HWND
Control;
INT
RecommendedId,
CurrentlySetId;
SECMGR_WHO
Recommendation;
if (!MissypGetLegalNotice( hwnd,
&MissypCurrentLegalNoticeCaption,
&MissypCurrentLegalNoticeBody) ) {
// bugbug - put up a popup
return(FALSE);
}
if ( (MissypCurrentLegalNoticeCaption.Length != 0) ||
(MissypCurrentLegalNoticeBody.Length != 0) ) {
MissypCurrentLegalNotice = MISSYP_ID_RADIO_LEGAL_NOTICE;
CurrentlySetId = MISSYP_ID_RECOMMEND_LEGAL_NOTICE;
} else {
MissypCurrentLegalNotice = MISSYP_ID_RADIO_LEGAL_NOTICE_NONE;
CurrentlySetId = MISSYP_ID_RECOMMEND_LEGAL_NOTICE_NONE;
}
if (Interactive) {
//
// Clear all recommendation boxes and then set the correct one
//
MissypEraseGraphic( hwnd, MISSYP_ID_RECOMMEND_LEGAL_NOTICE);
MissypEraseGraphic( hwnd, MISSYP_ID_RECOMMEND_LEGAL_NOTICE_NONE );
if (MissypGetLegalNoticeRecommendation( SECMGR_LEVEL_CURRENT )) {
RecommendedId = MISSYP_ID_RECOMMEND_LEGAL_NOTICE;
} else {
RecommendedId = MISSYP_ID_RECOMMEND_LEGAL_NOTICE_NONE;
}
MissypDisplayCheckGraphic( hwnd, RecommendedId );
//
// If this isn't what is set, then put an X on the currently set value
//
if (CurrentlySetId != RecommendedId) {
MissypDisplayXGraphic( hwnd, CurrentlySetId, FALSE );
}
//
// Set the radio buttons accordingly
//
CheckRadioButton( hwnd,
MISSYP_ID_RADIO_LEGAL_NOTICE_NONE,
MISSYP_ID_RADIO_LEGAL_NOTICE,
MissypCurrentLegalNotice);
//
// If we have a legal notice, then display it.
// Otherwise, grey the legal notice edit boxes.
//
if (MissypCurrentLegalNotice == MISSYP_ID_RADIO_LEGAL_NOTICE) {
if (MissypCurrentLegalNoticeCaption.Length != 0) {
SetDlgItemText( hwnd,
MISSYP_ID_EDIT_LEGAL_NOTICE_CAPTION,
MissypCurrentLegalNoticeCaption.Buffer);
}
if (MissypCurrentLegalNoticeBody.Length != 0) {
SetDlgItemText( hwnd,
MISSYP_ID_EDIT_LEGAL_NOTICE_BODY,
MissypCurrentLegalNoticeBody.Buffer);
}
} else {
MissypGreyLegalNotice( hwnd, TRUE );
}
//
// If changes aren't allowed, then grey the radio buttons
// and the text.
//
if (!ChangesAllowed) {
Control = GetDlgItem(hwnd, MISSYP_ID_RADIO_LEGAL_NOTICE_NONE);
EnableWindow( Control, FALSE );
Control = GetDlgItem(hwnd, MISSYP_ID_RADIO_LEGAL_NOTICE);
EnableWindow( Control, FALSE );
MissypGreyLegalNotice( hwnd, TRUE );
}
}
MissypOriginalLegalNotice = MissypCurrentLegalNotice;
MissypOriginalLegalNoticeChanged = FALSE;
return(TRUE);
}
VOID
MissypGreyLegalNotice(
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, MISSYP_ID_TEXT_LEGAL_NOTICE_TITLE_BAR);
EnableWindow( Control, Enable );
Control = GetDlgItem(hwnd, MISSYP_ID_EDIT_LEGAL_NOTICE_CAPTION);
EnableWindow( Control, Enable );
Control = GetDlgItem(hwnd, MISSYP_ID_TEXT_LEGAL_NOTICE_BODY);
EnableWindow( Control, Enable );
Control = GetDlgItem(hwnd, MISSYP_ID_EDIT_LEGAL_NOTICE_BODY);
InvalidateRect( Control, NULL, FALSE); // Required for multi-line edit boxes
EnableWindow( Control, Enable );
return;
}
VOID
MissypWarnOfAutologon(
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(MissypSecMgrhInstance,
MAKEINTRESOURCE(MISSYP_ID_DLG_WARNING_AUTOLOGON),
hwnd,
(DLGPROC)MissypDlgProcWarnOfAutologon,
(LONG)0
);
}
return;
}
LONG
MissypDlgProcWarnOfAutologon(
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;
}
BOOLEAN
MissypSysAccApplyCurrentSettings(
IN 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
Result = TRUE;
if (MissypCurrentLegalNotice == MISSYP_ID_RADIO_LEGAL_NOTICE_NONE) {
MissypCurrentLegalNoticeCaption.Length = 0;
MissypCurrentLegalNoticeCaption.Buffer[0] = TEXT('\0');
MissypCurrentLegalNoticeBody.Length = 0;
MissypCurrentLegalNoticeBody.Buffer[0] = TEXT('\0');
}
//
// We count on the called routines to put up appropriate
// pop-ups on error.
//
if (Result && (MissypCurrentUnlock != MissypOriginalUnlock)) {
Result = MissypSetUnlockSetting(hwnd, MissypCurrentUnlock);
}
if (Result && (MissypCurrentCacheSize != MissypOriginalCacheSize)) {
Result = MissypSetLogonCacheCount(hwnd, MissypCurrentCacheSize);
}
if (Result && (MissypOriginalLegalNoticeChanged)) {
Result = MissypSetLegalNotice(hwnd,
&MissypCurrentLegalNoticeCaption,
&MissypCurrentLegalNoticeBody);
}
if (Result && (MissypCurrentShutdown != MissypOriginalShutdown)) {
Result = MissypSetShutdownSetting(hwnd, MissypCurrentShutdown);
}
if (Result && (MissypCurrentLastName != MissypOriginalLastName)) {
if (MissypCurrentLastName == MISSYP_ID_RADIO_LASTNAME_DISPLAY) {
Result = MissypSetLastNameSetting(hwnd, TRUE); // TRUE => display
} else {
Result = MissypSetLastNameSetting(hwnd, FALSE); // FALSE => don't display
}
}
return(Result);
}
LONG
MissypDlgProcLastName(
HWND hwnd,
UINT wMsg,
DWORD wParam,
LONG lParam
)
/*++
Routine Description:
This function is the dialog process for the Display Last Name 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 (!MissypLastNameInitDialog( 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, MISSYP_ID_BUTTON_APPLY);
} else {
Button = GetDlgItem(hwnd, MISSYP_ID_BUTTON_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);
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 MISSYP_ID_BUTTON_LASTNAME_HINT:
MissypDisplayHint( hwnd, MISSYP_ID_DLG_HINT_LAST_USERNAME );
return(TRUE);
case MISSYP_ID_RADIO_LASTNAME_DISPLAY:
case MISSYP_ID_RADIO_LASTNAME_DONT_DISPLAY:
MissypCurrentLastName = LOWORD(wParam);
return(TRUE);
case MISSYP_ID_BUTTON_APPLY:
//
// Changing some of the values takes
// a while. Change to an hourglass icon.
//
hCursor = SetCursor( LoadCursor(NULL, IDC_WAIT) );
ShowCursor(TRUE);
if (MissypSysAccApplyCurrentSettings( hwnd )) {
EndDialog(hwnd, 0);
}
return(TRUE);
case IDCANCEL:
case IDOK:
EndDialog(hwnd, 0);
return(TRUE);
default:
return FALSE;
}
default:
break;
}
return FALSE;
}
BOOLEAN
MissypLastNameInitDialog(
IN HWND hwnd,
IN BOOL ChangesAllowed
)
/*++
Routine Description:
This function retrieves current values and recommended values
for this item. These values are set in both the
item control structures and in module-wide current-setting
variables.
For Read-Only 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 Read-Write operations, the caller is responsible for making the
[OK] button invisible.
Arguments
hwnd - dialog handle
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. //
// //
///////////////////////////////////////////////////////////////////
//
// Update our values
//
if (MissypDisplayLastName( hwnd, ChangesAllowed, TRUE)) {
return(TRUE);
}
//
// Something didn't work
//
EndDialog(hwnd, 0);
return(FALSE);
}
LONG
MissypDlgProcLogonCache(
HWND hwnd,
UINT wMsg,
DWORD wParam,
LONG lParam
)
/*++
Routine Description:
This function is the dialog process for the Logon Cache 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;
WORD
NotificationCode,
ControlId;
int
Index;
BOOLEAN
ChangesAllowed,
Changed;
ChangesAllowed = (BOOLEAN)(lParam);
switch (wMsg) {
case WM_INITDIALOG:
if (!MissypLogonCacheInitDialog( 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, MISSYP_ID_BUTTON_APPLY);
} else {
Button = GetDlgItem(hwnd, MISSYP_ID_BUTTON_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);
return(TRUE);
case WM_SYSCOMMAND:
switch (wParam & 0xfff0) {
case SC_CLOSE:
EndDialog(hwnd, 0);
return(TRUE);
}
return(FALSE);
case WM_COMMAND:
//
// wParam WIN32- HIWORD = notification code,
// LOWORD = ID of control
// WIN16- ID of control
//
// lParam WIN32- hWnd of Control
// WIN16- HIWORD = notification code
// LOWORD = hWnd of control
//
//NotificationCode = GET_NOTIFY_MSG(wParam, lParam);
//ControlId = GET_CONTROL_ID(wParam);
NotificationCode = HIWORD(wParam);
ControlId = LOWORD(wParam);
switch(ControlId) {
case MISSYP_ID_BUTTON_LOGCAC_HINT:
MissypDisplayHint( hwnd, MISSYP_ID_DLG_HINT_LOGON_CACHE );
return(TRUE);
case MISSYP_ID_BUTTON_APPLY:
//
// Changing some of the values takes
// a while. Change to an hourglass icon.
//
hCursor = SetCursor( LoadCursor(NULL, IDC_WAIT) );
ShowCursor(TRUE);
if (MissypSysAccApplyCurrentSettings( hwnd )) {
EndDialog(hwnd, 0);
}
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 MISSYP_ID_SPIN_LOGCAC_APPLY:
Changed = FALSE;
if (LOWORD(wParam) == SB_LINEUP) {
if (MissypCurrentCacheSize < MISSYP_MAX_LOGON_CACHE_COUNT) {
MissypCurrentCacheSize++;
Changed = TRUE;
}
} else if (LOWORD(wParam) == SB_LINEDOWN) {
if (MissypCurrentCacheSize > 0) {
MissypCurrentCacheSize--;
Changed = TRUE;
}
}
if (Changed) {
SetDlgItemInt( hwnd,
MISSYP_ID_TEXT_LOGCAC_APPLY,
MissypCurrentCacheSize,
FALSE // Not signed value
);
}
return(TRUE);
default:
break;
}
default:
break;
}
return FALSE;
}
BOOLEAN
MissypLogonCacheInitDialog(
IN HWND hwnd,
IN BOOL ChangesAllowed
)
/*++
Routine Description:
This function retrieves current values and recommended values
for this item. These values are set in both the
item control structures and in module-wide current-setting
variables.
For Read-Only 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 Read-Write operations, the caller is responsible for making the
[OK] button invisible.
Arguments
hwnd - dialog handle
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. //
// //
///////////////////////////////////////////////////////////////////
//
// Update our values
//
if (MissypDisplayLogonCache( hwnd, ChangesAllowed, TRUE)) {
return(TRUE);
}
//
// Something didn't work
//
EndDialog(hwnd, 0);
return(FALSE);
}
LONG
MissypDlgProcUnlock(
HWND hwnd,
UINT wMsg,
DWORD wParam,
LONG lParam
)
/*++
Routine Description:
This function is the dialog process for the Unlock Workstation 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;
WORD
NotificationCode,
ControlId;
int
Index;
BOOLEAN
ChangesAllowed,
Changed;
ChangesAllowed = (BOOLEAN)(lParam);
switch (wMsg) {
case WM_INITDIALOG:
if (!MissypUnlockInitDialog( 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, MISSYP_ID_BUTTON_APPLY);
} else {
Button = GetDlgItem(hwnd, MISSYP_ID_BUTTON_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);
return(TRUE);
case WM_SYSCOMMAND:
switch (wParam & 0xfff0) {
case SC_CLOSE:
EndDialog(hwnd, 0);
return(TRUE);
}
return(FALSE);
case WM_COMMAND:
//
// wParam WIN32- HIWORD = notification code,
// LOWORD = ID of control
// WIN16- ID of control
//
// lParam WIN32- hWnd of Control
// WIN16- HIWORD = notification code
// LOWORD = hWnd of control
//
//NotificationCode = GET_NOTIFY_MSG(wParam, lParam);
//ControlId = GET_CONTROL_ID(wParam);
NotificationCode = HIWORD(wParam);
ControlId = LOWORD(wParam);
switch(ControlId) {
case MISSYP_ID_RADIO_UNLOCK_ANYONE:
MissypCurrentUnlock = SecMgrAnyone;
return(TRUE);
case MISSYP_ID_RADIO_UNLOCK_ADMIN:
MissypCurrentUnlock = SecMgrAdminsOnly;
return(TRUE);
case MISSYP_ID_BUTTON_APPLY:
//
// Changing some of the values takes
// a while. Change to an hourglass icon.
//
hCursor = SetCursor( LoadCursor(NULL, IDC_WAIT) );
ShowCursor(TRUE);
if (MissypSysAccApplyCurrentSettings( hwnd )) {
EndDialog(hwnd, 0);
}
return(TRUE);
case IDCANCEL:
case IDOK:
EndDialog(hwnd, 0);
return(TRUE);
default:
return FALSE;
}
default:
break;
}
return FALSE;
}
BOOLEAN
MissypUnlockInitDialog(
IN HWND hwnd,
IN BOOL ChangesAllowed
)
/*++
Routine Description:
This function retrieves current values and recommended values
for this item. These values are set in both the
item control structures and in module-wide current-setting
variables.
For Read-Only 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 Read-Write operations, the caller is responsible for making the
[OK] button invisible.
Arguments
hwnd - dialog handle
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. //
// //
///////////////////////////////////////////////////////////////////
//
// Update our values
//
if (MissypDisplayUnlock( hwnd, ChangesAllowed, TRUE)) {
return(TRUE);
}
//
// Something didn't work
//
EndDialog(hwnd, 0);
return(FALSE);
}
LONG
MissypDlgProcShutdown(
HWND hwnd,
UINT wMsg,
DWORD wParam,
LONG lParam
)
/*++
Routine Description:
This function is the dialog process for the System Shutdown 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;
WORD
NotificationCode,
ControlId;
int
Index;
BOOLEAN
ChangesAllowed,
Changed;
ChangesAllowed = (BOOLEAN)(lParam);
switch (wMsg) {
case WM_INITDIALOG:
if (!MissypShutdownInitDialog( 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, MISSYP_ID_BUTTON_APPLY);
} else {
Button = GetDlgItem(hwnd, MISSYP_ID_BUTTON_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);
return(TRUE);
case WM_SYSCOMMAND:
switch (wParam & 0xfff0) {
case SC_CLOSE:
EndDialog(hwnd, 0);
return(TRUE);
}
return(FALSE);
case WM_COMMAND:
//
// wParam WIN32- HIWORD = notification code,
// LOWORD = ID of control
// WIN16- ID of control
//
// lParam WIN32- hWnd of Control
// WIN16- HIWORD = notification code
// LOWORD = hWnd of control
//
//NotificationCode = GET_NOTIFY_MSG(wParam, lParam);
//ControlId = GET_CONTROL_ID(wParam);
NotificationCode = HIWORD(wParam);
ControlId = LOWORD(wParam);
switch(ControlId) {
case MISSYP_ID_RADIO_SHUTDOWN_ANYONE:
MissypCurrentShutdown = SecMgrAnyone;
return(TRUE);
case MISSYP_ID_RADIO_SHUTDOWN_LOGGED_ON:
MissypCurrentShutdown = SecMgrAnyoneLoggedOn;
return(TRUE);
case MISSYP_ID_RADIO_SHUTDOWN_OPERS:
MissypCurrentShutdown = SecMgrOpersAndAdmins;
return(TRUE);
case MISSYP_ID_RADIO_SHUTDOWN_ADMIN:
MissypCurrentShutdown = SecMgrAdminsOnly;
return(TRUE);
case MISSYP_ID_BUTTON_APPLY:
//
// Changing some of the values takes
// a while. Change to an hourglass icon.
//
hCursor = SetCursor( LoadCursor(NULL, IDC_WAIT) );
ShowCursor(TRUE);
if (MissypSysAccApplyCurrentSettings( hwnd )) {
EndDialog(hwnd, 0);
}
return(TRUE);
case IDCANCEL:
case IDOK:
EndDialog(hwnd, 0);
return(TRUE);
default:
return FALSE;
}
default:
break;
}
return FALSE;
}
BOOLEAN
MissypShutdownInitDialog(
IN HWND hwnd,
IN BOOL ChangesAllowed
)
/*++
Routine Description:
This function retrieves current values and recommended values
for this item. These values are set in both the
item control structures and in module-wide current-setting
variables.
For Read-Only 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 Read-Write operations, the caller is responsible for making the
[OK] button invisible.
Arguments
hwnd - dialog handle
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. //
// //
///////////////////////////////////////////////////////////////////
//
// Update our values
//
if (MissypDisplayShutdown( hwnd, ChangesAllowed, TRUE)) {
return(TRUE);
}
//
// Something didn't work
//
EndDialog(hwnd, 0);
return(FALSE);
}
LONG
MissypDlgProcLegalNotice(
HWND hwnd,
UINT wMsg,
DWORD wParam,
LONG lParam
)
/*++
Routine Description:
This function is the dialog process for the Legal Notice 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;
WORD
NotificationCode,
ControlId;
int
Index;
BOOLEAN
ChangesAllowed,
Changed;
ChangesAllowed = (BOOLEAN)(lParam);
switch (wMsg) {
case WM_INITDIALOG:
if (!MissypLegalNoticeInitDialog( 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, MISSYP_ID_BUTTON_APPLY);
} else {
Button = GetDlgItem(hwnd, MISSYP_ID_BUTTON_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);
return(TRUE);
case WM_COMMAND:
//
// wParam WIN32- HIWORD = notification code,
// LOWORD = ID of control
// WIN16- ID of control
//
// lParam WIN32- hWnd of Control
// WIN16- HIWORD = notification code
// LOWORD = hWnd of control
//
//NotificationCode = GET_NOTIFY_MSG(wParam, lParam);
//ControlId = GET_CONTROL_ID(wParam);
NotificationCode = HIWORD(wParam);
ControlId = LOWORD(wParam);
switch(ControlId) {
case MISSYP_ID_EDIT_LEGAL_NOTICE_CAPTION:
case MISSYP_ID_EDIT_LEGAL_NOTICE_BODY:
//
// Just note that the notice has changed
//
if (NotificationCode == EN_UPDATE) {
MissypOriginalLegalNoticeChanged = TRUE;
}
return(TRUE);
case MISSYP_ID_BUTTON_APPLY:
//
// Changing some of the values takes
// a while. Change to an hourglass icon.
//
hCursor = SetCursor( LoadCursor(NULL, IDC_WAIT) );
ShowCursor(TRUE);
//
// Get the legal notice strings, if necessary
//
if (MissypOriginalLegalNoticeChanged) {
if (MissypCurrentLegalNotice == MISSYP_ID_RADIO_LEGAL_NOTICE ) {
MissypCurrentLegalNoticeCaption.Length =
GetDlgItemText(hwnd,
MISSYP_ID_EDIT_LEGAL_NOTICE_CAPTION,
MissypCurrentLegalNoticeCaption.Buffer,
MissypCurrentLegalNoticeCaption.MaximumLength
);
MissypCurrentLegalNoticeBody.Length =
GetDlgItemText(hwnd,
MISSYP_ID_EDIT_LEGAL_NOTICE_BODY,
MissypCurrentLegalNoticeBody.Buffer,
MissypCurrentLegalNoticeBody.MaximumLength
);
}
}
if (MissypSysAccApplyCurrentSettings( hwnd )) {
EndDialog(hwnd, 0);
}
return(TRUE);
case MISSYP_ID_RADIO_LEGAL_NOTICE_NONE:
MissypGreyLegalNotice( hwnd, TRUE );
MissypCurrentLegalNotice = LOWORD(wParam);
if (MissypOriginalLegalNotice != MissypCurrentLegalNotice) {
MissypOriginalLegalNoticeChanged = TRUE;
} else {
MissypOriginalLegalNoticeChanged = FALSE;
}
return(TRUE);
case MISSYP_ID_RADIO_LEGAL_NOTICE:
MissypGreyLegalNotice( hwnd, FALSE );
MissypCurrentLegalNotice = 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 (MissypOriginalLegalNotice != MissypCurrentLegalNotice) {
MissypOriginalLegalNoticeChanged = TRUE;
}
return(TRUE);
case IDCANCEL:
case IDOK:
EndDialog(hwnd, 0);
return(TRUE);
default:
return FALSE;
}
default:
break;
}
return FALSE;
}
BOOLEAN
MissypLegalNoticeInitDialog(
IN HWND hwnd,
IN BOOL ChangesAllowed
)
/*++
Routine Description:
This function retrieves current values and recommended values
for this item. These values are set in both the
item control structures and in module-wide current-setting
variables.
For Read-Only 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 Read-Write operations, the caller is responsible for making the
[OK] button invisible.
Arguments
hwnd - dialog handle
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. //
// //
///////////////////////////////////////////////////////////////////
//
// Update our values
//
if (MissypDisplayLegalNotice( hwnd, ChangesAllowed, TRUE)) {
return(TRUE);
}
//
// Something didn't work
//
EndDialog(hwnd, 0);
return(FALSE);
}