Аварійно-ізольовані робочі процеси кодеків
HotPDF може виносити декодування ризикованих зображень DCTDecode, JPXDecode і JBIG2Decode за межі хост-процесу
Режими ізоляції
cimAutomaticє режимом за замовчуванням і використовуєHotPDFCodecWorker.exe, коли той доступний поруч із виконуваним файлом хоста, інакше зберігає сумісний внутрішньопроцесний шляхcimRequiredзакривається на збій, коли робочий процес відсутній, не запускається, аварійно завершується, спливає, відхиляє введення або перевищує межу виводуcimDisabledзавжди використовує наявні внутрішньопроцесні декодери
Після того як доступний робочий процес приймає запит, cimAutomatic не повторює невдале або зловмисне введення в хост-процесі
Межа процесу
Кожен запит декодування виконується у свіжому прихованому процесі, призначеному однопроцесному об'єкту завдання Windows Job Object
- Job Object завершує робочий процес і будь-яких спробованих нащадків, коли його дескриптор закривається
CodecWorkerMemoryLimitBytesзастосовує межу фіксованої пам'яті на процес і за замовчуванням становить 512 МіБCodecWorkerTimeoutMillisecondsза замовчуванням становить 10 000 мс і завершує завислий робочий процес- Кодоване введення, необов'язкові глобали JBIG2 і вивід BGR24 використовують одне відображення спільної пам'яті з випадковим ім'ям і версіонований протокол фіксованої ширини
- Місткість декодованого виводу обмежена оголошеною геометрією зображення та
DecodeBudgetBytes - Запити JPEG низької роздільної здатності несуть точні цільові розміри та повертають геометрію зменшеного DCT без побудови растру робочого процесу повної роздільної здатності
Конфігурація
PDF.CodecIsolationMode := cimRequired;
PDF.CodecWorkerExecutable :=
'C:\Program Files\MyApp\HotPDFCodecWorker.exe';
PDF.CodecWorkerTimeoutMilliseconds := 5000;
PDF.CodecWorkerMemoryLimitBytes := 256 * 1024 * 1024;
Bitmap := PDF.ExtractLoadedImage(0);
if Bitmap = nil then
begin
PDF.GetLastCodecWorkerInfo(Info);
Writeln(Ord(Info.Status), ': ', Info.ErrorMessage);
end;
Порожній CodecWorkerExecutable перетворюється на HotPDFCodecWorker.exe поруч із поточним застосунком
Телеметрія
GetLastCodecWorkerInfo повідомляє статус, ідентифікатор процесу, код завершення, минулі мілісекунди та обмежену хост-сторонню діагностику
GetLastJPEGReducedDecodeInfo повідомляє геометрію джерела, масштабування, виводу та рядка сканування після ізольованого запиту зменшеного JPEG
Окремі статуси охоплюють недоступні або такі, що не запускаються, робочі процеси, тайм-аут, аварійне завершення, відхилення декодування, невідповідність протоколу та межі декодованого виводу
Збірка та розгортання
build-HotPDF-Codec-Worker.cmd
Команда збірки створює окремі робочі процеси Win32 і Win64 у tools\CodecWorker\<platform>\Release; розгорніть робочий процес, що відповідає архітектурі хост-процесу