функция GPIO_CLX_ProcessAddDevicePreDeviceCreate (gpioclx.h)

Метод GPIO_CLX_ProcessAddDevicePreDeviceCreate загружает сведения об инициализации в две структуры, которые передаются в качестве входных параметров методу WdfDeviceCreate .

Синтаксис

NTSTATUS GPIO_CLX_ProcessAddDevicePreDeviceCreate(
  [in]      WDFDRIVER              Driver,
  [in, out] PWDFDEVICE_INIT        DeviceInit,
  [out]     PWDF_OBJECT_ATTRIBUTES FdoAttributes
);

Параметры

[in] Driver

Дескриптор WDFDRIVER для объекта драйвера платформы для драйвера контроллера GPIO.

[in, out] DeviceInit

Указатель на структуру, выделенную платформой WDFDEVICE_INIT . Этот метод загружает сведения об инициализации в эту структуру. При возврате эта структура готова к использованию в качестве входного параметра метода WdfDeviceCreate .

[out] FdoAttributes

Указатель на структуру WDF_OBJECT_ATTRIBUTES , выделенную вызывающим объектом. Этот метод загружает сведения об инициализации в эту структуру. При возврате эта структура готова к использованию в качестве входного параметра метода WdfDeviceCreate .

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

GPIO_CLX_ProcessAddDevicePreDeviceCreate возвращает STATUS_SUCCESS, если вызов выполнен успешно. Возможные возвращаемые значения включают следующие коды ошибок.

Код возврата Описание
STATUS_INVALID_PARAMETER
Вызывающий объект не является зарегистрированным клиентом GpioClx.
STATUS_INSUFFICIENT_RESOURCES
Недостаточно памяти.

Комментарии

Драйвер контроллера GPIO должен вызвать этот метод в функции обратного вызова EvtDriverDeviceAdd перед вызовом метода WdfDeviceCreate , который создает объект устройства (FDO), представляющий контроллер GPIO. В противном случае расширение платформы GPIO (GpioClx) не может обрабатывать запросы ввода-вывода или прерывания обработки для нового объекта устройства платформы.

Примеры

В следующем примере кода показана функция обратного вызова EvtDriverDeviceAdd в драйвере контроллера GPIO для устройства контроллера GPIO "XYZ".

NTSTATUS
  XyzEvtDriverDeviceAdd(
    _In_ WDFDRIVER Driver,
    _Inout_ PWDFDEVICE_INIT DeviceInit
    )
{
    WDFDEVICE Device;
    WDF_OBJECT_ATTRIBUTES FdoAttributes;
    NTSTATUS Status;

    Status = GPIO_CLX_ProcessAddDevicePreDeviceCreate(Driver,
                                                      DeviceInit,
                                                      &FdoAttributes);
    if (!NT_SUCCESS(Status)) {
        goto ExitDeviceAdd;
    }

    //
    // Call the framework to create the device and attach it to the lower stack.
    //

    Status = WdfDeviceCreate(&DeviceInit, &FdoAttributes, &Device);
    if (!NT_SUCCESS(Status)) {
        goto ExitDeviceAdd;
    }

    Status = GPIO_CLX_ProcessAddDevicePostDeviceCreate(Driver, Device);
    if (!NT_SUCCESS(Status)) {
        goto ExitDeviceAdd;
    }

ExitDeviceAdd:
    return Status;
}

В предыдущем примере кода вызов WdfDeviceCreate создает объект устройства платформы, представляющий устройство контроллера GPIO. Два входных параметра для этого вызова указывают на WDFDEVICE_INIT и WDF_OBJECT_ATTRIBUTES структуры. Эти структуры изменяются вызовом GPIO_CLX_ProcessAddDevicePreDeviceCreate , который предшествует вызову WdfDeviceCreate . Выходной параметр Device из вызова WdfDeviceCreate является входным параметром для вызова GPIO_CLX_ProcessAddDevicePostDeviceCreate , который следует за вызовом WdfDeviceCreate .

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 8.
Целевая платформа Универсальное
Верхняя часть gpioclx.h
Библиотека Msgpioclxstub.lib
IRQL PASSIVE_LEVEL

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

EvtDriverDeviceAdd

GPIO_CLX_ProcessAddDevicePostDeviceCreate

WDFDEVICE_INIT

WDF_OBJECT_ATTRIBUTES

WdfDeviceCreate