Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Windows в Windows (WOW64) позволяет приложениям в режиме пользователя Microsoft Win32 работать в 64-разрядной версии Windows. Это делается путем перехвата вызовов функций Win32 и преобразования параметров из 32-разрядных типов указателей в 64-разрядные типы указателей, как это необходимо, прежде чем переходить к 64-разрядному ядру. Это преобразование, которое называется thunking, выполняется автоматически для всех функций Win32 с одним важным исключением: буферы данных, передаваемые в DeviceIoControl. Содержимое этих буферов, на которые указывают параметры InputBuffer и OutputBuffer, не преобразуется, так как их структура является специфичной для драйвера.
Заметка Хотя содержимое буфера не модифицировано, указатели буфера преобразуются в 64-разрядные.
Приложения в пользовательском режиме вызывают DeviceIoControl для отправки запроса ввода-вывода непосредственно в указанный драйвер режима ядра. Этот запрос содержит код управления ввода-вывода (IOCTL) или код управления файловой системой (FSCTL) и указатели на буферы входных и выходных данных. Формат этих буферов данных зависит от IOCTL или FSCTL, который, в свою очередь, определяется драйвером режима ядра. Так как формат буфера является произвольным и известен драйверу, а не WOW64, задача преобразования данных возлагается на драйвер.
64-разрядный драйвер должен поддерживать 32-разрядный ввод-вывод, если выполняются все следующие условия:
Драйвер предоставляет IOCTL (или FSCTL) приложениям в пользовательском режиме.
По крайней мере один из буферов ввода-вывода, используемых IOCTL, содержит типы данных точности указателя.
Код IOCTL не может быть легко перезаписан, чтобы исключить использование типов данных буфера точности указателя.