22 #include <wine/unicode.h> 34 static const WCHAR long_hklm[] = {
'H',
'K',
'E',
'Y',
'_',
'L',
'O',
'C',
'A',
'L',
'_',
'M',
'A',
'C',
'H',
'I',
'N',
'E',0};
35 static const WCHAR long_hkcu[] = {
'H',
'K',
'E',
'Y',
'_',
'C',
'U',
'R',
'R',
'E',
'N',
'T',
'_',
'U',
'S',
'E',
'R',0};
36 static const WCHAR long_hkcr[] = {
'H',
'K',
'E',
'Y',
'_',
'C',
'L',
'A',
'S',
'S',
'E',
'S',
'_',
'R',
'O',
'O',
'T',0};
37 static const WCHAR long_hku[] = {
'H',
'K',
'E',
'Y',
'_',
'U',
'S',
'E',
'R',
'S',0};
38 static const WCHAR long_hkcc[] = {
'H',
'K',
'E',
'Y',
'_',
'C',
'U',
'R',
'R',
'E',
'N',
'T',
'_',
'C',
'O',
'N',
'F',
'I',
'G',0};
57 static const WCHAR type_expand_sz[] = {
'R',
'E',
'G',
'_',
'E',
'X',
'P',
'A',
'N',
'D',
'_',
'S',
'Z',0};
58 static const WCHAR type_binary[] = {
'R',
'E',
'G',
'_',
'B',
'I',
'N',
'A',
'R',
'Y',0};
60 static const WCHAR type_dword_le[] = {
'R',
'E',
'G',
'_',
'D',
'W',
'O',
'R',
'D',
'_',
'L',
'I',
'T',
'T',
'L',
'E',
'_',
'E',
'N',
'D',
'I',
'A',
'N',0};
61 static const WCHAR type_dword_be[] = {
'R',
'E',
'G',
'_',
'D',
'W',
'O',
'R',
'D',
'_',
'B',
'I',
'G',
'_',
'E',
'N',
'D',
'I',
'A',
'N',0};
62 static const WCHAR type_multi_sz[] = {
'R',
'E',
'G',
'_',
'M',
'U',
'L',
'T',
'I',
'_',
'S',
'Z',0};
88 ERR(
"Out of memory!\n");
100 ERR(
"Out of memory!\n");
195 if (answer[0] == Ybuffer[0])
197 if (answer[0] == Nbuffer[0])
207 (input_path[
length] == 0 || input_path[
length] ==
'\\'));
243 if (ch >=
'0' && ch <=
'9')
245 else if (ch >=
'a' && ch <=
'f')
246 return ch -
'a' + 10;
247 else if (ch >=
'A' && ch <=
'F')
248 return ch -
'A' + 10;
283 *reg_count =
sizeof(
DWORD);
299 out_data[destByteIndex++] = hex1;
305 if(hex0 == 0xFF || hex1 == 0xFF)
307 out_data[destByteIndex++] = (hex0 << 4) | hex1;
322 for (
i = 0, destindex = 0;
i <
len;
i++, destindex++)
334 if (destindex && !
buffer[destindex - 1] && (!
buffer[destindex] || destindex == 1))
342 if (destindex &&
buffer[destindex - 1])
344 *reg_count = (destindex + 1) *
sizeof(
WCHAR);
358 if (
i < 3 || (
key[
i - 1] ==
'\\' &&
key[
i - 2] ==
'\\'))
364 if (
key[0] ==
'\\' &&
key[1] ==
'\\' &&
key[2] !=
'\\')
457 if (!
value_name && !value_empty && !value_all)
476 DWORD max_value_len = 256, value_len;
484 value_len = max_value_len;
537 static const WCHAR fmt[] = {
'%',
'0',
'2',
'X',0};
541 for (
i = 0;
i < size_bytes;
i++)
549 const int zero_x_dword = 10;
550 static const WCHAR fmt[] = {
'0',
'x',
'%',
'x',0};
574 for (
i = 0, destindex = 0;
i <
len;
i++, destindex++)
580 buffer[destindex++] =
'\\';
605 static const WCHAR fmt[] = {
' ',
' ',
' ',
' ',
'%',
'1',0};
635 static const WCHAR fmt[] = {
'%',
's',
'\\',
'%',
's',0};
653 WCHAR *subkey_name, *subkey_path;
725 DWORD max_value_len = 256, value_len;
730 WCHAR fmt_path[] = {
'%',
'1',
'\\',
'%',
'2',
'\n',0};
743 value_len = max_value_len;
840 WCHAR fmt[] = {
'%',
's',
'\\',
'%',
's',0};
869 if (*
path) (*path)++;
889 if ((
s[0] ==
'/' ||
s[0] ==
'-') && (
s[1] ==
c ||
s[1] ==
toupperW(
c)))
916 static const WCHAR add[] = {
'a',
'd',
'd',0};
917 static const WCHAR delete[] = {
'd',
'e',
'l',
'e',
't',
'e',0};
918 static const WCHAR import[] = {
'i',
'm',
'p',
'o',
'r',
't',0};
919 static const WCHAR export[] = {
'e',
'x',
'p',
'o',
'r',
't',0};
920 static const WCHAR query[] = {
'q',
'u',
'e',
'r',
'y',0};
922 static const struct op_info op_array[] =
938 *op_help =
ptr->help_id;
950 static const WCHAR switchVAW[] = {
'v',
'a',0};
951 static const WCHAR switchVEW[] = {
'v',
'e',0};
987 else if (show_op_help)
1004 if (argvW[
i][0] ==
'/' || argvW[
i][0] ==
'-')
1018 else if (!
ptr[0] ||
ptr[1])
1027 if (value_name || !(value_name = argvW[++
i]))
1072 if ((value_name && value_empty) || (value_name && value_all) || (value_empty && value_all))
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 * u
#define STRING_VALUE_NOT_SET
static const WCHAR newlineW[]
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
static const struct @3 type_rels[]
#define STRING_OVERWRITE_VALUE
static const char __ms_va_list
static int reg_delete(HKEY root, WCHAR *path, WCHAR *key_name, WCHAR *value_name, BOOL value_empty, BOOL value_all, BOOL force)
static const WCHAR long_hklm[]
static const WCHAR separator[]
#define STRING_MISSING_HEXDATA
static void WINAPIV output_string(const WCHAR *fmt,...)
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
int wmain(int argc, WCHAR *argvW[])
#define WideCharToMultiByte
GLenum GLuint GLenum GLsizei const GLchar * buf
static const WCHAR long_hku[]
GLsizei const GLchar ** path
WINE_UNICODE_INLINE WCHAR * strchrW(const WCHAR *str, WCHAR ch)
#define STRING_DELETE_VALUE
static const WCHAR empty[]
static DWORD wchar_get_type(const WCHAR *type_name)
BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleW(IN HANDLE hConsoleOutput, IN CONST VOID *lpBuffer, IN DWORD nNumberOfCharsToWrite, OUT LPDWORD lpNumberOfCharsWritten, LPVOID lpReserved)
GLuint GLuint GLsizei count
#define HKEY_CURRENT_USER
#define FORMAT_MESSAGE_FROM_STRING
static int reg_query(HKEY root, WCHAR *path, WCHAR *key_name, WCHAR *value_name, BOOL value_empty, BOOL recurse)
#define STRING_QUERY_USAGE
GLuint GLuint GLsizei GLenum type
static const WCHAR type_sz[]
DWORD WINAPI GetLastError(VOID)
HANDLE WINAPI GetStdHandle(IN DWORD nStdHandle)
static WCHAR * get_long_key(HKEY root, WCHAR *path)
void WINAPIV output_message(unsigned int id,...)
static BOOL is_help_switch(const WCHAR *s)
#define STRING_INVALID_STRING
_Check_return_ unsigned long __cdecl wcstoul(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
#define STRING_VALUEALL_FAILED
#define strncmpiW(s1, s2, n)
BOOL parse_registry_key(const WCHAR *key, HKEY *root, WCHAR **path, WCHAR **long_key)
int const JOCTET unsigned int datalen
#define HKEY_CURRENT_CONFIG
static BYTE hexchar_to_byte(WCHAR ch)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
static void * heap_realloc(void *mem, size_t len)
#define STRING_DELETE_VALUEALL
static const WCHAR type_none[]
static void * heap_alloc(size_t len)
static const WCHAR short_hklm[]
static const WCHAR long_hkcr[]
#define STRING_CANNOT_FIND
int WINAPI lstrcmpiW(LPCWSTR lpString1, LPCWSTR lpString2)
static const WCHAR type_dword_be[]
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
LONG WINAPI RegCloseKey(HKEY hKey)
#define STRING_EXPORT_USAGE
static BOOL is_switch(const WCHAR *s, const WCHAR c)
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
#define STRING_INVALID_CMDLINE
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
static enum operations get_operation(const WCHAR *str, int *op_help)
char * wine_dbgstr_w(const wchar_t *wstr)
#define STRING_INVALID_KEY
UINT WINAPI DECLSPEC_HOTPATCH GetConsoleOutputCP(VOID)
static const WCHAR short_hku[]
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)
static int reg_add(HKEY root, WCHAR *path, WCHAR *value_name, BOOL value_empty, WCHAR *type, WCHAR separator, WCHAR *data, BOOL force)
#define STRING_INVALID_SYSTEM_KEY
#define STRING_MISSING_INTEGER
#define STRING_IMPORT_USAGE
#define ERROR_FILE_NOT_FOUND
static const WCHAR long_hkcu[]
WINE_UNICODE_INLINE WCHAR toupperW(WCHAR ch)
static const WCHAR long_hkcc[]
static void output_formatstring(const WCHAR *fmt, __ms_va_list va_args)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
WCHAR * build_subkey_path(WCHAR *path, DWORD path_len, WCHAR *subkey_name, DWORD subkey_len)
BOOL WINAPI DECLSPEC_HOTPATCH ReadConsoleW(IN HANDLE hConsoleInput, OUT LPVOID lpBuffer, IN DWORD nNumberOfCharsToRead, OUT LPDWORD lpNumberOfCharsRead, IN PCONSOLE_READCONSOLE_CONTROL pInputControl OPTIONAL)
static const WCHAR type_multi_sz[]
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
static const WCHAR short_hkcc[]
static LPBYTE get_regdata(const WCHAR *data, DWORD reg_type, WCHAR separator, DWORD *reg_count)
GLenum GLuint GLenum GLsizei length
#define STRING_INVALID_SYNTAX
WINE_UNICODE_INLINE WCHAR tolowerW(WCHAR ch)
static BOOL path_rootname_cmp(const WCHAR *input_path, const WCHAR *rootkey_name)
static const WCHAR type_binary[]
static WCHAR * reg_data_to_wchar(DWORD type, const BYTE *src, DWORD size_bytes)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
static const WCHAR short_hkcu[]
#define REG_DWORD_LITTLE_ENDIAN
WINE_DEFAULT_DEBUG_CHANNEL(reg)
static const WCHAR type_dword[]
#define STRING_DELETE_SUBKEY
#define STRING_MATCHES_FOUND
LONG WINAPI RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
int reg_import(const WCHAR *filename)
static BOOL sane_path(const WCHAR *key)
void * heap_xrealloc(void *buf, size_t size)
#define STD_OUTPUT_HANDLE
static void output_value(const WCHAR *value_name, DWORD type, BYTE *data, DWORD data_size)
#define REG_DWORD_BIG_ENDIAN
static PEXPLICIT_ACCESSW *static HMODULE hmod
LSTATUS WINAPI RegDeleteTreeW(HKEY hKey, LPCWSTR lpszSubKey)
#define STRING_UNHANDLED_TYPE
static const WCHAR type_expand_sz[]
#define STRING_DEFAULT_VALUE
BOOL ask_confirm(unsigned int msgid, WCHAR *reg_info)
WINE_UNICODE_INLINE WCHAR * strcpyW(WCHAR *dst, const WCHAR *src)
LONG WINAPI RegDeleteValueW(HKEY hKey, LPCWSTR lpValueName)
HLOCAL NTAPI LocalFree(HLOCAL hMem)
#define STRING_DELETE_USAGE
static const WCHAR short_hkcr[]
#define __ms_va_end(list)
HKEY path_get_rootkey(const WCHAR *path)
#define STRING_UNSUPPORTED_TYPE
#define __ms_va_start(list, arg)
static unsigned int num_values_found
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
#define HKEY_CLASSES_ROOT
int reg_export(int argc, WCHAR *argv[])
void * heap_xalloc(size_t size)
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)
#define STRING_INVALID_OPTION
static const WCHAR type_dword_le[]
static int query_all(HKEY key, WCHAR *path, BOOL recurse)
void output_writeconsole(const WCHAR *str, DWORD wlen)
static ULONG ULONG *static const UNICODE_STRING void DWORD
static const struct @2 root_rels[]
static BOOL heap_free(void *mem)
static int query_value(HKEY key, WCHAR *value_name, WCHAR *path, BOOL recurse)
#define HKEY_LOCAL_MACHINE
static const WCHAR * reg_type_to_wchar(DWORD type)
WINE_UNICODE_INLINE WCHAR * struprW(WCHAR *str)