EzDownload

Материал из PocketZ_wiki
Перейти к: навигация, поиск
EzDownload
Изображение:PPC_EzDownload_1.png
Разработчик Nishimura Masataka
ОС
Текущая версия
Лицензия Freeware
Сайт
Изображение:Forum_Link.png Обсуждение на форуме.

Содержание

Описание

EzDownload - бесплатная программа для загрузки файлов по HTTP с докачкой. Есть возможность приостановки, продолжения, паузы и остановки процесса скачивания.

Возможности

  • Продолжение закачки
  • Редирект (перенаправления)
  • Поддельный реферер
  • Отображение скорости и времени заказчи
  • Работа через прокси-сервер
  • Простая аутентификация

Решение проблемы, Sayd

Предупреждение

Прежде, чем начинать делать что-то по инструкции, дочитать до конца. А соображающие могут себе позволить пройти мимо и заниматься своими делами =)

Описание проблемы

При запуске некоторых программ, предназначенных для версий WindowsCE ниже 3.0, наблюдается странный эффект - верхний бар с кнопкой пуск перемещается жить в нижнюю строку, и перемещать форму приложения можно только по горизонтали. Как вариант - программа предназначена для более высокой версии ОС и вылетает мессагебокс следующего содержания "Cannot find '<имя_приложения>' (or one of its components). Make sure the path and filename are correct and all the required libraries are available.". Вероятно, следует учесть, что версия ОС может быть ограничена не спроста (но попытаться понизить можно) ;)

Благодарности

Информация о том, что это лечится путём смены значения минимальной версии системы для запуска этой программы (которое находится в заголовке приложения), а также патч на дэлфи были выданы добрым дядькой АЕ. За инструкцию как это сделать непосредственно на покете (либо на компьютере с минимальным набором инструментов) спасибо мне =)

Инструменты

Инструкция для покета. Посему покетные бесплатные инструменты: PEInfo 0.933 (© SK) и SKHexEd 1.0.50 (© SK Software). Последний бесплатен для русскоязычных пользователей и не обязателен для процедуры. Больной: [b]EzDownloader[/b] 1.15.

Инструкция

  1. Осмотреть больного с помощью PEInfo. Находим там орган Optional Header. Там видим значение 2.11 в subsystem version (на рентгеновском снимке уже исправленный и заживший вариант).
    Изображение:PPC_EzDownload_001_peinfo_open-ed.gif
  2. Необходимо запомнить значение нескольких тканей (полей) органа Optional Header. Для примера, возьму первые две ткани органа этого больного: Magic и linker version, каждая из которых составляет полуслово. Все остальные последующий ткани (каждая!) до непосредственно патологической будут составлять слово (слово, word - определяется разрядностью процессора машинки, в данном случае 32 бита, т.е. 4 байта). Согласно порядку в PEInfo - 010B и 0601. Согласно порядку в коде программы (перевернуть кроме версии линкера) 0b01 0601.
    Изображение:PPC_EzDownload_002_peinfo_opthead-ed.gif Изображение:PPC_EzDownload_003_peinfo_subsys-ed.gif
  3. Применяем поиск далее. И поняв, что таких байтов больше нет приходим в полное спокойствие, необходимое для этой простой, но ответственной операции.
  4. Производим вскрытие больного с помощью второго инструмента (первым оперировать также можно, только надо по кнопке перевести в режим редактирования, но приближать значение, которое хотите редактировать, нужно с помощью скрола к верхней границе, т.к. чем дальше нужное значение, тем больше съезжает сетка и можно попасть не на тот байт [по крайней мере так на вга-девайсе]) SKHexEd. Производим поиск по найденным в предыдущим пункте шестнадцатеричным клеткам (внимательно смотреть на значение кнопок!). И отсчитываем по количеству слов до ткани subsystem version (значение в этом больном 02 00 0b 00 и располагается оно по адресу 0x118 в хекс-редиторе). Аккуратно применив заморозку на свои нервы (сделав предварительно бэкап), заменяем на 03 00 00 00.
    Изображение:PPC_EzDownload_004_hexed_search-ed.gif Изображение:PPC_EzDownload_005_hexed_magic-ed.gif Изображение:PPC EzDownload 006 hexed replace-ed.gif
  5. Сохраняем изменения.
  6. Дивимся на получившегося Франкенштэйна.
  7. В данном деле ошибаться нельзя, даже небольшая ошибка может привести к смерти больного. Помните об этом в этом нелёгком шестнадцатеричном деле...
  8. Этот приём можно использовать для понижения минимального значения версии ОС, чтобы приложение запускалось на вашей старенькой системе (результаты, конечно, могут быть и неадекватными в поведении программы).
  9. Небольшой бонус для больного:
    • Как изменить имя папки по умолчанию обладая только первым или вторым инструментом (пусть и не в особо извращённой форме) в отсутсвии настольного редактора ресурсов. Давим на кнопу юникодного текста при поиске, и ищем по "My Documents". Больше символов не получится, зато благодаря использованию юникода можно использовать русское название папки (в данном больном адрес 0xFFAE, т.к. первый слэш '\' лежит в 0FFAC - но трогать не надо). Длиннее имя лучше не делать, а короче можно занулив 2 байта после значащего символа.
    • Если файлы битые после Resume, то могу предложить совет (естественно, на практике НЕ испытанный). Если обрывается соединение гпрс, то в канал может пойти мусорчик, программа может подумать, что это файл идёт. Так вот после таких пертурбаций хорошо бы не полениться и отрезать кончик (как бы противно это ни звучало) в килобайт хотя бы. Каким инструментом - не скажу ;)

Появившиеся проблемы (именно для пациента)

При перестройке бара вниз для вызова была доступна кнопка наэкранной клавиатуры. После исправления наэкранка будет доступна в случае несвёрнутого какого-либо другого приложения (с доступным меню), либо по хард кнопке. Кнопка сворачивания перестаёт отображаться до первого нажатия на неё вслепую (чуть левее кнопки закрытия). И общий эффект - любой пациент после подобной операции будет отказываться запускаться на PPC2k (т.к. минимальную версию поднимаем до PPC2k2).

Патч на дэлфях для смены минимального значения поддерживаемой версии ОС (© AE)

Program FixWinCEVersion;
                          {$APPTYPE Console}
                          Uses Windows;
                          Procedure Help;
                          begin
                          Writeln('Executable file WinCE version fix');
                          Writeln('Command Line format:');
                          Writeln('FixWinCEVersion <ExeFileNameToFix>');
                          Halt(1);
                          end;
                          Procedure Error( Message: String );
                          begin
                          Writeln;
                          Writeln('Error: ',Message);
                          Writeln('Program aborted.');
                          Halt(2);
                          end;
                          Var
                          F             : File;
                          PEHeader      : TImageNtHeaders;
                          DOSHeader     : TImageDosHeader;
                          nr            : LongInt;
                          begin
                          If ParamCount<>1 then Help;
                          Write('Patching WinCE version of "'+ParamStr(1)+'": ');
                          {$I-}
                          AssignFile(F, ParamStr(1)); ReSet(F,1);
                          If IOResult<>0 then Error('Error opening file "'+ParamStr(1)+'"');
                          BlockRead( F, DOSHeader, sizeof(DOSHeader), nr );
                          If nr<>sizeof(DOSHeader) then Error('Error loading DOS header');
                          Seek(F, DOSHeader._lfanew );
                          BlockRead( F, PEHeader, sizeof(PEHeader), nr );
                          If nr<>sizeof(PEHeader) then Error('Error loading PE header');
                          PEHeader.OptionalHeader.MajorSubsystemVersion := 3;
                          PEHeader.OptionalHeader.MinorSubsystemVersion := 0;
                          Seek(F, DOSHeader._lfanew );
                          BlockWrite( F, PEHeader, sizeof(PEHeader), nr );
                          If nr<>sizeof(PEHeader) then Error('Error saving PE header');
                          Writeln('Ok.');
                          CloseFile(F);
                          end.
Источник — «http://wiki.pocketz.ru/wiki/EzDownload»
Личные инструменты