Здравствуйте, x64, Вы писали:
x64>А, ну тогда понятно всё. У тебя бесконечная рекурсия получается, т.к. ты запрос шлёшь опять себе же. Это чуть ли не самая распространённая ошибка. Здесь ты должен передавать не тот pDeviceObject, который пришёл тебе как аргумент в этот обработчик, а тот, который вернула тебе IoAttachDeviceToDeviceStack() — его нужно сохранить в device extension'е.
Я маленько переписал, как вы и говорили.
Завел расширение драйвера:
typedef struct _DEVICE_EXTENSION
{
PDEVICE_OBJECT UnderDevice;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
Инициализировал его в AddDevice:
PDEVICE_OBJECT pFDO = NULL;
PDEVICE_EXTENSION pDeviceExtension;
...
nsStatus = IoCreateDevice(pDriverObject, sizeof(PDEVICE_EXTENSION), &usNTName, FILE_DEVICE_UNKNOWN, 0, FALSE, &pFDO);
pDeviceExtension = (PDEVICE_EXTENSION) pFDO->DeviceExtension;
pDeviceExtension->UnderDevice = IoAttachDeviceToDeviceStack(pFDO, pPDO);
Потом во всех обработчиках запросов IRP пишу:
PDEVICE_EXTENSION pDeviceExtension;
IoSkipCurrentIrpStackLocation(pIrp);
pDeviceExtension = (PDEVICE_EXTENSION) pDeviceObject->DeviceExtension;
return IoCallDriver(pDeviceExtension->UnderDevice, pIrp);
Результат такой. Вставляю флешку, не вылетает.

У часов пишет "DescDevice — диск( G: )", где "DescDevice" моя фраза. Только почему-то в Моей компе флешка тоже есть и я с ней могу работать также, как и до этого. Это нормально? По-моему она не должна быть видна.