복합 파일 바이너리 형식

Compound File Binary Format

CFBF(Compound File Binary Format)는 [1]복합 파일, 복합 문서 형식[2] 또는 복합 문서 파일 V2(Compound Document File V2)라고도 하며 디스크 상의 단일 파일 내에 다수의 파일과 스트림을 저장하기 위한 복합 문서 파일 형식입니다.CFBF는 Microsoft개발한 Microsoft COM Structured Storage[3][4][5]구현입니다.

Microsoft는 다른 사용자가 사용할 수 있도록 이 포맷을 공개하여 Microsoft Word 및 Microsoft Access to Business [citation needed]Objects에서 다양한 프로그램으로 사용되고 있습니다.또한 고급 저작 [6]형식의 기반이 됩니다.

개요

간단히 말해 복합 파일 바이너리 포맷은 저장 가능한 내용에 대한 제한이 거의 없는 컨테이너입니다.

CFBF 파일 구조는 FAT 파일 시스템과 거의 유사합니다.파일은 각 파일에 관련된 섹터의 체인을 포함하는 파일 할당 테이블(같은 이름의 파일 시스템과 혼동하지 않음)과 함께 체인으로 연결된 섹터로 분할됩니다.디렉토리에는 체인의 시작 섹터에 대한 섹터 ID(SID)가 포함된 파일의 정보가 저장됩니다.

구조.

CFBF 파일은 512바이트의 헤더레코드와 그 후에 헤더에 사이즈가 정의되어 있는 다수의 섹터로 구성됩니다.이 문서에서는 섹터의 길이를 512바이트 또는 4096바이트로 정의하고 있지만, 이 형식은 128바이트 이상의 섹터를 2(128, 256, 512, 1024 등)의 거듭제곱으로 지원할 수 있습니다.하한 128은 디렉토리 [relevant?]섹터에서 단일 디렉토리 엔트리에 필요한 최소값입니다.

CFBF에는 다음과 같은 섹터가 있습니다.

  • 파일 할당 테이블(FAT) 섹터– FAT/FAT32 파일 시스템과 마찬가지로 섹터 인덱스 체인을 포함합니다.
  • Mini-FAT 섹터– FAT와 비슷하지만 Mini-Stream 내에 미니 섹터 체인을 저장합니다.
  • 이중 간접 FAT(DIFAT) 섹터 – FAT 섹터 지수 체인 포함
  • 디렉토리 섹터– 디렉토리 엔트리가 포함됩니다.
  • 스트림 섹터 – 임의 파일 데이터 포함
  • Range Lock Sector – 대용량 파일의 바이트 범위 잠금 영역 포함

헤더 및 각 섹터 유형에 대한 자세한 내용은 다음과 같습니다.

CFBF 헤더 형식

CFBF 헤더는 파일의 첫 번째 512바이트와 나머지 파일을 해석하는 데 필요한 정보를 차지합니다.아래의 C-Style 구조 선언(AAFA의 Low-Level Container Specification에서 발췌)은 CFBF 헤더의 멤버와 그 목적을 나타냅니다.

 유형화된 서명되어 있지 않다  하지 않다;    // 4 바이트  유형화된 서명되어 있지 않다 짧다 호트;  // 2 바이트  유형화된 짧다 오프셋;           // 2 바이트  유형화된 하지 않다 섹터;             // 4 바이트  유형화된 하지 않다 FSINDEX;          // 4 바이트  유형화된 호트 FSOFFSET;        // 2 바이트  유형화된 호트 WCHAR;           // 2 바이트  유형화된 하지 않다 DFS 시그니처;      // 4 바이트  유형화된 서명되어 있지 않다  바이트;     // 1 바이트  유형화된 서명되어 있지 않다 짧다 단어;    // 2 바이트  유형화된 서명되어 있지 않다  DWORD;    // 4 바이트  유형화된 하지 않다 SID;              // 4 바이트  유형화된 가이드 클리시드;             // 16 바이트   구조 구조화된 스토리지헤더 { // [시작(바이트), 길이(바이트)]      바이트 _abSig[8];             // [00H,08] {0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1,                                  // 현재 버전의 경우 0x1a, 0xe1}      클리시드 _클리드;               // [08H,16] 예약은 0이어야 합니다(WriteClassStg/).                                  // GetClassFile은 루트 디렉토리 클래스 ID를 사용합니다.)      호트 _uMinorVersion;      // [ 18H,02 ]마이너 버전 포맷: 33은                                  // 참조 구현으로 작성      호트 _uDll 버전;        // [ 1AH , 02 ]의 dll / 포맷의 메이저버전: 3 for                                  // 512바이트 섹터, 4KB 섹터의 경우 4      호트 _uByte Order;         // [1CH,02] 0xFFE: 인텔 바이트 순서를 나타냅니다.      호트 _uSectorShift;       // [1EH,02] 섹터 크기(2승)                                  // 일반적으로 9는 512바이트 섹터를 나타냅니다.      호트 _uMiniSectorShift;   // [20H,02] 크기의 미니 섹터(2승)                                  // 보통 6은 64바이트의 미니 슬롯을 나타냅니다.      호트 _예약필;         // [22H,02] 예약, 0이어야 합니다.      하지 않다 _ulReserved1;         // [24H,04] 예약, 0이어야 합니다.      FSINDEX _csectDir;          //[28H,04]이 되어야 한다 0512-byte sectors,.                                  SECTs의 디렉터리 체인에 4KB에//번호입니다.                                  //부문      FSINDEX _csectFat;          SECTs의 FAT체인에 //[2CH,04]번호입니다.      섹터 _sectDirStart;         끓여[30H,04]첫번째 잠수함 비상 송신기는 디렉터리 체인에.      DFS 시그니처 _signature;     //[34H,04]서명 거래를 위한;야 한다.                                  끓여0.그 참조 구현                                  끓여거래를 지원하지 않      하지 않다 _ulMiniSectorCutoff;  ; 작은 스트림에 대한[38H,04]최대 크기//.                                  끓여일반적으로 4096바이트      섹터 _sectMiniFatStart;     // [ 3CH , 04 ]MiniFAT 체인의 첫 번째 SEP      FSINDEX _cect Mini Fat;      // MiniFAT 체인 내의 [40H,04] SEPT 수      섹터 _sectDifStart(섹트디프스타트);         // [44H,04] DIFAT 체인의 첫 번째 SEPT      FSINDEX _csectDiff;          // [48H,04] DIFAT 체인 내의 SEPT 수      섹터 _sectFat[109];         // [4CH,436] 최초 109 FAT 섹터의 SEPT  }; 

파일 할당 테이블(FAT) 섹터

FAT 섹터의 컬렉션은 단일 스트림으로 통합될 때 파일 내의 모든 섹터의 상태와 링크를 정의합니다.FAT 내의 각 엔트리의 길이는 4바이트이며 FAT 체인 내의 다음 섹터의 섹터 번호 또는 다음 특수값 중 하나가 포함됩니다.

  • FREESECT (0xFFFFFF)– 미사용 섹터를 나타냅니다.
  • ENDOF CHANE(0xFFFFE) – FAT 체인의 마지막 섹터를 표시합니다.
  • FATSECT(0xFFFFD) – 지방 일부를 저장하는 데 사용되는 섹터를 표시합니다.
  • DIFSECT (0xFFFFFC) – DIFAT의 일부를 저장하기 위해 사용되는 섹터를 표시합니다.

레인지 록 섹터

Range Lock Sector는 크기가 2GB보다 큰 파일에 존재해야 하며 2GB보다 작은 파일에는 존재하지 않아야 합니다.Range Lock Sector는 파일에 0x7FFFF00 ~0x7FFFF의 바이트 범위를 포함해야 합니다.이 영역은 동시 액세스를 위한 바이트 범위 잠금 정보를 저장하기 위해 Microsoft COM 구현에 의해 예약되어 있습니다.

용어 사전

  • FAT – 파일 할당 테이블, SAT – 섹터 할당 테이블이라고도 합니다.
  • DIFAT – 이중 간접 파일 할당 테이블
  • FAT 체인 – 파일 내의 스트림에 할당된 섹터를 나타내는 FAT 엔트리 그룹
  • 스트림 – CFBF 내의 여러 섹터를 차지하는 가상 파일
  • 섹터 – CFBF 내의 할당 단위(통상은 512바이트 또는 4096바이트)

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Apache POI – POIFS". POI Project. Archived from the original on 26 April 2011. Retrieved 10 May 2011.
  2. ^ "How to convert documents between LibreOffice and Microsoft Office file formats on Linux". Archived from the original on 21 September 2019. Retrieved 25 November 2016.
  3. ^ "Compound Files (Windows)". Microsoft Developers Network (MSDN) library – COM SDK. Microsoft Corporation. 20 November 2008. Retrieved 23 September 2009.
  4. ^ "Containers: Compound Files". Microsoft Developers Network (MSDN) library – Visual Studio 2008 documentation. Microsoft Corporation. Retrieved 23 September 2009.
  5. ^ "Understand Compound Files". Microsoft Developers Network (MSDN) library – ActiveDirectory Rights Management. 25 June 2009. Retrieved 23 September 2009.
  6. ^ AMW 어소시에이션(구 AAF 어소시에이션) 웨이백 머신에서 2000년 8월 15일 아카이브 완료

외부 링크