IoAttachDeviceToDeviceStack & BSOD
От: theTrueMayhem Россия  
Дата: 09.11.05 17:51
Оценка:
Есть такой код.. драйвер 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
и код (хотя в DDK написаны примеры избавления от ошибок они не помогают)
STOP: 0x0000050 (0xBF7F0020,0x00000001,0x80529CED,0x00000002)
Понять не могу чего он оттуда вылетает! Помоему в AddDevice USB драйверов
нет чегото сверхестесственного.. но видимо я чего то не понимаю!
Помогите плиз!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.