ReactOS  0.4.14-dev-614-gbfd8a84
registrar.c File Reference
#include "wine/atlbase.h"
#include "wine/debug.h"
Include dependency graph for registrar.c:

Go to the source code of this file.

Classes

struct  rep_list_str
 
struct  Registrar
 
struct  strbuf
 

Macros

#define COBJMACROS
 

Typedefs

typedef struct rep_list_str rep_list
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (atl)
 
static Registrarimpl_from_IRegistrar (IRegistrar *iface)
 
static void strbuf_init (strbuf *buf)
 
static void strbuf_write (LPCOLESTR str, strbuf *buf, int len)
 
static HRESULT get_word (LPCOLESTR *str, strbuf *buf)
 
static HRESULT do_preprocess (const Registrar *This, LPCOLESTR data, strbuf *buf)
 
static HRESULT do_process_key (LPCOLESTR *pstr, HKEY parent_key, strbuf *buf, BOOL do_register)
 
static HRESULT do_process_root_key (LPCOLESTR data, BOOL do_register)
 
static HRESULT string_register (Registrar *This, LPCOLESTR data, BOOL do_register)
 
static HRESULT resource_register (Registrar *This, LPCOLESTR resFileName, LPCOLESTR szID, LPCOLESTR szType, BOOL do_register)
 
static HRESULT file_register (Registrar *This, LPCOLESTR fileName, BOOL do_register)
 
static HRESULT WINAPI Registrar_QueryInterface (IRegistrar *iface, REFIID riid, void **ppvObject)
 
static ULONG WINAPI Registrar_AddRef (IRegistrar *iface)
 
static ULONG WINAPI Registrar_Release (IRegistrar *iface)
 
static HRESULT WINAPI Registrar_AddReplacement (IRegistrar *iface, LPCOLESTR Key, LPCOLESTR item)
 
static HRESULT WINAPI Registrar_ClearReplacements (IRegistrar *iface)
 
static HRESULT WINAPI Registrar_ResourceRegisterSz (IRegistrar *iface, LPCOLESTR resFileName, LPCOLESTR szID, LPCOLESTR szType)
 
static HRESULT WINAPI Registrar_ResourceUnregisterSz (IRegistrar *iface, LPCOLESTR resFileName, LPCOLESTR szID, LPCOLESTR szType)
 
static HRESULT WINAPI Registrar_FileRegister (IRegistrar *iface, LPCOLESTR fileName)
 
static HRESULT WINAPI Registrar_FileUnregister (IRegistrar *iface, LPCOLESTR fileName)
 
static HRESULT WINAPI Registrar_StringRegister (IRegistrar *iface, LPCOLESTR data)
 
static HRESULT WINAPI Registrar_StringUnregister (IRegistrar *iface, LPCOLESTR data)
 
static HRESULT WINAPI Registrar_ResourceRegister (IRegistrar *iface, LPCOLESTR resFileName, UINT nID, LPCOLESTR szType)
 
static HRESULT WINAPI Registrar_ResourceUnregister (IRegistrar *iface, LPCOLESTR resFileName, UINT nID, LPCOLESTR szType)
 
HRESULT WINAPI AtlCreateRegistrar (IRegistrar **ret)
 
HRESULT WINAPI AtlUpdateRegistryFromResourceD (HINSTANCE inst, LPCOLESTR res, BOOL bRegister, struct _ATL_REGMAP_ENTRY *pMapEntries, IRegistrar *pReg)
 

Variables

struct {
   WCHAR   name [22]
 
   HKEY   key
 
root_keys []
 
static const IRegistrarVtbl RegistrarVtbl
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 19 of file registrar.c.

Typedef Documentation

◆ rep_list

Function Documentation

◆ AtlCreateRegistrar()

HRESULT WINAPI AtlCreateRegistrar ( IRegistrar **  ret)

Definition at line 687 of file registrar.c.

688 {
689  Registrar *registrar;
690 
691  registrar = HeapAlloc(GetProcessHeap(), 0, sizeof(*registrar));
692  if(!registrar)
693  return E_OUTOFMEMORY;
694 
695  registrar->IRegistrar_iface.lpVtbl = &RegistrarVtbl;
696  registrar->ref = 1;
697  registrar->rep = NULL;
698 
699  *ret = &registrar->IRegistrar_iface;
700  return S_OK;
701 }
LONG ref
Definition: registrar.c:67
IRegistrar IRegistrar_iface
Definition: registrar.c:66
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
smooth NULL
Definition: ftsmooth.c:416
rep_list * rep
Definition: registrar.c:68
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
static const IRegistrarVtbl RegistrarVtbl
Definition: registrar.c:668
int ret
#define S_OK
Definition: intsafe.h:59

Referenced by AtlUpdateRegistryFromResourceD(), and RegistrarCF_CreateInstance().

◆ AtlUpdateRegistryFromResourceD()

HRESULT WINAPI AtlUpdateRegistryFromResourceD ( HINSTANCE  inst,
LPCOLESTR  res,
BOOL  bRegister,
struct _ATL_REGMAP_ENTRY pMapEntries,
IRegistrar pReg 
)

Definition at line 706 of file registrar.c.

708 {
709  const struct _ATL_REGMAP_ENTRY *iter;
711  IRegistrar *registrar;
712  HRESULT hres;
713 
714  static const WCHAR moduleW[] = {'M','O','D','U','L','E',0};
715  static const WCHAR registryW[] = {'R','E','G','I','S','T','R','Y',0};
716 
718  FIXME("hinst %p: did not get module name\n", inst);
719  return E_FAIL;
720  }
721 
722  TRACE("%p (%s), %s, %d, %p, %p\n", inst, debugstr_w(module_name),
723  debugstr_w(res), bRegister, pMapEntries, pReg);
724 
725  if(pReg) {
726  registrar = pReg;
727  }else {
728  hres = AtlCreateRegistrar(&registrar);
729  if(FAILED(hres))
730  return hres;
731  }
732 
733  IRegistrar_AddReplacement(registrar, moduleW, module_name);
734 
735  for (iter = pMapEntries; iter && iter->szKey; iter++)
736  IRegistrar_AddReplacement(registrar, iter->szKey, iter->szData);
737 
738  if(bRegister)
739  hres = IRegistrar_ResourceRegisterSz(registrar, module_name, res, registryW);
740  else
741  hres = IRegistrar_ResourceUnregisterSz(registrar, module_name, res, registryW);
742 
743  if(registrar != pReg)
744  IRegistrar_Release(registrar);
745  return hres;
746 }
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:609
LPCOLESTR szData
Definition: atlbase.h:244
HRESULT WINAPI AtlCreateRegistrar(IRegistrar **ret)
Definition: registrar.c:687
static LPCWSTR LPCWSTR module_name
Definition: db.cpp:168
#define E_FAIL
Definition: ddrawi.h:102
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110
LPCOLESTR szKey
Definition: atlbase.h:243
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
#define MAX_PATH
Definition: compat.h:26
Definition: atlbase.h:241
static const WCHAR moduleW[]
Definition: register.c:35
GLuint res
Definition: glext.h:9613

Referenced by AtlModuleUpdateRegistryFromResourceD().

◆ do_preprocess()

static HRESULT do_preprocess ( const Registrar This,
LPCOLESTR  data,
strbuf buf 
)
static

Definition at line 141 of file registrar.c.

142 {
143  LPCOLESTR iter, iter2 = data;
144  rep_list *rep_iter;
145  static const WCHAR wstr[] = {'%',0};
146 
147  iter = wcschr(data, '%');
148  while(iter) {
149  strbuf_write(iter2, buf, iter-iter2);
150 
151  iter2 = ++iter;
152  if(!*iter2)
153  return DISP_E_EXCEPTION;
154  iter = wcschr(iter2, '%');
155  if(!iter)
156  return DISP_E_EXCEPTION;
157 
158  if(iter == iter2) {
159  strbuf_write(wstr, buf, 1);
160  }else {
161  for(rep_iter = This->rep; rep_iter; rep_iter = rep_iter->next) {
162  if(rep_iter->key_len == iter-iter2
163  && !_wcsnicmp(iter2, rep_iter->key, rep_iter->key_len))
164  break;
165  }
166  if(!rep_iter) {
167  WARN("Could not find replacement: %s\n", debugstr_wn(iter2, iter-iter2));
168  return DISP_E_EXCEPTION;
169  }
170 
171  strbuf_write(rep_iter->item, buf, -1);
172  }
173 
174  iter2 = ++iter;
175  iter = wcschr(iter, '%');
176  }
177 
178  strbuf_write(iter2, buf, -1);
179  TRACE("%s\n", debugstr_w(buf->str));
180 
181  return S_OK;
182 }
#define DISP_E_EXCEPTION
Definition: winerror.h:2518
LPOLESTR key
Definition: registrar.c:59
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define WARN(fmt,...)
Definition: debug.h:111
_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)
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
_CONST_RETURN wchar_t *__cdecl wcschr(_In_z_ const wchar_t *_Str, wchar_t _Ch)
__wchar_t WCHAR
Definition: xmlstorage.h:180
struct rep_list_str * next
Definition: registrar.c:62
LPOLESTR item
Definition: registrar.c:60
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define debugstr_wn
Definition: kernel32.h:33
#define S_OK
Definition: intsafe.h:59
static void strbuf_write(LPCOLESTR str, strbuf *buf, int len)
Definition: registrar.c:89

Referenced by string_register().

◆ do_process_key()

static HRESULT do_process_key ( LPCOLESTR *  pstr,
HKEY  parent_key,
strbuf buf,
BOOL  do_register 
)
static

Definition at line 184 of file registrar.c.

185 {
186  LPCOLESTR iter;
187  HRESULT hres;
188  LONG lres;
189  HKEY hkey = 0;
190  strbuf name;
191 
192  enum {
193  NORMAL,
194  NO_REMOVE,
195  IS_VAL,
196  FORCE_REMOVE,
197  DO_DELETE
198  } key_type = NORMAL;
199 
200  static const WCHAR wstrNoRemove[] = {'N','o','R','e','m','o','v','e',0};
201  static const WCHAR wstrForceRemove[] = {'F','o','r','c','e','R','e','m','o','v','e',0};
202  static const WCHAR wstrDelete[] = {'D','e','l','e','t','e',0};
203  static const WCHAR wstrval[] = {'v','a','l',0};
204 
205  iter = *pstr;
206  hres = get_word(&iter, buf);
207  if(FAILED(hres))
208  return hres;
209  strbuf_init(&name);
210 
211  while(buf->str[1] || buf->str[0] != '}') {
212  key_type = NORMAL;
213  if(!lstrcmpiW(buf->str, wstrNoRemove))
214  key_type = NO_REMOVE;
215  else if(!lstrcmpiW(buf->str, wstrForceRemove))
216  key_type = FORCE_REMOVE;
217  else if(!lstrcmpiW(buf->str, wstrval))
218  key_type = IS_VAL;
219  else if(!lstrcmpiW(buf->str, wstrDelete))
220  key_type = DO_DELETE;
221 
222  if(key_type != NORMAL) {
223  hres = get_word(&iter, buf);
224  if(FAILED(hres))
225  break;
226  }
227  TRACE("name = %s\n", debugstr_w(buf->str));
228 
229  if(do_register) {
230  if(key_type == IS_VAL) {
231  hkey = parent_key;
232  strbuf_write(buf->str, &name, -1);
233  }else if(key_type == DO_DELETE) {
234  TRACE("Deleting %s\n", debugstr_w(buf->str));
235  RegDeleteTreeW(parent_key, buf->str);
236  }else {
237  if(key_type == FORCE_REMOVE)
238  RegDeleteTreeW(parent_key, buf->str);
239  lres = RegCreateKeyW(parent_key, buf->str, &hkey);
240  if(lres != ERROR_SUCCESS) {
241  WARN("Could not create(open) key: %08x\n", lres);
242  hres = HRESULT_FROM_WIN32(lres);
243  break;
244  }
245  }
246  }else if(key_type != IS_VAL && key_type != DO_DELETE) {
247  strbuf_write(buf->str, &name, -1);
248  lres = RegOpenKeyW(parent_key, buf->str, &hkey);
249  if(lres != ERROR_SUCCESS)
250  WARN("Could not open key %s: %08x\n", debugstr_w(name.str), lres);
251  }
252 
253  if(key_type != DO_DELETE && *iter == '=') {
254  iter++;
255  hres = get_word(&iter, buf);
256  if(FAILED(hres))
257  break;
258  if(buf->len != 1) {
259  WARN("Wrong registry type: %s\n", debugstr_w(buf->str));
261  break;
262  }
263  if(do_register) {
264  switch(buf->str[0]) {
265  case 's':
266  hres = get_word(&iter, buf);
267  if(FAILED(hres))
268  break;
269  lres = RegSetValueExW(hkey, name.len ? name.str : NULL, 0, REG_SZ, (PBYTE)buf->str,
270  (lstrlenW(buf->str)+1)*sizeof(WCHAR));
271  if(lres != ERROR_SUCCESS) {
272  WARN("Could set value of key: %08x\n", lres);
273  hres = HRESULT_FROM_WIN32(lres);
274  break;
275  }
276  break;
277  case 'd': {
278  DWORD dw;
279  hres = get_word(&iter, buf);
280  if(FAILED(hres))
281  break;
282  dw = wcstol(buf->str, NULL, 10);
283  lres = RegSetValueExW(hkey, name.len ? name.str : NULL, 0, REG_DWORD,
284  (PBYTE)&dw, sizeof(dw));
285  if(lres != ERROR_SUCCESS) {
286  WARN("Could set value of key: %08x\n", lres);
287  hres = HRESULT_FROM_WIN32(lres);
288  break;
289  }
290  break;
291  }
292  case 'b': {
293  BYTE *bytes;
294  DWORD count;
295  DWORD i;
296  hres = get_word(&iter, buf);
297  if(FAILED(hres))
298  break;
299  count = (lstrlenW(buf->str) + 1) / 2;
301  if(bytes == NULL) {
303  break;
304  }
305  for(i = 0; i < count && buf->str[2*i]; i++) {
306  WCHAR digits[3];
307  if(!iswxdigit(buf->str[2*i]) || !iswxdigit(buf->str[2*i + 1])) {
308  hres = E_FAIL;
309  break;
310  }
311  digits[0] = buf->str[2*i];
312  digits[1] = buf->str[2*i + 1];
313  digits[2] = 0;
314  bytes[i] = (BYTE) wcstoul(digits, NULL, 16);
315  }
316  if(SUCCEEDED(hres)) {
317  lres = RegSetValueExW(hkey, name.len ? name.str : NULL, 0, REG_BINARY,
318  bytes, count);
319  if(lres != ERROR_SUCCESS) {
320  WARN("Could not set value of key: 0x%08x\n", lres);
321  hres = HRESULT_FROM_WIN32(lres);
322  }
323  }
325  break;
326  }
327  default:
328  WARN("Wrong resource type: %s\n", debugstr_w(buf->str));
330  };
331  if(FAILED(hres))
332  break;
333  }else {
334  if(*iter == '-')
335  iter++;
336  hres = get_word(&iter, buf);
337  if(FAILED(hres))
338  break;
339  }
340  }else if(key_type == IS_VAL) {
341  WARN("value not set!\n");
343  break;
344  }
345 
346  if(key_type != IS_VAL && key_type != DO_DELETE && *iter == '{' && iswspace(iter[1])) {
347  hres = get_word(&iter, buf);
348  if(FAILED(hres))
349  break;
350  hres = do_process_key(&iter, hkey, buf, do_register);
351  if(FAILED(hres))
352  break;
353  }
354 
355  TRACE("%x %x\n", do_register, key_type);
356  if(!do_register && (key_type == NORMAL || key_type == FORCE_REMOVE)) {
357  TRACE("Deleting %s\n", debugstr_w(name.str));
358  RegDeleteKeyW(parent_key, name.str);
359  }
360 
361  if(hkey && key_type != IS_VAL)
362  RegCloseKey(hkey);
363  hkey = 0;
364  name.len = 0;
365 
366  hres = get_word(&iter, buf);
367  if(FAILED(hres))
368  break;
369  }
370 
371  HeapFree(GetProcessHeap(), 0, name.str);
372  if(hkey && key_type != IS_VAL)
373  RegCloseKey(hkey);
374  *pstr = iter;
375  return hres;
376 }
#define DISP_E_EXCEPTION
Definition: winerror.h:2518
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define ERROR_SUCCESS
Definition: deptool.c:10
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define REG_BINARY
Definition: nt_native.h:1496
#define iswxdigit(_c)
Definition: ctype.h:668
GLuint GLuint GLsizei count
Definition: gl.h:1545
#define WARN(fmt,...)
Definition: debug.h:111
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
Definition: reg.c:1237
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
_Check_return_ unsigned long __cdecl wcstoul(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
#define lstrlenW
Definition: compat.h:415
#define E_FAIL
Definition: ddrawi.h:102
int WINAPI lstrcmpiW(LPCWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:194
WCHAR name[22]
Definition: registrar.c:32
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
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
static unsigned char bytes[4]
Definition: adnsresfilter.c:74
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
long LONG
Definition: pedump.c:60
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3296
static HRESULT do_process_key(LPCOLESTR *pstr, HKEY parent_key, strbuf *buf, BOOL do_register)
Definition: registrar.c:184
#define debugstr_w
Definition: kernel32.h:32
smooth NULL
Definition: ftsmooth.c:416
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:4895
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
unsigned long DWORD
Definition: ntddk_ex.h:95
static void strbuf_init(strbuf *buf)
Definition: registrar.c:82
REFIID LPVOID DWORD dw
Definition: atlbase.h:40
#define iswspace(_c)
Definition: ctype.h:669
#define NO_REMOVE
Definition: classpnp.h:93
unsigned char BYTE
Definition: mem.h:68
LONG WINAPI RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:1199
LSTATUS WINAPI RegDeleteTreeW(HKEY hKey, LPCWSTR lpszSubKey)
Definition: reg.c:1746
static void strbuf_write(LPCOLESTR str, strbuf *buf, int len)
Definition: registrar.c:89
static HRESULT get_word(LPCOLESTR *str, strbuf *buf)
Definition: registrar.c:102
Definition: name.c:38
#define REG_DWORD
Definition: sdbapi.c:596
BYTE * PBYTE
Definition: pedump.c:66
static const int digits[]
Definition: decode.c:71
#define HeapFree(x, y, z)
Definition: compat.h:402
#define SUCCEEDED(hr)
Definition: intsafe.h:57
#define REG_SZ
Definition: layer.c:22
Definition: cdmake.c:189

Referenced by do_process_root_key().

◆ do_process_root_key()

static HRESULT do_process_root_key ( LPCOLESTR  data,
BOOL  do_register 
)
static

Definition at line 378 of file registrar.c.

379 {
380  LPCOLESTR iter = data;
381  strbuf buf;
382  HRESULT hres;
383  unsigned int i;
384 
385  strbuf_init(&buf);
386  hres = get_word(&iter, &buf);
387  if(FAILED(hres))
388  return hres;
389 
390  while(*iter) {
391  if(!buf.len) {
392  WARN("ward.len == 0, failed\n");
394  break;
395  }
396  for(i=0; i<ARRAY_SIZE(root_keys); i++) {
397  if(!lstrcmpiW(buf.str, root_keys[i].name))
398  break;
399  }
400  if(i == ARRAY_SIZE(root_keys)) {
401  WARN("Wrong root key name: %s\n", debugstr_w(buf.str));
403  break;
404  }
405  hres = get_word(&iter, &buf);
406  if(FAILED(hres))
407  break;
408  if(buf.str[1] || buf.str[0] != '{') {
409  WARN("Failed, expected '{', got %s\n", debugstr_w(buf.str));
411  break;
412  }
413  hres = do_process_key(&iter, root_keys[i].key, &buf, do_register);
414  if(FAILED(hres)) {
415  WARN("Processing key failed: %08x\n", hres);
416  break;
417  }
418  hres = get_word(&iter, &buf);
419  if(FAILED(hres))
420  break;
421  }
422  HeapFree(GetProcessHeap(), 0, buf.str);
423  return hres;
424 }
#define DISP_E_EXCEPTION
Definition: winerror.h:2518
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define WARN(fmt,...)
Definition: debug.h:111
int WINAPI lstrcmpiW(LPCWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:194
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
static HRESULT do_process_key(LPCOLESTR *pstr, HKEY parent_key, strbuf *buf, BOOL do_register)
Definition: registrar.c:184
#define debugstr_w
Definition: kernel32.h:32
static const struct @318 root_keys[]
HRESULT hres
Definition: protocol.c:465
#define GetProcessHeap()
Definition: compat.h:403
LONG HRESULT
Definition: typedefs.h:77
static void strbuf_init(strbuf *buf)
Definition: registrar.c:82
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define ARRAY_SIZE(a)
Definition: main.h:24
static HRESULT get_word(LPCOLESTR *str, strbuf *buf)
Definition: registrar.c:102
#define HeapFree(x, y, z)
Definition: compat.h:402
Definition: path.c:41

Referenced by string_register().

◆ file_register()

static HRESULT file_register ( Registrar This,
LPCOLESTR  fileName,
BOOL  do_register 
)
static

Definition at line 491 of file registrar.c.

492 {
493  HANDLE file;
494  DWORD filelen, len;
495  LPWSTR regstrw;
496  LPSTR regstra;
497  HRESULT hres;
498 
500  if(file != INVALID_HANDLE_VALUE) {
501  filelen = GetFileSize(file, NULL);
502  regstra = HeapAlloc(GetProcessHeap(), 0, filelen);
503  if(ReadFile(file, regstra, filelen, NULL, NULL)) {
504  len = MultiByteToWideChar(CP_ACP, 0, regstra, filelen, NULL, 0)+1;
505  regstrw = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len*sizeof(WCHAR));
506  MultiByteToWideChar(CP_ACP, 0, regstra, filelen, regstrw, len);
507  regstrw[len-1] = '\0';
508 
509  hres = string_register(This, regstrw, do_register);
510 
511  HeapFree(GetProcessHeap(), 0, regstrw);
512  }else {
513  WARN("Failed to read file %s\n", debugstr_w(fileName));
515  }
516  HeapFree(GetProcessHeap(), 0, regstra);
517  CloseHandle(file);
518  }else {
519  WARN("Could not open file %s\n", debugstr_w(fileName));
521  }
522 
523  return hres;
524 }
#define CloseHandle
Definition: compat.h:406
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define CP_ACP
Definition: compat.h:99
#define WARN(fmt,...)
Definition: debug.h:111
#define INVALID_HANDLE_VALUE
Definition: compat.h:399
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
char * LPSTR
Definition: xmlstorage.h:182
#define FILE_SHARE_READ
Definition: compat.h:125
#define debugstr_w
Definition: kernel32.h:32
smooth NULL
Definition: ftsmooth.c:416
#define OPEN_EXISTING
Definition: compat.h:434
HRESULT hres
Definition: protocol.c:465
static HRESULT string_register(Registrar *This, LPCOLESTR data, BOOL do_register)
Definition: registrar.c:426
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
const char file[]
Definition: icontest.c:11
unsigned long DWORD
Definition: ntddk_ex.h:95
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
Definition: fileinfo.c:481
GLenum GLsizei len
Definition: glext.h:6722
#define GENERIC_READ
Definition: compat.h:124
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
#define MultiByteToWideChar
Definition: compat.h:100
#define CreateFileW
Definition: compat.h:408
WCHAR * LPWSTR
Definition: xmlstorage.h:184
BOOL WINAPI ReadFile(IN HANDLE hFile, IN LPVOID lpBuffer, IN DWORD nNumberOfBytesToRead, OUT LPDWORD lpNumberOfBytesRead OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: rw.c:123
#define HeapFree(x, y, z)
Definition: compat.h:402
Definition: fci.c:126

Referenced by Registrar_FileRegister(), and Registrar_FileUnregister().

◆ get_word()

static HRESULT get_word ( LPCOLESTR *  str,
strbuf buf 
)
static

Definition at line 102 of file registrar.c.

103 {
104  LPCOLESTR iter, iter2 = *str;
105 
106  buf->len = 0;
107  buf->str[0] = '\0';
108 
109  while(iswspace(*iter2))
110  iter2++;
111  iter = iter2;
112  if(!*iter) {
113  *str = iter;
114  return S_OK;
115  }
116 
117  if(*iter == '}' || *iter == '=') {
118  strbuf_write(iter++, buf, 1);
119  }else if(*iter == '\'') {
120  iter2 = ++iter;
121  iter = wcschr(iter, '\'');
122  if(!iter) {
123  WARN("Unexpected end of script\n");
124  *str = iter;
125  return DISP_E_EXCEPTION;
126  }
127  strbuf_write(iter2, buf, iter-iter2);
128  iter++;
129  }else {
130  while(*iter && !iswspace(*iter))
131  iter++;
132  strbuf_write(iter2, buf, iter-iter2);
133  }
134 
135  while(iswspace(*iter))
136  iter++;
137  *str = iter;
138  return S_OK;
139 }
#define DISP_E_EXCEPTION
Definition: winerror.h:2518
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define WARN(fmt,...)
Definition: debug.h:111
const WCHAR * str
_CONST_RETURN wchar_t *__cdecl wcschr(_In_z_ const wchar_t *_Str, wchar_t _Ch)
#define iswspace(_c)
Definition: ctype.h:669
#define S_OK
Definition: intsafe.h:59
static void strbuf_write(LPCOLESTR str, strbuf *buf, int len)
Definition: registrar.c:89

Referenced by do_process_key(), and do_process_root_key().

◆ impl_from_IRegistrar()

static Registrar* impl_from_IRegistrar ( IRegistrar iface)
inlinestatic

Definition at line 77 of file registrar.c.

78 {
79  return CONTAINING_RECORD(iface, Registrar, IRegistrar_iface);
80 }
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560

Referenced by Registrar_AddRef(), Registrar_AddReplacement(), Registrar_ClearReplacements(), Registrar_FileRegister(), Registrar_FileUnregister(), Registrar_Release(), Registrar_ResourceRegister(), Registrar_ResourceRegisterSz(), Registrar_ResourceUnregister(), Registrar_ResourceUnregisterSz(), Registrar_StringRegister(), and Registrar_StringUnregister().

◆ Registrar_AddRef()

static ULONG WINAPI Registrar_AddRef ( IRegistrar iface)
static

Definition at line 540 of file registrar.c.

541 {
544  TRACE("(%p) ->%d\n", This, ref);
545  return ref;
546 }
Definition: send.c:47
GLenum GLint ref
Definition: glext.h:6028
static Registrar * impl_from_IRegistrar(IRegistrar *iface)
Definition: registrar.c:77
#define TRACE(s)
Definition: solgame.cpp:4
#define InterlockedIncrement
Definition: armddk.h:53
unsigned int ULONG
Definition: retypes.h:1

◆ Registrar_AddReplacement()

static HRESULT WINAPI Registrar_AddReplacement ( IRegistrar iface,
LPCOLESTR  Key,
LPCOLESTR  item 
)
static

Definition at line 561 of file registrar.c.

562 {
564  int len;
565  rep_list *new_rep;
566 
567  TRACE("(%p)->(%s %s)\n", This, debugstr_w(Key), debugstr_w(item));
568 
569  new_rep = HeapAlloc(GetProcessHeap(), 0, sizeof(rep_list));
570 
571  new_rep->key_len = lstrlenW(Key);
572  new_rep->key = HeapAlloc(GetProcessHeap(), 0, (new_rep->key_len + 1) * sizeof(OLECHAR));
573  memcpy(new_rep->key, Key, (new_rep->key_len+1)*sizeof(OLECHAR));
574 
575  len = lstrlenW(item)+1;
576  new_rep->item = HeapAlloc(GetProcessHeap(), 0, len*sizeof(OLECHAR));
577  memcpy(new_rep->item, item, len*sizeof(OLECHAR));
578 
579  new_rep->next = This->rep;
580  This->rep = new_rep;
581 
582  return S_OK;
583 }
LPOLESTR key
Definition: registrar.c:59
WCHAR OLECHAR
Definition: compat.h:1941
#define lstrlenW
Definition: compat.h:415
#define debugstr_w
Definition: kernel32.h:32
static Registrar * impl_from_IRegistrar(IRegistrar *iface)
Definition: registrar.c:77
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
struct rep_list_str * next
Definition: registrar.c:62
LPOLESTR item
Definition: registrar.c:60
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
#define S_OK
Definition: intsafe.h:59
static ATOM item
Definition: dde.c:856

◆ Registrar_ClearReplacements()

static HRESULT WINAPI Registrar_ClearReplacements ( IRegistrar iface)
static

Definition at line 585 of file registrar.c.

586 {
588  rep_list *iter, *iter2;
589 
590  TRACE("(%p)\n", This);
591 
592  if(!This->rep)
593  return S_OK;
594 
595  iter = This->rep;
596  while(iter) {
597  iter2 = iter->next;
598  HeapFree(GetProcessHeap(), 0, iter->key);
599  HeapFree(GetProcessHeap(), 0, iter->item);
600  HeapFree(GetProcessHeap(), 0, iter);
601  iter = iter2;
602  }
603 
604  This->rep = NULL;
605  return S_OK;
606 }
LPOLESTR key
Definition: registrar.c:59
smooth NULL
Definition: ftsmooth.c:416
static Registrar * impl_from_IRegistrar(IRegistrar *iface)
Definition: registrar.c:77
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
struct rep_list_str * next
Definition: registrar.c:62
LPOLESTR item
Definition: registrar.c:60
#define S_OK
Definition: intsafe.h:59
#define HeapFree(x, y, z)
Definition: compat.h:402

◆ Registrar_FileRegister()

static HRESULT WINAPI Registrar_FileRegister ( IRegistrar iface,
LPCOLESTR  fileName 
)
static

Definition at line 624 of file registrar.c.

625 {
627  TRACE("(%p)->(%s)\n", This, debugstr_w(fileName));
628  return file_register(This, fileName, TRUE);
629 }
#define TRUE
Definition: types.h:120
#define debugstr_w
Definition: kernel32.h:32
static Registrar * impl_from_IRegistrar(IRegistrar *iface)
Definition: registrar.c:77
#define TRACE(s)
Definition: solgame.cpp:4
static HRESULT file_register(Registrar *This, LPCOLESTR fileName, BOOL do_register)
Definition: registrar.c:491

◆ Registrar_FileUnregister()

static HRESULT WINAPI Registrar_FileUnregister ( IRegistrar iface,
LPCOLESTR  fileName 
)
static

Definition at line 631 of file registrar.c.

632 {
634  FIXME("(%p)->(%s)\n", This, debugstr_w(fileName));
635  return file_register(This, fileName, FALSE);
636 }
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110
static Registrar * impl_from_IRegistrar(IRegistrar *iface)
Definition: registrar.c:77
static HRESULT file_register(Registrar *This, LPCOLESTR fileName, BOOL do_register)
Definition: registrar.c:491

◆ Registrar_QueryInterface()

static HRESULT WINAPI Registrar_QueryInterface ( IRegistrar iface,
REFIID  riid,
void **  ppvObject 
)
static

Definition at line 526 of file registrar.c.

527 {
528  TRACE("(%p)->(%s %p\n", iface, debugstr_guid(riid), ppvObject);
529 
531  || IsEqualGUID(&IID_IRegistrar, riid)
532  || IsEqualGUID(&IID_IRegistrarBase, riid)) {
533  IRegistrar_AddRef(iface);
534  *ppvObject = iface;
535  return S_OK;
536  }
537  return E_NOINTERFACE;
538 }
#define E_NOINTERFACE
Definition: winerror.h:2364
REFIID riid
Definition: precomp.h:44
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4
const GUID IID_IUnknown
REFIID LPVOID * ppvObject
Definition: precomp.h:44
#define S_OK
Definition: intsafe.h:59
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4112

◆ Registrar_Release()

static ULONG WINAPI Registrar_Release ( IRegistrar iface)
static

Definition at line 548 of file registrar.c.

549 {
552 
553  TRACE("(%p) ->%d\n", This, ref);
554  if(!ref) {
555  IRegistrar_ClearReplacements(iface);
557  }
558  return ref;
559 }
Definition: send.c:47
GLenum GLint ref
Definition: glext.h:6028
static Registrar * impl_from_IRegistrar(IRegistrar *iface)
Definition: registrar.c:77
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
#define InterlockedDecrement
Definition: armddk.h:52
unsigned int ULONG
Definition: retypes.h:1
#define HeapFree(x, y, z)
Definition: compat.h:402

◆ Registrar_ResourceRegister()

static HRESULT WINAPI Registrar_ResourceRegister ( IRegistrar iface,
LPCOLESTR  resFileName,
UINT  nID,
LPCOLESTR  szType 
)
static

Definition at line 652 of file registrar.c.

654 {
656  TRACE("(%p)->(%s %d %s)\n", iface, debugstr_w(resFileName), nID, debugstr_w(szType));
657  return resource_register(This, resFileName, MAKEINTRESOURCEW(nID), szType, TRUE);
658 }
#define TRUE
Definition: types.h:120
#define debugstr_w
Definition: kernel32.h:32
static Registrar * impl_from_IRegistrar(IRegistrar *iface)
Definition: registrar.c:77
#define TRACE(s)
Definition: solgame.cpp:4
static HRESULT resource_register(Registrar *This, LPCOLESTR resFileName, LPCOLESTR szID, LPCOLESTR szType, BOOL do_register)
Definition: registrar.c:449
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
static const WCHAR szType[]
Definition: table.c:81

◆ Registrar_ResourceRegisterSz()

static HRESULT WINAPI Registrar_ResourceRegisterSz ( IRegistrar iface,
LPCOLESTR  resFileName,
LPCOLESTR  szID,
LPCOLESTR  szType 
)
static

Definition at line 608 of file registrar.c.

610 {
612  TRACE("(%p)->(%s %s %s)\n", This, debugstr_w(resFileName), debugstr_w(szID), debugstr_w(szType));
613  return resource_register(This, resFileName, szID, szType, TRUE);
614 }
#define TRUE
Definition: types.h:120
#define debugstr_w
Definition: kernel32.h:32
static Registrar * impl_from_IRegistrar(IRegistrar *iface)
Definition: registrar.c:77
#define TRACE(s)
Definition: solgame.cpp:4
static HRESULT resource_register(Registrar *This, LPCOLESTR resFileName, LPCOLESTR szID, LPCOLESTR szType, BOOL do_register)
Definition: registrar.c:449
static const WCHAR szType[]
Definition: table.c:81

◆ Registrar_ResourceUnregister()

static HRESULT WINAPI Registrar_ResourceUnregister ( IRegistrar iface,
LPCOLESTR  resFileName,
UINT  nID,
LPCOLESTR  szType 
)
static

Definition at line 660 of file registrar.c.

662 {
664  TRACE("(%p)->(%s %d %s)\n", This, debugstr_w(resFileName), nID, debugstr_w(szType));
665  return resource_register(This, resFileName, MAKEINTRESOURCEW(nID), szType, FALSE);
666 }
#define debugstr_w
Definition: kernel32.h:32
static Registrar * impl_from_IRegistrar(IRegistrar *iface)
Definition: registrar.c:77
#define TRACE(s)
Definition: solgame.cpp:4
static HRESULT resource_register(Registrar *This, LPCOLESTR resFileName, LPCOLESTR szID, LPCOLESTR szType, BOOL do_register)
Definition: registrar.c:449
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
static const WCHAR szType[]
Definition: table.c:81

◆ Registrar_ResourceUnregisterSz()

static HRESULT WINAPI Registrar_ResourceUnregisterSz ( IRegistrar iface,
LPCOLESTR  resFileName,
LPCOLESTR  szID,
LPCOLESTR  szType 
)
static

Definition at line 616 of file registrar.c.

618 {
620  TRACE("(%p)->(%s %s %s)\n", This, debugstr_w(resFileName), debugstr_w(szID), debugstr_w(szType));
621  return resource_register(This, resFileName, szID, szType, FALSE);
622 }
#define debugstr_w
Definition: kernel32.h:32
static Registrar * impl_from_IRegistrar(IRegistrar *iface)
Definition: registrar.c:77
#define TRACE(s)
Definition: solgame.cpp:4
static HRESULT resource_register(Registrar *This, LPCOLESTR resFileName, LPCOLESTR szID, LPCOLESTR szType, BOOL do_register)
Definition: registrar.c:449
static const WCHAR szType[]
Definition: table.c:81

◆ Registrar_StringRegister()

static HRESULT WINAPI Registrar_StringRegister ( IRegistrar iface,
LPCOLESTR  data 
)
static

Definition at line 638 of file registrar.c.

639 {
641  TRACE("(%p)->(%s)\n", This, debugstr_w(data));
642  return string_register(This, data, TRUE);
643 }
#define TRUE
Definition: types.h:120
#define debugstr_w
Definition: kernel32.h:32
static Registrar * impl_from_IRegistrar(IRegistrar *iface)
Definition: registrar.c:77
#define TRACE(s)
Definition: solgame.cpp:4
static HRESULT string_register(Registrar *This, LPCOLESTR data, BOOL do_register)
Definition: registrar.c:426
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950

◆ Registrar_StringUnregister()

static HRESULT WINAPI Registrar_StringUnregister ( IRegistrar iface,
LPCOLESTR  data 
)
static

Definition at line 645 of file registrar.c.

646 {
648  TRACE("(%p)->(%s)\n", This, debugstr_w(data));
649  return string_register(This, data, FALSE);
650 }
#define debugstr_w
Definition: kernel32.h:32
static Registrar * impl_from_IRegistrar(IRegistrar *iface)
Definition: registrar.c:77
#define TRACE(s)
Definition: solgame.cpp:4
static HRESULT string_register(Registrar *This, LPCOLESTR data, BOOL do_register)
Definition: registrar.c:426
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950

◆ resource_register()

static HRESULT resource_register ( Registrar This,
LPCOLESTR  resFileName,
LPCOLESTR  szID,
LPCOLESTR  szType,
BOOL  do_register 
)
static

Definition at line 449 of file registrar.c.

451 {
452  HINSTANCE hins;
453  HRSRC src;
454  LPSTR regstra;
455  LPWSTR regstrw;
456  DWORD len, reslen;
457  HRESULT hres;
458 
459  hins = LoadLibraryExW(resFileName, NULL, LOAD_LIBRARY_AS_DATAFILE);
460  if(hins) {
461  src = FindResourceW(hins, szID, szType);
462  if(src) {
463  regstra = LoadResource(hins, src);
464  reslen = SizeofResource(hins, src);
465  if(regstra) {
466  len = MultiByteToWideChar(CP_ACP, 0, regstra, reslen, NULL, 0)+1;
467  regstrw = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len*sizeof(WCHAR));
468  MultiByteToWideChar(CP_ACP, 0, regstra, reslen, regstrw, len);
469  regstrw[len-1] = '\0';
470 
471  hres = string_register(This, regstrw, do_register);
472 
473  HeapFree(GetProcessHeap(), 0, regstrw);
474  }else {
475  WARN("could not load resource\n");
477  }
478  }else {
479  WARN("Could not find source\n");
481  }
482  FreeLibrary(hins);
483  }else {
484  WARN("Could not load resource file\n");
486  }
487 
488  return hres;
489 }
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define CP_ACP
Definition: compat.h:99
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
Definition: loader.c:288
#define WARN(fmt,...)
Definition: debug.h:111
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
char * LPSTR
Definition: xmlstorage.h:182
HRSRC WINAPI FindResourceW(HINSTANCE hModule, LPCWSTR name, LPCWSTR type)
Definition: res.c:176
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:532
smooth NULL
Definition: ftsmooth.c:416
#define FreeLibrary(x)
Definition: compat.h:413
HRESULT hres
Definition: protocol.c:465
static HRESULT string_register(Registrar *This, LPCOLESTR data, BOOL do_register)
Definition: registrar.c:426
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLsizei len
Definition: glext.h:6722
GLenum src
Definition: glext.h:6340
#define LOAD_LIBRARY_AS_DATAFILE
Definition: winbase.h:338
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
DWORD WINAPI SizeofResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:568
#define MultiByteToWideChar
Definition: compat.h:100
static DWORD LPDWORD reslen
Definition: directory.c:51
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define HeapFree(x, y, z)
Definition: compat.h:402
static const WCHAR szType[]
Definition: table.c:81

Referenced by Registrar_ResourceRegister(), Registrar_ResourceRegisterSz(), Registrar_ResourceUnregister(), and Registrar_ResourceUnregisterSz().

◆ strbuf_init()

static void strbuf_init ( strbuf buf)
static

Definition at line 82 of file registrar.c.

83 {
84  buf->str = HeapAlloc(GetProcessHeap(), 0, 128*sizeof(WCHAR));
85  buf->alloc = 128;
86  buf->len = 0;
87 }
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by do_process_key(), do_process_root_key(), GetDocumentTitle(), parse_hhc(), parse_hhindex(), parse_index_sitemap_object(), parse_li(), parse_sitemap_object(), parse_ul(), SearchCHM_File(), and string_register().

◆ strbuf_write()

static void strbuf_write ( LPCOLESTR  str,
strbuf buf,
int  len 
)
static

Definition at line 89 of file registrar.c.

90 {
91  if(len == -1)
92  len = lstrlenW(str);
93  if(buf->len+len+1 >= buf->alloc) {
94  buf->alloc = (buf->len+len)<<1;
95  buf->str = HeapReAlloc(GetProcessHeap(), 0, buf->str, buf->alloc*sizeof(WCHAR));
96  }
97  memcpy(buf->str+buf->len, str, len*sizeof(OLECHAR));
98  buf->len += len;
99  buf->str[buf->len] = '\0';
100 }
WCHAR OLECHAR
Definition: compat.h:1941
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define lstrlenW
Definition: compat.h:415
const WCHAR * str
#define GetProcessHeap()
Definition: compat.h:403
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
#define HeapReAlloc
Definition: compat.h:401

Referenced by do_preprocess(), do_process_key(), and get_word().

◆ string_register()

static HRESULT string_register ( Registrar This,
LPCOLESTR  data,
BOOL  do_register 
)
static

Definition at line 426 of file registrar.c.

427 {
428  strbuf buf;
429  HRESULT hres;
430 
431  TRACE("(%p %s %x)\n", This, debugstr_w(data), do_register);
432 
433  strbuf_init(&buf);
435  if(FAILED(hres)) {
436  WARN("preprocessing failed!\n");
437  HeapFree(GetProcessHeap(), 0, buf.str);
438  return hres;
439  }
440 
441  hres = do_process_root_key(buf.str, do_register);
442  if(FAILED(hres) && do_register)
444 
445  HeapFree(GetProcessHeap(), 0, buf.str);
446  return hres;
447 }
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define WARN(fmt,...)
Definition: debug.h:111
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
#define GetProcessHeap()
Definition: compat.h:403
LONG HRESULT
Definition: typedefs.h:77
static void strbuf_init(strbuf *buf)
Definition: registrar.c:82
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
static HRESULT do_process_root_key(LPCOLESTR data, BOOL do_register)
Definition: registrar.c:378
static HRESULT do_preprocess(const Registrar *This, LPCOLESTR data, strbuf *buf)
Definition: registrar.c:141
#define HeapFree(x, y, z)
Definition: compat.h:402

Referenced by file_register(), Registrar_StringRegister(), Registrar_StringUnregister(), and resource_register().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( atl  )

Variable Documentation

◆ key

Definition at line 33 of file registrar.c.

Referenced by test_registrar().

◆ name

WCHAR name[22]

Definition at line 32 of file registrar.c.

Referenced by do_process_key().

◆ RegistrarVtbl

const IRegistrarVtbl RegistrarVtbl
static
Initial value:
= {
}
static HRESULT WINAPI Registrar_FileRegister(IRegistrar *iface, LPCOLESTR fileName)
Definition: registrar.c:624
static HRESULT WINAPI Registrar_ResourceRegister(IRegistrar *iface, LPCOLESTR resFileName, UINT nID, LPCOLESTR szType)
Definition: registrar.c:652
static HRESULT WINAPI Registrar_ResourceRegisterSz(IRegistrar *iface, LPCOLESTR resFileName, LPCOLESTR szID, LPCOLESTR szType)
Definition: registrar.c:608
static HRESULT WINAPI Registrar_AddReplacement(IRegistrar *iface, LPCOLESTR Key, LPCOLESTR item)
Definition: registrar.c:561
static HRESULT WINAPI Registrar_QueryInterface(IRegistrar *iface, REFIID riid, void **ppvObject)
Definition: registrar.c:526
static HRESULT WINAPI Registrar_StringRegister(IRegistrar *iface, LPCOLESTR data)
Definition: registrar.c:638
static HRESULT WINAPI Registrar_ClearReplacements(IRegistrar *iface)
Definition: registrar.c:585
static HRESULT WINAPI Registrar_FileUnregister(IRegistrar *iface, LPCOLESTR fileName)
Definition: registrar.c:631
static HRESULT WINAPI Registrar_ResourceUnregister(IRegistrar *iface, LPCOLESTR resFileName, UINT nID, LPCOLESTR szType)
Definition: registrar.c:660
static HRESULT WINAPI Registrar_ResourceUnregisterSz(IRegistrar *iface, LPCOLESTR resFileName, LPCOLESTR szID, LPCOLESTR szType)
Definition: registrar.c:616
static ULONG WINAPI Registrar_Release(IRegistrar *iface)
Definition: registrar.c:548
static HRESULT WINAPI Registrar_StringUnregister(IRegistrar *iface, LPCOLESTR data)
Definition: registrar.c:645
static ULONG WINAPI Registrar_AddRef(IRegistrar *iface)
Definition: registrar.c:540

Definition at line 668 of file registrar.c.

Referenced by AtlCreateRegistrar().

◆ root_keys

const { ... } root_keys[]
Initial value:
= {
{{'H','K','E','Y','_','C','L','A','S','S','E','S','_','R','O','O','T',0},
{{'H','K','E','Y','_','C','U','R','R','E','N','T','_','U','S','E','R',0},
{{'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E',0},
{{'H','K','E','Y','_','U','S','E','R','S',0},
{{'H','K','E','Y','_','P','E','R','F','O','R','M','A','N','C','E','_','D','A','T','A',0},
{{'H','K','E','Y','_','D','Y','N','_','D','A','T','A',0},
{{'H','K','E','Y','_','C','U','R','R','E','N','T','_','C','O','N','F','I','G',0},
{{'H','K','C','R',0}, HKEY_CLASSES_ROOT},
{{'H','K','C','U',0}, HKEY_CURRENT_USER},
{{'H','K','L','M',0}, HKEY_LOCAL_MACHINE},
{{'H','K','U',0}, HKEY_USERS},
{{'H','K','P','D',0}, HKEY_PERFORMANCE_DATA},
{{'H','K','D','D',0}, HKEY_DYN_DATA},
{{'H','K','C','C',0}, HKEY_CURRENT_CONFIG}
}
#define HKEY_USERS
Definition: winreg.h:13
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define HKEY_DYN_DATA
Definition: winreg.h:16
#define HKEY_CURRENT_CONFIG
Definition: winreg.h:15
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define HKEY_PERFORMANCE_DATA
Definition: winreg.h:14
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12

Referenced by do_process_root_key(), and ATL::CRegObject::do_process_root_key().