ReactOS 0.4.17-dev-343-gb35a9be
kernelbase.c File Reference
#include "windef.h"
#include "winbase.h"
#include "wininet.h"
#include "shlobj.h"
#include "winternl.h"
#include "shlwapi.h"
#include "intshcut.h"
#include "mlang.h"
#include <shlwapi_undoc.h>
#include "wine/unicode.h"
#include "wine/debug.h"
Include dependency graph for kernelbase.c:

Go to the source code of this file.

Classes

struct  SHUSKEY
 

Macros

#define COBJMACROS
 
#define NO_SHLWAPI_STREAM
 
#define REG_HKCU   TRUE
 
#define REG_HKLM   FALSE
 

Typedefs

typedef struct SHUSKEYLPSHUSKEY
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (kernelbase)
 
static WCHARheap_strdupAtoW (LPCSTR str)
 
HRESULT WINAPI GetAcceptLanguagesW (LPWSTR langbuf, LPDWORD buflen)
 
HRESULT WINAPI GetAcceptLanguagesA (LPSTR langbuf, LPDWORD buflen)
 
BOOL WINAPI IsCharBlankW (WCHAR wc)
 
BOOL WINAPI IsCharPunctW (WCHAR wc)
 
BOOL WINAPI IsCharCntrlW (WCHAR wc)
 
BOOL WINAPI IsCharDigitW (WCHAR wc)
 
BOOL WINAPI IsCharXDigitW (WCHAR wc)
 
BOOL WINAPI IsCharSpaceA (CHAR c)
 
BOOL WINAPI IsCharSpaceW (WCHAR wc)
 
HRESULT WINAPI QISearch (void *base, const QITAB *table, REFIID riid, void **ppv)
 
static HKEY REG_GetHKEYFromHUSKEY (HUSKEY hUSKey, BOOL which)
 
LONG WINAPI SHRegOpenUSKeyA (LPCSTR Path, REGSAM AccessType, HUSKEY hRelativeUSKey, PHUSKEY phNewUSKey, BOOL fIgnoreHKCU)
 
LONG WINAPI SHRegOpenUSKeyW (LPCWSTR Path, REGSAM AccessType, HUSKEY hRelativeUSKey, PHUSKEY phNewUSKey, BOOL fIgnoreHKCU)
 
LONG WINAPI SHRegCloseUSKey (HUSKEY hUSKey)
 
LONG WINAPI SHRegCreateUSKeyA (LPCSTR path, REGSAM samDesired, HUSKEY relative_key, PHUSKEY new_uskey, DWORD flags)
 
LONG WINAPI SHRegCreateUSKeyW (LPCWSTR path, REGSAM samDesired, HUSKEY relative_key, PHUSKEY new_uskey, DWORD flags)
 
LONG WINAPI SHRegDeleteEmptyUSKeyA (HUSKEY hUSKey, LPCSTR pszValue, SHREGDEL_FLAGS delRegFlags)
 
LONG WINAPI SHRegDeleteEmptyUSKeyW (HUSKEY hUSKey, LPCWSTR pszValue, SHREGDEL_FLAGS delRegFlags)
 
LONG WINAPI SHRegDeleteUSValueA (HUSKEY hUSKey, LPCSTR pszValue, SHREGDEL_FLAGS delRegFlags)
 
LONG WINAPI SHRegDeleteUSValueW (HUSKEY hUSKey, LPCWSTR pszValue, SHREGDEL_FLAGS delRegFlags)
 
LONG WINAPI SHRegEnumUSValueA (HUSKEY hUSKey, DWORD dwIndex, LPSTR pszValueName, LPDWORD pcchValueNameLen, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData, SHREGENUM_FLAGS enumRegFlags)
 
LONG WINAPI SHRegEnumUSValueW (HUSKEY hUSKey, DWORD dwIndex, LPWSTR pszValueName, LPDWORD pcchValueNameLen, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData, SHREGENUM_FLAGS enumRegFlags)
 
LONG WINAPI SHRegQueryUSValueA (HUSKEY hUSKey, LPCSTR pszValue, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData, BOOL fIgnoreHKCU, LPVOID pvDefaultData, DWORD dwDefaultDataSize)
 
LONG WINAPI SHRegQueryUSValueW (HUSKEY hUSKey, LPCWSTR pszValue, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData, BOOL fIgnoreHKCU, LPVOID pvDefaultData, DWORD dwDefaultDataSize)
 
LONG WINAPI SHRegGetUSValueA (LPCSTR pSubKey, LPCSTR pValue, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData, BOOL flagIgnoreHKCU, LPVOID pDefaultData, DWORD wDefaultDataSize)
 
LONG WINAPI SHRegGetUSValueW (LPCWSTR pSubKey, LPCWSTR pValue, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData, BOOL flagIgnoreHKCU, LPVOID pDefaultData, DWORD wDefaultDataSize)
 
LONG WINAPI SHRegSetUSValueA (LPCSTR pszSubKey, LPCSTR pszValue, DWORD dwType, LPVOID pvData, DWORD cbData, DWORD dwFlags)
 
LONG WINAPI SHRegSetUSValueW (LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwType, LPVOID pvData, DWORD cbData, DWORD dwFlags)
 
BOOL WINAPI SHRegGetBoolUSValueA (LPCSTR pszSubKey, LPCSTR pszValue, BOOL fIgnoreHKCU, BOOL fDefault)
 
BOOL WINAPI SHRegGetBoolUSValueW (LPCWSTR pszSubKey, LPCWSTR pszValue, BOOL fIgnoreHKCU, BOOL fDefault)
 
LONG WINAPI SHRegQueryInfoUSKeyA (HUSKEY hUSKey, LPDWORD pcSubKeys, LPDWORD pcchMaxSubKeyLen, LPDWORD pcValues, LPDWORD pcchMaxValueNameLen, SHREGENUM_FLAGS enumRegFlags)
 
LONG WINAPI SHRegQueryInfoUSKeyW (HUSKEY hUSKey, LPDWORD pcSubKeys, LPDWORD pcchMaxSubKeyLen, LPDWORD pcValues, LPDWORD pcchMaxValueNameLen, SHREGENUM_FLAGS enumRegFlags)
 
LONG WINAPI SHRegEnumUSKeyA (HUSKEY hUSKey, DWORD dwIndex, LPSTR pszName, LPDWORD pcchValueNameLen, SHREGENUM_FLAGS enumRegFlags)
 
LONG WINAPI SHRegEnumUSKeyW (HUSKEY hUSKey, DWORD dwIndex, LPWSTR pszName, LPDWORD pcchValueNameLen, SHREGENUM_FLAGS enumRegFlags)
 
LONG WINAPI SHRegWriteUSValueA (HUSKEY hUSKey, LPCSTR pszValue, DWORD dwType, LPVOID pvData, DWORD cbData, DWORD dwFlags)
 
LONG WINAPI SHRegWriteUSValueW (HUSKEY hUSKey, LPCWSTR pszValue, DWORD dwType, LPVOID pvData, DWORD cbData, DWORD dwFlags)
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 24 of file kernelbase.c.

◆ NO_SHLWAPI_STREAM

#define NO_SHLWAPI_STREAM

Definition at line 30 of file kernelbase.c.

◆ REG_HKCU

#define REG_HKCU   TRUE

Definition at line 349 of file kernelbase.c.

◆ REG_HKLM

#define REG_HKLM   FALSE

Definition at line 350 of file kernelbase.c.

Typedef Documentation

◆ LPSHUSKEY

Function Documentation

◆ GetAcceptLanguagesA()

HRESULT WINAPI GetAcceptLanguagesA ( LPSTR  langbuf,
LPDWORD  buflen 
)

Definition at line 130 of file kernelbase.c.

131{
132 WCHAR *langbufW;
133 DWORD buflenW, convlen;
135
136 TRACE("(%p, %p) *%p: %d\n", langbuf, buflen, buflen, buflen ? *buflen : -1);
137
138 if(!langbuf || !buflen || !*buflen) return E_FAIL;
139
140 buflenW = *buflen;
141 langbufW = HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR) * buflenW);
142 retval = GetAcceptLanguagesW(langbufW, &buflenW);
143
144 if (retval == S_OK)
145 {
146 convlen = WideCharToMultiByte(CP_ACP, 0, langbufW, -1, langbuf, *buflen, NULL, NULL);
147 convlen--; /* do not count the terminating 0 */
148 }
149 else /* copy partial string anyway */
150 {
151 convlen = WideCharToMultiByte(CP_ACP, 0, langbufW, *buflen, langbuf, *buflen, NULL, NULL);
152 if (convlen < *buflen)
153 {
154 langbuf[convlen] = 0;
155 convlen--; /* do not count the terminating 0 */
156 }
157 else
158 {
159 convlen = *buflen;
160 }
161 }
162 *buflen = buflenW ? convlen : 0;
163
164 HeapFree(GetProcessHeap(), 0, langbufW);
165 return retval;
166}
#define E_FAIL
Definition: ddrawi.h:102
#define NULL
Definition: types.h:112
#define GetProcessHeap()
Definition: compat.h:736
#define CP_ACP
Definition: compat.h:109
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define WideCharToMultiByte
Definition: compat.h:111
unsigned long DWORD
Definition: ntddk_ex.h:95
#define S_OK
Definition: intsafe.h:52
HRESULT WINAPI GetAcceptLanguagesW(LPWSTR langbuf, LPDWORD buflen)
Definition: kernelbase.c:71
short WCHAR
Definition: pedump.c:58
#define TRACE(s)
Definition: solgame.cpp:4
int retval
Definition: wcstombs.cpp:91

◆ GetAcceptLanguagesW()

HRESULT WINAPI GetAcceptLanguagesW ( LPWSTR  langbuf,
LPDWORD  buflen 
)

Definition at line 71 of file kernelbase.c.

72{
73 static const WCHAR szkeyW[] = {
74 'S','o','f','t','w','a','r','e','\\',
75 'M','i','c','r','o','s','o','f','t','\\',
76 'I','n','t','e','r','n','e','t',' ','E','x','p','l','o','r','e','r','\\',
77 'I','n','t','e','r','n','a','t','i','o','n','a','l',0};
78 static const WCHAR valueW[] = {
79 'A','c','c','e','p','t','L','a','n','g','u','a','g','e',0};
80 DWORD mystrlen, mytype;
81 DWORD len;
82 HKEY mykey;
83 LCID mylcid;
84 WCHAR *mystr;
85 LONG lres;
86
87 TRACE("(%p, %p) *%p: %d\n", langbuf, buflen, buflen, buflen ? *buflen : -1);
88
89 if(!langbuf || !buflen || !*buflen)
90 return E_FAIL;
91
92 mystrlen = (*buflen > 20) ? *buflen : 20 ;
93 len = mystrlen * sizeof(WCHAR);
94 mystr = HeapAlloc(GetProcessHeap(), 0, len);
95 mystr[0] = 0;
96 RegOpenKeyW(HKEY_CURRENT_USER, szkeyW, &mykey);
97 lres = RegQueryValueExW(mykey, valueW, 0, &mytype, (PBYTE)mystr, &len);
98 RegCloseKey(mykey);
99 len = lstrlenW(mystr);
100
101 if (!lres && (*buflen > len)) {
102 lstrcpyW(langbuf, mystr);
103 *buflen = len;
104 HeapFree(GetProcessHeap(), 0, mystr);
105 return S_OK;
106 }
107
108 /* Did not find a value in the registry or the user buffer is too small */
109 mylcid = GetUserDefaultLCID();
110 LcidToRfc1766W(mylcid, mystr, mystrlen);
111 len = lstrlenW(mystr);
112
113 memcpy( langbuf, mystr, min(*buflen, len+1)*sizeof(WCHAR) );
114 HeapFree(GetProcessHeap(), 0, mystr);
115
116 if (*buflen > len) {
117 *buflen = len;
118 return S_OK;
119 }
120
121 *buflen = 0;
123}
#define RegCloseKey(hKey)
Definition: registry.h:49
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3268
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
#define lstrcpyW
Definition: compat.h:749
#define lstrlenW
Definition: compat.h:750
LCID WINAPI GetUserDefaultLCID(void)
Definition: locale.c:1216
HRESULT WINAPI LcidToRfc1766W(LCID lcid, LPWSTR pszRfc1766, INT nChar)
Definition: mlang.c:1247
GLenum GLsizei len
Definition: glext.h:6722
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static WCHAR valueW[]
Definition: reg.c:1394
#define min(a, b)
Definition: monoChain.cc:55
BYTE * PBYTE
Definition: pedump.c:66
long LONG
Definition: pedump.c:60
DWORD LCID
Definition: nls.h:13
#define E_NOT_SUFFICIENT_BUFFER
Definition: winerror.h:3437
#define HKEY_CURRENT_USER
Definition: winreg.h:11

Referenced by GetAcceptLanguagesA().

◆ heap_strdupAtoW()

static WCHAR * heap_strdupAtoW ( LPCSTR  str)
inlinestatic

Definition at line 40 of file kernelbase.c.

41{
42 WCHAR *ret = NULL;
43
44 if (str)
45 {
47 ret = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR));
48 if (ret)
50 }
51
52 return ret;
53}
#define MultiByteToWideChar
Definition: compat.h:110
return ret
Definition: mutex.c:146
const WCHAR * str

◆ IsCharBlankW()

BOOL WINAPI IsCharBlankW ( WCHAR  wc)

Definition at line 181 of file kernelbase.c.

182{
183 WORD CharType;
184
185 return GetStringTypeW(CT_CTYPE1, &wc, 1, &CharType) && (CharType & C1_BLANK);
186}
BOOL WINAPI GetStringTypeW(DWORD type, LPCWSTR src, INT count, LPWORD chartype)
Definition: locale.c:3098
unsigned short WORD
Definition: ntddk_ex.h:93
#define C1_BLANK
Definition: unicode.h:37
#define CT_CTYPE1
Definition: winnls.h:265

◆ IsCharCntrlW()

BOOL WINAPI IsCharCntrlW ( WCHAR  wc)

Definition at line 219 of file kernelbase.c.

220{
221 WORD CharType;
222
223 return GetStringTypeW(CT_CTYPE1, &wc, 1, &CharType) && (CharType & C1_CNTRL);
224}
#define C1_CNTRL
Definition: unicode.h:36

◆ IsCharDigitW()

BOOL WINAPI IsCharDigitW ( WCHAR  wc)

Definition at line 238 of file kernelbase.c.

239{
240 WORD CharType;
241
242 return GetStringTypeW(CT_CTYPE1, &wc, 1, &CharType) && (CharType & C1_DIGIT);
243}
#define C1_DIGIT
Definition: unicode.h:33

◆ IsCharPunctW()

BOOL WINAPI IsCharPunctW ( WCHAR  wc)

Definition at line 200 of file kernelbase.c.

201{
202 WORD CharType;
203
204 return GetStringTypeW(CT_CTYPE1, &wc, 1, &CharType) && (CharType & C1_PUNCT);
205}
#define C1_PUNCT
Definition: unicode.h:35

◆ IsCharSpaceA()

BOOL WINAPI IsCharSpaceA ( CHAR  c)

Definition at line 264 of file kernelbase.c.

265{
266 WORD CharType;
267 return GetStringTypeA(GetSystemDefaultLCID(), CT_CTYPE1, &c, 1, &CharType) && (CharType & C1_SPACE);
268}
BOOL WINAPI GetStringTypeA(LCID locale, DWORD type, LPCSTR src, INT count, LPWORD chartype)
Definition: locale.c:3212
LCID WINAPI GetSystemDefaultLCID(void)
Definition: locale.c:1235
const GLubyte * c
Definition: glext.h:8905
#define C1_SPACE
Definition: unicode.h:34

◆ IsCharSpaceW()

BOOL WINAPI IsCharSpaceW ( WCHAR  wc)

Definition at line 282 of file kernelbase.c.

283{
284 WORD CharType;
285
286 return GetStringTypeW(CT_CTYPE1, &wc, 1, &CharType) && (CharType & C1_SPACE);
287}

◆ IsCharXDigitW()

BOOL WINAPI IsCharXDigitW ( WCHAR  wc)

Definition at line 257 of file kernelbase.c.

258{
259 WORD CharType;
260
261 return GetStringTypeW(CT_CTYPE1, &wc, 1, &CharType) && (CharType & C1_XDIGIT);
262}
#define C1_XDIGIT
Definition: unicode.h:38

◆ QISearch()

HRESULT WINAPI QISearch ( void base,
const QITAB table,
REFIID  riid,
void **  ppv 
)

Definition at line 298 of file kernelbase.c.

303{
304 HRESULT ret;
305 IUnknown *a_vtbl;
306 const QITAB *xmove;
307
308 TRACE("(%p %p %s %p)\n", base, table, debugstr_guid(riid), ppv);
309 if (ppv) {
310 xmove = table;
311 while (xmove->piid) {
312 TRACE("trying (offset %d) %s\n", xmove->dwOffset, debugstr_guid(xmove->piid));
313 if (IsEqualIID(riid, xmove->piid)) {
314 a_vtbl = (IUnknown*)(xmove->dwOffset + (LPBYTE)base);
315 TRACE("matched, returning (%p)\n", a_vtbl);
316 *ppv = a_vtbl;
317 IUnknown_AddRef(a_vtbl);
318 return S_OK;
319 }
320 xmove++;
321 }
322
324 a_vtbl = (IUnknown*)(table->dwOffset + (LPBYTE)base);
325 TRACE("returning first for IUnknown (%p)\n", a_vtbl);
326 *ppv = a_vtbl;
327 IUnknown_AddRef(a_vtbl);
328 return S_OK;
329 }
330 *ppv = 0;
332 } else
333 ret = E_POINTER;
334
335 TRACE("-- 0x%08x\n", ret);
336 return ret;
337}
const GUID IID_IUnknown
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
Definition: shlwapi.h:139
const IID * piid
Definition: shlwapi.h:140
DWORD dwOffset
Definition: shlwapi.h:142
unsigned char * LPBYTE
Definition: typedefs.h:53
#define E_NOINTERFACE
Definition: winerror.h:3479
#define E_POINTER
Definition: winerror.h:3480

◆ REG_GetHKEYFromHUSKEY()

static HKEY REG_GetHKEYFromHUSKEY ( HUSKEY  hUSKey,
BOOL  which 
)
static

Definition at line 357 of file kernelbase.c.

358{
359 HKEY test = hUSKey;
360 LPSHUSKEY mihk = hUSKey;
361
362 if ((test == HKEY_CLASSES_ROOT) ||
364 (test == HKEY_CURRENT_USER) ||
365 (test == HKEY_DYN_DATA) ||
368/* FIXME: need to define for Win2k, ME, XP
369 * (test == HKEY_PERFORMANCE_TEXT) ||
370 * (test == HKEY_PERFORMANCE_NLSTEXT) ||
371 */
372 (test == HKEY_USERS)) return test;
373 if (which == REG_HKCU) return mihk->HKCUkey;
374 return mihk->HKLMkey;
375}
#define REG_HKCU
Definition: kernelbase.c:349
#define test
Definition: rosglue.h:37
HKEY HKCUkey
Definition: kernelbase.c:342
HKEY HKLMkey
Definition: kernelbase.c:344
static GLenum which
Definition: wgl_font.c:159
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define HKEY_CURRENT_CONFIG
Definition: winreg.h:15
#define HKEY_DYN_DATA
Definition: winreg.h:16
#define HKEY_PERFORMANCE_DATA
Definition: winreg.h:14
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define HKEY_USERS
Definition: winreg.h:13

Referenced by SHRegCreateUSKeyW(), SHRegEnumUSKeyA(), SHRegEnumUSKeyW(), SHRegEnumUSValueA(), SHRegEnumUSValueW(), SHRegOpenUSKeyW(), SHRegQueryInfoUSKeyA(), SHRegQueryInfoUSKeyW(), SHRegQueryUSValueA(), and SHRegQueryUSValueW().

◆ SHRegCloseUSKey()

LONG WINAPI SHRegCloseUSKey ( HUSKEY  hUSKey)

Definition at line 478 of file kernelbase.c.

480{
481 LPSHUSKEY hKey = hUSKey;
483
484 if (!hKey)
486
487 if (hKey->HKCUkey)
488 ret = RegCloseKey(hKey->HKCUkey);
489 if (hKey->HKCUstart && hKey->HKCUstart != HKEY_CURRENT_USER)
490 ret = RegCloseKey(hKey->HKCUstart);
491 if (hKey->HKLMkey)
492 ret = RegCloseKey(hKey->HKLMkey);
493 if (hKey->HKLMstart && hKey->HKLMstart != HKEY_LOCAL_MACHINE)
494 ret = RegCloseKey(hKey->HKLMstart);
495
497 return ret;
498}
#define ERROR_SUCCESS
Definition: deptool.c:10
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
FxAutoRegKey hKey

Referenced by SHRegGetUSValueA(), SHRegGetUSValueW(), SHRegOpenUSKeyW(), SHRegSetUSValueA(), and SHRegSetUSValueW().

◆ SHRegCreateUSKeyA()

LONG WINAPI SHRegCreateUSKeyA ( LPCSTR  path,
REGSAM  samDesired,
HUSKEY  relative_key,
PHUSKEY  new_uskey,
DWORD  flags 
)

Definition at line 505 of file kernelbase.c.

507{
508 WCHAR *pathW;
509 LONG ret;
510
511 TRACE("(%s, 0x%08x, %p, %p, 0x%08x)\n", debugstr_a(path), samDesired, relative_key,
512 new_uskey, flags);
513
514 if (path)
515 {
516 INT len = MultiByteToWideChar(CP_ACP, 0, path, -1, NULL, 0);
517 pathW = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR));
518 if (!pathW)
521 }
522 else
523 pathW = NULL;
524
525 ret = SHRegCreateUSKeyW(pathW, samDesired, relative_key, new_uskey, flags);
527 return ret;
528}
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
GLbitfield flags
Definition: glext.h:7161
#define debugstr_a
Definition: kernel32.h:31
LONG WINAPI SHRegCreateUSKeyW(LPCWSTR path, REGSAM samDesired, HUSKEY relative_key, PHUSKEY new_uskey, DWORD flags)
Definition: kernelbase.c:546
static const WCHAR pathW[]
Definition: path.c:2368
int32_t INT
Definition: typedefs.h:58

◆ SHRegCreateUSKeyW()

LONG WINAPI SHRegCreateUSKeyW ( LPCWSTR  path,
REGSAM  samDesired,
HUSKEY  relative_key,
PHUSKEY  new_uskey,
DWORD  flags 
)

Definition at line 546 of file kernelbase.c.

548{
550 SHUSKEY *ret_key;
551
552 TRACE("(%s, 0x%08x, %p, %p, 0x%08x)\n", debugstr_w(path), samDesired,
553 relative_key, new_uskey, flags);
554
555 if (!new_uskey) return ERROR_INVALID_PARAMETER;
556
557 *new_uskey = NULL;
558
560 {
561 FIXME("unsupported flags 0x%08x\n", flags);
562 return ERROR_SUCCESS;
563 }
564
565 ret_key = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ret_key));
566 lstrcpynW(ret_key->lpszPath, path, sizeof(ret_key->lpszPath)/sizeof(WCHAR));
567
568 if (relative_key)
569 {
572 }
573 else
574 {
575 ret_key->HKCUstart = HKEY_CURRENT_USER;
576 ret_key->HKLMstart = HKEY_LOCAL_MACHINE;
577 }
578
580 {
581 ret = RegCreateKeyExW(ret_key->HKCUstart, path, 0, NULL, 0, samDesired, NULL, &ret_key->HKCUkey, NULL);
582 if (ret == ERROR_SUCCESS)
583 *new_uskey = ret_key;
584 else
585 HeapFree(GetProcessHeap(), 0, ret_key);
586 }
587
588 return ret;
589}
#define FIXME(fmt,...)
Definition: precomp.h:53
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1096
#define ERROR_CALL_NOT_IMPLEMENTED
Definition: compat.h:102
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
#define lstrcpynW
Definition: compat.h:738
HKEY WINAPI SHRegDuplicateHKey(HKEY hKey)
Definition: main.c:1828
#define debugstr_w
Definition: kernel32.h:32
static HKEY REG_GetHKEYFromHUSKEY(HUSKEY hUSKey, BOOL which)
Definition: kernelbase.c:357
#define REG_HKLM
Definition: kernelbase.c:350
#define SHREGSET_FORCE_HKCU
Definition: shlwapi.h:720
WCHAR lpszPath[MAX_PATH]
Definition: kernelbase.c:345
HKEY HKLMstart
Definition: kernelbase.c:343
HKEY HKCUstart
Definition: kernelbase.c:341

Referenced by SHRegCreateUSKeyA().

◆ SHRegDeleteEmptyUSKeyA()

LONG WINAPI SHRegDeleteEmptyUSKeyA ( HUSKEY  hUSKey,
LPCSTR  pszValue,
SHREGDEL_FLAGS  delRegFlags 
)

Definition at line 606 of file kernelbase.c.

607{
608 FIXME("(%p, %s, 0x%08x) stub\n", hUSKey, debugstr_a(pszValue), delRegFlags);
609 return ERROR_SUCCESS;
610}
_In_opt_ LPCSTR _In_opt_ LPCSTR pszValue
Definition: shlwapi.h:783

◆ SHRegDeleteEmptyUSKeyW()

LONG WINAPI SHRegDeleteEmptyUSKeyW ( HUSKEY  hUSKey,
LPCWSTR  pszValue,
SHREGDEL_FLAGS  delRegFlags 
)

Definition at line 617 of file kernelbase.c.

618{
619 FIXME("(%p, %s, 0x%08x) stub\n", hUSKey, debugstr_w(pszValue), delRegFlags);
620 return ERROR_SUCCESS;
621}

◆ SHRegDeleteUSValueA()

LONG WINAPI SHRegDeleteUSValueA ( HUSKEY  hUSKey,
LPCSTR  pszValue,
SHREGDEL_FLAGS  delRegFlags 
)

Definition at line 638 of file kernelbase.c.

639{
640 FIXME("(%p, %s, 0x%08x) stub\n", hUSKey, debugstr_a(pszValue), delRegFlags);
641 return ERROR_SUCCESS;
642}

◆ SHRegDeleteUSValueW()

LONG WINAPI SHRegDeleteUSValueW ( HUSKEY  hUSKey,
LPCWSTR  pszValue,
SHREGDEL_FLAGS  delRegFlags 
)

Definition at line 649 of file kernelbase.c.

650{
651 FIXME("(%p, %s, 0x%08x) stub\n", hUSKey, debugstr_w(pszValue), delRegFlags);
652 return ERROR_SUCCESS;
653}

◆ SHRegEnumUSKeyA()

LONG WINAPI SHRegEnumUSKeyA ( HUSKEY  hUSKey,
DWORD  dwIndex,
LPSTR  pszName,
LPDWORD  pcchValueNameLen,
SHREGENUM_FLAGS  enumRegFlags 
)

Definition at line 1208 of file kernelbase.c.

1214{
1215 HKEY dokey;
1216
1217 TRACE("(%p,%d,%p,%p(%d),%d)\n",
1218 hUSKey, dwIndex, pszName, pcchValueNameLen,
1219 *pcchValueNameLen, enumRegFlags);
1220
1221 if (((enumRegFlags == SHREGENUM_HKCU) ||
1222 (enumRegFlags == SHREGENUM_DEFAULT)) &&
1223 (dokey = REG_GetHKEYFromHUSKEY(hUSKey,REG_HKCU))) {
1224 return RegEnumKeyExA(dokey, dwIndex, pszName, pcchValueNameLen,
1225 0, 0, 0, 0);
1226 }
1227
1228 if (((enumRegFlags == SHREGENUM_HKLM) ||
1229 (enumRegFlags == SHREGENUM_DEFAULT)) &&
1230 (dokey = REG_GetHKEYFromHUSKEY(hUSKey,REG_HKLM))) {
1231 return RegEnumKeyExA(dokey, dwIndex, pszName, pcchValueNameLen,
1232 0, 0, 0, 0);
1233 }
1234 FIXME("no support for SHREGENUM_BOTH\n");
1236}
#define ERROR_INVALID_FUNCTION
Definition: dderror.h:6
LONG WINAPI RegEnumKeyExA(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
Definition: reg.c:2419
@ SHREGENUM_HKCU
Definition: shlwapi.h:734
@ SHREGENUM_DEFAULT
Definition: shlwapi.h:733
@ SHREGENUM_HKLM
Definition: shlwapi.h:735

◆ SHRegEnumUSKeyW()

LONG WINAPI SHRegEnumUSKeyW ( HUSKEY  hUSKey,
DWORD  dwIndex,
LPWSTR  pszName,
LPDWORD  pcchValueNameLen,
SHREGENUM_FLAGS  enumRegFlags 
)

Definition at line 1243 of file kernelbase.c.

1249{
1250 HKEY dokey;
1251
1252 TRACE("(%p,%d,%p,%p(%d),%d)\n",
1253 hUSKey, dwIndex, pszName, pcchValueNameLen,
1254 *pcchValueNameLen, enumRegFlags);
1255
1256 if (((enumRegFlags == SHREGENUM_HKCU) ||
1257 (enumRegFlags == SHREGENUM_DEFAULT)) &&
1258 (dokey = REG_GetHKEYFromHUSKEY(hUSKey,REG_HKCU))) {
1259 return RegEnumKeyExW(dokey, dwIndex, pszName, pcchValueNameLen,
1260 0, 0, 0, 0);
1261 }
1262
1263 if (((enumRegFlags == SHREGENUM_HKLM) ||
1264 (enumRegFlags == SHREGENUM_DEFAULT)) &&
1265 (dokey = REG_GetHKEYFromHUSKEY(hUSKey,REG_HKLM))) {
1266 return RegEnumKeyExW(dokey, dwIndex, pszName, pcchValueNameLen,
1267 0, 0, 0, 0);
1268 }
1269 FIXME("no support for SHREGENUM_BOTH\n");
1271}
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
Definition: reg.c:2504

◆ SHRegEnumUSValueA()

LONG WINAPI SHRegEnumUSValueA ( HUSKEY  hUSKey,
DWORD  dwIndex,
LPSTR  pszValueName,
LPDWORD  pcchValueNameLen,
LPDWORD  pdwType,
LPVOID  pvData,
LPDWORD  pcbData,
SHREGENUM_FLAGS  enumRegFlags 
)

Definition at line 675 of file kernelbase.c.

678{
679 HKEY dokey;
680
681 TRACE("(%p, 0x%08x, %p, %p, %p, %p, %p, 0x%08x)\n", hUSKey, dwIndex,
682 pszValueName, pcchValueNameLen, pdwType, pvData, pcbData, enumRegFlags);
683
684 if (((enumRegFlags == SHREGENUM_HKCU) ||
685 (enumRegFlags == SHREGENUM_DEFAULT)) &&
686 (dokey = REG_GetHKEYFromHUSKEY(hUSKey,REG_HKCU))) {
687 return RegEnumValueA(dokey, dwIndex, pszValueName, pcchValueNameLen,
689 }
690
691 if (((enumRegFlags == SHREGENUM_HKLM) ||
692 (enumRegFlags == SHREGENUM_DEFAULT)) &&
693 (dokey = REG_GetHKEYFromHUSKEY(hUSKey,REG_HKLM))) {
694 return RegEnumValueA(dokey, dwIndex, pszValueName, pcchValueNameLen,
696 }
697 FIXME("no support for SHREGENUM_BOTH\n");
699}
LONG WINAPI RegEnumValueA(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpdwReserved, _Out_opt_ LPDWORD lpdwType, _Out_opt_ LPBYTE lpData, _Inout_opt_ LPDWORD lpcbData)
Definition: reg.c:2668
_In_ LPWSTR _In_ DWORD _In_ LPCVOID pvData
Definition: netsh.h:116
_In_opt_ LPCSTR _In_opt_ LPCSTR _In_ SRRF _Out_opt_ LPDWORD pdwType
Definition: shlwapi.h:783
_In_ _Out_writes_opt_ pcchValueName _Inout_opt_ LPDWORD _Out_opt_ _Out_writes_bytes_to_opt_ pcbData _Inout_opt_ LPDWORD pcbData
Definition: shlwapi.h:757

◆ SHRegEnumUSValueW()

LONG WINAPI SHRegEnumUSValueW ( HUSKEY  hUSKey,
DWORD  dwIndex,
LPWSTR  pszValueName,
LPDWORD  pcchValueNameLen,
LPDWORD  pdwType,
LPVOID  pvData,
LPDWORD  pcbData,
SHREGENUM_FLAGS  enumRegFlags 
)

Definition at line 706 of file kernelbase.c.

709{
710 HKEY dokey;
711
712 TRACE("(%p, 0x%08x, %p, %p, %p, %p, %p, 0x%08x)\n", hUSKey, dwIndex,
713 pszValueName, pcchValueNameLen, pdwType, pvData, pcbData, enumRegFlags);
714
715 if (((enumRegFlags == SHREGENUM_HKCU) ||
716 (enumRegFlags == SHREGENUM_DEFAULT)) &&
717 (dokey = REG_GetHKEYFromHUSKEY(hUSKey,REG_HKCU))) {
718 return RegEnumValueW(dokey, dwIndex, pszValueName, pcchValueNameLen,
720 }
721
722 if (((enumRegFlags == SHREGENUM_HKLM) ||
723 (enumRegFlags == SHREGENUM_DEFAULT)) &&
724 (dokey = REG_GetHKEYFromHUSKEY(hUSKey,REG_HKLM))) {
725 return RegEnumValueW(dokey, dwIndex, pszValueName, pcchValueNameLen,
727 }
728 FIXME("no support for SHREGENUM_BOTH\n");
730}
LONG WINAPI RegEnumValueW(_In_ HKEY hKey, _In_ DWORD index, _Out_ LPWSTR value, _Inout_ PDWORD val_count, _Reserved_ PDWORD reserved, _Out_opt_ PDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ PDWORD count)
Definition: reg.c:2830

◆ SHRegGetBoolUSValueA()

BOOL WINAPI SHRegGetBoolUSValueA ( LPCSTR  pszSubKey,
LPCSTR  pszValue,
BOOL  fIgnoreHKCU,
BOOL  fDefault 
)

Definition at line 1002 of file kernelbase.c.

1007{
1008 DWORD type, datalen, work;
1009 BOOL ret = fDefault;
1010 CHAR data[10];
1011
1012 TRACE("key '%s', value '%s', %s\n",
1014 (fIgnoreHKCU) ? "Ignoring HKCU" : "Tries HKCU then HKLM");
1015
1016 datalen = sizeof(data)-1;
1018 data, &datalen,
1019 fIgnoreHKCU, 0, 0)) {
1020 /* process returned data via type into bool */
1021 switch (type) {
1022 case REG_SZ:
1023 data[9] = '\0'; /* set end of string */
1024 if (lstrcmpiA(data, "YES") == 0) ret = TRUE;
1025 if (lstrcmpiA(data, "TRUE") == 0) ret = TRUE;
1026 if (lstrcmpiA(data, "NO") == 0) ret = FALSE;
1027 if (lstrcmpiA(data, "FALSE") == 0) ret = FALSE;
1028 break;
1029 case REG_DWORD:
1030 work = *(LPDWORD)data;
1031 ret = (work != 0);
1032 break;
1033 case REG_BINARY:
1034 if (datalen == 1) {
1035 ret = (data[0] != '\0');
1036 break;
1037 }
1038 default:
1039 FIXME("Unsupported registry data type %d\n", type);
1040 ret = FALSE;
1041 }
1042 TRACE("got value (type=%d), returning <%s>\n", type,
1043 (ret) ? "TRUE" : "FALSE");
1044 }
1045 else {
1046 ret = fDefault;
1047 TRACE("returning default data <%s>\n",
1048 (ret) ? "TRUE" : "FALSE");
1049 }
1050 return ret;
1051}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
Definition: locale.c:4133
unsigned int BOOL
Definition: ntddk_ex.h:94
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
int const JOCTET unsigned int datalen
Definition: jpeglib.h:1033
LONG WINAPI SHRegGetUSValueA(LPCSTR pSubKey, LPCSTR pValue, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData, BOOL flagIgnoreHKCU, LPVOID pDefaultData, DWORD wDefaultDataSize)
Definition: kernelbase.c:849
#define REG_SZ
Definition: layer.c:22
#define REG_BINARY
Definition: nt_native.h:1499
#define LPDWORD
Definition: nt_native.h:46
char CHAR
Definition: pedump.c:57
_In_opt_ LPCSTR pszSubKey
Definition: shlwapi.h:783
#define REG_DWORD
Definition: sdbapi.c:615

◆ SHRegGetBoolUSValueW()

BOOL WINAPI SHRegGetBoolUSValueW ( LPCWSTR  pszSubKey,
LPCWSTR  pszValue,
BOOL  fIgnoreHKCU,
BOOL  fDefault 
)

Definition at line 1058 of file kernelbase.c.

1063{
1064 static const WCHAR wYES[]= {'Y','E','S','\0'};
1065 static const WCHAR wTRUE[]= {'T','R','U','E','\0'};
1066 static const WCHAR wNO[]= {'N','O','\0'};
1067 static const WCHAR wFALSE[]={'F','A','L','S','E','\0'};
1068 DWORD type, datalen, work;
1069 BOOL ret = fDefault;
1070 WCHAR data[10];
1071
1072 TRACE("key '%s', value '%s', %s\n",
1074 (fIgnoreHKCU) ? "Ignoring HKCU" : "Tries HKCU then HKLM");
1075
1076 datalen = (sizeof(data)-1) * sizeof(WCHAR);
1078 data, &datalen,
1079 fIgnoreHKCU, 0, 0)) {
1080 /* process returned data via type into bool */
1081 switch (type) {
1082 case REG_SZ:
1083 data[9] = '\0'; /* set end of string */
1084 if (lstrcmpiW(data, wYES)==0 || lstrcmpiW(data, wTRUE)==0)
1085 ret = TRUE;
1086 else if (lstrcmpiW(data, wNO)==0 || lstrcmpiW(data, wFALSE)==0)
1087 ret = FALSE;
1088 break;
1089 case REG_DWORD:
1090 work = *(LPDWORD)data;
1091 ret = (work != 0);
1092 break;
1093 case REG_BINARY:
1094 if (datalen == 1) {
1095 ret = (data[0] != '\0');
1096 break;
1097 }
1098 default:
1099 FIXME("Unsupported registry data type %d\n", type);
1100 ret = FALSE;
1101 }
1102 TRACE("got value (type=%d), returning <%s>\n", type,
1103 (ret) ? "TRUE" : "FALSE");
1104 }
1105 else {
1106 ret = fDefault;
1107 TRACE("returning default data <%s>\n",
1108 (ret) ? "TRUE" : "FALSE");
1109 }
1110 return ret;
1111}
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4171
LONG WINAPI SHRegGetUSValueW(LPCWSTR pSubKey, LPCWSTR pValue, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData, BOOL flagIgnoreHKCU, LPVOID pDefaultData, DWORD wDefaultDataSize)
Definition: kernelbase.c:882

◆ SHRegGetUSValueA()

LONG WINAPI SHRegGetUSValueA ( LPCSTR  pSubKey,
LPCSTR  pValue,
LPDWORD  pwType,
LPVOID  pvData,
LPDWORD  pcbData,
BOOL  flagIgnoreHKCU,
LPVOID  pDefaultData,
DWORD  wDefaultDataSize 
)

Definition at line 849 of file kernelbase.c.

858{
859 HUSKEY myhuskey;
860 LONG ret;
861
862 if (!pvData || !pcbData) return ERROR_INVALID_FUNCTION; /* FIXME:wrong*/
863 TRACE("key '%s', value '%s', datalen %d, %s\n",
864 debugstr_a(pSubKey), debugstr_a(pValue), *pcbData,
865 (flagIgnoreHKCU) ? "Ignoring HKCU" : "Tries HKCU then HKLM");
866
867 ret = SHRegOpenUSKeyA(pSubKey, 0x1, 0, &myhuskey, flagIgnoreHKCU);
868 if (ret == ERROR_SUCCESS) {
869 ret = SHRegQueryUSValueA(myhuskey, pValue, pwType, pvData,
870 pcbData, flagIgnoreHKCU, pDefaultData,
871 wDefaultDataSize);
872 SHRegCloseUSKey(myhuskey);
873 }
874 return ret;
875}
PWCHAR pValue
LONG WINAPI SHRegQueryUSValueA(HUSKEY hUSKey, LPCSTR pszValue, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData, BOOL fIgnoreHKCU, LPVOID pvDefaultData, DWORD dwDefaultDataSize)
Definition: kernelbase.c:741
LONG WINAPI SHRegOpenUSKeyA(LPCSTR Path, REGSAM AccessType, HUSKEY hRelativeUSKey, PHUSKEY phNewUSKey, BOOL fIgnoreHKCU)
Definition: kernelbase.c:394
LONG WINAPI SHRegCloseUSKey(HUSKEY hUSKey)
Definition: kernelbase.c:478

Referenced by SHRegGetBoolUSValueA().

◆ SHRegGetUSValueW()

LONG WINAPI SHRegGetUSValueW ( LPCWSTR  pSubKey,
LPCWSTR  pValue,
LPDWORD  pwType,
LPVOID  pvData,
LPDWORD  pcbData,
BOOL  flagIgnoreHKCU,
LPVOID  pDefaultData,
DWORD  wDefaultDataSize 
)

Definition at line 882 of file kernelbase.c.

891{
892 HUSKEY myhuskey;
893 LONG ret;
894
895 if (!pvData || !pcbData) return ERROR_INVALID_FUNCTION; /* FIXME:wrong*/
896 TRACE("key '%s', value '%s', datalen %d, %s\n",
897 debugstr_w(pSubKey), debugstr_w(pValue), *pcbData,
898 (flagIgnoreHKCU) ? "Ignoring HKCU" : "Tries HKCU then HKLM");
899
900 ret = SHRegOpenUSKeyW(pSubKey, 0x1, 0, &myhuskey, flagIgnoreHKCU);
901 if (ret == ERROR_SUCCESS) {
902 ret = SHRegQueryUSValueW(myhuskey, pValue, pwType, pvData,
903 pcbData, flagIgnoreHKCU, pDefaultData,
904 wDefaultDataSize);
905 SHRegCloseUSKey(myhuskey);
906 }
907 return ret;
908}
LONG WINAPI SHRegOpenUSKeyW(LPCWSTR Path, REGSAM AccessType, HUSKEY hRelativeUSKey, PHUSKEY phNewUSKey, BOOL fIgnoreHKCU)
Definition: kernelbase.c:411
LONG WINAPI SHRegQueryUSValueW(HUSKEY hUSKey, LPCWSTR pszValue, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData, BOOL fIgnoreHKCU, LPVOID pvDefaultData, DWORD dwDefaultDataSize)
Definition: kernelbase.c:792

Referenced by SHRegGetBoolUSValueW().

◆ SHRegOpenUSKeyA()

LONG WINAPI SHRegOpenUSKeyA ( LPCSTR  Path,
REGSAM  AccessType,
HUSKEY  hRelativeUSKey,
PHUSKEY  phNewUSKey,
BOOL  fIgnoreHKCU 
)

Definition at line 394 of file kernelbase.c.

396{
398
399 if (Path)
401
402 return SHRegOpenUSKeyW(Path ? szPath : NULL, AccessType, hRelativeUSKey,
403 phNewUSKey, fIgnoreHKCU);
404}
PRTL_UNICODE_STRING_BUFFER Path
#define MAX_PATH
Definition: compat.h:34
LPCWSTR szPath
Definition: env.c:37

Referenced by SHRegGetUSValueA(), and SHRegSetUSValueA().

◆ SHRegOpenUSKeyW()

LONG WINAPI SHRegOpenUSKeyW ( LPCWSTR  Path,
REGSAM  AccessType,
HUSKEY  hRelativeUSKey,
PHUSKEY  phNewUSKey,
BOOL  fIgnoreHKCU 
)

Definition at line 411 of file kernelbase.c.

413{
414 LONG ret2, ret1 = ~ERROR_SUCCESS;
416
417 TRACE("(%s,0x%x,%p,%p,%d)\n", debugstr_w(Path),(LONG)AccessType,
418 hRelativeUSKey, phNewUSKey, fIgnoreHKCU);
419
420 if (phNewUSKey)
421 *phNewUSKey = NULL;
422
423 /* Create internal HUSKEY */
425 lstrcpynW(hKey->lpszPath, Path, sizeof(hKey->lpszPath)/sizeof(WCHAR));
426
427 if (hRelativeUSKey)
428 {
429 hKey->HKCUstart = SHRegDuplicateHKey(REG_GetHKEYFromHUSKEY(hRelativeUSKey, REG_HKCU));
430 hKey->HKLMstart = SHRegDuplicateHKey(REG_GetHKEYFromHUSKEY(hRelativeUSKey, REG_HKLM));
431
432 /* FIXME: if either of these keys is NULL, create the start key from
433 * the relative keys start+path
434 */
435 }
436 else
437 {
438 hKey->HKCUstart = HKEY_CURRENT_USER;
439 hKey->HKLMstart = HKEY_LOCAL_MACHINE;
440 }
441
442 if (!fIgnoreHKCU)
443 {
444 ret1 = RegOpenKeyExW(hKey->HKCUstart, hKey->lpszPath, 0, AccessType, &hKey->HKCUkey);
445 if (ret1)
446 hKey->HKCUkey = 0;
447 }
448
449 ret2 = RegOpenKeyExW(hKey->HKLMstart, hKey->lpszPath, 0, AccessType, &hKey->HKLMkey);
450 if (ret2)
451 hKey->HKLMkey = 0;
452
453 if (ret1 || ret2)
454 TRACE("one or more opens failed: HKCU=%d HKLM=%d\n", ret1, ret2);
455
456 if (ret1 && ret2)
457 {
458 /* Neither open succeeded: fail */
460 return ret2;
461 }
462
463 TRACE("HUSKEY=%p\n", hKey);
464 if (phNewUSKey)
465 *phNewUSKey = hKey;
466 return ERROR_SUCCESS;
467}
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333

Referenced by SHRegGetUSValueW(), SHRegOpenUSKeyA(), and SHRegSetUSValueW().

◆ SHRegQueryInfoUSKeyA()

LONG WINAPI SHRegQueryInfoUSKeyA ( HUSKEY  hUSKey,
LPDWORD  pcSubKeys,
LPDWORD  pcchMaxSubKeyLen,
LPDWORD  pcValues,
LPDWORD  pcchMaxValueNameLen,
SHREGENUM_FLAGS  enumRegFlags 
)

Definition at line 1122 of file kernelbase.c.

1129{
1130 HKEY dokey;
1131 LONG ret;
1132
1133 TRACE("(%p,%p,%p,%p,%p,%d)\n",
1134 hUSKey,pcSubKeys,pcchMaxSubKeyLen,pcValues,
1135 pcchMaxValueNameLen,enumRegFlags);
1136
1137 /* if user wants HKCU, and it exists, then try it */
1138 if (((enumRegFlags == SHREGENUM_HKCU) ||
1139 (enumRegFlags == SHREGENUM_DEFAULT)) &&
1140 (dokey = REG_GetHKEYFromHUSKEY(hUSKey,REG_HKCU))) {
1141 ret = RegQueryInfoKeyA(dokey, 0, 0, 0,
1142 pcSubKeys, pcchMaxSubKeyLen, 0,
1143 pcValues, pcchMaxValueNameLen, 0, 0, 0);
1144 if ((ret == ERROR_SUCCESS) ||
1145 (enumRegFlags == SHREGENUM_HKCU))
1146 return ret;
1147 }
1148 if (((enumRegFlags == SHREGENUM_HKLM) ||
1149 (enumRegFlags == SHREGENUM_DEFAULT)) &&
1150 (dokey = REG_GetHKEYFromHUSKEY(hUSKey,REG_HKLM))) {
1151 return RegQueryInfoKeyA(dokey, 0, 0, 0,
1152 pcSubKeys, pcchMaxSubKeyLen, 0,
1153 pcValues, pcchMaxValueNameLen, 0, 0, 0);
1154 }
1156}
LONG WINAPI RegQueryInfoKeyA(HKEY hKey, LPSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
Definition: reg.c:3583

◆ SHRegQueryInfoUSKeyW()

LONG WINAPI SHRegQueryInfoUSKeyW ( HUSKEY  hUSKey,
LPDWORD  pcSubKeys,
LPDWORD  pcchMaxSubKeyLen,
LPDWORD  pcValues,
LPDWORD  pcchMaxValueNameLen,
SHREGENUM_FLAGS  enumRegFlags 
)

Definition at line 1163 of file kernelbase.c.

1170{
1171 HKEY dokey;
1172 LONG ret;
1173
1174 TRACE("(%p,%p,%p,%p,%p,%d)\n",
1175 hUSKey,pcSubKeys,pcchMaxSubKeyLen,pcValues,
1176 pcchMaxValueNameLen,enumRegFlags);
1177
1178 /* if user wants HKCU, and it exists, then try it */
1179 if (((enumRegFlags == SHREGENUM_HKCU) ||
1180 (enumRegFlags == SHREGENUM_DEFAULT)) &&
1181 (dokey = REG_GetHKEYFromHUSKEY(hUSKey,REG_HKCU))) {
1182 ret = RegQueryInfoKeyW(dokey, 0, 0, 0,
1183 pcSubKeys, pcchMaxSubKeyLen, 0,
1184 pcValues, pcchMaxValueNameLen, 0, 0, 0);
1185 if ((ret == ERROR_SUCCESS) ||
1186 (enumRegFlags == SHREGENUM_HKCU))
1187 return ret;
1188 }
1189 if (((enumRegFlags == SHREGENUM_HKLM) ||
1190 (enumRegFlags == SHREGENUM_DEFAULT)) &&
1191 (dokey = REG_GetHKEYFromHUSKEY(hUSKey,REG_HKLM))) {
1192 return RegQueryInfoKeyW(dokey, 0, 0, 0,
1193 pcSubKeys, pcchMaxSubKeyLen, 0,
1194 pcValues, pcchMaxValueNameLen, 0, 0, 0);
1195 }
1197}
LONG WINAPI RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
Definition: reg.c:3662

◆ SHRegQueryUSValueA()

LONG WINAPI SHRegQueryUSValueA ( HUSKEY  hUSKey,
LPCSTR  pszValue,
LPDWORD  pdwType,
LPVOID  pvData,
LPDWORD  pcbData,
BOOL  fIgnoreHKCU,
LPVOID  pvDefaultData,
DWORD  dwDefaultDataSize 
)

Definition at line 741 of file kernelbase.c.

750{
751 LONG ret = ~ERROR_SUCCESS;
752 LONG i, maxmove;
753 HKEY dokey;
754 CHAR *src, *dst;
755
756 /* if user wants HKCU, and it exists, then try it */
757 if (!fIgnoreHKCU && (dokey = REG_GetHKEYFromHUSKEY(hUSKey,REG_HKCU))) {
758 ret = RegQueryValueExA(dokey,
760 TRACE("HKCU RegQueryValue returned %08x\n", ret);
761 }
762
763 /* if HKCU did not work and HKLM exists, then try it */
764 if ((ret != ERROR_SUCCESS) &&
765 (dokey = REG_GetHKEYFromHUSKEY(hUSKey,REG_HKLM))) {
766 ret = RegQueryValueExA(dokey,
768 TRACE("HKLM RegQueryValue returned %08x\n", ret);
769 }
770
771 /* if neither worked, and default data exists, then use it */
772 if (ret != ERROR_SUCCESS) {
773 if (pvDefaultData && (dwDefaultDataSize != 0)) {
775 src = pvDefaultData;
776 dst = pvData;
777 for(i=0; i<maxmove; i++) *dst++ = *src++;
778 *pcbData = maxmove;
779 TRACE("setting default data\n");
781 }
782 }
783 return ret;
784}
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
Definition: reg.c:4009
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
_In_opt_ _Inout_opt_ _Out_writes_bytes_to_opt_ pcbData _Inout_opt_ LPDWORD _In_ _In_ DWORD dwDefaultDataSize
Definition: shlwapi.h:781

Referenced by SHRegGetUSValueA().

◆ SHRegQueryUSValueW()

LONG WINAPI SHRegQueryUSValueW ( HUSKEY  hUSKey,
LPCWSTR  pszValue,
LPDWORD  pdwType,
LPVOID  pvData,
LPDWORD  pcbData,
BOOL  fIgnoreHKCU,
LPVOID  pvDefaultData,
DWORD  dwDefaultDataSize 
)

Definition at line 792 of file kernelbase.c.

801{
802 LONG ret = ~ERROR_SUCCESS;
803 LONG i, maxmove;
804 HKEY dokey;
805 CHAR *src, *dst;
806
807 /* if user wants HKCU, and it exists, then try it */
808 if (!fIgnoreHKCU && (dokey = REG_GetHKEYFromHUSKEY(hUSKey,REG_HKCU))) {
809 ret = RegQueryValueExW(dokey,
811 TRACE("HKCU RegQueryValue returned %08x\n", ret);
812 }
813
814 /* if HKCU did not work and HKLM exists, then try it */
815 if ((ret != ERROR_SUCCESS) &&
816 (dokey = REG_GetHKEYFromHUSKEY(hUSKey,REG_HKLM))) {
817 ret = RegQueryValueExW(dokey,
819 TRACE("HKLM RegQueryValue returned %08x\n", ret);
820 }
821
822 /* if neither worked, and default data exists, then use it */
823 if (ret != ERROR_SUCCESS) {
824 if (pvDefaultData && (dwDefaultDataSize != 0)) {
826 src = pvDefaultData;
827 dst = pvData;
828 for(i=0; i<maxmove; i++) *dst++ = *src++;
829 *pcbData = maxmove;
830 TRACE("setting default data\n");
832 }
833 }
834 return ret;
835}

Referenced by SHRegGetUSValueW().

◆ SHRegSetUSValueA()

LONG WINAPI SHRegSetUSValueA ( LPCSTR  pszSubKey,
LPCSTR  pszValue,
DWORD  dwType,
LPVOID  pvData,
DWORD  cbData,
DWORD  dwFlags 
)

Definition at line 931 of file kernelbase.c.

933{
934 BOOL ignoreHKCU = TRUE;
935 HUSKEY hkey;
936 LONG ret;
937
938 TRACE("(%s,%s,%d,%p,%d,0x%08x\n", debugstr_a(pszSubKey), debugstr_a(pszValue),
939 dwType, pvData, cbData, dwFlags);
940
941 if (!pvData)
943
945 ignoreHKCU = FALSE;
946
947 ret = SHRegOpenUSKeyA(pszSubKey, KEY_ALL_ACCESS, 0, &hkey, ignoreHKCU);
948 if (ret == ERROR_SUCCESS)
949 {
951 SHRegCloseUSKey(hkey);
952 }
953 return ret;
954}
LONG WINAPI SHRegWriteUSValueA(HUSKEY hUSKey, LPCSTR pszValue, DWORD dwType, LPVOID pvData, DWORD cbData, DWORD dwFlags)
Definition: kernelbase.c:1295
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define KEY_ALL_ACCESS
Definition: nt_native.h:1044
#define SHREGSET_HKCU
Definition: shlwapi.h:719
_In_opt_ _In_opt_ _In_ _In_ DWORD cbData
Definition: shlwapi.h:761

◆ SHRegSetUSValueW()

LONG WINAPI SHRegSetUSValueW ( LPCWSTR  pszSubKey,
LPCWSTR  pszValue,
DWORD  dwType,
LPVOID  pvData,
DWORD  cbData,
DWORD  dwFlags 
)

Definition at line 961 of file kernelbase.c.

963{
964 BOOL ignoreHKCU = TRUE;
965 HUSKEY hkey;
966 LONG ret;
967
968 TRACE("(%s,%s,%d,%p,%d,0x%08x\n", debugstr_w(pszSubKey), debugstr_w(pszValue),
969 dwType, pvData, cbData, dwFlags);
970
971 if (!pvData)
973
975 ignoreHKCU = FALSE;
976
977 ret = SHRegOpenUSKeyW(pszSubKey, KEY_ALL_ACCESS, 0, &hkey, ignoreHKCU);
978 if (ret == ERROR_SUCCESS)
979 {
981 SHRegCloseUSKey(hkey);
982 }
983 return ret;
984}
LONG WINAPI SHRegWriteUSValueW(HUSKEY hUSKey, LPCWSTR pszValue, DWORD dwType, LPVOID pvData, DWORD cbData, DWORD dwFlags)
Definition: kernelbase.c:1312

◆ SHRegWriteUSValueA()

LONG WINAPI SHRegWriteUSValueA ( HUSKEY  hUSKey,
LPCSTR  pszValue,
DWORD  dwType,
LPVOID  pvData,
DWORD  cbData,
DWORD  dwFlags 
)

Definition at line 1295 of file kernelbase.c.

1297{
1298 WCHAR szValue[MAX_PATH];
1299
1300 if (pszValue)
1301 MultiByteToWideChar(CP_ACP, 0, pszValue, -1, szValue, MAX_PATH);
1302
1303 return SHRegWriteUSValueW(hUSKey, pszValue ? szValue : NULL, dwType,
1305}

Referenced by SHRegSetUSValueA().

◆ SHRegWriteUSValueW()

LONG WINAPI SHRegWriteUSValueW ( HUSKEY  hUSKey,
LPCWSTR  pszValue,
DWORD  dwType,
LPVOID  pvData,
DWORD  cbData,
DWORD  dwFlags 
)

Definition at line 1312 of file kernelbase.c.

1314{
1315 DWORD dummy;
1316 LPSHUSKEY hKey = hUSKey;
1318
1319 TRACE("(%p,%s,%d,%p,%d,%d)\n", hUSKey, debugstr_w(pszValue),
1320 dwType, pvData, cbData, dwFlags);
1321
1322 if (!hUSKey || IsBadWritePtr(hUSKey, sizeof(SHUSKEY)) ||
1325
1327 {
1328 if (!hKey->HKCUkey)
1329 {
1330 /* Create the key */
1331 ret = RegCreateKeyW(hKey->HKCUstart, hKey->lpszPath, &hKey->HKCUkey);
1332 TRACE("Creating HKCU key, ret = %d\n", ret);
1333 if (ret && (dwFlags & (SHREGSET_FORCE_HKCU)))
1334 {
1335 hKey->HKCUkey = 0;
1336 return ret;
1337 }
1338 }
1339
1340 if (!ret)
1341 {
1342 if ((dwFlags & SHREGSET_FORCE_HKCU) ||
1344 {
1345 /* Doesn't exist or we are forcing: Write value */
1346 ret = RegSetValueExW(hKey->HKCUkey, pszValue, 0, dwType, pvData, cbData);
1347 TRACE("Writing HKCU value, ret = %d\n", ret);
1348 }
1349 }
1350 }
1351
1353 {
1354 if (!hKey->HKLMkey)
1355 {
1356 /* Create the key */
1357 ret = RegCreateKeyW(hKey->HKLMstart, hKey->lpszPath, &hKey->HKLMkey);
1358 TRACE("Creating HKLM key, ret = %d\n", ret);
1359 if (ret && (dwFlags & (SHREGSET_FORCE_HKLM)))
1360 {
1361 hKey->HKLMkey = 0;
1362 return ret;
1363 }
1364 }
1365
1366 if (!ret)
1367 {
1368 if ((dwFlags & SHREGSET_FORCE_HKLM) ||
1370 {
1371 /* Doesn't exist or we are forcing: Write value */
1372 ret = RegSetValueExW(hKey->HKLMkey, pszValue, 0, dwType, pvData, cbData);
1373 TRACE("Writing HKLM value, ret = %d\n", ret);
1374 }
1375 }
1376 }
1377
1378 return ret;
1379}
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4882
LONG WINAPI RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:1201
BOOL NTAPI IsBadWritePtr(IN LPVOID lp, IN UINT_PTR ucb)
Definition: except.c:883
#define SHREGSET_HKLM
Definition: shlwapi.h:721
#define SHREGSET_FORCE_HKLM
Definition: shlwapi.h:722

Referenced by SHRegSetUSValueW(), and SHRegWriteUSValueA().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( kernelbase  )