Поделиться через


функция обратного вызова PFREE_ADAPTER_OBJECT (wdm.h)

Подпрограмма FreeAdapterObject освобождает указанный объект адаптера после завершения драйвером всех операций DMA.

Синтаксис

PFREE_ADAPTER_OBJECT PfreeAdapterObject;

void PfreeAdapterObject(
  [in] PDMA_ADAPTER DmaAdapter,
  [in] IO_ALLOCATION_ACTION AllocationAction
)
{...}

Параметры

[in] DmaAdapter

Указатель на структуру DMA_ADAPTER . Эта структура представляет собой объект адаптера, который должен быть освобожден. Этот объект представляет master устройства DMA или системного канала DMA водителя. Вызывающий объект получил этот указатель из предыдущего вызова процедуры IoGetDmaAdapter .

[in] AllocationAction

Тип освобождения, запрашиваемого вызывающим драйвером. Задайте для этого параметра значение перечисления IO_ALLOCATION_ACTION . Дополнительные сведения см. в разделе «Примечания».

Возвращаемое значение

None

Remarks

FreeAdapterObject не является системной подпрограммой, которую можно вызывать напрямую по имени. Эта подпрограмма может вызываться только указателем из адреса, возвращаемого в DMA_OPERATIONS структуре. Драйверы получают адрес этой подпрограммы, вызывая IoGetDmaAdapter с элементом Version параметра DeviceDescription , равным DEVICE_DESCRIPTION_VERSION3. Если IoGetDmaAdapter возвращает значение NULL, подпрограмма недоступна на вашей платформе.

Если AllocationAction = DeallocateObject, вызов FreeAdapterObject освобождает объект адаптера и освобождает все регистры карты, которые могут быть выделены для этого объекта.

Если AllocationAction = DeallocateObjectKeepRegisters, вызов FreeAdapterObject освобождает объект адаптера, но не освобождает регистры карты. В этом случае драйвер должен явно освободить все выделенные регистры карты, вызвав подпрограмму FreeMapRegisters .

Если AllocationAction = KeepObject, вызов FreeAdapterObject не оказывает никакого влияния.

FreeAdapterObject можно использовать для освобождения ресурсов DMA, выделенных вызовами подпрограмм AllocateAdapterChannelEx, GetScatterGatherListEx и BuildScatterGatherListEx . Если драйвер вызывает одну из этих подпрограмм синхронно, параметр ExecutionRoutine является необязательным и может быть опущен. В этом случае драйвер может использовать объект адаптера и регистры карты, выделенные вызовом . После того как драйвер инициирует передачу DMA, драйвер может вызвать FreeAdapterObject , чтобы освободить объект адаптера, и при необходимости карта регистрируется.

Подпрограмма FreeAdapterChannelпохожа на FreeAdapterObject. FreeAdapterChannel всегда освобождает объект адаптера и все выделенные регистры карты. Это поведение аналогично поведению FreeAdapterObject , если AllocationAction = DeallocateObject.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 8.
Целевая платформа Персональный компьютер
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
IRQL <= DISPATCH_LEVEL

См. также раздел

AdapterControl

AdapterListControl

AllocateAdapterChannel

AllocateAdapterChannelEx

BuildScatterGatherListEx

DMA_ADAPTER

DMA_OPERATIONS

FreeAdapterChannel

FreeMapRegisters

GetScatterGatherListEx

IO_ALLOCATION_ACTION

IoGetDmaAdapter