Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I codici di controllo I/O (IOCTLs) vengono usati per la comunicazione tra applicazioni e driver in modalità utente o per la comunicazione interna tra i driver in uno stack. I codici di controllo di I/O vengono inviati usando i pacchetti di richiesta di I/O.
Le applicazioni in modalità utente inviano IOCTLs ai driver chiamando DeviceIoControl, descritto nella documentazione di Microsoft Windows SDK. Le chiamate a DeviceIoControl causano la creazione di una richiesta di IRP_MJ_DEVICE_CONTROL da parte del gestore di I/O e l'invio al driver più in alto.
Inoltre, i driver di livello superiore possono inviare IOCTLs ai driver di livello inferiore creando e inviando richieste di IRP_MJ_DEVICE_CONTROL o IRP_MJ_INTERNAL_DEVICE_CONTROL . I driver elaborano queste richieste nelle routine DispatchDeviceControl e DispatchInternalDeviceControl . Le applicazioni in modalità utente non possono inviare richieste di IRP_MJ_INTERNAL_DEVICE_CONTROL .
Alcuni IOCTL sono pubblici e alcuni sono privati. Gli IOCTL pubblici sono in genere definiti dal sistema e documentati da Microsoft, nel Windows Driver Kit (WDK) o nel Windows SDK. Possono essere inviati con chiamate di un componente in modalità utente a DeviceIoControl oppure possono essere inviate da un driver in modalità kernel a un altro, usando IRP_MJ_DEVICE_CONTROL o IRP_MJ_INTERNAL_DEVICE_CONTROL richieste.
IOCTLs privati, invece, sono destinati a essere utilizzati esclusivamente dai componenti software di un fornitore per comunicare tra loro. IOCTLs privati sono in genere definiti in un file di intestazione fornito dal fornitore e non sono documentati pubblicamente. Come gli IOCTLs pubblici, potrebbero essere inviati con chiamate di un componente in modalità utente a DeviceIoControl, oppure potrebbero essere inviati da un driver in modalità kernel a un altro, usando richieste IRP_MJ_DEVICE_CONTROL o IRP_MJ_INTERNAL_DEVICE_CONTROL.
Non esiste alcuna differenza tra la codifica di IOCTLs pubblici e privati. Esistono tuttavia differenze nei codici interni che possono essere usati in IOCTL definiti dal fornitore, rispetto a quelli usati per IOCTL definiti dal sistema. Se i IOCTLs pubblici disponibili non soddisfano le proprie esigenze, è possibile definire nuovi IOCTLs privati che i componenti software possono usare per comunicare tra loro. Per altre informazioni, vedere Definizione dei codici di controllo di I/O.