116 lines
2.8 KiB
C
116 lines
2.8 KiB
C
/****************************************************************************/
|
|
// 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;
|
|
}
|