/* Open a subkey of the service Services\<service_name>\<sub>. */ long open_registry(const TCHAR *service_name, const TCHAR *sub, REGSAM sam, HKEY *key, bool must_exist) { /* Get registry */ TCHAR registry[KEY_LENGTH]; if (service_registry_path(service_name, true, sub, registry, _countof(registry)) < 0) { log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_OUT_OF_MEMORY, NSSM_REGISTRY, _T("open_registry()"), 0); return 0; } return open_registry_key(registry, sam, key, must_exist); }
ERL_NIF_TERM add_registry_info(ErlNifEnv *env, char *event_source) { DWORD disposition; HKEY key; char *subkey; WINAPI_LASTERR(env, subkey = string_format(registry_key_format, event_source)); WINAPI_ERR(env, open_registry_key(HKEY_LOCAL_MACHINE, subkey, &key, &disposition)); LocalFree(subkey); if (disposition == REG_CREATED_NEW_KEY) NIF_ERR( initialize_event_log_registry_key(env, key) ); WINAPI_ERR(env, RegCloseKey(key)); return NIF_SUCCESS; }
static HKEY open_registry_key(const TCHAR *registry, REGSAM sam, bool must_exist) { HKEY key; long error = open_registry_key(registry, sam, &key, must_exist); return key; }