225 lines
5.1 KiB
C
225 lines
5.1 KiB
C
/*++
|
||
|
||
Copyright (c) 1994 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
logcache.c
|
||
|
||
Abstract:
|
||
|
||
This module performs logon cache function.
|
||
|
||
|
||
|
||
Author:
|
||
|
||
Jim Kelly (JimK) 22-Sep-1994
|
||
|
||
Revision History:
|
||
|
||
--*/
|
||
|
||
#include "secmgrp.h"
|
||
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////
|
||
// //
|
||
// Module-Private Definitions //
|
||
// //
|
||
///////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////
|
||
// //
|
||
// Module-Private Prototypes //
|
||
// //
|
||
///////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////
|
||
// //
|
||
// Externally callable functions //
|
||
// //
|
||
///////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
BOOLEAN
|
||
SecMgrpGetLogonCache(
|
||
HWND hwnd,
|
||
PULONG LogonCacheSize,
|
||
PULONG RecommendedSize
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This function is used to get the current logon cache size.
|
||
|
||
Arguments
|
||
|
||
hwnd - The caller's window. This is used if we need to put
|
||
up an error popup.
|
||
|
||
LogonCacheSize - receives the current logon cache size.
|
||
|
||
RecommendedSize - receives the recommended size for the current
|
||
security level and product type.
|
||
|
||
Return Values:
|
||
|
||
TRUE - The values have been successfully retrieved.
|
||
|
||
FALSE - we ran into trouble querying the registry.
|
||
|
||
If an error is encountered, then an error popup will be
|
||
displayed by this routine.
|
||
|
||
--*/
|
||
{
|
||
|
||
//
|
||
// Return a recommended size based upon security level and
|
||
// product type.
|
||
//
|
||
|
||
switch (SecMgrpCurrentLevel) {
|
||
case SECMGR_ID_LEVEL_HIGH:
|
||
case SECMGR_ID_LEVEL_C2:
|
||
(*RecommendedSize) = 0;
|
||
break;
|
||
|
||
case SECMGR_ID_LEVEL_STANDARD:
|
||
|
||
switch (SecMgrpProductType) {
|
||
case NtProductWinNt:
|
||
case NtProductServer:
|
||
(*RecommendedSize) = 0;
|
||
break;
|
||
|
||
case NtProductLanManNt:
|
||
(*RecommendedSize) = 0;
|
||
break;
|
||
|
||
default:
|
||
(*RecommendedSize) = 0;
|
||
break;
|
||
}
|
||
|
||
break;
|
||
|
||
default:
|
||
(*RecommendedSize) = 0;
|
||
break;
|
||
}
|
||
|
||
|
||
//
|
||
// Query the registry key holding the cache size.
|
||
//
|
||
|
||
(*LogonCacheSize) = GetProfileInt(
|
||
TEXT("Winlogon"),
|
||
TEXT("CachedLogonsCount"),
|
||
SECMGRP_DEFAULT_LOGON_CACHE_COUNT // Default value
|
||
);
|
||
|
||
return(TRUE);
|
||
}
|
||
|
||
|
||
BOOLEAN
|
||
SecMgrpSetLogonCache(
|
||
HWND hwnd,
|
||
ULONG LogonCacheSize
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This function is used to set a new logon cache size.
|
||
|
||
If the size if different than the current logon cache
|
||
size, then the global reboot necessary flag (SecMgrRebootRequired)
|
||
will be set.
|
||
|
||
Arguments
|
||
|
||
hwnd - The caller's window. This is used if we need to put
|
||
up an error popup.
|
||
|
||
LogonCacheSize - The new logon cache size.
|
||
|
||
|
||
Return Values:
|
||
|
||
TRUE - The values have been successfully retrieved.
|
||
|
||
FALSE - we ran into trouble querying the registry. The
|
||
return value indicates what the problem was.
|
||
|
||
If an error is encountered, then an error popup will be
|
||
displayed by this routine.
|
||
|
||
--*/
|
||
{
|
||
NTSTATUS
|
||
NtStatus;
|
||
|
||
UINT
|
||
CurrentSize;
|
||
|
||
TCHAR
|
||
SizeAsStringBuffer[20];
|
||
|
||
UNICODE_STRING
|
||
SizeAsString;
|
||
|
||
SizeAsString.Length = 0;
|
||
SizeAsString.MaximumLength = 20;
|
||
SizeAsString.Buffer = &SizeAsStringBuffer[0];
|
||
|
||
//
|
||
// Get the current size so we know if we are changing the
|
||
// value.
|
||
//
|
||
|
||
CurrentSize = GetProfileInt(
|
||
TEXT("Winlogon"),
|
||
TEXT("CachedLogonsCount"),
|
||
SECMGRP_DEFAULT_LOGON_CACHE_COUNT // Default value
|
||
);
|
||
|
||
if (CurrentSize == LogonCacheSize) {
|
||
return(TRUE);
|
||
}
|
||
|
||
//
|
||
// The value is different.
|
||
//
|
||
|
||
SecMgrpRebootRequired = TRUE;
|
||
|
||
//
|
||
// Set the new value and indicate that a reboot is necessary.
|
||
//
|
||
|
||
NtStatus = RtlIntegerToUnicodeString (
|
||
LogonCacheSize,
|
||
10,
|
||
&SizeAsString
|
||
);
|
||
ASSERT(NT_SUCCESS(NtStatus));
|
||
return (WriteProfileString(
|
||
TEXT("Winlogon"),
|
||
TEXT("CachedLogonsCount"),
|
||
SizeAsString.Buffer
|
||
) );
|
||
}
|
||
|