Supporto di I/O a 32 bit nel driver a 64 bit
Windows in Windows (WOW64) consente alle applicazioni in modalità utente Di Microsoft Win32 di eseguire in Windows a 64 bit. Questa operazione viene eseguita intercettando chiamate di funzione Win32 e convertendo i parametri da tipi di puntatore a 32 bit a tipi di puntatore a 64 bit, come appropriato prima di eseguire la transizione al kernel a 64 bit. Questa conversione, denominata thunking, viene eseguita automaticamente per tutte le funzioni Win32, con un'eccezione importante: i buffer di dati passati a DeviceIoControl. Il contenuto di questi buffer, a cui puntano i parametri InputBuffer e OutputBuffer , non sono thunk, perché la loro struttura è specifica del driver.
Nota Anche se il contenuto del buffer non è thunk, i puntatori del buffer vengono convertiti in puntatori a 64 bit.
Le applicazioni in modalità utente chiamaNo DeviceIoControl per inviare una richiesta di I/O direttamente a un driver in modalità kernel specificato. Questa richiesta contiene un codice di controllo I/O (IOCTL) o codice di controllo del file system (FSCTL) e puntatori a buffer di dati di input e output. Il formato di questi buffer di dati è specifico per IOCTL o FSCTL, che a sua volta è definito dal driver in modalità kernel. Poiché il formato del buffer è arbitrario e perché è noto al driver e non WOW64, l'attività di thunking dei dati viene lasciata al driver.
Il driver a 64 bit deve supportare I/O a 32 bit se tutte le operazioni seguenti sono vere:
Il driver espone un IOCTL (o FSCTL) alle applicazioni in modalità utente.
Almeno uno dei buffer di I/O usati da IOCTL contiene tipi di dati di precisione puntatore.
Il codice IOCTL non può essere riscritto facilmente per eliminare l'uso dei tipi di dati del buffer di precisione del puntatore.