Supporto di I/O a 32 bit nel driver a 64 bit
Windows in Windows (WOW64) consente l'esecuzione di applicazioni in modalità utente Di Microsoft Win32 in Windows a 64 bit. Fa questo intercettando le chiamate di funzione Win32 e convertendo i parametri dai tipi di puntatore a 32 bit ai tipi di puntatore a 64 bit, secondo le necessità, prima di effettuare la transizione al kernel a 64 bit. Questa conversione, denominata thunking, viene eseguita automaticamente per tutte le funzioni Win32, tranne per un'eccezione importante: i buffer di dati passati a DeviceIoControl. Il contenuto di questi buffer, puntati dai parametri InputBuffer e OutputBuffer, non vengono alterati, perché la loro struttura è specifica del driver.
Nota Anche se il contenuto del buffer non viene compresso, i puntatori 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 ai buffer dei 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 poiché è noto al driver e non WOW64, l'attività di eseguire il mapping dei dati viene lasciata al driver.
Il driver a 64 bit deve supportare operazioni di I/O a 32 bit se sono soddisfatte tutte le condizioni seguenti:
Il driver espone un IOCTL (o FSCTL) alle applicazioni in modalità utente.
Almeno uno dei buffer di I/O utilizzati da IOCTL contiene tipi di dati con precisione di puntatore.
Riscrivere facilmente il codice IOCTL per eliminare l'uso di tipi di dati buffer con precisione del puntatore non è possibile.