mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
224 lines
5.1 KiB
224 lines
5.1 KiB
/*++
|
|
|
|
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
|
|
) );
|
|
}
|
|
|