- •Лекция №10. Сериализация. System Queuing и Driver Queuing
- •[10.1] Завершение запроса в/в.
- •[10.2] Задержка обработки запросов irp и постановка запросов irp в очередь [10.2.1] Задержка обработки запросов irp
- •[10.2.2] Постановка запросов irp в очередь
- •[10.2.2.1] Системная очередь запросов irp (System Queuing)
- •[10.2.2.1.1] Обработка пакетов irp в функции StartIo
- •[10.2.2.2] Очереди, управляемые драйвером
- •[10.2.2.2.1] Функции управления очередью низкого уровня
- •[10.2.2.2.2] Функции управления очередью высокого уровня – “Очередь Устройства” (Device Queue)
- •[10.3] Отмена запросов в/в
- •[10.3.1] Отмена irp и Системная Очередь
- •[10.3.2] Отмена irp и очереди, управляемые драйвером
[10.3.2] Отмена irp и очереди, управляемые драйвером
VOID Cancel(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
PIRP irpToCancel;
PDEVICE_EXT devExt;
KIRQL oldIrql;
// обнулить указатель на функцию отмены
IoSetCancelRoutine(Irp, NULL);
//Освободить системную спин-блокировку как можно быстрее
IoReleaseCancelSpinLock(Irp->CancelIrql);
devExt =DeviceObject->DeviceExtension;
//Захватить спин-блокировку доступа к очереди, удалить IRP и освободить
//спин-блокировку
KeAcquireSpinLock(&devExt->QueueLock, &oldIrql);
RemoveEntryList(&Irp->Tail.Overlay.ListEntry);
KeReleaseSpinLock(&devExt->QueueLock, oldlrql);
//Отменить IRP
Irp->IoStatus Status =STATUS_CANCELLED;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
}
Лекция №10. Сериализация. System Queuing и Driver Queuing 1
[10.1] Завершение запроса в/в. 1
[10.2] Задержка обработки запросов IRP и постановка запросов IRP в очередь 2
[10.2.1] Задержка обработки запросов IRP 2
[10.2.2] Постановка запросов IRP в очередь 2
[10.2.2.1] Системная очередь запросов IRP (System Queuing) 2
[10.2.2.1.1] Обработка пакетов IRP в функции StartIo 4
[10.2.2.2] Очереди, управляемые драйвером 5
[10.2.2.2.1] Функции управления очередью низкого уровня 5
[10.2.2.2.2] Функции управления очередью высокого уровня – “Очередь Устройства” (Device Queue) 7
[10.3] Отмена запросов в/в 7
[10.3.1] Отмена IRP и Системная Очередь 8
[10.3.2] Отмена IRP и очереди, управляемые драйвером 9