IRQL_NOT_LESS_OR_EQUAL при ZwCreateFile

Тема в разделе "WASM.NT.KERNEL", создана пользователем SpiritFire, 14 ноя 2008.

  1. SpiritFire

    SpiritFire New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2008
    Сообщения:
    31
    Извините за похожие посты, но сам разобраться не смог. Прокопался весь вечер - не могу найти причину проблемы:

    На коде

    Код (Text):
    1. RtlZeroMemory(&attLocked,sizeof(attLocked));
    2. RtlZeroMemory(&iobLocked,sizeof(iobLocked));
    3.            
    4. const wchar_t fname[] = L"\\??\\C:\\1.txt";
    5. InitializeObjectAttributes(&attLocked,(PUNICODE_STRING)fname/*inBuffer/*name*/,OBJ_KERNEL_HANDLE|OBJ_CASE_INSENSITIVE,NULL,NULL);
    6.  
    7. __asm int 3; /* breakpoint */
    8. if(currentIrql==PASSIVE_LEVEL)
    9.     status = ZwCreateFile(&hLocked,GENERIC_READ,&attLocked,&iobLocked,NULL/*allocation size*/,FILE_ATTRIBUTE_NORMAL,0/*share*/,FILE_OPEN/*no create*/,FILE_SYNCHRONOUS_IO_NONALERT,NULL,0);
    Внутри ZwCreateFile возникает БСОД. IRQL_NOT_LESS_OR_EQUAL.
    Слов (литературных) более нет. Какой на [CONSORED] нот лесс, если у меня стоит проверка на PASSIVE_LEVEL.

    На всякий случай, весь код в секции "PAGE".
    Проверил - нашел на сайте туториал по программированию в режиме ядра. Процел насчет ядра системы, памяти,
    работы с файлами.

    Внимательно просмотрел пример открытия файла. Все понятно вроде. Запуск - снова синий экран.

    Скажите пожалуйста, в чем я не прав.
     
  2. SpiritFire

    SpiritFire New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2008
    Сообщения:
    31
    Приведенный код исполняется в NTSTATUS DeviceControlRoutine( IN PDEVICE_OBJECT fdo, IN PIRP Irp ) в коде обработки IRQ на PASSIVE_LEVEL.

    На всякий случай, код завернут в спин-блокировку (перед разбором номера IRQ)
     
  3. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    SpiritFire
    wchar_t fname[] ... InitializeObjectAttributes(...,(PUNICODE_STRING)fname
    Так можно?
     
  4. SpiritFire

    SpiritFire New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2008
    Сообщения:
    31
    Можно, потому, что ни при использовании системного буфера, при передаче IRQ от клиента драйверу, ни при
    (PUNICODE_STRING)L"\\??\\C:\\1.txt"
    все равно получаю синий экран.

    Примечательно, что при передаче в качестве имени файла строки "кукареку" бсода нет...

    P.S. Ситуация с IoCreateFile -- аналогичная... Ничего не пойму.
     
  5. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    SpiritFire
    Не могу понять, зачем так извращаться с именем файла? У меня все без проблем работает
    , где file - UNICODE_STRING.
    Но если это так уж и принципиально, попробуй подключить WorkItem.
     
  6. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    UNICODE_STRING - не то же самое, что wchar_t, это структура, которая хранит размеры буфера со строкой и указатель wchar_t* на строку. вобщем steelfactor напесал как инициализировать данную структуру имея юнекод строку
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Ответ неправильный. UNICODE_SRING - структура. Ты передаешь строку. Он считает ее за структуру. Внутри себя он повышает иркл для своих внутренних блокировок. А адрес неправильный. Отсюда IRQL_NOT_LESS_OR_EQUAL.

    Когда народ научится читать мсдн?
     
  8. SpiritFire

    SpiritFire New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2008
    Сообщения:
    31
    Сори, я сонный был, дурака свалял - у меня этот весь код был завернут в спин-блокировку. Которая сама по себе повышала IRQ. Буду читать про UNICODE_STRING.
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    тогда тем более)) давай читай в мсдн про RtlInitUnicodeString