Condividi tramite


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.