#define pid_MMC_FILE_SYSTEM 3B870h #define SendMessage 0C1AA30h #define callR5R4 0C7EE88h ; ' *** FAM3.2 File Access Modification v3.2 *** (C)Rst7/CBSIE ' *** FAM3.2 Модификация доступа к файлам v3 *** ' Создает функцию непосредственного вызова процедуры в контексте ' файловой системы (не через эксплорера) ' void FilesysICall(void huge * proc, void far *param) at 0xE47FFC, ' где proc - сегментный адрес процедуры ' с описанием void foo(void far *param), ' которую надо вызвать в контексте файловой системы ' -------------------------------------------------------------- ' Для писателей на асме - при вызове FilesysICall ' указатель процедуры в R12/R13, данные в R14/R15. ' При вызове процедуры в R12/R13 - данные ' ' _НЕ_МЕШАЕТ_ предыдущей версии (FAM2) для совместимости. ' _НЕ_ИСПОЛЬЗУЕТ_ абсолютные переменные, все официально, через SendMessage ' ' ОТКАТИТЬ ПРЕДЫДУЩУЮ ВЕРСИЮ! ' ' Исходник на cbsie_narod_ru ' ; ; #define MMC_FILE_SYSTEM_proc_exit 0E4AB48h ; ; Номер добавляемой функции ; #define FileSys_icall_func_number 40h org 0E49EDAh ; ' Переход на проверку доп. функций. ; jmps MMC_func_add MMC_func_add_ret: ; ' Код патча ; org 0E47E60h ; db '*** FAM v3.2 ***' ; ' Добавление функции ; MMC_func_add: cmp r8,#FileSys_icall_func_number jmpr cc_Z,MMC_func_icall cmp r8,#22h jmps MMC_func_add_ret MMC_func_icall: mov r4,[r0+#0ah] mov r5,[r0+#0ch] mov r12,[r0+#0eh] mov r13,[r0+#10h] calls callR5R4 jmps MMC_FILE_SYSTEM_proc_exit ; MMC_func_call: mov [-r0],r15 mov [-r0],r14 mov [-r0],r13 mov [-r0],r12 mov r12,#pof(pid_MMC_FILE_SYSTEM) mov r13,#pag(pid_MMC_FILE_SYSTEM) mov r14,#FileSys_icall_func_number mov r15,#0 calls SendMessage add r0,#8 rets ; ' Точка входа FilesysICall ' Вызов функции R12/R13 в контексте MMC_FILE_SYSTEM ; org 0E47FFCh FilesysICall: jmps MMC_func_call ;