windows-nt/Source/XPSP1/NT/termsrv/syslib/registry.c
2020-09-26 16:20:57 +08:00

307 lines
6.9 KiB
C

/*************************************************************************
*
* registry.c
*
* Functions to provide easy access to security (ACLs).
*
* Copyright Microsoft, 1998
*
*
*************************************************************************/
/* include files */
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include "winsta.h"
#include "syslib.h"
#include "regapi.h"
#if DBG
#define DBGPRINT(x) DbgPrint x
#if DBGTRACE
#define TRACE0(x) DbgPrint x
#define TRACE1(x) DbgPrint x
#else
#define TRACE0(x)
#define TRACE1(x)
#endif
#else
#define DBGPRINT(x)
#define TRACE0(x)
#define TRACE1(x)
#endif
/*
* Data Structure
*/
/// NONE YET...
/*
* Definitions
*/
#define SZENABLE TEXT("1")
/*
* procedure prototypes
*/
BOOL QueryFlatTempKey( VOID );
/*****************************************************************************
*
* QueryFlatTempKey
*
* ENTRY: Nothing.
*
* EXIT: TRUE - enabled
* FALSE - disabled (key doesn't exist or isn't "1")
*
*
****************************************************************************/
BOOL
QueryFlatTempKey( VOID )
{
DWORD dwType = REG_SZ;
DWORD dwSize = 3 * sizeof(WCHAR);
WCHAR szValue[3];
HKEY Handle;
LONG rc;
//
// Ideally, I could just call TS's RegGetMachinePolicy() and get the policy. But
// that makes a lot of reg reads and I just don't want to slow down the
// login cycle.
// So, for now, I will read the reg policy tree directly.
// 08/15/2000 AraBern
//
// see if there is a policy value:
{
DWORD dwType;
DWORD perSessionTempDir;
LONG Err;
HKEY hKey;
DWORD dwSize = sizeof(DWORD);
Err = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
TS_POLICY_SUB_TREE,
0,
KEY_QUERY_VALUE,
&hKey);
if(Err == ERROR_SUCCESS)
{
Err = RegQueryValueEx(hKey,
REG_TERMSRV_PERSESSIONTEMPDIR ,
NULL,
&dwType,
(LPBYTE)&perSessionTempDir,
&dwSize);
RegCloseKey(hKey);
if(Err == ERROR_SUCCESS)
{
// if we have per session temp folders, then obviously we can't allow flat temp.
if (perSessionTempDir )
{
return FALSE;
}
// else is a fall thru, since not having per session does not mean having flat temp.
}
// else is a fall thru to the below block
}
}
// by now we have no policy present, so if the flat temp is set.
/*
* Open registry
*/
if ( RegOpenKeyEx( HKEY_LOCAL_MACHINE,
REG_CONTROL_TSERVER,
0,
KEY_READ,
&Handle ) != ERROR_SUCCESS ) {
return FALSE;
}
/*
* Read registry value
*/
rc = RegQueryValueExW( Handle,
REG_CITRIX_FLATTEMPDIR,
NULL,
&dwType,
(PUCHAR)&szValue,
&dwSize );
/*
* Close registry and key handle
*/
RegCloseKey( Handle );
return( (rc == ERROR_SUCCESS) && (lstrcmp(szValue,SZENABLE) == 0) );
} // end of QueryFlatTempKey()
// FROM regapi\reguc.c : this function has been modified to get rid of all
// registry accesses.
/*******************************************************************************
*
* RegDefaultUserConfigQueryW (UNICODE)
*
* Query the Default User Configuration from the indicated server's registry.
*
* ENTRY:
* pServerName (input)
* Points to string of server to access (NULL for current machine).
* pUserConfig (input)
* Pointer to a USERCONFIGW structure that will receive the default
* user configuration information.
* UserConfigLength (input)
* Specifies the length in bytes of the pUserConfig buffer.
* pReturnLength (output)
* Receives the number of bytes placed in the pUserConfig buffer.
*
* EXIT:
* Always will return ERROR_SUCCESS, unless UserConfigLength is incorrect.
*
******************************************************************************/
LONG WINAPI
RegDefaultUserConfigQueryW( WCHAR * pServerName,
PUSERCONFIGW pUserConfig,
ULONG UserConfigLength,
PULONG pReturnLength )
{
UNREFERENCED_PARAMETER( pServerName );
/*
* Validate length and zero-initialize the destination
* USERCONFIGW buffer.
*/
if ( UserConfigLength < sizeof(USERCONFIGW) )
return( ERROR_INSUFFICIENT_BUFFER );
/*
* Initialize to an initial default.
*/
memset(pUserConfig, 0, UserConfigLength);
pUserConfig->fInheritAutoLogon = TRUE;
pUserConfig->fInheritResetBroken = TRUE;
pUserConfig->fInheritReconnectSame = TRUE;
pUserConfig->fInheritInitialProgram = TRUE;
pUserConfig->fInheritCallback = FALSE;
pUserConfig->fInheritCallbackNumber = TRUE;
pUserConfig->fInheritShadow = TRUE;
pUserConfig->fInheritMaxSessionTime = TRUE;
pUserConfig->fInheritMaxDisconnectionTime = TRUE;
pUserConfig->fInheritMaxIdleTime = TRUE;
pUserConfig->fInheritAutoClient = TRUE;
pUserConfig->fInheritSecurity = FALSE;
pUserConfig->fPromptForPassword = FALSE;
pUserConfig->fResetBroken = FALSE;
pUserConfig->fReconnectSame = FALSE;
pUserConfig->fLogonDisabled = FALSE;
pUserConfig->fAutoClientDrives = TRUE;
pUserConfig->fAutoClientLpts = TRUE;
pUserConfig->fForceClientLptDef = TRUE;
pUserConfig->fDisableEncryption = TRUE;
pUserConfig->fHomeDirectoryMapRoot = FALSE;
pUserConfig->fUseDefaultGina = FALSE;
pUserConfig->fDisableCpm = FALSE;
pUserConfig->fDisableCdm = FALSE;
pUserConfig->fDisableCcm = FALSE;
pUserConfig->fDisableLPT = FALSE;
pUserConfig->fDisableClip = FALSE;
pUserConfig->fDisableExe = FALSE;
pUserConfig->fDisableCam = FALSE;
pUserConfig->UserName[0] = 0;
pUserConfig->Domain[0] = 0;
pUserConfig->Password[0] = 0;
pUserConfig->WorkDirectory[0] = 0;
pUserConfig->InitialProgram[0] = 0;
pUserConfig->CallbackNumber[0] = 0;
pUserConfig->Callback = Callback_Disable;
pUserConfig->Shadow = Shadow_EnableInputNotify;
pUserConfig->MaxConnectionTime = 0;
pUserConfig->MaxDisconnectionTime = 0;
pUserConfig->MaxIdleTime = 0;
pUserConfig->KeyboardLayout = 0;
pUserConfig->MinEncryptionLevel = 1;
pUserConfig->fWallPaperDisabled = FALSE;
pUserConfig->NWLogonServer[0] = 0;
pUserConfig->WFProfilePath[0] = 0;
pUserConfig->WFHomeDir[0] = 0;
pUserConfig->WFHomeDirDrive[0] = 0;
*pReturnLength = sizeof(USERCONFIGW);
return( ERROR_SUCCESS );
}