Condividi tramite


Funzione WdfIoTargetOpen (wdfiotarget.h)

[Si applica a KMDF e UMDF]

Il metodo WdfIoTargetOpen apre una destinazione di I/O remota in modo che il driver possa inviare richieste di I/O.

Sintassi

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

Parametri

[in] IoTarget

Handle per un oggetto di destinazione I/O ottenuto da una chiamata precedente a WdfIoTargetCreate.

[in] OpenParams

Puntatore a una struttura di WDF_IO_TARGET_OPEN_PARAMS allocata dal chiamante.

Valore restituito

WdfIoTargetOpen restituisce STATUS_SUCCESS se l'operazione ha esito positivo. In caso contrario, questo metodo potrebbe restituire uno dei valori seguenti:

Codice restituito Descrizione
STATUS_INVALID_DEVICE_STATE
La destinazione di I/O specificata è già aperta.
STATUS_INSUFFICIENT_RESOURCES
Le risorse di sistema disponibili non sono sufficienti per completare l'operazione.
STATUS_INFO_LENGTH_MISMATCH
La dimensione della struttura di WDF_IO_TARGET_OPEN_PARAMS specificata OpenParams non è corretta.
STATUS_NO_SUCH_DEVICE
Il membro TargetFileObject della struttura WDF_IO_TARGET_OPEN_PARAMS del chiamante ha specificato un oggetto file non valido.
STATUS_INVALID_PARAMETER
È stato rilevato un parametro non valido.
STATUS_NOT_FOUND
Impossibile trovare il nome del dispositivo identificato nel parametro OpenParams.
 

Questo metodo potrebbe anche restituire altri valori NTSTATUS .

Se il driver fornisce un handle di oggetto non valido, si verifica un controllo di bug.

Osservazioni:

I driver possono aprire destinazioni di I/O remote specificando una stringa Unicode che rappresenta un nome di oggetto o fornendo un puntatore a una struttura DEVICE_OBJECT di Windows Driver Model (WDM). I driver basati su framework in genere non dispongono di puntatori alle strutture di DEVICE_OBJECT di altri driver.

Per ottenere un nome di interfaccia del dispositivo prima di chiamare WdfIoTargetOpen, un driver UMDF deve chiamare CM_Register_Notification per registrarsi per la notifica di arrivo e rimozione dell'interfaccia. Quindi può aprire la destinazione remota usando il nome simbolico dell'interfaccia ricevuto nella routine di callback di notifica dell'interfaccia. Il driver deve continuare ad ascoltare la notifica di rimozione mentre l'handle è aperto. Se il driver di destinazione non riesce, il driver UMDF deve chiudere l'handle.

Se l'interfaccia esiste già, un driver UMDF deve chiamare CM_Get_Device_Interface_List, probabilmente chiamando CM_Get_Device_Interface_List_Size prima per determinare le dimensioni del buffer necessarie.

Se si vuole che il driver usi la destinazione I/O locale, il driver deve chiamare WdfDeviceGetIoTarget anziché WdfIoTargetOpen.

Se una chiamata a WdfIoTargetOpen ha esito negativo, il driver deve chiamare WdfObjectDelete per eliminare l'oggetto di destinazione I/O.

Per altre informazioni su WdfIoTargetOpen, vedere Inizializzazione di una destinazione di I/O generale.

Per altre informazioni sulle destinazioni di I/O, vedere Uso delle destinazioni di I/O.

Esempi

L'esempio seguente crea un oggetto di destinazione di I/O, inizializza una struttura di WDF_IO_TARGET_OPEN_PARAMS e apre una destinazione di I/O remota specificando il nome del collegamento simbolico di un dispositivo.

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;
}

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
versione minima di KMDF 1.0
versione minima di UMDF 2.0
intestazione wdfiotarget.h (include Wdf.h)
Biblioteca Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
regole di conformità DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Vedere anche

DEVICE_OBJECT

WDF_IO_TARGET_OPEN_PARAMS

WdfDeviceGetIoTarget

WdfIoTargetClose

WdfIoTargetCreare

WdfIoTargetOpen

WdfObjectDelete