Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Применимо к 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, если операция завершится успешно. В противном случае этот метод может вернуть одно из следующих значений:
Код возврата | Описание |
---|---|
|
Указанный целевой объект ввода-вывода уже открыт. |
|
Доступные системные ресурсы недостаточно для завершения операции. |
|
Размер структуры WDF_IO_TARGET_OPEN_PARAMS, которая OpenParams, была неправильной. |
|
Элемент TargetFileObject структуры WDF_IO_TARGET_OPEN_PARAMS вызывающего объекта указал недопустимый объект файла. |
|
Обнаружен недопустимый параметр. |
|
Не удается найти имя устройства, указанное в параметре 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) |