ВУЗ:
Составители:
61
приостановленной очереди до тех пор, пока кто-нибудь не отменит приостановку
очереди, и диспетчер не сможет возобновить отправку IRP функции StartIo.
3.17 Объект DEVQUEUE
Для решения проблем, связанных с очередями, в [3] предложен пакет
функций управления объектом очереди, который автор назвал DEVQUEUE и
включил его в структуру DEVICE_EXTENSION.
typedef struct _DEVICE_EXTENSION {
…
DEVQUEUE dqReadWrite;
…
} DEVICE_EXTENSION, *DEVICE_EXTENSION;
На
рисунке 3.7 показана типичная обработка IRP драйвером,
использующим объекты DEVICE_EXTENSION [3].
Рисунок 3.7 – Логика обработки IRP с участием объекта DEVQUEUE и функции
StartIo
Каждый объект DEVQUEUE обладает собственной функцией StartIo,
которая указывается при инициализации объекта в AddDevice.
NTSTATUS AddDevice(…)
{
…
PDEVICE_EXTENSION pdx = …;
InitializeQueue(&pdx->dqReadWrite, StartIo);
приостановленной очереди до тех пор, пока кто-нибудь не отменит приостановку очереди, и диспетчер не сможет возобновить отправку IRP функции StartIo. 3.17 Объект DEVQUEUE Для решения проблем, связанных с очередями, в [3] предложен пакет функций управления объектом очереди, который автор назвал DEVQUEUE и включил его в структуру DEVICE_EXTENSION. typedef struct _DEVICE_EXTENSION { … DEVQUEUE dqReadWrite; … } DEVICE_EXTENSION, *DEVICE_EXTENSION; На рисунке 3.7 показана типичная обработка IRP драйвером, использующим объекты DEVICE_EXTENSION [3]. Рисунок 3.7 – Логика обработки IRP с участием объекта DEVQUEUE и функции StartIo Каждый объект DEVQUEUE обладает собственной функцией StartIo, которая указывается при инициализации объекта в AddDevice. NTSTATUS AddDevice(…) { … PDEVICE_EXTENSION pdx = …; InitializeQueue(&pdx->dqReadWrite, StartIo); 61
Страницы
- « первая
- ‹ предыдущая
- …
- 59
- 60
- 61
- 62
- 63
- …
- следующая ›
- последняя »