Проверка существования ключа реестра

Тема в разделе "WASM.WIN32", создана пользователем vg, 15 сен 2009.

  1. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Нужно проверить существует ли ключ
    Код (Text):
    1. invoke RegOpenKeyEx,hKey,addr szKey,0,KEY_ALL_ACCESS,addr hKey
    2. .if eax != ERROR_SUCCESS
    3.     invoke GetLastError
    4.     invoke wsprintf,addr szKey,addr numformattostr,eax
    5.     invoke MessageBox,0,addr szKey,0,MB_OK
    6. .else
    7.     invoke RegCloseKey,hKey
    8. .endif
    Когда RegOpenKeyEx возвращает не ERROR_SUCCESS, GetLastError показывает 0. Как это понимать?
     
  2. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    use RtlCheckRegistryKey(ULONG RelativeTo,PWSTR Path);

    GetLastError не для всех ф-ций.
     
  3. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Где это написано?

    И как понять описание FORMAT_MESSAGE_FROM_SYSTEM?
     
  4. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    А с чего ты взял что это так? FormatMessage тебе не нужен, ты читал цитату из мсдн ?
    If the function fails, the return value is a nonzero error code defined in Winerror.h
    Она код ошибки возвращает. Берешь этот код и смотришь в winerror.h его описание.

    И вообще, чем тебе не подходит RtlCheckRegistryKey ?
     
  5. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Из описания GetLastError?

    Недосмотрел. Это мне и было нужно. Спасибо.

    Тем, что нужно для обычного win32-приложения, а не для драйвера.
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    vg
    А почему вы решили что эта функция не может использоваться юзермодным кодом ?
     
  7. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Я этого не говорил. Но считаю, что для приложений лучше использовать функции из библиотек для приложений, а не из библиотек драйверов.
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    vg
    Так она из нтдлл, какие есчо драйвера. Просто в нтосе имя такоеже.
     
  9. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    В любом случае, в MSDN она находится в разделе Windows Driver Kit > Kernel-Mode Driver Architecture > Reference > Driver Support Routines > Run-Time Library (RTL) Routines
     
  10. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    vg мсдн это не святая истина ;)

    Если бы вы посмотрели код RtlCheckRegistryKey вы бы увидели что она вызывает сервисы NtOpenKey, NtCreateKey. Их же в конечном итоге вызовет и RegOpenKey.
    Просто надо понимать как оно в общем будет работать. И что Rtl ф-ция работает быстре.

    А что использовать решать вам)