Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
199
Добавлен:
20.02.2016
Размер:
110.59 Кб
Скачать

[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

10

Соседние файлы в папке Лабы по драйверам