Использую ddk 2000, ОС — XP SP2.
При вызове драйвер происходит перезагрузка, в журнаое пишется — System Error, код 102, категория 1003, описание "Код ошибки 000000c4, параметр1 00000060, параметр2 00000000, параметр3 00024000, параметр4 00000004".
Как мне диагностировать ошибку? Отладчиком не пробовал, кажется это слишком жирно, один вызов отлаживать.
Используй WinDbg + Virtual PC. Отладчик покажет в чём ошибка, и даже покажет ошибочную строку.
А>Отладчиком не пробовал, кажется это слишком жирно, один вызов отлаживать.
Уж извини, за тебя это делать никто не будет. А телепаты давно забили на RSDN.
Здравствуйте, Unmanaged, Вы писали:
А>>Как мне диагностировать ошибку?
U>Используй WinDbg + Virtual PC. Отладчик покажет в чём ошибка, и даже покажет ошибочную строку.
А>>Отладчиком не пробовал, кажется это слишком жирно, один вызов отлаживать.
U>Уж извини, за тебя это делать никто не будет. А телепаты давно забили на RSDN.
Мне не лень, я просто не уверен в целесообразности отладки, пока не уверен, что правильно инициализировал параметры.
Чтобы убедиться и спрашиваю
Меня в это место смущает. Если Вы находитесь в обработчике Irp, то это скорее всего пользовательский поток и из него нельзя вызывать Nt функции. Хотя это и не должно приводить к системной ошибке, должен быть access denied.
TC>Меня в это место смущает. Если Вы находитесь в обработчике Irp, то это скорее всего пользовательский поток и из него нельзя вызывать Nt функции. Хотя это и не должно приводить к системной ошибке, должен быть access denied.
Нет, это обработчик IOCTL-запроса. Если можно, объясните подробно, как влияет контекст на вызов Ntxxx.
Как можно перейти к нужному контексту? Был бы очень рад какой-нибудь ссылке на тему
M>Нет, это обработчик IOCTL-запроса. Если можно, объясните подробно, как влияет контекст на вызов Ntxxx. M>Как можно перейти к нужному контексту? Был бы очень рад какой-нибудь ссылке на тему
Функции семейства Nt проверяют права доступа. Несмотря на то, что вызов осуществляется из режима ядра, он все равно проходит в контексте какого-то потока, у которого есть токен. Поэтому вызов Nt функции в обработчике IOCTL практически тождественен такому же вызову в UM. Если у Вас нет прав на открытие процесса — Вам не дадут это сделать. Драйвера обычно используют ф. семейства Zw. Они как правило переадресуются соответствующим Nt функциям, но при этом выставляется переменная PreviousMode = KernelMode и проверки безопасности не производяться.
[skip]
TC>Функции семейства Nt проверяют права доступа. Несмотря на то, что вызов осуществляется из режима ядра, он все равно проходит в контексте какого-то потока, у которого есть токен. Поэтому вызов Nt функции в обработчике IOCTL практически тождественен такому же вызову в UM. Если у Вас нет прав на открытие процесса — Вам не дадут это сделать. Драйвера обычно используют ф. семейства Zw. Они как правило переадресуются соответствующим Nt функциям, но при этом выставляется переменная PreviousMode = KernelMode и проверки безопасности не производяться.
А зачем мы тут код анализируем, код ошибки то верифайер выдал, что драйвер выгружается и забыл освободить распределение из nonpool.
... << RSDN@Home 1.2.0 alpha rev. 685>>
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
А>Использую ddk 2000, ОС — XP SP2. А>При вызове драйвер происходит перезагрузка, в журнаое пишется — System Error, код 102, категория 1003, описание "Код ошибки 000000c4, параметр1 00000060, параметр2 00000000, параметр3 00024000, параметр4 00000004". А>Как мне диагностировать ошибку? Отладчиком не пробовал, кажется это слишком жирно, один вызов отлаживать.
check DDK. Latest is available online, see Bug Check 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION
... << RSDN@Home 1.2.0 alpha rev. 685>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
З>А зачем мы тут код анализируем, код ошибки то верифайер выдал, что драйвер выгружается и забыл освободить распределение из nonpool.
IMHO, данный код не должен был привести к выгрузке драйвера. Поскольку код ошибки извлекли не из под отладчика и не из минидампа, он может не имеет отношения к рассматриваемому случаю? Хотя, если приведенный код был в DriverEntry, то многое объясняется. NtOpenProcess обламывается по известным причинам, DriverEntry возвращает код, отличный от STATUS_SUCCESS, драйвер выгружают и получают означенную ошибку.
Да пребудет с тобою сила
Re[6]: Драйвер падает на вызове NtOpenprocess
От:
Аноним
Дата:
12.10.07 00:35
Оценка:
Здравствуйте, TarasCo, Вы писали:
З>>А зачем мы тут код анализируем, код ошибки то верифайер выдал, что драйвер выгружается и забыл освободить распределение из nonpool.
TC>IMHO, данный код не должен был привести к выгрузке драйвера. Поскольку код ошибки извлекли не из под отладчика и не из минидампа, он может не имеет отношения к рассматриваемому случаю? Хотя, если приведенный код был в DriverEntry, то многое объясняется. NtOpenProcess обламывается по известным причинам, DriverEntry возвращает код, отличный от STATUS_SUCCESS, драйвер выгружают и получают означенную ошибку.
Пишу, надеюсь это будет полезным.
Решил отлаживаться, вызываю драйвер на виртуалке — всё ок. С железом наверное что-то