Имя ключа реестра в коллбэке

Тема в разделе "WASM.NT.KERNEL", создана пользователем DeeoniS, 23 мар 2007.

  1. DeeoniS

    DeeoniS New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2004
    Сообщения:
    132
    В драйвере использую CmRegisterCallback чтобы установить коллбек для операций с реестром. Все проходит нормально, но мне надо узнать имя ключа с которым производится некая операция. Для этого из структуры (например REG_SET_VALUE_KEY_INFORMATION) достаю указатель на объект и пытаюсь получить его имя с помощью фу-ии ObQueryNameString. Вот код:

    Код (Text):
    1. NTSTATUS GetObjectName( PUNICODE_STRING ObjectName, PVOID Object )
    2. {
    3.     NTSTATUS st = STATUS_SUCCESS;
    4.     ULONG ReturnLength;
    5.     UCHAR Buffer[sizeof(OBJECT_NAME_INFORMATION)+(256*sizeof(WCHAR))];
    6.     POBJECT_NAME_INFORMATION ObjectNameInfo = (POBJECT_NAME_INFORMATION)Buffer;
    7.    
    8.     RtlZeroMemory( &Buffer, sizeof(Buffer) );
    9.  
    10.     st = ObQueryNameString( Object, ObjectNameInfo, sizeof(Buffer), &ReturnLength );
    11.  
    12.     if(!NT_SUCCESS(st))
    13.     {
    14.         DbgPrint("ObQueryNameString failed with status %08x", st);
    15.         return st;
    16.     }
    17.  
    18.     RtlCopyUnicodeString( ObjectName, &ObjectNameInfo->Name );
    19.     return st;
    20. }
    Но ObQueryNameString падает, в дебаге это
    Код (Text):
    1. Access violation - code c0000005 (!!! second chance !!!)
    2. nt!CmpCheckRecursionAndRecordThreadInfo+0x25:
    3. 806108f9 397208          cmp     dword ptr [edx+8],esi
    В чем может быть проблема?
     
  2. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    указатель неправильный?
     
  3. DeeoniS

    DeeoniS New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2004
    Сообщения:
    132
    на что??? на объект??? вроде правильный, т.е. просто элемент структуры...
     
  4. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    DeeoniS
    тогда не знаю.. что это вообще за виды объектов, для них точно можно вызывать ObQueryName?
     
  5. DeeoniS

    DeeoniS New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2004
    Сообщения:
    132
    Nouzui
    что за вид объекта сам незнаю... вроде как объект для ключа реестра. ObQueryName вызвать тоже можно, т.к. нашел упоминание об этом на одном из забугорных форумах, вроде даже на микрософтовском...
     
  6. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    DeeoniS
    или я чего-то не догоняю, или все-таки нельзя
     
  7. DeeoniS

    DeeoniS New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2004
    Сообщения:
    132
  8. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    понятия не имею..
    ps: юзать можно, только будет бсод.. а так можно ))
     
  9. Shvechkov

    Shvechkov New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2007
    Сообщения:
    1
    В коде явная ошибка - в бъекте ObjectNameInfo все поля пробиты нулями - причина падения.
    POBJECT_NAME_INFORMATION просто враппер для объекта типа UNICODE_STRING, поля которого дожны быть соотв. образом проинициализированы перед передачей в ObQueryNameString.

    Удачи.