Trabalhadores de codec isolados contra falhas
O HotPDF pode mover a decodificação de imagens de alto risco DCTDecode, JPXDecode e JBIG2Decode para fora do processo host
Modos de isolamento
cimAutomaticé o padrão e usaHotPDFCodecWorker.exequando ele está disponível ao lado do executável host; caso contrário, preserva o caminho compatível em processocimRequiredfalha de forma segura quando o trabalhador está ausente, não pode iniciar, falha, expira, rejeita a entrada ou excede um limite de saídacimDisabledsempre usa os decodificadores existentes em processo
Uma vez que um trabalhador disponível aceita uma solicitação, cimAutomatic não tenta novamente entrada com falha ou maliciosa no processo host
Limite de processo
Cada solicitação de decodificação é executada em um novo processo oculto atribuído a um Windows Job Object de processo único
- O Job Object encerra o trabalhador e quaisquer descendentes tentados quando seu handle é fechado
CodecWorkerMemoryLimitBytesaplica um teto de memória confirmada por processo e assume o padrão de 512 MiBCodecWorkerTimeoutMillisecondsassume o padrão de 10.000 ms e encerra um trabalhador travado- Entrada codificada, globais JBIG2 opcionais e saída BGR24 usam um mapeamento de memória compartilhada com nome aleatório com um protocolo de largura fixa versionado
- A capacidade de saída decodificada é limitada pela geometria de imagem declarada e por
DecodeBudgetBytes - Solicitações JPEG de baixa resolução carregam dimensões de destino exatas e retornam geometria DCT reduzida sem construir um raster de trabalhador em resolução total
Configuração
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;
Um CodecWorkerExecutable vazio resolve para HotPDFCodecWorker.exe ao lado do aplicativo atual
Telemetria
GetLastCodecWorkerInfo relata o status, o identificador de processo, o código de saída, os milissegundos decorridos e um diagnóstico limitado do lado do host
GetLastJPEGReducedDecodeInfo relata geometria de origem, dimensionada, de saída e de linha de varredura após uma solicitação JPEG reduzida isolada
Status distintos cobrem trabalhadores indisponíveis ou não iniciáveis, expiração, falha, rejeição de decodificação, incompatibilidade de protocolo e limites de saída decodificada
Build e implantação
build-HotPDF-Codec-Worker.cmd
O comando de build emite trabalhadores Win32 e Win64 separados sob tools\CodecWorker\<platform>\Release; implante o trabalhador que corresponde à arquitetura do processo host