Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Применимо только к KMDF]
После обработки драйвера всех передач DMA, связанных с транзакцией DMA, драйвер может удалить или повторно использовать объект транзакции. Как правило, функция обратного вызова EvtInterruptDpc драйвера удаляет объект транзакции (вызывая WdfObjectDelete). Впоследствии при создании новой транзакции DMA драйвер вызывает WdfDmaTransactionCreate для создания нового объекта транзакции.
Однако иногда драйвер может повторно использовать объекты транзакций. В таких случаях драйвер вызывает WdfDmaTransactionRelease вместо WdfObjectDelete.
Например, предположим, что драйвер и устройство должны работать, когда ресурсы памяти компьютера низки. Чтобы устранить эту проблему с памятью, драйвер может использовать следующую процедуру:
Функция обратного вызова драйвера EvtDriverDeviceAdd может вызывать WdfDmaTransactionCreate для создания одного или нескольких объектов транзакций. Драйвер сохраняет дескрипторы этих объектов транзакций.
Каждый раз, когда драйвер готов к созданию и инициализации новой транзакции, он вызывает WdfDmaTransactionCreate. Если этот метод возвращает STATUS_INSUFFICIENT_RESOURCES, драйвер может использовать один из сохраненных объектов транзакций.
Если драйвер использует один из своих хранимых объектов транзакций, он должен повторно использовать объект транзакции, а не удалять его после завершения транзакции. Драйвер настраивает объект транзакции для повторного использования путем вызова WdfDmaTransactionRelease вместо WdfObjectDelete.
Пример PLX9x5x повторно использует объекты транзакций DMA.