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 |
---|---|
|
La destinazione di I/O specificata è già aperta. |
|
Le risorse di sistema disponibili non sono sufficienti per completare l'operazione. |
|
La dimensione della struttura di WDF_IO_TARGET_OPEN_PARAMS specificata OpenParams non è corretta. |
|
Il membro TargetFileObject della struttura WDF_IO_TARGET_OPEN_PARAMS del chiamante ha specificato un oggetto file non valido. |
|
È stato rilevato un parametro non valido. |
|
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) |