Здравствуйте, theTrueMayhem, Вы писали:
TM>Есть такой код.. драйвер USB для устройства.. 2 дня не могу понять почему драйвер выдает мне BSOD на функции IoAttachDeviceToDeviceStack! Путем комментов и запусков понял что там вылетает...
TM>P.S. выдает PAGE_FAULT_IN_NONPAGED_AREA
TM>и код (хотя в DDK написаны примеры избавления от ошибок они не помогают)
TM>STOP: 0x0000050 (0xBF7F0020,0x00000001,0x80529CED,0x00000002)
TM>Понять не могу чего он оттуда вылетает! Помоему в AddDevice USB драйверов
TM>нет чегото сверхестесственного.. но видимо я чего то не понимаю!
TM>Помогите плиз!
Не буду ни чего коментировать попробуй вот этот код, сам поймешь надеюсь ))))
NTSTATUS USB_AddDevice( IN PDRIVER_OBJECT DriverObject,
IN PDEVICE_OBJECT PhysicalDeviceObject)
{
NTSTATUS Status = STATUS_SUCCESS;
PLOCAL_DEVICE_INFO pLDI;
PDEVICE_OBJECT fdo = NULL;
UNICODE_STRING NtDeviceName;
UNICODE_STRING Win32DeviceName;
RtlInitUnicodeString(&NtDeviceName, USB_DEVICE_NAME);
RtlInitUnicodeString(&Win32DeviceName, USB_DOS_DEVICE_NAME);
Status = IoCreateDevice(
DriverObject, // our driver object
sizeof(LOCAL_DEVICE_INFO), // extension size for us
&NtDeviceName, // name for this device
USB_TYPE,
0, // device characteristics
FALSE, // Not exclusive
&fdo); // Our device object
if(!NT_SUCCESS(Status))
return Status;
Status = IoCreateSymbolicLink(&Win32DeviceName, &NtDeviceName);
if(!NT_SUCCESS(Status))
{
IoDeleteDevice(fdo);
return Status;
}
pLDI = (PLOCAL_DEVICE_INFO) fdo->DeviceExtension;
pLDI->PhisicalDeviceObject = PhysicalDeviceObject;
pLDI->NtDeviceName = NtDeviceName;
pLDI->Win32DeviceName = Win32DeviceName;
fdo->Flags |= DO_DIRECT_IO;
fdo->Flags |= DO_POWER_PAGABLE;
fdo->Flags &= ~DO_DEVICE_INITIALIZING;
pLDI->DeviceObject = fdo;
pLDI->Removed = FALSE;
pLDI->Started = FALSE;
pLDI->NextLowerDriver = IoAttachDeviceToDeviceStack(fdo, PhysicalDeviceObject);
if (NULL == pLDI->NextLowerDriver)
{
IoDeleteSymbolicLink(&Win32DeviceName);
IoDeleteDevice(fdo);
return STATUS_NO_SUCH_DEVICE;
}
IoInitializeRemoveLock (&pLDI->RemoveLock , USB_TAG, 1, 5);
return Status;
}