ZwCreateKey. Работа с реестром из usermode.

Тема в разделе "WASM.BEGINNERS", создана пользователем AndjellaArtavazdovna, 8 мар 2011.

  1. AndjellaArtavazdovna

    AndjellaArtavazdovna New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2010
    Сообщения:
    615
    Добрый день. Есть несколько вопросов по поводу работы с реестром с помощью native API из r3.
    1)Есть код,вызывающий ZwCreateKey для создания нового ключа реестра. Новые подключи в ключе \\Registry\\Machine\\Software
    создаются и код из вот этой статьи http://www.wasm.ru/article.php?article=drvw2k10 работает нормально. Но стоит попытаться открыть
    ключ \\Registry\\User\\NewKey например или \\Registry\\Machine\\NewKey получаю STATUS_INVALID_PARAMETER. В чем может быть дело?
    2)Почему ключи созданные непосредственным вызовом ZwCreateKey из r3 не видны в regedit и regedt32?
    Работаю под Windows 7.
     
  2. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    Может такого не существует, ты его создал?

    Незнаю как на Win7, работаю исключительно на ХП, но все должно быть видно.


    Может криво модифицировали код из статьи, приведите полный код
     
  3. AndjellaArtavazdovna

    AndjellaArtavazdovna New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2010
    Сообщения:
    615
    JCronuz
    Да,такого не существует. Как раз вызовом ZwCreateKey я и пытаюсь его создать.
    На счет невидимости ключа созданного этим вызовом была такая инфа http://www.wasm.ru/forum/viewtopic.php?id=26697(#3).
    Код примерно следующий:
    Код (Text):
    1. // ExpRtlInitUnicodeString и ExpZwCreateKey  - так написано потому что экспортируются через GetProcAddress
    2. OBJECT_ATTRIBUTES ObjAttributes;
    3.     UNICODE_STRING ObjName;
    4.     ExpRtlInitUnicodeString(&ObjName,L"\\Registry\\Machine\\NewKey");
    5.     HANDLE KeyHandle;
    6.     ULONG Buffer = 0;
    7.    
    8.     InitializeObjectAttributes(&ObjAttributes,
    9.                                &ObjName,
    10.                                OBJ_CASE_INSENSITIVE,
    11.                                NULL,
    12.                                NULL);
    13.                  NTSTATUS NtResult = ExpZwCreateKey(&KeyHandle,
    14.                                                                    KEY_WRITE,
    15.                                        &ObjAttributes,
    16.                                        0,
    17.                                        NULL,
    18.                                        REG_OPTION_VOLATILE | REG_OPTION_CREATE_LINK,
    19.                                        &Buffer);
     
  4. AndjellaArtavazdovna

    AndjellaArtavazdovna New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2010
    Сообщения:
    615
    С кодом все нормально . Какая-то прога блокирует запись в реестр в эти ключи. AV не виноват,проверил. Что еще проверить можно?
     
  5. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Может быть потому что REG_OPTION_VOLATILE

    P.S.
    Вам точно нужен линк (REG_OPTION_CREATE_LINK) ?
     
  6. AndjellaArtavazdovna

    AndjellaArtavazdovna New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2010
    Сообщения:
    615
    Partner
    От этого не зависит ,я проверял. Странно как-то. Все Advapi32шные функи работы с реестром видят эти ключи и нормально с ними работают. А вот почему новые ключи не видны в стандартных редакторах реестра непонятно.