Compartir a través de


Compatibilidad con E/S de 32 bits en el controlador de 64 bits

Windows en Windows (WOW64) permite que las aplicaciones en modo de usuario de Microsoft Win32 se ejecuten en Windows de 64 bits. Para ello, intercepta las llamadas a funciones de Win32 y convierte parámetros de tipos de puntero de 32 bits a tipos de puntero de 64 bits según corresponda antes de realizar la transición al kernel de 64 bits. Esta conversión, denominada thunking, se realiza automáticamente para todas las funciones win32, con una excepción importante: los búferes de datos pasados a DeviceIoControl. El contenido de estos búferes, al que apuntan los parámetros InputBuffer y OutputBuffer , no se activan, ya que su estructura es específica del controlador.

Nota Aunque el contenido del búfer no está matizado, los punteros de búfer se convierten en punteros de 64 bits.

Las aplicaciones en modo de usuario llaman a DeviceIoControl para enviar una solicitud de E/S directamente a un controlador en modo kernel especificado. Esta solicitud contiene un código de control de E/S (IOCTL) o un código de control del sistema de archivos (FSCTL) y punteros a los búferes de datos de entrada y salida. El formato de estos búferes de datos es específico del IOCTL o FSCTL, que a su vez se define mediante el controlador en modo kernel. Dado que el formato del búfer es arbitrario y, debido a que se conoce al controlador y no a WOW64, la tarea de matonear los datos se deja al controlador.

El controlador de 64 bits debe admitir E/S de 32 bits si se cumple lo siguiente:

  • El controlador expone un IOCTL (o FSCTL) a las aplicaciones en modo de usuario.

  • Al menos uno de los búferes de E/S utilizados por el IOCTL contiene tipos de datos de precisión de puntero.

  • El código IOCTL no se puede volver a escribir fácilmente para eliminar el uso de tipos de datos de búfer de precisión de puntero.