Взаимодействие между 32-разрядными и 64-разрядными приложениями

Следующие методы можно использовать для взаимодействия между 32-разрядными и 64-разрядными приложениями:

  • 64-разрядные версии Windows используют 32-разрядные дескрипторы для взаимодействия. При совместном использовании дескриптора между 32-разрядными и 64-разрядными приложениями только более низкие 32-разрядные, поэтому безопасно усечь дескриптор (при передаче от 64-разрядной до 32-разрядной) или расширения дескриптора (при передаче от 32-разрядной до 64-разрядной). Дескрипторы, которые могут быть общими, включают дескрипторы для пользовательских объектов, таких как окна (HWND), и дескрипторы GDI, такие как пера и кисти (HBRUSH и HPEN).
  • Именованные объекты, созданные в 32-разрядном процессе, могут быть доступны 64-разрядными процессами и наоборот (в соответствии с обычными правилами безопасности). Именованные объекты включают такие объекты, как мьютексы, семафоры и дескрипторы файлов.
  • Можно использовать удаленные вызовы процедур (RPC).
  • Com LocalServers можно использовать, если для всех используемых интерфейсов регистрируются 32-разрядные и 64-разрядные библиотеки DLL-сервера или заглушки.
  • Общую память можно использовать, если типы, зависящие от указателя, преобразуются должным образом (или избегаются).
  • Функции CreateProcess и ShellExecute могут запускать 32-разрядные и 64-разрядные процессы из 32-разрядных или 64-разрядных процессов с определенными ограничениями.

64-разрядный исполняемый файл, расположенный в %windir%\System32, не может быть запущен из 32-разрядного процесса, так как средство перенаправления файловой системы перенаправляет путь. Не отключайте перенаправление для выполнения этого; вместо этого используйте %windir%\Sysnative. Дополнительные сведения см. в перенаправления файловой системы.