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


Функция WdfIoTargetOpen (wdfiotarget.h)

[Применимо к KMDF и UMDF]

Метод WdfIoTargetOpen открывает удаленный целевой объект ввода-вывода, чтобы драйвер смог отправить в него запросы ввода-вывода.

Синтаксис

NTSTATUS WdfIoTargetOpen(
  [in] WDFIOTARGET                IoTarget,
  [in] PWDF_IO_TARGET_OPEN_PARAMS OpenParams
);

Параметры

[in] IoTarget

Дескриптор целевого объекта ввода-вывода, полученный из предыдущего вызова WdfIoTargetCreate.

[in] OpenParams

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

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

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

Код возврата Описание
STATUS_INVALID_DEVICE_STATE
Указанный целевой объект ввода-вывода уже открыт.
СТАТУС_НЕДОСТАТОЧНЫЕ_РЕСУРСЫ
Доступные системные ресурсы недостаточно для завершения операции.
STATUS_INFO_LENGTH_MISMATCH
Размер структуры WDF_IO_TARGET_OPEN_PARAMS, которая OpenParams, была неправильной.
STATUS_NO_SUCH_DEVICE
Элемент TargetFileObject структуры WDF_IO_TARGET_OPEN_PARAMS вызывающего объекта указал недопустимый объект файла.
СТАТУС_НЕДЕЙСТВИТЕЛЬНЫЙ_ПАРАМЕТР
Обнаружен недопустимый параметр.
STATUS_NOT_FOUND
Не удается найти имя устройства, указанное в параметре openParams .
 

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

Ошибка возникает, если драйвер предоставляет недопустимый дескриптор объекта.

Замечания

Драйверы могут открывать удаленные целевые объекты ввода-вывода, указав строку Юникода, представляющую имя объекта или указав указатель на структуру модели драйвера Windows (WDM DEVICE_OBJECT). (Как правило, драйверы на основе платформы не имеют указателей на другие DEVICE_OBJECT структуры драйверов.)

Чтобы получить имя интерфейса устройства перед вызовом WdfIoTargetOpen, драйвер UMDF должен вызвать CM_Register_Notification, чтобы зарегистрировать уведомление о прибытии и удалении интерфейса. Затем он может открыть удаленный целевой объект с помощью символьного имени интерфейса, которое он получает в подпрограмме обратного вызова уведомления интерфейса. Драйвер должен продолжать прослушивать уведомление об удалении во время открытия дескриптора. Если целевой драйвер завершается ошибкой, драйвер UMDF должен закрыть дескриптор.

Если интерфейс уже существует, драйвер UMDF должен вызывать CM_Get_Device_Interface_List, возможно, вызов CM_Get_Device_Interface_List_Size сначала, чтобы определить требуемый размер буфера.

Если вы хотите, чтобы драйвер использовал свой локальный целевой объект ввода-вывода, драйвер должен вызывать WdfDeviceGetIoTarget вместо WdfIoTargetOpen.

Если вызов WdfIoTargetOpen завершается ошибкой, драйвер должен вызвать WdfObjectDelete, чтобы удалить целевой объект ввода-вывода.

Дополнительные сведения о WdfIoTargetOpenсм. в инициализации общего целевого объекта ввода-вывода.

Дополнительные сведения о целевых объектах ввода-вывода см. в разделе Использование целевых объектов ввода-вывода.

Примеры

В следующем примере создается целевой объект ввода-вывода, инициализируется структура WDF_IO_TARGET_OPEN_PARAMS и открывается удаленный целевой объект ввода-вывода, указав символьное имя устройства.

WDF_OBJECT_ATTRIBUTES  ioTargetAttrib;
WDFIOTARGET  ioTarget;
WDF_IO_TARGET_OPEN_PARAMS  openParams;

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(
                                        &ioTargetAttrib,
                                        TARGET_DEVICE_INFO
                                        );
status = WdfIoTargetCreate(
                           device,
                           &ioTargetAttrib,
                           &ioTarget
                           );
if (!NT_SUCCESS(status)) {
    return status;
}
WDF_IO_TARGET_OPEN_PARAMS_INIT_OPEN_BY_NAME(
                                            &openParams,
                                            SymbolicLink,
                                            STANDARD_RIGHTS_ALL
                                            );
status = WdfIoTargetOpen(
                         ioTarget,
                         &openParams
                         );
if (!NT_SUCCESS(status)) {
    WdfObjectDelete(ioTarget);
    return status;
}

Требования

Требование Ценность
целевая платформа универсальный
минимальная версия KMDF 1.0
минимальная версия UMDF 2.0
Заголовок wdfiotarget.h (include Wdf.h)
Библиотека Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
правил соответствия DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

См. также

DEVICE_OBJECT

WDF_IO_TARGET_OPEN_PARAMS

WdfDeviceGetIoTarget

WdfIoTargetClose

WdfIoTargetCreate

WdfIoTargetOpen

WdfObjectDelete