NAPI не хочет открывать ветку реестра

Тема в разделе "WASM.NT.KERNEL", создана пользователем SysProger, 26 май 2009.

  1. SysProger

    SysProger New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2007
    Сообщения:
    127
    Не работает код:
    Код (Text):
    1. WCHAR KeyNameBuffer[]   = L"\\Registry\\Machine\\Software";
    2. UNICODE_STRING KeyName;
    3. ULONG Status;
    4. OBJECT_ATTRIBUTES ObjectAttributes;
    5.  
    6. ULONG Disposition;
    7.        
    8. KeyName.Buffer = KeyNameBuffer;
    9. KeyName.Length = (USHORT) wcslen( KeyNameBuffer ) *sizeof(WCHAR);
    10.  
    11. InitializeObjectAttributes( &ObjectAttributes, &KeyName, OBJ_CASE_INSENSITIVE, NULL, NULL );
    12.  
    13. Status = NtCreateKey( &SoftwareKeyHandle, KEY_ALL_ACCESS, &ObjectAttributes, 0, NULL,
    14. REG_OPTION_NON_VOLATILE, &Disposition );
    После выполнения в Status оказалось число STATUS_INVALID_PARAMETER - 0xc000000d. Какой параметр я не так указываю?
     
  2. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    KeyName.MaximumLength не определено?
    У тебя ж строка статическая, можно было использовать вместо wcslen - sizeof, а вообще в студии есть макрос
    UNICODE_STRING KeyName=RTL_CONSTANT_STRING(L"\\Registry\\Machine\\Software");
     
  3. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    RtlInitUnicodeString(&KeyName, L"\\Registry\\Machine\\Software");
     
  4. SysProger

    SysProger New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2007
    Сообщения:
    127
    onSide, Partner

    Не помогло.
    Дело в том, что тот код, который я привёл в своём посте, работает в случае компляции обычного юзермодного приложения. Ошибку параметра я получаю, когда пытаюсь выполнить этот код в native приложении, загружающегося до старта эксплорера.
    Может быть неверен строковый параметр, т.к. нет прав для открытия реестра? Почитал msdn, вроде особых прав для открытия реестра не существует.
    В чём беда?
     
  5. _w0rm_

    _w0rm_ New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    10
    Код (Text):
    1. void tratata(WCHAR *RegPath)
    2. {
    3.     NTSTATUS          status;
    4.     UNICODE_STRING    UnicodeValueName, UnicodeRegPath;
    5.     HANDLE            KeyHandle;
    6.     OBJECT_ATTRIBUTES ObjectAttributes;
    7.     ULONG ByteOffset;
    8.     RtlInitUnicodeString(&UnicodeRegPath,RegPath);
    9.     RtlInitUnicodeString(&UnicodeValueName, L"ImagePath");
    10.     InitializeObjectAttributes(&ObjectAttributes,&UnicodeRegPath,OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE,NULL,NULL);
    11.     status = ZwOpenKey(&KeyHandle,KEY_QUERY_VALUE, &ObjectAttributes );
    взял из 100% рабочего дрова
     
  6. SysProger

    SysProger New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2007
    Сообщения:
    127
    Значит ситуация следующая:
    есть прога autochk. Вот кусок её кода, полученный идой:
    Код (Text):
    1. ; Attributes: bp-based frame
    2.  
    3. sub_100BF4A proc near
    4.  
    5. var_454= dword ptr -454h
    6. var_44C= dword ptr -44Ch
    7. var_448= dword ptr -448h
    8. var_440= dword ptr -440h
    9. var_43C= dword ptr -43Ch
    10. var_438= dword ptr -438h
    11. var_434= dword ptr -434h
    12. var_430= dword ptr -430h
    13. var_42C= dword ptr -42Ch
    14. var_428= dword ptr -428h
    15. var_424= dword ptr -424h
    16. var_418= dword ptr -418h
    17. var_4= dword ptr -4
    18.  
    19. mov     edi, edi
    20. push    ebp
    21. mov     ebp, esp
    22. sub     esp, 454h
    23. mov     eax, dword_105D00C
    24. push    esi
    25. mov     esi, ds:RtlInitUnicodeString
    26. mov     [ebp+var_4], eax
    27. push    offset aRegistryMachin ; "\\Registry\\Machine\\System\\CurrentControl"...
    28. lea     eax, [ebp+var_448]
    29. push    eax
    30. call    esi ; RtlInitUnicodeString
    31. and     [ebp+var_43C], 0
    32. and     [ebp+var_430], 0
    33. and     [ebp+var_42C], 0
    34. lea     eax, [ebp+var_448]
    35. mov     [ebp+var_438], eax
    36. lea     eax, [ebp+var_440]
    37. push    eax
    38. push    20019h
    39. lea     eax, [ebp+var_428]
    40. push    eax
    41. mov     [ebp+var_440], 18h
    42. mov     [ebp+var_434], 40h
    43. call    ds:NtOpenKey
    Только вот непонятно, откуда брать значения переменных var_*. Они вроде определены, но не инициализированы.
     
  7. je_

    je_ New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    143
    смотреть в дебагере
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    эти "var_" это OBJECT_ATTRIBUTES.
    И вообще, hexrays давно отменили? о0