Почему Wow64 использует специальную версию rpcrt4.dll?

Wow64 использует модифицированные версии некоторых 32-х битных библиотек. Среди них kernel32.dll, ntdll.dll, user32.dll, imm32.dll, gdi32.dll и rpcrt4.dll. Модифицированные версии библиотек нужны чтобы перехватить все возможные системные вызовы и перенаправить их через Wow64. Однако rpcrt4.dll и так не вызывает системные сервися напрямую и выполняет все вызовы с помощью ntdll.dll. Зачем же нужна специальная версия этой библиотеки?

Дело в том, что rpcrt4.dll содержит реализацию RPC over LPC. Т.е. реализацию протокола RPC, которая использует LPC (local procedure call - вызовы локальны процедур) в качестве транспорта для обмена сообщениями. Формат сообщений, генерируемых протоколом RPC, зависит от платформы. Попросту говоря некоторые поля расширяются до 64-х бит на 64-х битной платформе. Соответственно, если сообщение посылается между 32-х и 64-х разрядными процессами, кто-то должен преобразовать сообщения в нужный формат.

Собственно для этого и нужна специальная версия rpcrt4.dll. Модифицированная версия библиотеки обеспечивает совместимость форматов при обмене LPC сообщениями. Правда вместо корректирования формата при отправке и приёме, 32-х разрядная rpcrt4.dll сразу использует 64-ный формат LPC сообщений, обходясь, тем самым, без дополнительной операции копирования.

comments powered by Disqus