Есть такой код.. драйвер 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 драйверов
нет чегото сверхестесственного.. но видимо я чего то не понимаю!
Помогите плиз!