本文整理汇总了C++中RegEnumValueW函数的典型用法代码示例。如果您正苦于以下问题:C++ RegEnumValueW函数的具体用法?C++ RegEnumValueW怎么用?C++ RegEnumValueW使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了RegEnumValueW函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: My_RegEnumValueW
BOOL My_RegEnumValueW()
{
HKEY hKey=NULL;
DWORD dwIndex=NULL;
LPWSTR lpValueName=NULL;
LPDWORD lpcbValueName=NULL;
LPDWORD lpReserved=NULL;
LPDWORD lpType=NULL;
LPBYTE lpData=NULL;
LPDWORD lpcbData=NULL;
LONG returnVal_Real = NULL;
LONG returnVal_Intercepted = NULL;
DWORD error_Real = 0;
DWORD error_Intercepted = 0;
__try{
disableInterception();
returnVal_Real = RegEnumValueW (hKey,dwIndex,lpValueName,lpcbValueName,lpReserved,lpType,lpData,lpcbData);
error_Real = GetLastError();
enableInterception();
returnVal_Intercepted = RegEnumValueW (hKey,dwIndex,lpValueName,lpcbValueName,lpReserved,lpType,lpData,lpcbData);
error_Intercepted = GetLastError();
}__except(puts("in filter"), 1){puts("exception caught");}
return ((returnVal_Real == returnVal_Intercepted) && (error_Real == error_Intercepted));
}
示例2: check_autorun
bool check_autorun(){
bool r = false;
wchar_t name[MAX_PATH];
wchar_t value[MAX_PATH];
HKEY hkey;
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS, &hkey) == ERROR_SUCCESS){
int i = 0;
while (1){
DWORD ln=MAX_PATH;
DWORD ld = MAX_PATH;
DWORD t;
if (RegEnumValueW(hkey, i, name, &ln, 0, &t, (BYTE*)value, &ld) != ERROR_SUCCESS){
break;
}
cmem f;
if (cfile::load(value, f, MAX_SIZE_FILE)){
if (check_pe(&f) && check_infected(&f)){
r = true;
break;
}
}
i++;
}
RegCloseKey(hkey);
}
if (r)
return true;
if (RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS, &hkey) == ERROR_SUCCESS){
int i = 0;
while (1){
DWORD ln = MAX_PATH;
DWORD ld = MAX_PATH;
DWORD t;
if (RegEnumValueW(hkey, i, name, &ln, 0, &t, (BYTE*)value, &ld) != ERROR_SUCCESS){
break;
}
cmem f;
if (cfile::load(value, f, MAX_SIZE_FILE)){
if (check_pe(&f) && check_infected(&f)){
r = true;
break;
}
}
i++;
}
RegCloseKey(hkey);
}
if (r)
return true;
return false;
}
示例3: QT_WA_INLINE
QStringList QSettingsPrivate::sysEntryList( const QString &key ) const
{
QString value;
QStringList list;
HKEY hkey = sysd->openKey( key + "\\", KEY_QUERY_VALUE, value, globalScope );
if ( hkey ) {
int idx = 0;
unsigned long count = QT_WA_INLINE( 16383, 260 );
QByteArray ba( ( count + 1 ) * sizeof( TCHAR ) );
while ( QT_WA_INLINE(
RegEnumValueW( hkey, idx, ( LPTSTR ) ba.data(),
&count, NULL, NULL, NULL, NULL ),
RegEnumValueA( hkey, idx, ( LPSTR ) ba.data(),
&count, NULL, NULL, NULL, NULL ) )
== ERROR_SUCCESS ) {
list.append ( QT_WA_INLINE( QString::fromUcs2( ( unsigned short * ) ba.data() ),
QString::fromLatin1( ( LPCSTR ) ba.data() ) ) );
idx++;
count = QT_WA_INLINE( 16383, 260 ); /* !! */
}
RegCloseKey( hkey );
}
return list;
}
示例4: initialize_disabled_joysticks_list
static void initialize_disabled_joysticks_list(HWND hwnd)
{
static const WCHAR disabled_str[] = {'d','i','s','a','b','l','e','d','\0'};
HKEY hkey, appkey;
DWORD values = 0;
HRESULT hr;
DWORD i;
SendDlgItemMessageW(hwnd, IDC_DISABLEDLIST, LB_RESETCONTENT, 0, 0);
/* Search for disabled joysticks */
get_app_key(&hkey, &appkey);
RegQueryInfoKeyW(hkey, NULL, NULL, NULL, NULL, NULL, NULL, &values, NULL, NULL, NULL, NULL);
for (i=0; i < values; i++)
{
DWORD name_len = MAX_PATH, data_len = MAX_PATH;
WCHAR buf_name[MAX_PATH + 9], buf_data[MAX_PATH];
hr = RegEnumValueW(hkey, i, buf_name, &name_len, NULL, NULL, (BYTE*) buf_data, &data_len);
if (SUCCEEDED(hr) && !lstrcmpW(disabled_str, buf_data))
SendDlgItemMessageW(hwnd, IDC_DISABLEDLIST, LB_ADDSTRING, 0, (LPARAM) buf_name);
}
if (hkey) RegCloseKey(hkey);
if (appkey) RegCloseKey(appkey);
}
示例5: MsiEnumRelatedProductsW
/*************************************************************************
* MsiEnumRelatedProductsW [[email protected]]
*
*/
UINT WINAPI MsiEnumRelatedProductsW(LPCWSTR szUpgradeCode, DWORD dwReserved,
DWORD iProductIndex, LPWSTR lpProductBuf)
{
UINT r;
HKEY hkey;
DWORD dwSize = SQUISH_GUID_SIZE;
WCHAR szKeyName[SQUISH_GUID_SIZE];
TRACE("%s %u %u %p\n", debugstr_w(szUpgradeCode), dwReserved,
iProductIndex, lpProductBuf);
if (NULL == szUpgradeCode)
return ERROR_INVALID_PARAMETER;
if (NULL == lpProductBuf)
return ERROR_INVALID_PARAMETER;
r = MSIREG_OpenUpgradeCodesKey(szUpgradeCode, &hkey, FALSE);
if (r != ERROR_SUCCESS)
return ERROR_NO_MORE_ITEMS;
r = RegEnumValueW(hkey, iProductIndex, szKeyName, &dwSize, NULL, NULL, NULL, NULL);
if( r == ERROR_SUCCESS )
unsquash_guid(szKeyName, lpProductBuf);
RegCloseKey(hkey);
return r;
}
示例6: RegOpenKeyExW
Value Key::value( int nIdx ) const
{
HKEY hKey;
LONG lRtn = RegOpenKeyExW( m_hRootKey, m_wsPath.c_str(),
0, KEY_READ, &hKey );
if (lRtn != ERROR_SUCCESS) {
BP_THROW( "RegOpenKeyExW(" + wideToUtf8(m_wsPath)
+ ") returned: " + bp::conv::toString( lRtn ) );
}
// TODO: could use RegQueryInfo to get required buf size.
const int knBufSize = 1000;
wchar_t szValName[knBufSize];
DWORD dwBufSize = knBufSize;
DWORD dwType;
lRtn = RegEnumValueW( hKey, nIdx, szValName, &dwBufSize,
NULL, &dwType, NULL, NULL );
if (lRtn != ERROR_SUCCESS) {
BP_THROW( "RegEnumValueW(" + wideToUtf8(m_wsPath) + ", "
+ bp::conv::toString( nIdx )
+ ") returned: " + bp::conv::toString( lRtn ) );
}
return Value( wideToUtf8( szValName ), this, dwType );
}
示例7: MSACM_RegisterAllDrivers
/***********************************************************************
* MSACM_RegisterAllDrivers()
*/
void MSACM_RegisterAllDrivers(void)
{
static const WCHAR msacm32[] = {'m','s','a','c','m','3','2','.','d','l','l','\0'};
static const WCHAR msacmW[] = {'M','S','A','C','M','.'};
static const WCHAR drv32[] = {'d','r','i','v','e','r','s','3','2','\0'};
static const WCHAR sys[] = {'s','y','s','t','e','m','.','i','n','i','\0'};
static const WCHAR drvkey[] = {'S','o','f','t','w','a','r','e','\\',
'M','i','c','r','o','s','o','f','t','\\',
'W','i','n','d','o','w','s',' ','N','T','\\',
'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\',
'D','r','i','v','e','r','s','3','2','\0'};
DWORD i, cnt, bufLen, lRet, type;
WCHAR buf[2048], valname[64], *name, *s;
FILETIME lastWrite;
HKEY hKey;
/* FIXME: What if the user edits system.ini while the program is running?
* Does Windows handle that? */
if (MSACM_pFirstACMDriverID) return;
lRet = RegOpenKeyExW(HKEY_LOCAL_MACHINE, drvkey, 0, KEY_QUERY_VALUE, &hKey);
if (lRet == ERROR_SUCCESS) {
RegQueryInfoKeyW( hKey, 0, 0, 0, &cnt, 0, 0, 0, 0, 0, 0, 0);
for (i = 0; i < cnt; i++) {
bufLen = sizeof(buf) / sizeof(buf[0]);
lRet = RegEnumKeyExW(hKey, i, buf, &bufLen, 0, 0, 0, &lastWrite);
if (lRet != ERROR_SUCCESS) continue;
if (strncmpiW(buf, msacmW, sizeof(msacmW)/sizeof(msacmW[0]))) continue;
if (!(name = strchrW(buf, '='))) continue;
*name = 0;
MSACM_RegisterDriver(buf, name + 1, 0);
}
i = 0;
cnt = sizeof(valname) / sizeof(*valname);
bufLen = sizeof(buf);
while(RegEnumValueW(hKey, i, valname, &cnt, 0,
&type, (BYTE*)buf, &bufLen) == ERROR_SUCCESS){
if(!strncmpiW(valname, msacmW, sizeof(msacmW) / sizeof(*msacmW)))
MSACM_RegisterDriver(valname, buf, 0);
++i;
}
RegCloseKey( hKey );
}
if (GetPrivateProfileSectionW(drv32, buf, sizeof(buf)/sizeof(buf[0]), sys))
{
for(s = buf; *s; s += strlenW(s) + 1)
{
if (strncmpiW(s, msacmW, sizeof(msacmW)/sizeof(msacmW[0]))) continue;
if (!(name = strchrW(s, '='))) continue;
*name = 0;
MSACM_RegisterDriver(s, name + 1, 0);
*name = '=';
}
}
MSACM_ReorderDriversByPriority();
MSACM_RegisterDriver(msacm32, msacm32, 0);
}
示例8: SQLGetInstalledDriversW
/* This is implemented sensibly rather than according to exact conformance to Microsoft's buggy implementations
* e.g. The Microsoft one occasionally actually adds a third nul character (possibly beyond the buffer).
* e.g. If the key has no drivers then version 3.525.1117.0 does not modify the buffer at all, not even a nul character.
*/
BOOL WINAPI SQLGetInstalledDriversW(LPWSTR lpszBuf, WORD cbBufMax,
WORD *pcbBufOut)
{
HKEY hDrivers; /* Registry handle to the Drivers key */
LONG reg_ret; /* Return code from registry functions */
BOOL success = FALSE; /* The value we will return */
clear_errors();
TRACE("%p %d %p\n", lpszBuf, cbBufMax, pcbBufOut);
if (!lpszBuf || cbBufMax == 0)
{
push_error(ODBC_ERROR_INVALID_BUFF_LEN, odbc_error_invalid_buff_len);
}
else if ((reg_ret = RegOpenKeyExW (HKEY_LOCAL_MACHINE /* The drivers does not depend on the config mode */,
drivers_key, 0, KEY_READ /* Maybe overkill */,
&hDrivers)) == ERROR_SUCCESS)
{
DWORD index = 0;
cbBufMax--;
success = TRUE;
while (cbBufMax > 0)
{
DWORD size_name;
size_name = cbBufMax;
if ((reg_ret = RegEnumValueW(hDrivers, index, lpszBuf, &size_name, NULL, NULL, NULL, NULL)) == ERROR_SUCCESS)
{
index++;
assert (size_name < cbBufMax && *(lpszBuf + size_name) == 0);
size_name++;
cbBufMax-= size_name;
lpszBuf+=size_name;
}
else
{
if (reg_ret != ERROR_NO_MORE_ITEMS)
{
success = FALSE;
push_error(ODBC_ERROR_GENERAL_ERR, odbc_error_general_err);
}
break;
}
}
*lpszBuf = 0;
if ((reg_ret = RegCloseKey (hDrivers)) != ERROR_SUCCESS)
TRACE ("Error %d closing ODBC Drivers key\n", reg_ret);
}
else
{
/* MSDN states that it returns failure with COMPONENT_NOT_FOUND in this case.
* Version 3.525.1117.0 (Windows 2000) does not; it actually returns success.
* I doubt if it will actually be an issue.
*/
push_error(ODBC_ERROR_COMPONENT_NOT_FOUND, odbc_error_component_not_found);
}
return success;
}
示例9: ProcessImplicitLayersKey
bool ProcessImplicitLayersKey(HKEY key, const std::wstring &path,
std::vector<std::string> *otherJSONs, bool deleteOthers)
{
bool thisRegistered = false;
wchar_t name[1024] = {};
DWORD nameSize = 1024;
DWORD idx = 0;
LONG ret = RegEnumValueW(key, idx++, name, &nameSize, NULL, NULL, NULL, NULL);
std::wstring myJSON = path;
for(size_t i = 0; i < myJSON.size(); i++)
myJSON[i] = towlower(myJSON[i]);
while(ret == ERROR_SUCCESS)
{
// convert the name here so we preserve casing
std::string utf8name = StringFormat::Wide2UTF8(name);
for(DWORD i = 0; i <= nameSize && name[i]; i++)
name[i] = towlower(name[i]);
if(wcscmp(name, myJSON.c_str()) == 0)
{
thisRegistered = true;
}
else if(wcsstr(name, L"renderdoc.json") != NULL)
{
if(otherJSONs)
otherJSONs->push_back(utf8name);
if(deleteOthers)
RegDeleteValueW(key, name);
}
nameSize = 1024;
ret = RegEnumValueW(key, idx++, name, &nameSize, NULL, NULL, NULL, NULL);
}
return thisRegistered;
}
示例10: DoLoadItems
BOOL DoLoadItems(void)
{
ITEMVECTOR Items;
HKEY hKey = NULL;
RegOpenKeyExW(HKEY_LOCAL_MACHINE, g_pszKey, 0, KEY_READ, &hKey);
if (hKey == NULL)
return FALSE;
WCHAR szName[MAX_STRING], szValue[MAX_STRING];
DWORD cbName, cbValue;
for (DWORD dwIndex = 0; ; ++dwIndex)
{
cbName = sizeof(szName);
cbValue = sizeof(szValue);
LONG Error = RegEnumValueW(hKey, dwIndex, szName, &cbName,
NULL, NULL, (LPBYTE)szValue, &cbValue);
if (Error != ERROR_SUCCESS)
break;
BYTE CharSet1 = DEFAULT_CHARSET, CharSet2 = DEFAULT_CHARSET;
LPWSTR pch;
pch = wcsrchr(szName, L',');
if (pch)
{
*pch = 0;
CharSet1 = (BYTE)_wtoi(pch + 1);
}
pch = wcsrchr(szValue, L',');
if (pch)
{
*pch = 0;
CharSet2 = (BYTE)_wtoi(pch + 1);
}
ITEM Item(szName, szValue, CharSet1, CharSet2);
trim(Item.m_Name);
trim(Item.m_Substitute);
Items.push_back(Item);
}
RegCloseKey(hKey);
g_Items = Items;
LV_AddItems(g_hListView);
DoSort(0, TRUE);
g_bModified = FALSE;
g_bNeedsReboot = FALSE;
return !g_Items.empty();
}
示例11: enum_values
static HRESULT enum_values( HKEY root, const WCHAR *subkey, VARIANT *names, VARIANT *types, VARIANT *retval )
{
HKEY hkey = NULL;
HRESULT hr = S_OK;
BSTR *value_names = NULL;
DWORD count, buflen, len, *value_types = NULL;
LONG res, i = 0;
WCHAR *buf = NULL;
TRACE("%p, %s\n", root, debugstr_w(subkey));
if ((res = RegOpenKeyExW( root, subkey, 0, KEY_QUERY_VALUE, &hkey ))) goto done;
if ((res = RegQueryInfoKeyW( hkey, NULL, NULL, NULL, NULL, NULL, NULL, &count, &buflen, NULL, NULL, NULL )))
goto done;
hr = E_OUTOFMEMORY;
if (!(buf = heap_alloc( (buflen + 1) * sizeof(WCHAR) ))) goto done;
if (!(value_names = heap_alloc( count * sizeof(BSTR) ))) goto done;
if (!(value_types = heap_alloc( count * sizeof(DWORD) ))) goto done;
hr = S_OK;
for (;;)
{
len = buflen + 1;
res = RegEnumValueW( hkey, i, buf, &len, NULL, &value_types[i], NULL, NULL );
if (res == ERROR_NO_MORE_ITEMS)
{
if (i) res = ERROR_SUCCESS;
break;
}
if (res) break;
if (!(value_names[i] = SysAllocString( buf )))
{
for (i--; i >= 0; i--) SysFreeString( value_names[i] );
hr = ERROR_OUTOFMEMORY;
break;
}
i++;
}
if (hr == S_OK && !res)
{
hr = to_bstr_array( value_names, i, names );
if (hr == S_OK) hr = to_i4_array( value_types, i, types );
}
done:
set_variant( VT_UI4, res, NULL, retval );
RegCloseKey( hkey );
heap_free( value_names );
heap_free( value_types );
heap_free( buf );
return hr;
}
示例12: Win32U_RegEnumValue
LONG
Win32U_RegEnumValue(HKEY keyName, // IN
DWORD index, // IN
LPSTR valueName, // OUT: buffer
LPDWORD valueNameSize, // IN/OUT:
LPDWORD reserved, // IN: reserved
LPDWORD type, // OUT: can be NULL
LPBYTE data, // OUT: can be NULL
LPDWORD dataSize) // OUT: can be NULL
{
LONG ret;
utf16_t *valueNameW;
DWORD valueNameSizeW = REG_MAX_VALUE_NAME_LEN+1;
char *dataTemp = NULL;
DWORD dataSizeTemp = 0;
DWORD valueType;
valueNameW = Util_SafeCalloc(valueNameSizeW, sizeof *valueNameW);
if (data) {
ASSERT(dataSize != NULL);
dataSizeTemp = *dataSize * 2;
dataTemp = Util_SafeMalloc(dataSizeTemp);
}
ret = RegEnumValueW(keyName, index,
valueNameW, &valueNameSizeW /* # of characters */,
reserved, &valueType,
dataTemp, &dataSizeTemp /* # of bytes */);
if (ret != ERROR_NO_MORE_ITEMS) { /* valueName is valid */
/* Attempt to convert value name back to UTF-8 */
if (!Win32UCodeSetUtf16leToUtf8(valueNameW, valueNameSizeW * 2,
valueName, valueNameSize)) {
ret = ERROR_MORE_DATA;
}
}
ret = Win32UWriteBackRegData(dataTemp, dataSizeTemp, data, dataSize,
valueType, ret);
/* Write back the type information if asked for */
if (type) {
*type = valueType;
}
free(valueNameW);
free(dataTemp);
return ret;
}
示例13: set_registry_variables
static void set_registry_variables(WCHAR **env, HKEY hkey, DWORD type, BOOL set_path)
{
static const WCHAR SystemRootW[] = {'S','y','s','t','e','m','R','o','o','t',0};
static const WCHAR SystemDriveW[] = {'S','y','s','t','e','m','D','r','i','v','e',0};
static const WCHAR PATHW[] = {'P','A','T','H'};
UNICODE_STRING us_name, us_value;
WCHAR name[1024], value[1024];
DWORD ret, index, size;
for (index = 0; ; index++)
{
size = sizeof(name)/sizeof(WCHAR);
ret = RegEnumValueW(hkey, index, name, &size, NULL, NULL, NULL, NULL);
if (ret != ERROR_SUCCESS)
break;
if (!memicmpW(name, SystemRootW, sizeof(SystemRootW)/sizeof(WCHAR)))
continue;
if (!memicmpW(name, SystemDriveW, sizeof(SystemDriveW)/sizeof(WCHAR)))
continue;
RtlInitUnicodeString(&us_name, name);
us_value.Buffer = value;
us_value.MaximumLength = sizeof(value);
if (!memicmpW(name, PATHW, sizeof(PATHW)/sizeof(WCHAR)) &&
!RtlQueryEnvironmentVariable_U(*env, &us_name, &us_value))
{
if (!set_path)
continue;
size = strlenW(value)+1;
if (!get_reg_value(*env, hkey, name, value+size,
sizeof(value)-size*sizeof(WCHAR)))
continue;
value[size] = ';';
RtlInitUnicodeString(&us_value, value);
RtlSetEnvironmentVariable(env, &us_name, &us_value);
continue;
}
if (!get_reg_value(*env, hkey, name, value, sizeof(value)))
continue;
if(!value[0])
continue;
RtlInitUnicodeString(&us_value, value);
RtlSetEnvironmentVariable(env, &us_name, &us_value);
}
}
示例14: OnInitMenu
static void OnInitMenu(HWND hWnd)
{
LONG lResult;
HKEY hKey = NULL;
DWORD dwIndex, cbValueName, cbValueData, dwType;
WCHAR szValueName[256];
BYTE abValueData[256];
static int s_nFavoriteMenuSubPos = -1;
HMENU hMenu;
BOOL bDisplayedAny = FALSE;
/* Find Favorites menu and clear it out */
hMenu = GetSubMenu(GetMenu(hWnd), FAVORITES_MENU_POSITION);
if (!hMenu)
goto done;
if (s_nFavoriteMenuSubPos < 0)
{
s_nFavoriteMenuSubPos = GetMenuItemCount(hMenu);
}
else
{
while(RemoveMenu(hMenu, s_nFavoriteMenuSubPos, MF_BYPOSITION)) ;
}
lResult = RegOpenKeyW(HKEY_CURRENT_USER, s_szFavoritesRegKey, &hKey);
if (lResult != ERROR_SUCCESS)
goto done;
dwIndex = 0;
do
{
cbValueName = COUNT_OF(szValueName);
cbValueData = sizeof(abValueData);
lResult = RegEnumValueW(hKey, dwIndex, szValueName, &cbValueName, NULL, &dwType, abValueData, &cbValueData);
if ((lResult == ERROR_SUCCESS) && (dwType == REG_SZ))
{
if (!bDisplayedAny)
{
AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);
bDisplayedAny = TRUE;
}
AppendMenu(hMenu, 0, ID_FAVORITES_MIN + GetMenuItemCount(hMenu), szValueName);
}
dwIndex++;
}
while(lResult == ERROR_SUCCESS);
done:
if (hKey)
RegCloseKey(hKey);
}
示例15: AddComponentCategories
static void AddComponentCategories(void)
{
TVINSERTSTRUCTW tvis;
HKEY hKey, hCurKey;
WCHAR keyName[MAX_LOAD_STRING];
WCHAR valName[MAX_LOAD_STRING];
WCHAR buffer[MAX_LOAD_STRING];
LONG lenBuffer;
DWORD lenBufferHlp;
DWORD lenValName;
int i=-1;
U(tvis).item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_CHILDREN;
U(tvis).item.cchTextMax = MAX_LOAD_STRING;
tvis.hInsertAfter = TVI_FIRST;
if(tree.hGBCC) tvis.hParent = tree.hGBCC;
else tvis.hParent = TVI_ROOT;
U(tvis).item.cChildren = 1;
if(RegOpenKeyW(HKEY_CLASSES_ROOT, wszComponentCategories, &hKey) != ERROR_SUCCESS)
return;
while(TRUE)
{
i++;
if(RegEnumKeyW(hKey, i, keyName, sizeof(keyName)/sizeof(keyName[0])) != ERROR_SUCCESS) break;
if(RegOpenKeyW(hKey, keyName, &hCurKey) != ERROR_SUCCESS) continue;
lenBuffer = sizeof(WCHAR[MAX_LOAD_STRING]);
lenBufferHlp = sizeof(WCHAR[MAX_LOAD_STRING]);
lenValName = sizeof(WCHAR[MAX_LOAD_STRING]);
if(RegQueryValueW(hCurKey, NULL, buffer, &lenBuffer) == ERROR_SUCCESS && *buffer)
U(tvis).item.pszText = buffer;
else if(RegEnumValueW(hCurKey, 0, valName, &lenValName, NULL, NULL,
(LPBYTE)buffer, &lenBufferHlp) == ERROR_SUCCESS && *buffer)
U(tvis).item.pszText = buffer;
else continue;
RegCloseKey(hCurKey);
U(tvis).item.lParam = CreateITEM_INFO(REGTOP, keyName, keyName, NULL);
SendMessageW(globals.hTree, TVM_INSERTITEMW, 0, (LPARAM)&tvis);
}
RegCloseKey(hKey);
SendMessageW(globals.hTree, TVM_SORTCHILDREN, FALSE, (LPARAM)tree.hGBCC);
}