Home > itblogs > Зачем нужен параметр lpClass в функции RegCreateKeyEx?

Зачем нужен параметр lpClass в функции RegCreateKeyEx?

December 4th, 2008

Любой разработчик, кто хоть раз создавал ключ в реестре с помощью функции RegCreateKeyEx задавался вопросом: «а зачем нужен параметр lpClass и что он означает?»

lpClass [in, optional]
The user-defined class type of this key. This parameter may be ignored. This parameter can be NULL.

MSDN, в общем то, не даёт прямого ответа на этот вопрос. Самое забавное, что ответа на этот вопрос не знает никто, включая и текущего разработчика, ответственного за сопровождение реестра, и его предшественника. :-) Вернее не совсем так. Они, безусловно, знают какая функциональность стоит за этим параметром и как она реализована. Но они не имеют ни малейшего понятия, для чего эта возможность предназначалась изначально. Более того, известный своими экскурсами в историю Raymond Chen также не помнит, зачем это было нужно. Единственная ниточка – письмо другого разработчика, хоть немного проливающее свет, было безвозвратно утеряно. И, конечно же, люди это писавшие на пенсии давно. :-)

Так какая же функциональность скрывается за этим параметром сейчас? Этот параметр позволяет при создании ключа задать строку, которая будет храниться с этим ключом, пока тот не будет удалён. Эта строка может быть прочитана с помощью функции RegQueryInfoKey. Всё.

Update: напоминаю, что все бессмысленные комментарии режутся нещадно.

  1. Александр
    December 5th, 2008 at 01:46 | #1

    А может быть, это комментарий?
    Может быть, когда-то давно была изначальная идея реестра, в котором хотя бы некоторые ключи был бы объяснены?

    • December 5th, 2008 at 07:58 | #2

      Интересная мысль. Хотя тогда этот параметр назывался бы lpComment. Кроме того, недокументированность ключей реестра по сравнению с конфигурационными файлами – это фича, а не баг. Спорная, конечно, но фича.

  2. December 8th, 2008 at 01:06 | #3

    Раз никто не знает и не понимает, предлагаю все же превратить параметр в сомментарий. Сторонники конфигурационных файлов очень сильно ругают реестр за то, что нет возможности комментировать значений. Вот и будет такая возможность, без изменения архитектуры. Достаточно только добавить функционал в утилиту regedit.

    • December 8th, 2008 at 22:00 | #4

      Как я уже сказал выше, недокументированность большинства ключей реестра – это by design.

  3. December 10th, 2008 at 07:22 | #5

    RegQueryInfoKey – очевиден же смысл этого параметра – хранит инфу о ключе. Как было сказано выше, идеально подходит для комментариев.

    Хотя, если The user-defined class type of this key, то видимо была какая-то идея перелинковки ключей по пользовательским классам. Нафига только… :) Скажем если и можно объединять ключи в произвольные классы, то функционал приписать забыли, конечно.

  4. Partner
    December 10th, 2008 at 10:34 | #6

    К сожалению, это параметер можно задать только при создании ключа. Потом изменить его невозможно.

    • December 10th, 2008 at 23:30 | #7

      Пересоздать ключ не проблема с точки зрения кода, но и не этично с точки зрения того же кода. Но если подумать, то комментарии изменяются не при каждом изменении значения, так что…

      То, что параметр можно использовать в своих целях – это хорошо, но главная проблема в том, что его использование не стандартизировано и поэтому наверно все обходят его. Допустим, что какая-то программа решила хранить там данные для расчета, а другая программа использует для комментариев. Текстовый комментарий на ключ может убить программу, котрая хранила там какие-то важные данные. Так что я пока не использую параметр, назначение которого неясно.

      • December 11th, 2008 at 00:00 | #8

        Я, честно говоря, не очень понимаю зачем там нужны комментарии. Наличие комментариев не сделает реестр настолько же удобным для редактирования, как конфигурационный файл. Если же вы хотите задокументировать ключи, которые использует ваше приложение – стандартная справка ничуть не хуже.

Comments are closed.