충돌 격리 코덱 워커
HotPDF는 위험도가 높은 DCTDecode, JPXDecode, JBIG2Decode 이미지 디코딩을 호스트 프로세스 밖으로 옮길 수 있습니다
격리 모드
cimAutomatic은 기본값이며 호스트 실행 파일 옆에HotPDFCodecWorker.exe를 사용할 수 있을 때 사용하고, 그렇지 않으면 호환 가능한 프로세스 내 경로를 보존합니다cimRequired는 워커가 없거나, 시작할 수 없거나, 충돌하거나, 시간 초과되거나, 입력을 거부하거나, 출력 한도를 초과하는 경우 fail-closed 처리합니다cimDisabled는 항상 기존 프로세스 내 디코더를 사용합니다
사용 가능한 워커가 요청을 수락하면 cimAutomatic은 실패하거나 악성인 입력을 호스트 프로세스에서 재시도하지 않습니다
프로세스 경계
각 디코드 요청은 단일 프로세스 Windows Job Object에 할당된 새 숨겨진 프로세스에서 실행됩니다
- Job Object는 핸들이 닫힐 때 워커와 시도된 모든 하위 프로세스를 종료합니다
CodecWorkerMemoryLimitBytes는 프로세스별 커밋 메모리 상한을 적용하며 기본값은 512 MiB입니다CodecWorkerTimeoutMilliseconds는 기본값 10,000ms이며 정지된 워커를 종료합니다- 인코딩 입력, 선택적 JBIG2 전역, BGR24 출력은 버전이 지정된 고정 폭 프로토콜과 함께 하나의 임의 이름 공유 메모리 매핑을 사용합니다
- 디코딩 출력 용량은 선언된 이미지 지오메트리와
DecodeBudgetBytes로 제한됩니다 - 저해상도 JPEG 요청은 정확한 대상 치수를 전달하고 전체 해상도 워커 래스터를 구성하지 않고 reduced-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는 격리된 reduced JPEG 요청 후 소스, 배율 조정, 출력, 스캔라인 지오메트리를 보고합니다
구별되는 상태는 사용 불가 또는 시작 불가 워커, 시간 초과, 충돌, 디코드 거부, 프로토콜 불일치, 디코딩 출력 한도를 다룹니다
빌드 및 배포
build-HotPDF-Codec-Worker.cmd
빌드 명령은 tools\CodecWorker\<platform>\Release 아래에 별도의 Win32 및 Win64 워커를 생성합니다. 호스트 프로세스 아키텍처에 맞는 워커를 배포하십시오