Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: [WCX] Wcx6432: 64-в-32-битный транслятор для WCX плагинов 
Author Message
MVV



PostPosted: Tue Jun 14, 2016 12:41    Post subject: [WCX] Wcx6432: 64-в-32-битный транслятор для WCX плагинов Reply with quote

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
View user's profile Send private message ICQ Number


Powered by phpBB © 2001, 2005 phpBB Group