Condividi tramite


Funzione ZwDeviceIoControlFile (ntifs.h)

La routine ZwDeviceIoControlFile invia un codice di controllo direttamente a un driver di dispositivo specificato, causando l'esecuzione dell'operazione specificata da parte del driver corrispondente.

Sintassi

NTSYSAPI NTSTATUS ZwDeviceIoControlFile(
  [in]            HANDLE           FileHandle,
  [in, optional]  HANDLE           Event,
  [in, optional]  PIO_APC_ROUTINE  ApcRoutine,
  [in, optional]  PVOID            ApcContext,
  [out]           PIO_STATUS_BLOCK IoStatusBlock,
  [in]            ULONG            IoControlCode,
  [in, optional]  PVOID            InputBuffer,
  [in]            ULONG            InputBufferLength,
  [out, optional] PVOID            OutputBuffer,
  [in]            ULONG            OutputBufferLength
);

Parametri

[in] FileHandle

Handle restituito da ZwCreateFile o ZwOpenFile per l'oggetto file che rappresenta il dispositivo a cui devono essere fornite o da quali informazioni devono essere restituite. L'oggetto file deve essere stato aperto per l'I/O asincrona se il chiamante specifica un Event, ApcRoutinee un contesto APC (in ApcContext) o un contesto di completamento (in ApcContext). Per l'I/O in un dispositivo di archiviazione di massa sottostante, l'oggetto file deve essere stato aperto per l'accesso diretto al dispositivo di archiviazione (DASD).

[in, optional] Event

Handle per un evento creato dal chiamante. Se questo parametro viene fornito, il chiamante verrà inserito in uno stato di attesa fino al completamento dell'operazione richiesta e l'evento specificato viene impostato sullo stato Segnalato. Questo parametro è facoltativo e può essere NULL. Deve essere NULL se il chiamante attenderà che il FileHandle venga impostato sullo stato Segnalato.

[in, optional] ApcRoutine

Indirizzo di una routine APC fornita dal chiamante facoltativo da chiamare al termine dell'operazione richiesta. Questo parametro può essere NULL. Deve essere NULL se è presente un oggetto di completamento I/O associato all'oggetto file.

[in, optional] ApcContext

Puntatore a un'area di contesto determinata dal chiamante. Questo valore di parametro viene usato come contesto APC se il chiamante fornisce un APC o viene usato come contesto di completamento se un oggetto completamento I/O è stato associato all'oggetto file. Al termine dell'operazione, il contesto APC viene passato al APC, se è stato specificato o il contesto di completamento viene incluso come parte del messaggio di completamento che gestione I/O invia all'oggetto di completamento A/O associato.

Questo parametro è facoltativo e può essere NULL. Deve essere NULL se ApcRoutine è NULL e all'oggetto file non è associato alcun oggetto di completamento I/O.

[out] IoStatusBlock

Puntatore a una variabile che riceve lo stato di completamento finale e informazioni sull'operazione. Per le chiamate riuscite che restituiscono dati, il numero di byte scritti nel outputBuffer viene restituito nel membro informazioni .

[in] IoControlCode

IOCTL_xxx codice che indica l'operazione di controllo di I/O del dispositivo da eseguire, in genere dal driver di dispositivo sottostante. Il valore di questo parametro determina il formato e la lunghezza necessaria del InputBuffer e OutputBuffer, nonché quali delle coppie di parametri seguenti sono necessarie. Per informazioni dettagliate sui codici di XXX IOCTL_specifici del tipo di dispositivo definiti dal sistema, vedere la sezione specifica della tecnologia del dispositivo della documentazione di Microsoft Windows Driver Kit (WDK) e codici di controllo di input e output del dispositivo nella documentazione di Microsoft Windows SDK.

[in, optional] InputBuffer

Puntatore a un buffer di input allocato dal chiamante che contiene informazioni specifiche del dispositivo da assegnare al dispositivo di destinazione. Se IoControlCode specifica un'operazione che non richiede dati di input, questo puntatore può essere NULL.

[in] InputBufferLength

Dimensioni, in byte, del buffer in corrispondenza di InputBuffer. Se InputBuffer è NULL, impostare InputBufferLength su zero.

[out, optional] OutputBuffer

Puntatore a un buffer di output allocato dal chiamante in cui le informazioni vengono restituite dal dispositivo di destinazione. Se IoControlCode specifica un'operazione che non produce dati di output, questo puntatore può essere NULL.

[in] OutputBufferLength

Dimensioni, in byte, del buffer in corrispondenza di OutputBuffer. Se OutputBuffer è NULL, impostare OutputBufferLength su zero.

Valore restituito

ZwDeviceIoControlFile restituisce STATUS_SUCCESS se i driver sottostanti hanno eseguito correttamente l'operazione richiesta. In caso contrario, il valore restituito può essere un codice di stato di errore propagato da un driver sottostante. I codici di stato di errore possibili includono quanto segue:

Osservazioni

ZwDeviceIoControlFile offre una visualizzazione coerente dei dati di input e output per il sistema e per i driver in modalità kernel, fornendo al contempo applicazioni e driver sottostanti con un metodo dipendente dal dispositivo per specificare un'interfaccia di comunicazione.

Per altre informazioni sui codici di IOCTL_definiti dal sistema e sulla definizione di IOCTL_XXX o FSCTL_XXX valori, vedere Using I/O Control Codes in the Kernel Mode Architecture Guide and Device Input and Output Control Codes nella documentazione di Microsoft Windows SDK.

Se il chiamante ha aperto il file per operazioni di I/O asincrone (con nessuno dei due FILE_SYNCHRONOUS_XXX set di opzioni create/open), l'evento specificato, se presente, verrà impostato sullo stato segnalato al termine dell'operazione di controllo del dispositivo. In caso contrario, l'oggetto file specificato da FileHandle verrà impostato sullo stato segnalato. Se è stato specificato un ApcRoutine , viene chiamato con i puntatori ApcContext e IoStatusBlock.

I minifiltri devono usare FltDeviceIoControlFile anziché ZwDeviceIoControlFile.

I chiamanti di ZwDeviceIoControlFile devono essere in esecuzione in IRQL = PASSIVE_LEVEL e con API kernel speciali abilitate.

Nota Se la chiamata alla funzione ZwDeviceIoControlFile si verifica in modalità utente, è consigliabile usare il nome "NtDeviceIoControlFile" invece di "ZwDeviceIoControlFile".
 
Per le chiamate dai driver in modalità kernel, le versioni **Nt*Xxx** e **Zw*Xxx** di una routine di Servizi di sistema nativi di Windows possono comportarsi in modo diverso nel modo in cui gestiscono e interpretano i parametri di input. Per ulteriori informazioni sulla relazione tra le versioni **Nt*Xxx** e **Zw*Xxx** di una routine, vedere [Using Nt and Zw Versions of the Native System Services Routines](/windows-hardware/drivers/kernel/using-nt-and-zw-versions-of-the-native-system-services-routines).

Fabbisogno

Requisito Valore
client minimo supportato Windows 2000.
piattaforma di destinazione Universale
intestazione ntifs.h (include Ntifs.h, Ntddk.h)
libreria NtosKrnl.lib
dll NtosKrnl.exe
IRQL PASSIVE_LEVEL (vedere la sezione Osservazioni)
regole di conformità DDI HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

Vedere anche

FltDeviceIoControlFile

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoCallDriver

uso di codici di controllo I/O

uso di versioni Nt e Zw delle routine di Servizi di sistema nativi

ZwClose

ZwCreateFile

ZwOpenFile