/****************************************************************************/ // version.c // // TermSrv version setting functions. // // Copyright (C) 1997-2000 Microsoft Corporation /****************************************************************************/ #include "precomp.h" #pragma hdrstop /*============================================================================= == Vars =============================================================================*/ PWCHAR pProductOemInfo[] = { REG_CITRIX_OEMID, REG_CITRIX_OEMNAME, REG_CITRIX_PRODUCTNAME, REG_CITRIX_PRODUCTVERSION, (PWCHAR) NULL, }; /******************************************************************************* // UpdateOemAndProductInfo // // Updates the registry with the OEM and Product info from SHELL32.DLL. // Called at init time. hKeyTermSrv is an open reg handle to // HKLM\Sys\CCS\Ctrl\TS TermSrv key. Returns FALSE on error. ******************************************************************************/ BOOL UpdateOemAndProductInfo(HKEY hKeyTermSrv) { ULONG i; PWCHAR pInfo = NULL; DWORD dwSize; PCHAR pBuffer; DWORD dwBytes; PUSHORT pTransL; PUSHORT pTransH; WCHAR pString[255]; PWCHAR pKey; BOOL bRc = TRUE; NTSTATUS Status; ASSERT(hKeyTermSrv != NULL); // Get the VersionInfo data: Determine size, alloc memory, then get it. dwSize = GetFileVersionInfoSize(OEM_AND_PRODUCT_INFO_DLL, 0); if (dwSize != 0) { pInfo = MemAlloc(dwSize); if (pInfo != NULL) { bRc = GetFileVersionInfo(OEM_AND_PRODUCT_INFO_DLL, 0, dwSize, pInfo); if (!bRc) goto done; } else { bRc = FALSE; goto done; } } else { bRc = FALSE; goto done; } /* * Get the translation information */ if (!VerQueryValue(pInfo, L"\\VarFileInfo\\Translation", &pBuffer, &dwBytes)) { bRc = FALSE; goto done; } /* * Get the language and character set */ pTransL = (PUSHORT)pBuffer; pTransH = (PUSHORT)(pBuffer + 2); /* * Pull out the individual fields */ i = 0; while ((pKey = pProductOemInfo[i++]) != NULL) { /* * Generate StringFileInfo entry */ wsprintf(pString, L"\\StringFileInfo\\%04X%04X\\%s", *pTransL, *pTransH, pKey); /* * Pull entry */ if (!VerQueryValue( pInfo, pString, &pBuffer, &dwBytes ) ) { bRc = FALSE; goto done; } /* * Write key value */ RegSetValueEx(hKeyTermSrv, pKey, 0, REG_SZ, pBuffer, dwBytes * 2); } done: /* * Free memory */ if (pInfo != NULL) MemFree(pInfo); return bRc; }