Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Применимо только к 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. |
|
Родительский объект не указан в структуре WDF_OBJECT_ATTRIBUTES. |
|
Элемент ParentObject структуры WDF_OBJECT_ATTRIBUTES не ссылается на объект устройства платформы или объект, цепочка родителей которого приводит к объекту устройства платформы. |
|
Элемент 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) |