Not a kernel guy

… in the Windows kernel team

Monday, September 25, 2006

Почему 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 сообщений, обходясь, тем самым, без дополнительной операции копирования.

Tags:
Posted at 1:26 pm •

RSS feed | Trackback URI

Comments »

No comments yet.

Your Comment (smaller | larger)

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Powered by WordPress