Re[4]: разработка USB драйвера
От: bicycle  
Дата: 28.10.08 06:07
Оценка:
Здравствуйте, 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" моя фраза. Только почему-то в Моей компе флешка тоже есть и я с ней могу работать также, как и до этого. Это нормально? По-моему она не должна быть видна.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.