Погода: -12°C
  • Есть вопрос по использованию WinAPI. Конкретно - по функции RegCreateKeyEx (я работаю в си). Это функция для работы с реестром она имеет непонятный параметр: LPTSTR lpClass. Может быть кто-нибудь знает что там надол указывать?
    В английской версии хелпа приводится следующее описание:
    The RegCreateKeyEx function creates the specified key. If the key already exists in the registry, the function opens it.

    LONG RegCreateKeyEx(

    HKEY hKey, // handle of an open key
    LPCTSTR lpSubKey, // address of subkey name
    DWORD Reserved, // reserved
    LPTSTR lpClass, // address of class string
    DWORD dwOptions, // special options flag
    REGSAM samDesired, // desired security access
    LPSECURITY_ATTRIBUTES lpSecurityAttributes, // address of key security structure
    PHKEY phkResult, // address of buffer for opened handle
    LPDWORD lpdwDisposition // address of disposition value buffer
    );


    lpClass

    Points to a null-terminated string that specifies the class (object type) of this key. This parameter is ignored if the key already exists.

  • Судя по описанию (больше судить не по чему, т.к. не доводилось с этим возиться) этот параметр указывает на строку, которая определяет тип ключа в реестре (REG_DWORD, REG_SZ...).

  • А гуглем брезгуеш?
    На первой же странице нашёл описание:
    В ответ на: RegCreateKeyEx:

    LONG RegCreateKeyEx(
    HKEY hKey, // хэндл открытого ключа
    LPCTSTR lpSubKey, // имя "под_ключа"
    DWORD Reserved, // всегда 0
    LPTSTR lpClass, // имя класса
    DWORD dwOptions, // специальные опции
    REGSAM samDesired, // уровень защиты\доступа
    LPSECURITY_ATTRIBUTES lpSecurityAttributes, // параметр важный если хэндл
    // ключа будет унаследован
    // дочерним процессом

    PHKEY phkResult, // в это поле вернется хэндл // созданного ключа

    LPDWORD lpdwDisposition // этот параметр показывает
    // был ли ключ создан, или
    // он уже присутствовал и
    // был просто открыт без
    // изменения его значения
    // (обязательно переменная)
    );

    * HKEY hkey-хэндл открытого уже ключа или одно из заранее определенных значений:
    HKEY_CLASSES_ROOT
    HKEY_CURRENT_CONFIG
    HKEY_CURRENT_USER
    HKEY_LOCAL_MACHINE
    HKEY_USERS
    Windows NT/2000 or later: HKEY_PERFORMANCE_DATA
    Windows 95/98/Me: HKEY_DYN_DATA

    * LPCTSTR lpSubKey-собственно имя ключа,который мы хотим создать (должно заканчиваться символом нуль)
    * LPTSTR lpClass-для уже существующего ключа игнорируется,вобще почти всегда можно давать этому параметру значение NULL
    * DWORD dwOptions-формально,оперделяет,когда ключ начнет действовать, приведу выдранный из MSDN кусок,разобраться в нем не сложно:

    REG_OPTION_NON_VOLATILE This key is not volatile; this is the default.
    The information is stored in a file and is
    preserved when the system is restarted.
    The RegSaveKey function saves keys that are
    not volatile.

    REG_OPTION_VOLATILE Windows NT/2000 or later: All keys created
    by the function are volatile. The information
    is stored in memory and is not preserved when
    the corresponding registry hive is unloaded.
    For HKEY_LOCAL_MACHINE, this occurs when the
    system is shut down. For registry keys loaded
    by the RegLoadKey function, this occurs when
    the corresponding RegUnloadKey is performed.
    The RegSaveKey function does not save volatile
    keys. This flag is ignored for keys that
    already exist.
    Windows 95/98/Me: This value is ignored.
    If REG_OPTION_VOLATILE is specified,
    the RegCreateKeyEx function creates
    nonvolatile keys and returns ERROR_SUCCESS.

    REG_OPTION_BACKUP_RESTORE Windows NT/2000 or later: If this flag is set,
    the function ignores the samDesired parameter
    and attempts to open the key with the access
    required to backup or restore the key.
    If the calling thread has the SE_BACKUP_NAME
    privilege enabled, the key is opened with
    ACCESS_SYSTEM_SECURITY and KEY_READ access.
    If the calling thread has the SE_RESTORE_NAME
    privilege enabled, the key is opened with
    ACCESS_SYSTEM_SECURITY and KEY_WRITE access.
    If both privileges are enabled, the key has
    the combined accesses for both privileges.

    т.к ,к сожалению, на данный момент у меня стоит win98,то этот параметр в ней практически игнорируется.

    * REGSAM samDesired-уровень доступа к ключу, подробно описание можно посмотреть во все том же MSDN, скажу только, что для полного доступа значением должно быть KEY_ALL_ACCESS|KEY_READ|KEY_WRITE
    * LPSECURITY_ATTRIBUTES lpSecurityAttributes-рассмотрение описания данной структуры в тему данной статьи не входит, это скорее относится к многопоточному программированию,кому же очень интересно-идите к ... ну вы поняли:)
    В дальнейшем смысл одноименных параметров сохраняется ,поэтому я буду оговаривать только новые значения и кое-что об их формате.

  • Следующий вопрос:
    Есть функция ReadFile.
    В качестве одного из параметров в ней используется указатель на структуру OVERLAPPED. При использовании этой структуры для перемещения текущей позиции в файле в Windows XP, все было нормально (замечу, что файл я открывал без флага OVERLAPPED). Но в Windows 98 такой вариант использования этого аргумента не проходит. Почему-то функция не читает файл и, вне зависимости от того, какие значения стоят в полях структуры, GetLastError возвращает ошибку "конец файла".
    Что делать? Как заставить ReadFile правильно обрабатывать структуру? Или, если это невозможно, то как поменять позицию в файле?

Записей на странице:

Перейти в форум

Модератор: