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


Функция WdfDpcCreate (wdfdpc.h)

[Применимо только к KMDF]

Метод WdfDpcCreate создает объект DPC платформы и регистрирует функцию обратного вызова EvtDpcF unc.

Синтаксис

NTSTATUS WdfDpcCreate(
  [in]  PWDF_DPC_CONFIG        Config,
  [in]  PWDF_OBJECT_ATTRIBUTES Attributes,
  [out] WDFDPC                 *Dpc
);

Параметры

[in] Config

Указатель на структуру, выделенную вызывающим объектом, WDF_DPC_CONFIG.

[in] Attributes

Указатель на структуру, выделенную вызывающим объектом, WDF_OBJECT_ATTRIBUTES, которая задает атрибуты для нового объекта DPC.

[out] Dpc

Указатель на расположение, которое получает дескриптор к новому объекту DPC платформы.

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

WdfDpcCreate возвращает STATUS_SUCCESS, если операция выполнена успешно. В противном случае метод может вернуть одно из следующих значений:

Код возврата Описание
СТАТУС_НЕДЕЙСТВИТЕЛЬНЫЙ_ПАРАМЕТР
Указан недопустимый параметр.
СТАТУС_НЕДОСТАТОЧНЫЕ_РЕСУРСЫ
Не удалось выделить объект DPC.
STATUS_WDF_PARENT_NOT_SPECIFIED
Родительский объект не указан в структуре WDF_OBJECT_ATTRIBUTES.
STATUS_INVALID_DEVICE_REQUEST
Элемент ParentObject структуры WDF_OBJECT_ATTRIBUTES не ссылается на объект устройства платформы или объект, цепочка родителей которого приводит к объекту устройства платформы.
STATUS_WDF_INCOMPATIBLE_EXECUTION_LEVEL
Элемент AutomaticSerialization структуры WDF_DPC_CONFIG имеет значение TRUE, но уровня выполнения родительского объекта имеет значение WdfExecutionLevelPassive.
 

Список других возвращаемых значений, которые может возвращать метод WdfDpcCreate, см. в ошибках создания объектов Framework.

Этот метод также может возвращать другие значения NTSTATUS.

Замечания

Драйвер обычно вызывает WdfDpcCreate из функции обратного вызова EvtDriverDeviceAdd.

При создании объекта DPC драйвер должен указать родительский объект в ParentObject член структуры WDF_OBJECT_ATTRIBUTES. Родительский объект может быть объектом платформы или любым объектом, цепочка родителей которого ведет к объекту устройства платформы. Платформа удаляет объект DPC при удалении объекта устройства.

Вызов WdfDpcCreate создает объект DPC платформы и регистрирует функцию обратного вызова EvtDpcF unc. Чтобы запланировать выполнение функции обратного вызова, драйвер должен вызвать WdfDpcEnqueue.

Если драйвер предоставляет EvtCleanupCallback или EvtDeqlCallback функции обратного вызова для объекта таймера платформы, обратите внимание, что платформа вызывает эти функции обратного вызова в IRQL = PASSIVE_LEVEL.

Дополнительные сведения об использовании объектов DPC см. в разделе обслуживаниепрерывания.

Примеры

В следующем примере кода инициализируется структура WDF_DPC_CONFIG_INIT, а затем создается объект DPC.

WDF_DPC_CONFIG dpcConfig;
WDF_OBJECT_ATTRIBUTES dpcAttributes;
NTSTATUS status;

WDF_DPC_CONFIG_INIT(
                    &dpcConfig,
                    MyEvtDpcFunc
                    );
dpcConfig.AutomaticSerialization = TRUE;
WDF_OBJECT_ATTRIBUTES_INIT(&dpcAttributes);
dpcAttributes.ParentObject = pDevExt->WdfDevice;
status = WdfDpcCreate(
                      &dpcConfig,
                      &dpcAttributes,
                      &pDevExt->CompleteWriteDpc
                      );
if (!NT_SUCCESS(status)) {
    return status;
}

Требования

Требование Ценность
целевая платформа универсальный
минимальная версия KMDF 1.0
Заголовок wdfdpc.h (include Wdf.h)
Библиотека Wdf01000.sys (см. управление версиями библиотеки Платформы).)
IRQL <=DISPATCH_LEVEL
правил соответствия DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

См. также

EvtDpcFunc

EvtDriverDeviceAdd

WDF_DPC_CONFIG

WDF_DPC_CONFIG_INIT

WDF_OBJECT_ATTRIBUTES

WDF_OBJECT_ATTRIBUTES_INIT

WdfDpcEnqueue