/****************************************************************************/ // tempdir.c // // Copyright (C) 1997-1999 Microsoft Corp. /****************************************************************************/ #include "precomp.h" #pragma hdrstop #define VOLATILE_PATH TEXT("Volatile Environment") PWSTR gszTmpDirPath; PWSTR gszTempDirPath; VOID RemovePerSessionTempDirs() { HKEY hKey; ULONG ultemp, ulType, ulValueData, fDelTemp = 1; NTSTATUS Status; if (!gszTempDirPath && !gszTmpDirPath) return; // // See if the registry value is set to delete the Per Session temp directory // if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, REG_CONTROL_TSERVER, 0, KEY_READ, &hKey) == ERROR_SUCCESS) { ultemp = sizeof(fDelTemp); RegQueryValueEx(hKey, REG_CITRIX_DELETETEMPDIRSONEXIT, NULL, &ulType, (LPBYTE)&fDelTemp, &ultemp); RegCloseKey(hKey); } // // See if the POLICY registry value is set to delete the Per Session temp directory // if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, TS_POLICY_SUB_TREE, 0, KEY_READ, &hKey) == ERROR_SUCCESS) { ultemp = sizeof(fDelTemp); if ( ERROR_SUCCESS == RegQueryValueEx(hKey, REG_CITRIX_DELETETEMPDIRSONEXIT, NULL, &ulType, (LPBYTE)&ulValueData, &ultemp) ) { fDelTemp = ulValueData; } RegCloseKey(hKey); } if (fDelTemp) { if (gszTempDirPath) { RemoveDir(gszTempDirPath); free(gszTempDirPath); gszTempDirPath = NULL; } if (gszTmpDirPath) { RemoveDir(gszTmpDirPath); free(gszTmpDirPath); gszTmpDirPath = NULL; } } } BOOL TermsrvCreateTempDir( PVOID *pEnv, HANDLE UserToken, PSECURITY_DESCRIPTOR SD ) { CTX_USER_DATA Ctx_User_Data; PCTX_USER_DATA pCtx_User_Data = NULL; BOOL retval; WCHAR pwcSessionId[16]; if(UserToken || SD) { Ctx_User_Data.UserToken = UserToken; Ctx_User_Data.NewThreadTokenSD = SD; pCtx_User_Data = &Ctx_User_Data; } wsprintf(pwcSessionId,L"%lx",NtCurrentPeb()->SessionId); retval = CtxCreateTempDir(L"TEMP", pwcSessionId, pEnv, &gszTempDirPath, pCtx_User_Data ); retval = CtxCreateTempDir(L"TMP", pwcSessionId, pEnv, &gszTmpDirPath, pCtx_User_Data ); return retval; }