Workers de codec isolés contre les crashs
HotPDF peut déplacer hors du processus hôte le décodage d’images à risque élevé DCTDecode, JPXDecode et JBIG2Decode
Modes d’isolation
cimAutomaticest le mode par défaut ; il utiliseHotPDFCodecWorker.exelorsqu’il est disponible près de l’exécutable hôte, sinon conserve le chemin compatible dans le processuscimRequiredéchoue de façon sûre si le worker est absent, ne peut démarrer, plante, expire, rejette l’entrée ou dépasse une limite de sortiecimDisabledutilise toujours les décodeurs existants dans le processus
Dès qu’un worker disponible accepte une requête, cimAutomatic ne réessaie pas une entrée échouée ou malveillante dans le processus hôte
Frontière de processus
Chaque requête de décodage s’exécute dans un processus caché nouveau, affecté à un Windows Job Object à processus unique
- Le Job Object termine le worker et tout descendant tenté à la fermeture de son handle
CodecWorkerMemoryLimitBytesapplique un plafond de mémoire engagée par processus et vaut 512 Mio par défautCodecWorkerTimeoutMillisecondsvaut 10 000 ms par défaut et termine un worker bloqué- L’entrée codée, les globals JBIG2 facultatifs et la sortie BGR24 utilisent un mapping de mémoire partagée au nom aléatoire avec protocole versionné à largeur fixe
- La capacité de sortie décodée est limitée par la géométrie d’image déclarée et
DecodeBudgetBytes - Les requêtes JPEG basse résolution transportent les dimensions cibles exactes et renvoient la géométrie DCT réduite sans construire de raster worker pleine résolution
Configuration
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;
Une valeur CodecWorkerExecutable vide est résolue en HotPDFCodecWorker.exe à côté de l’application courante
Télémétrie
GetLastCodecWorkerInfo rapporte l’état, l’identifiant du processus, le code de sortie, les millisecondes écoulées et un diagnostic hôte borné
GetLastJPEGReducedDecodeInfo rapporte la géométrie source, mise à l’échelle, de sortie et de ligne d’analyse après une requête JPEG réduite isolée
Des états distincts couvrent les workers indisponibles ou impossibles à lancer, l’expiration, le crash, le rejet de décodage, l’incompatibilité de protocole et les limites de sortie décodée
Compilation et déploiement
build-HotPDF-Codec-Worker.cmd
La commande de compilation produit des workers Win32 et Win64 séparés dans tools\CodecWorker\<platform>\Release ; déployez le worker correspondant à l’architecture du processus hôte