3356 lines
79 KiB
C
3356 lines
79 KiB
C
|
/*++
|
|||
|
|
|||
|
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);
|
|||
|
}
|