Ejemplo n.º 1
0
/**
 * Deletes a registry value.
 *
 * @param keyName Fully path of registry key.  This parameter is modified.
 * @param name Value name
 * @return 0 on success
 */
int
delete_registry_value (char *keyName, const char *name)
{
  int ret = 0;
  LONG result;
  HKEY key;
  HKEY hKey;
  char *subkey;

  if ((keyName == NULL) || (name == NULL))
    return -1;

  get_registry_key (keyName, &key, &subkey);
  result = RegOpenKeyEx (key, subkey, 0L, KEY_ALL_ACCESS, &hKey);
  if (result != ERROR_SUCCESS)
    {
      log_message ("[delete_registry_value] Failed to open key: %s", keyName);
      return -1;
    }
  result = RegDeleteValue (hKey, name);
  if (result != ERROR_SUCCESS)
    {
      log_message ("[delete_registry_value] Failed to delete value: %s, %s", keyName, name);
      ret = -1;
    }

  RegCloseKey (hKey);

  return ret;
}
Ejemplo n.º 2
0
static MenuMonitor* lookup_monitor(const char* path, gboolean is_directory)
{
  MenuMonitor *retval;
  char        *registry_key;

  retval = NULL;

  registry_key = get_registry_key (path, is_directory);

  if (monitors_registry == NULL)
    {
      monitors_registry = g_hash_table_new_full (g_str_hash,
						 g_str_equal,
						 g_free,
						 NULL);
    }
  else
    {
      retval = g_hash_table_lookup (monitors_registry, registry_key);
    }

  if (retval == NULL)
    {
      retval = register_monitor (path, is_directory);
      g_hash_table_insert (monitors_registry, registry_key, retval);

      return retval;
    }
  else
    {
      g_free (registry_key);

      return mate_menu_monitor_ref(retval);
    }
}
Ejemplo n.º 3
0
/**
 * Sets a registry value.
 *
 * @param keyName Fully qualified registry key.  This parameter is modified.
 * @param name Name of registry value
 * @param value Value
 * @param type Type of value (string or dword)
 * @return 0 on success
 */
int
set_registry_value (char *keyName, const char *name, const char *value, const char *type)
{
  int ret = 0;
  LONG result;
  HKEY key;
  HKEY hKey;
  char *subkey;
  DWORD dispos;
  DWORD data;

  get_registry_key (keyName, &key, &subkey);
  result = RegCreateKeyEx (key, subkey, 0L, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dispos);
  if (result != ERROR_SUCCESS)
    {
      log_message ("[set_registry_value] Failed to create key: %s, %s", keyName, name);
      return -1;
    }

  if (strcmp (type, "string") == 0)
    {
      result = RegSetValueEx (hKey, name, 0L, REG_SZ, (BYTE *)value, strlen(value) + 1);
      if (result != ERROR_SUCCESS)
        {
          log_message ("[set_registry_value] Failed to set value: %s, %s, %s, %s", keyName, name, value, type);
          result = -1;
        }
    }
  else if (strcmp (type, "dword") == 0)
    {
      data = atol (value);
      result = RegSetValueEx (hKey, name, 0L, REG_DWORD, (BYTE *)&data, sizeof(DWORD));
      if (result != ERROR_SUCCESS)
        {
          log_message ("[set_registry_value] Failed to set value: %s, %s, %s, %s", keyName, name, value, type);
          result = -1;
        }
    }
  else
    {
      log_message ("[set_registry_value] Unknown value type: %s", type);
      ret = -1;
    }

  RegCloseKey (hKey);

  return ret;
}
Ejemplo n.º 4
0
/**
 * Deletes a registry key.
 *
 * @param keyName Full path to the registry key.  This parameter is modified.
 * @return 0 on success
 */
int
delete_registry_key (char *keyName)
{
  LONG result;
  HKEY key;
  char *subkey;

  if (keyName == NULL)
    return -1;

  get_registry_key (keyName, &key, &subkey);
  result = RegDeleteKey (key, subkey);
  if (result != ERROR_SUCCESS)
    {
      log_message ("[delete_registry_key] Failed to delete key: %s", keyName);
      return -1;
    }

  return 0;
}
Ejemplo n.º 5
0
void
menu_monitor_unref (MenuMonitor *monitor)
{
  char *registry_key;

  g_return_if_fail (monitor != NULL);
  g_return_if_fail (monitor->refcount > 0);

  if (--monitor->refcount > 0)
    return;

  registry_key = get_registry_key (monitor->path, monitor->is_directory);
  g_hash_table_remove (monitors_registry, registry_key);
  g_free (registry_key);

  if (g_hash_table_size (monitors_registry) == 0)
    {
      g_hash_table_destroy (monitors_registry);
      monitors_registry = NULL;
    }

  if (monitor->monitor)
    {
      g_file_monitor_cancel (monitor->monitor);
      g_object_unref (monitor->monitor);
      monitor->monitor = NULL;
    }

  g_slist_foreach (monitor->notifies, (GFunc) menu_monitor_notify_unref, NULL);
  g_slist_free (monitor->notifies);
  monitor->notifies = NULL;

  menu_monitor_clear_pending_events (monitor);

  g_free (monitor->path);
  monitor->path = NULL;

  g_free (monitor);
}
Ejemplo n.º 6
0
char*
get_registry_value (char *keyName, const char *name)
{
  HKEY key, hKey;
  char *subkey;
  LONG result;
  DWORD type;
  DWORD data;
  DWORD dataSize;
  char *value = NULL;

  get_registry_key (keyName, &key, &subkey);
  result = RegOpenKeyEx (key, subkey, 0, KEY_READ, &hKey);

  dataSize = 0;
  RegQueryValueEx (hKey, name, 0, &type, NULL, &dataSize);

  if (type == REG_DWORD)
    {
      dataSize = sizeof (DWORD);
      result = RegQueryValueEx (hKey, name, 0, NULL, (LPBYTE)&data, &dataSize);
      if (result == ERROR_SUCCESS)
        {
          value = malloc (255);
          _ultoa (data, value, 10);
        }
    }
  else if ((type == REG_EXPAND_SZ) || (type == REG_SZ))
    {
      value = malloc (dataSize + 1);
      memset (value, dataSize + 1, 0);
      result = RegQueryValueEx (hKey, name, 0, NULL, (LPBYTE)value, &dataSize);
    }

  RegCloseKey (hKey);

  return value;
}