ReactOS 0.4.15-dev-8116-gf69e256
reg.c File Reference
#include <stdio.h>
#include "reg.h"
#include <wine/debug.h>
Include dependency graph for reg.c:

Go to the source code of this file.

Enumerations

enum  operations {
  REG_ADD , REG_COPY , REG_DELETE , REG_EXPORT ,
  REG_IMPORT , REG_QUERY , REG_INVALID
}
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (reg)
 
void output_writeconsole (const WCHAR *str, DWORD wlen)
 
static void output_formatstring (const WCHAR *fmt, va_list va_args)
 
void WINAPIV output_message (unsigned int id,...)
 
void WINAPIV output_string (const WCHAR *fmt,...)
 
BOOL ask_confirm (unsigned int msgid, WCHAR *reg_info)
 
static BOOL path_rootname_cmp (const WCHAR *input_path, const WCHAR *rootkey_name)
 
HKEY path_get_rootkey (const WCHAR *path)
 
static BOOL sane_path (const WCHAR *key)
 
WCHARbuild_subkey_path (WCHAR *path, DWORD path_len, WCHAR *subkey_name, DWORD subkey_len)
 
WCHARget_long_key (HKEY root, WCHAR *path)
 
BOOL parse_registry_key (const WCHAR *key, HKEY *root, WCHAR **path)
 
BOOL is_char (const WCHAR s, const WCHAR c)
 
BOOL is_switch (const WCHAR *s, const WCHAR c)
 
static BOOL is_help_switch (const WCHAR *s)
 
static enum operations get_operation (const WCHAR *str, int *op_help)
 
int __cdecl wmain (int argc, WCHAR *argvW[])
 

Variables

struct {
   HKEY   key
 
   const WCHAR *   short_name
 
   const WCHAR *   long_name
 
root_rels []
 
const struct reg_type_rels type_rels []
 

Enumeration Type Documentation

◆ operations

Enumerator
REG_ADD 
REG_COPY 
REG_DELETE 
REG_EXPORT 
REG_IMPORT 
REG_QUERY 
REG_INVALID 

Definition at line 285 of file reg.c.

285 {
286 REG_ADD,
287 REG_COPY,
291 REG_QUERY,
293};
@ REG_EXPORT
Definition: reg.c:289
@ REG_IMPORT
Definition: reg.c:290
@ REG_COPY
Definition: reg.c:287
@ REG_ADD
Definition: reg.c:286
@ REG_QUERY
Definition: reg.c:291
@ REG_DELETE
Definition: reg.c:288
@ REG_INVALID
Definition: reg.c:292

Function Documentation

◆ ask_confirm()

BOOL ask_confirm ( unsigned int  msgid,
WCHAR reg_info 
)

Definition at line 127 of file reg.c.

128{
130 WCHAR Ybuffer[4];
131 WCHAR Nbuffer[4];
132 WCHAR defval[32];
133 WCHAR answer[MAX_PATH];
134 WCHAR *str;
135 DWORD count;
136
138 LoadStringW(hmod, STRING_YES, Ybuffer, ARRAY_SIZE(Ybuffer));
139 LoadStringW(hmod, STRING_NO, Nbuffer, ARRAY_SIZE(Nbuffer));
141
142 str = (reg_info && *reg_info) ? reg_info : defval;
143
144 while (1)
145 {
146 output_message(msgid, str);
149 answer[0] = towupper(answer[0]);
150 if (answer[0] == Ybuffer[0])
151 return TRUE;
152 if (answer[0] == Nbuffer[0])
153 return FALSE;
154 }
155}
void WINAPIV output_message(unsigned int id,...)
Definition: reg.c:92
#define STRING_NO
Definition: resource.h:29
#define STRING_DEFAULT_VALUE
Definition: resource.h:40
#define STRING_YESNO
Definition: resource.h:31
#define STRING_YES
Definition: resource.h:28
#define ARRAY_SIZE(A)
Definition: main.h:33
HANDLE WINAPI GetStdHandle(IN DWORD nStdHandle)
Definition: console.c:203
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define MAX_PATH
Definition: compat.h:34
BOOL WINAPI DECLSPEC_HOTPATCH ReadConsoleW(IN HANDLE hConsoleInput, OUT LPVOID lpBuffer, IN DWORD nNumberOfCharsToRead, OUT LPDWORD lpNumberOfCharsRead, IN PCONSOLE_READCONSOLE_CONTROL pInputControl OPTIONAL)
Definition: readwrite.c:1174
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint GLsizei count
Definition: gl.h:1545
static PEXPLICIT_ACCESSW *static HMODULE hmod
Definition: security.c:143
const WCHAR * str
#define towupper(c)
Definition: wctype.h:99
#define STD_INPUT_HANDLE
Definition: winbase.h:267
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by get_file_handle(), run_add(), and run_delete().

◆ build_subkey_path()

WCHAR * build_subkey_path ( WCHAR path,
DWORD  path_len,
WCHAR subkey_name,
DWORD  subkey_len 
)

Definition at line 198 of file reg.c.

199{
200 WCHAR *subkey_path;
201
202 subkey_path = malloc((path_len + subkey_len + 2) * sizeof(WCHAR));
203 swprintf(subkey_path, L"%s\\%s", path, subkey_name);
204
205 return subkey_path;
206}
#define malloc
Definition: debug_ros.c:4
#define swprintf
Definition: precomp.h:40
static DWORD path_len
Definition: batch.c:31
#define L(x)
Definition: ntvdm.h:50

Referenced by export_registry_data(), query_all(), and query_value().

◆ get_long_key()

WCHAR * get_long_key ( HKEY  root,
WCHAR path 
)

Definition at line 208 of file reg.c.

209{
210 int i, len;
211 WCHAR *long_key;
212
213 for (i = 0; i < ARRAY_SIZE(root_rels); i++)
214 {
215 if (root == root_rels[i].key)
216 break;
217 }
218
220
221 if (!path)
222 {
223 long_key = malloc((len + 1) * sizeof(WCHAR));
224 lstrcpyW(long_key, root_rels[i].long_name);
225 return long_key;
226 }
227
228 len += lstrlenW(path) + 1; /* add one for the concatenating backslash */
229 long_key = malloc((len + 1) * sizeof(WCHAR));
230 swprintf(long_key, L"%s\\%s", root_rels[i].long_name, path);
231 return long_key;
232}
static const struct @2 root_rels[]
const WCHAR * long_name
Definition: reg.c:30
#define lstrcpyW
Definition: compat.h:749
#define lstrlenW
Definition: compat.h:750
GLenum GLsizei len
Definition: glext.h:6722
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
Definition: copy.c:22

Referenced by reg_delete(), reg_export(), and reg_query().

◆ get_operation()

static enum operations get_operation ( const WCHAR str,
int op_help 
)
static

Definition at line 295 of file reg.c.

296{
297 struct op_info { const WCHAR *op; int id; int help_id; };
298
299 static const struct op_info op_array[] =
300 {
301 { L"add", REG_ADD, STRING_ADD_USAGE },
302 { L"copy", REG_COPY, STRING_COPY_USAGE },
303 { L"delete", REG_DELETE, STRING_DELETE_USAGE },
304 { L"export", REG_EXPORT, STRING_EXPORT_USAGE },
305 { L"import", REG_IMPORT, STRING_IMPORT_USAGE },
306 { L"query", REG_QUERY, STRING_QUERY_USAGE },
307 { NULL, -1, 0 }
308 };
309
310 const struct op_info *ptr;
311
312 for (ptr = op_array; ptr->op; ptr++)
313 {
314 if (!lstrcmpiW(str, ptr->op))
315 {
316 *op_help = ptr->help_id;
317 return ptr->id;
318 }
319 }
320
321 return REG_INVALID;
322}
#define STRING_IMPORT_USAGE
Definition: resource.h:49
#define STRING_DELETE_USAGE
Definition: resource.h:47
#define STRING_QUERY_USAGE
Definition: resource.h:50
#define STRING_ADD_USAGE
Definition: resource.h:45
#define STRING_COPY_USAGE
Definition: resource.h:46
#define STRING_EXPORT_USAGE
Definition: resource.h:48
UINT op
Definition: effect.c:236
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4261
GLuint id
Definition: glext.h:5910
static PVOID ptr
Definition: dispmode.c:27

Referenced by wmain().

◆ is_char()

BOOL is_char ( const WCHAR  s,
const WCHAR  c 
)

Definition at line 267 of file reg.c.

268{
269 return (s == c || s == towupper(c));
270}
GLdouble s
Definition: gl.h:2039
const GLubyte * c
Definition: glext.h:8905

Referenced by is_switch(), and reg_export().

◆ is_help_switch()

static BOOL is_help_switch ( const WCHAR s)
static

Definition at line 280 of file reg.c.

281{
282 return (is_switch(s, '?') || is_switch(s, 'h'));
283}
BOOL is_switch(const WCHAR *s, const WCHAR c)
Definition: reg.c:272

Referenced by wmain().

◆ is_switch()

BOOL is_switch ( const WCHAR s,
const WCHAR  c 
)

Definition at line 272 of file reg.c.

273{
274 if (lstrlenW(s) > 2)
275 return FALSE;
276
277 return ((s[0] == '/' || s[0] == '-') && is_char(s[1], c));
278}
BOOL is_char(const WCHAR s, const WCHAR c)
Definition: reg.c:267

Referenced by is_help_switch().

◆ output_formatstring()

static void output_formatstring ( const WCHAR fmt,
va_list  va_args 
)
static

Definition at line 76 of file reg.c.

77{
78 WCHAR *str;
79 DWORD len;
80
82 fmt, 0, 0, (WCHAR *)&str, 0, &va_args);
83 if (len == 0 && GetLastError() != NO_ERROR)
84 {
85 WINE_FIXME("Could not format string: le=%u, fmt=%s\n", GetLastError(), wine_dbgstr_w(fmt));
86 return;
87 }
90}
void output_writeconsole(const WCHAR *str, DWORD wlen)
Definition: reg.c:53
#define NO_ERROR
Definition: dderror.h:5
DWORD WINAPI FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:583
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
#define wine_dbgstr_w
Definition: kernel32.h:34
#define WINE_FIXME
Definition: debug.h:366
Definition: dsound.c:943
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define FORMAT_MESSAGE_FROM_STRING
Definition: winbase.h:421
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:419

Referenced by output_message(), and output_string().

◆ output_message()

void WINAPIV output_message ( unsigned int  id,
  ... 
)

Definition at line 92 of file reg.c.

93{
94 WCHAR *fmt = NULL;
95 int len;
96 va_list va_args;
97
98 if (!(len = LoadStringW(GetModuleHandleW(NULL), id, (WCHAR *)&fmt, 0)))
99 {
100 WINE_FIXME("LoadString failed with %d\n", GetLastError());
101 return;
102 }
103
104 len++;
105 fmt = malloc(len * sizeof(WCHAR));
106 if (!fmt) return;
107
109
110 va_start(va_args, id);
111 output_formatstring(fmt, va_args);
112 va_end(va_args);
113
114 free(fmt);
115}
char * va_list
Definition: acmsvcex.h:78
#define va_end(ap)
Definition: acmsvcex.h:90
#define va_start(ap, A)
Definition: acmsvcex.h:91
static void output_formatstring(const WCHAR *fmt, va_list va_args)
Definition: reg.c:76
#define free
Definition: debug_ros.c:5

Referenced by ask_confirm(), ask_overwrite_value(), delete_registry_key(), export_key(), get_file_handle(), get_regdata(), key_name_state(), open_export_key(), output_error(), parse_registry_key(), parse_win31_line_state(), query_value(), reg_add(), reg_copy(), reg_delete(), reg_export(), reg_import(), reg_query(), REGPROC_open_export_file(), REGPROC_unescape_string(), run_add(), run_delete(), run_query(), sane_path(), unescape_string(), unknown_data_state(), and wmain().

◆ output_string()

void WINAPIV output_string ( const WCHAR fmt,
  ... 
)

Definition at line 117 of file reg.c.

118{
119 va_list va_args;
120
121 va_start(va_args, fmt);
122 output_formatstring(fmt, va_args);
123 va_end(va_args);
124}

Referenced by output_value(), query_all(), query_value(), and run_query().

◆ output_writeconsole()

void output_writeconsole ( const WCHAR str,
DWORD  wlen 
)

Definition at line 53 of file reg.c.

54{
56
58 if (!ret)
59 {
60 DWORD len;
61 char *msgA;
62
63 /* On Windows WriteConsoleW() fails if the output is redirected. So fall
64 * back to WriteFile(), assuming the console encoding is still the right
65 * one in that case.
66 */
68 msgA = malloc(len);
69
72 free(msgA);
73 }
74}
#define WideCharToMultiByte
Definition: compat.h:111
UINT WINAPI DECLSPEC_HOTPATCH GetConsoleOutputCP(VOID)
Definition: console.c:2451
BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleW(IN HANDLE hConsoleOutput, IN CONST VOID *lpBuffer, IN DWORD nNumberOfCharsToWrite, OUT LPDWORD lpNumberOfCharsWritten, LPVOID lpReserved)
Definition: readwrite.c:1447
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: rw.c:24
int ret
#define STD_OUTPUT_HANDLE
Definition: winbase.h:268

Referenced by get_file_handle(), and output_formatstring().

◆ parse_registry_key()

BOOL parse_registry_key ( const WCHAR key,
HKEY root,
WCHAR **  path 
)

Definition at line 234 of file reg.c.

235{
236 WCHAR *p;
237
238 if (!sane_path(key))
239 return FALSE;
240
242 if (!*root)
243 {
245 return FALSE;
246 }
247
248 *path = wcschr(key, '\\');
249
250 if (!*path)
251 return TRUE;
252
253 (*path)++;
254
255 if (!**path)
256 {
258 return FALSE;
259 }
260
261 p = *path + lstrlenW(*path) - 1;
262 if (*p == '\\') *p = 0;
263
264 return TRUE;
265}
HKEY path_get_rootkey(const WCHAR *path)
Definition: reg.c:165
static BOOL sane_path(const WCHAR *key)
Definition: reg.c:179
#define STRING_INVALID_SYSTEM_KEY
Definition: resource.h:54
#define wcschr
Definition: compat.h:17
GLfloat GLfloat p
Definition: glext.h:8902

Referenced by reg_add(), reg_copy(), reg_delete(), reg_export(), and reg_query().

◆ path_get_rootkey()

HKEY path_get_rootkey ( const WCHAR path)

Definition at line 165 of file reg.c.

166{
167 DWORD i;
168
169 for (i = 0; i < ARRAY_SIZE(root_rels); i++)
170 {
173 return root_rels[i].key;
174 }
175
176 return NULL;
177}
const WCHAR * short_name
Definition: reg.c:29
static BOOL path_rootname_cmp(const WCHAR *input_path, const WCHAR *rootkey_name)
Definition: reg.c:157

Referenced by parse_key_name(), and parse_registry_key().

◆ path_rootname_cmp()

static BOOL path_rootname_cmp ( const WCHAR input_path,
const WCHAR rootkey_name 
)
inlinestatic

Definition at line 157 of file reg.c.

158{
159 DWORD length = lstrlenW(rootkey_name);
160
161 return (!_wcsnicmp(input_path, rootkey_name, length) &&
162 (input_path[length] == 0 || input_path[length] == '\\'));
163}
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)

Referenced by path_get_rootkey().

◆ sane_path()

static BOOL sane_path ( const WCHAR key)
static

Definition at line 179 of file reg.c.

180{
181 unsigned int i = lstrlenW(key);
182
183 if (i < 3 || (key[i - 1] == '\\' && key[i - 2] == '\\'))
184 {
186 return FALSE;
187 }
188
189 if (key[0] == '\\' && key[1] == '\\' && key[2] != '\\')
190 {
192 return FALSE;
193 }
194
195 return TRUE;
196}
#define STRING_INVALID_KEY
Definition: resource.h:52
#define STRING_NO_REMOTE
Definition: resource.h:53

Referenced by parse_registry_key().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( reg  )

◆ wmain()

int __cdecl wmain ( int  argc,
WCHAR argvW[] 
)

Definition at line 324 of file reg.c.

325{
326 int op, op_help;
327
328 if (argc == 1)
329 {
332 return 1;
333 }
334
335 if (is_help_switch(argvW[1]))
336 {
338 return 0;
339 }
340
341 op = get_operation(argvW[1], &op_help);
342
343 if (op == REG_INVALID)
344 {
347 return 1;
348 }
349 else if (argc == 2) /* Valid operation, no arguments supplied */
350 goto invalid;
351
352 if (is_help_switch(argvW[2]))
353 {
354 if (argc > 3) goto invalid;
355
356 output_message(op_help);
358 return 0;
359 }
360
361 if (op == REG_ADD)
362 return reg_add(argc, argvW);
363
364 if (op == REG_COPY)
365 return reg_copy(argc, argvW);
366
367 if (op == REG_DELETE)
368 return reg_delete(argc, argvW);
369
370 if (op == REG_EXPORT)
371 return reg_export(argc, argvW);
372
373 if (op == REG_IMPORT)
374 return reg_import(argc, argvW);
375
376 return reg_query(argc, argvW);
377
378invalid:
381 return 1;
382}
static int argc
Definition: ServiceArgs.c:12
int reg_add(int argc, WCHAR *argvW[])
Definition: add.c:227
int reg_copy(int argc, WCHAR *argvW[])
Definition: copy.c:193
int reg_delete(int argc, WCHAR *argvW[])
Definition: delete.c:134
int reg_export(int argc, WCHAR *argvW[])
Definition: export.c:347
int reg_import(int argc, WCHAR *argvW[])
Definition: import.c:980
int reg_query(int argc, WCHAR *argvW[])
Definition: query.c:339
static enum operations get_operation(const WCHAR *str, int *op_help)
Definition: reg.c:295
static BOOL is_help_switch(const WCHAR *s)
Definition: reg.c:280
#define STRING_USAGE
Definition: resource.h:44
#define STRING_INVALID_SYNTAX
Definition: resource.h:33
#define STRING_INVALID_OPTION
Definition: resource.h:55
#define STRING_FUNC_HELP
Definition: resource.h:34
#define STRING_REG_VIEW_USAGE
Definition: resource.h:51
#define STRING_REG_HELP
Definition: resource.h:43
static const WCHAR invalid[]
Definition: assoc.c:39
_CRTIMP wchar_t *__cdecl _wcsupr(_Inout_z_ wchar_t *_String)

Variable Documentation

◆ key

◆ long_name

const WCHAR* long_name

Definition at line 30 of file reg.c.

Referenced by get_long_key(), lfn_check_orphaned(), lfn_get(), and path_get_rootkey().

◆ 

const struct { ... } root_rels[]
Initial value:
=
{
{HKEY_LOCAL_MACHINE, L"HKLM", L"HKEY_LOCAL_MACHINE"},
{HKEY_CURRENT_USER, L"HKCU", L"HKEY_CURRENT_USER"},
{HKEY_CLASSES_ROOT, L"HKCR", L"HKEY_CLASSES_ROOT"},
{HKEY_USERS, L"HKU", L"HKEY_USERS"},
{HKEY_CURRENT_CONFIG, L"HKCC", L"HKEY_CURRENT_CONFIG"},
}
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define HKEY_CURRENT_CONFIG
Definition: winreg.h:15
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define HKEY_USERS
Definition: winreg.h:13

Referenced by get_long_key(), and path_get_rootkey().

◆ short_name

◆ type_rels

const struct reg_type_rels type_rels[]
Initial value:
=
{
{REG_NONE, L"REG_NONE"},
{REG_SZ, L"REG_SZ"},
{REG_EXPAND_SZ, L"REG_EXPAND_SZ"},
{REG_BINARY, L"REG_BINARY"},
{REG_DWORD, L"REG_DWORD"},
{REG_DWORD_LITTLE_ENDIAN, L"REG_DWORD_LITTLE_ENDIAN"},
{REG_DWORD_BIG_ENDIAN, L"REG_DWORD_BIG_ENDIAN"},
{REG_MULTI_SZ, L"REG_MULTI_SZ"},
}
#define REG_SZ
Definition: layer.c:22
#define REG_BINARY
Definition: nt_native.h:1496
#define REG_DWORD_LITTLE_ENDIAN
Definition: nt_native.h:1498
#define REG_DWORD_BIG_ENDIAN
Definition: nt_native.h:1499
#define REG_MULTI_SZ
Definition: nt_native.h:1501
#define REG_NONE
Definition: nt_native.h:1492
#define REG_EXPAND_SZ
Definition: nt_native.h:1494
#define REG_DWORD
Definition: sdbapi.c:596

Definition at line 41 of file reg.c.

Referenced by reg_type_to_wchar(), and wchar_get_type().