MVV
|
Posted: Tue Jun 14, 2016 12:41 Post subject: [WCX] Wcx6432: 64-в-32-битный транслятор для WCX плагинов |
|
|
Wcx6432 позволяет использовать 32-битные WCX-плагины в 64-битном ТК.
Wcx6432 Beta 224
Установка:
1. Извлеките в любую папку.
2. Поместите файл Wcx6432.ini в папку ТК и поправьте в нём пути к файлам транслятора.
3. Скопируйте Wcx6432.wcx64 в папки желаемых 32-битных WCX-плагинов и переименуйте согласно именам плагинов (например, в случае плагина MSI-Plus.wcx имя файла должно быть MSI-Plus.wcx64).
Как работает транслятор:
ТК обращается к маленькому загрузчику Wcx6432.wcx64, который читает Wcx6432.ini и загружает Wcx6432-клиента (Wcx6432c.dll), затем клиент запускает Wcx6432-сервер (Wcx6432s.exe) и устанавливает соединение с ним. Сервер загружает 32-битный плагин и вызывает его функции, когда ТК вызывает эти функции у загрузчика. Так, только маленький загрузчик присутствует в нескольких экземплярах, остальные файлы лежат в одном месте и легко могут быть обновлены.
Плагин пока на бета-стадии, поддерживаются не все функции.
Большинство функций поддерживается. Не поддерживаются только функции упаковки прямо в памяти.
Какие-то редкие функции/обратные вызовы могут не работать, т.к. я не тестировал их на своём наборе плагинов.
Техническая информация о поддерживаемых функциях:
Загрузчик экспортирует все функции WCX-интерфейса, что приводит к побочному эффекту: ТК думает, что плагин поддерживает всё. В частности, он вызывает только юникодные и расширенные функции (ReadHeaderExW, а не ReadHeaderEx или ReadHeader). Поэтому вызовы расширенных функций транслируются в вызовы реально поддерживаемых плагином функций, для неподдерживаемых функций возвращаются значения по умолчанию и ошибки.
Вызовы этих функций транслируются:
PackSetDefaultParams
PkSetCryptCallback
SetChangeVolProcW
SetChangeVolProc
SetProcessDataProcW
SetProcessDataProc
OpenArchiveW
OpenArchive
ReadHeaderExW
ReadHeaderEx
ReadHeader
ProcessFileW
ProcessFile
CloseArchive
PackFilesW
PackFiles
DeleteFilesW
DeleteFiles
GetPackerCaps
GetBackgroundFlags
ConfigurePacker
CanYouHandleThisFileW
CanYouHandleThisFile
Вызовы этих функций ещё не транслируются:
StartMemPackW
StartMemPack
PackToMem
DoneMemPack
Для тестирования всех функций нужен набор плагинов, экспортирующий все функции. Сейчас я использую:
1. MSI-Plus (неюникодный, экспортирует ReadHeader, дергает cbProcessDataProc каждые 1024 байта).
2. Total7zip (юникодный, экспортирует ReadHeaderExW, распаковывает в CloseArchive, поэтому вызывает cbProcessDataProc с отрицательными значениями, поддерживает фоновые операции, диалог настроек).
N. Думаю включить в набор плагин DiskDirExtended (неюникодный, экспортирует ReadHeaderEx).
Я не знаю плагинов, экспортирующих функцию PkSetCryptCallback.
Также я не знаю плагинов, реально вызывающих callback-функцкии из SetChangeVolProc.
Наконец, не помешал бы пример плагина, поддерживающего упаковку в памяти. _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Last edited by MVV on Mon Oct 03, 2016 17:14; edited 8 times in total |
|