Есть такой код.. драйвер USB для устройства.. 2 дня не могу понять почему драйвер выдает мне BSOD на функции IoAttachDeviceToDeviceStack! Путем комментов и запусков понял что там вылетает... #pragma PAGEDCODE NTSTATUS USBAddDevice(IN PDRIVER_OBJECT pDriverObject, IN PDEVICE_OBJECT pPhysicalDO) { // PAGED_CODE(); // что с комментами что без - без толку NTSTATUS status; PDEVICE_OBJECT pDeviceObject; PDEVICE_OBJECT lowerPDO; status = IoCreateDevice(pDriverObject, sizeof(DEVICE_EXTENSION), NULL,//&uDevName FILE_DEVICE_UNKNOWN, // or FILE_DEVICE_BUS_EXTENDER?? FILE_AUTOGENERATED_DEVICE_NAME, FALSE, &pDeviceObject); if(!NT_SUCCESS(status)) { #if DBG DbgPrint("=USB= ERROR!!! Fail to Create Device with STATUS=0x%X",status); #endif return status; } // Take device extension PDEVICE_EXTENSION pDEx = (PDEVICE_EXTENSION) pDeviceObject->DeviceExtension; #if DBG DbgPrint("=USB= IoCreateDevice() --> Created DeviceObject=0x%x\n",pDeviceObject); DbgPrint("=USB= Attaching to Driver Stack\n"); #endif pDEx->DeviceObject = pDeviceObject; pDEx->Pdo = pPhysicalDO; pDeviceObject->Flags |= DO_DIRECT_IO; pDEx->LowerDeviceObject = IoAttachDeviceToDeviceStack(pDeviceObject,pPhysicalDO); // Здесь BSOD if(!pDEx->LowerDeviceObject) { IoDeleteDevice(pDeviceObject); return STATUS_NO_SUCH_DEVICE; } status = IoRegisterDeviceInterface(pDEx->Pdo, &GUID_USB, NULL, &pDEx->InterfaceName); if(!NT_SUCCESS(status)) { IoDetachDevice(pDEx->LowerDeviceObject); IoDeleteDevice(pDeviceObject); return status; } pDriverObject->Flags |= DO_POWER_PAGABLE; pDriverObject->Flags &= ~DO_DEVICE_INITIALIZING; return STATUS_SUCCESS; } P.S. выдает PAGE_FAULT_IN_NONPAGED_AREA и код (в котором я не очень разбираюсь) STOP: 0x0000050 (0xBF7F0020,0x00000001,0x80529CED,0x00000002) P.S.S. И еще вопрос - есть ли какиенибудь способы разбираться в BSOD. Ну хотя бы для понимания, что, где и изза чего произошло! Или может есть программы которые сохраняют эти логи
<font color="gray][ ESHV</font><!--color--><font color="gray]: и код (в котором я не очень разбираюсь) ]</font><!--color--> Открой доку по ддк и в указателе набери bug - увидишь список всех стоп-кодов с подробным описанием. Либо онлайн на сайте мс в поиске набери "Bug Check Codes" или просто погугли. <font color="gray][ ESHV</font><!--color--><font color="gray]: P.S.S. И еще вопрос - есть ли какиенибудь способы разбираться в BSOD. Ну хотя бы для понимания, что, где и изза чего произошло! Или может есть программы которые сохраняют эти логи ]</font><!--color--> Способ один - чтение доков и прочего и опыт. На sysinternals.com лежит утилита, делающая принтскрин голубого экрана, но я никогда не пользовался. Проще Mini Crash Dump в отладчик загрузить. В чём причина твоего бага я не знаю. Макрос PAGED_CODE тут совершенно не при чём. IMHO, с виду, код правильный. Пройдись пошагово в отладчике и посмотри где именно BSOD: внутри IoAttachDeviceToDeviceStack или в момент записи в pDEx->LowerDeviceObject. Если проблема внутри IoAttachDeviceToDeviceStack, пройдись пошагово внутри неё. ЗЫ: Тот код, что на rsdn предлагают, можешь попробовать, но он лажёвый. fdo->Flags &= ~DO_DEVICE_INITIALIZING; . . . IoAttachDeviceToDeviceStack Это нонсенс! Edited: Насчет нонсенса я гоню, сори. Поскольку вся инициализация девайса происходит до аттача, то можно сбросить этот флаг до вызова IoAttachDeviceToDeviceStack, но правильнее всё же перед самым выходом из AddDevice.
fdo->Flags &= ~DO_DEVICE_INITIALIZING; . . . IoAttachDeviceToDeviceStack Ну впринципе да... но ради эксперимента что не поделаешь) Вообще я не понимаю в ДДК ж написано SymbolicLink не создавать для PnP драйверов! я впринципе пошел другим путем.. На счет кодов я все разобрал спасибо догадался.. ток мне это пользы не принесло.. висит так и весело! У меня подозрение на IoCreateDevice может там чо не так поставил! Да и потом я уже здесь создавал тему... не могу настроить SoftIce.. отлаживаю DbgView 4.5 делаю сообщения и смотрю - впринципе удобно.. но в этом случае не спасает!!! У меня в SoftIce почему то драйвер вгрузить не может... хотя SymbolLoader32 загружаю.. все делаю как в хелпе.. Может есть другой более удобный пошаговый отладчик.. пусть простенький!