return RegSetValueEx(hkey, valueName, 0, KeyType.String, bytes,

     (uint)bytes.Length);

   } finally {

    if (UIntPtr.Zero != hkey) {

     RegCloseKey(hkey);

    }

   }

  }

  ///

  /// Создает параметр типа DWORD в заданном ключе

  ///

  /// Имя ключа

  /// Имя параметра

  /// Значение параметра

  /// В успешном случае возвращается

  /// ERROR_SUCCESS

  public static int CreateValueDWORD(UIntPtr root, string keyName,

   string valueName, uint dwordData) {

   UIntPtr hkey = UintPtr.Zero;

   try {

    int result = RegOpenKeyEx(root, keyName, 0, KeyAccess.None, ref hkey);

    if (ERROR_SUCCESS != result) return result;

    byte[] bytes = BitConverter.GetBytes(dwordData);

    return RegSetValueEx(hkey, valueName, 0, KeyType.Dword, bytes,

     (uint)bytes.Length);

   } finally {

    if (UIntPtr.Zero != hkey) {

     RegCloseKey(hkey);

    }

   }

  }

  ///

  /// Создает двоичный параметр в заданном ключе

  ///

  /// Имя ключа

  /// Имя параметра

  /// Значение параметра

  /// B успешном случае возвращается

  /// ERROR_SUCCESS

  public static int CreateValueBinary(UIntPtr root, string keyName,

   string valueName, uint binData) {

   UIntPtr hkey = UintPtr.Zero;

   try {

    int result = RegOpenKeyEx(root, keyName, 0, KeyAccess.None, ref hkey);

    if (ERROR_SUCCESS != result) return result;

    byte[] data = BitConverter.GetBytes(binData);

    return RegSetValueEx(hkey, valueName, 0, KeyType.Binary, data,

     (uint)data.Length);

   } finally {

    if (UIntPtr.Zero != hkey) {

     RegCloseKey(hkey);

    }

   }

  }

  ///

  /// Получает значение строкового параметра

  ///

  /// Имя ключа

  /// Имя параметра

  /// строковые данные

  /// В успешном случае возвращается

  /// ERROR_SUCCESS

  public static int GetStringValue(UIntPtr root, string keyName,

   string valueName, ref string stringResult) {

   UIntPtr hkey = UintPtr.Zero;

   try {

    int result = RegOpenKeyEx(root, keyName, 0, KeyAccess.None, ref hkey);

    if (ERROR_SUCCESS != result) return result;

    byte[] bytes = null;

    uint length = 0;

    KeyType keyType = KeyType.None;

    result = RegQueryValueEx(hkey, valueName, IntPtr.Zero, ref keyType, null,

     ref length);

    if (ERROR_SUCCESS != result) return result;

    keyType = KeyType.None;

    bytes = new byte[length];

    result = RegQueryValueEx(hkey, valueName, IntPtr.Zero, ref keyType, bytes,

     ref length);

    if (ERROR SUCCESS != result) return result;

     stringResult = Encoding.Unicode.GetString(bytes, 0, bytes.Length);

    return ERROR_SUCCESS;

   } finally {

    if (UIntPtr.Zero != hkey) {

     RegCloseKey(hkey);

    }

   }

  }

  ///

  /// Получает заданное значение типа DWORD

  ///

  /// Имя ключа

  /// Имя параметра

  /// Значение параметра

  /// B успешной случае возвращается

  /// ERROR_SUCCESS

  public static int GetDWORDValue(UIntPtr root, string keyName,

   string valueName, ref uint dwordResult) {

   UIntPtr hkey = UintPtr.Zero;

Перейти на страницу:

Похожие книги