rubrapack 매뉴얼←↑→

33 요약 정보

모든 패키지에는 \x05SummaryInformation 스트림이 있다(첫 글자는 U+0005, 이름은 압축하지 않는다). [MS-OLEPS]가 정한 OLE 속성 집합이고, Microsoft Learn("Summary Information Stream Property Set")이 설치 패키지가 어떤 속성을 쓰는지 알려 준다.

33.1 배치 [spec] [observed]#

u16  바이트 순서     FFFE
u16  판              0 (msi.dll 은 0 을 쓴다)
u32  OS 필드         msi.dll 은 0x00020206 을 쓴다
16   CLSID           0
u32  구역 수         1
16   FMTID           F29F85E0-4FF9-1068-AB91-08002B27B3D9, 저장은 E0 85 9F F2 F9 4F 68 10 AB 91 08 00 2B 27 B3 D9
u32  구역 오프셋     48

구역:
u32  구역 크기
u32  속성 수
수만큼 (u32 속성 id, u32 구역 처음부터의 오프셋)
값들, 각각 4바이트 배수로 채움:
  VT_I2 (2)        u32 형식, i16 값, 채움 2바이트
  VT_I4 (3)        u32 형식, i32 값
  VT_LPSTR (30)    u32 형식, NUL 포함 u32 바이트 수, 바이트, NUL, 채움
  VT_FILETIME (64) u32 형식, 1601-01-01 UTC 부터의 100ns 간격 수 u64

33.2 설치 패키지가 정하는 속성#

Id이름형식값
2TitleLPSTR예 Installation Database
3SubjectLPSTR제품 이름
4AuthorLPSTR제조사
5KeywordsLPSTR예 Installer
7TemplateLPSTR<플랫폼>;<언어 id>: x64;1033, Arm64;1042, Intel;1033
9Revision NumberLPSTR패키지 코드: GUID, 서로 다른 패키지 파일마다 새로
12, 13Create / Last Save timeFILETIME선택
14Page CountI4최소 설치 엔진 판: x64 와 x86 은 200, Arm64 는 500
15Word CountI4비트 1 = 파일이 (캐비닛에) 압축되어 있음; 보통 패키지는 2
18Creating ApplicationLPSTR아무것

33.3 코드 페이지 함정 - 요약 문자열은 ASCII 로 [observed]#

속성 1(CodePage, VT_I2)은 LPSTR 바이트의 인코딩을 말한다. Windows 11 25H2 에서:

그러니 속성 1 은 빼고 요약 문자열은 모두 ASCII 로 쓴다. 지역화한 제품 이름은 데이터베이스 코드 페이지를 쓰는 Property 표(ProductName)에 둔다 - 거기서는 65001 이 통한다(복합 파일 속의 MSI 데이터베이스 참고).

33.4 실제 예: 튜토리얼의 hello.msi#

튜토리얼의 첫 패키지: 스트림은 336 바이트다. 머리는:

오프셋바이트필드값
0x00fe ff바이트 순서0xFFFE
0x0406 02 02 00OS0x00020206
0x1801 00 00 00구역 수1
0x1Ce0 85 9f f2 ...FMTIDF29F85E0-...
0x2C30 00 00 00구역 오프셋48
0x3020 01 00 00구역 크기288
0x3409 00 00 00속성 수9

그 뒤에 (속성 번호, 오프셋) 짝 9개와 값들:

속성오프셋종류원래 바이트값
20x80VT_LPSTR1e 00 00 00 16 00 00 00 49 6e 73 74 61 6c 6c 61 ...Installation Database
30xA0VT_LPSTR1e 00 00 00 06 00 00 00 48 65 6c 6c 6f 00Hello
40xB0VT_LPSTR1e 00 00 00 11 00 00 00 45 78 61 6d 70 6c 65 20 ...Example Software
50xCCVT_LPSTR1e 00 00 00 0a 00 00 00 49 6e 73 74 61 6c 6c 65 ...Installer
70xE0VT_LPSTR1e 00 00 00 09 00 00 00 78 36 34 3b 31 30 33 33 ...x64;1033
90xF4VT_LPSTR1e 00 00 00 27 00 00 00 7b 38 44 37 41 37 36 38 ...{8D7A7687-4BF3-8D46-8B4C-CA8BB13937CF}
140x124VT_I403 00 00 00 c8 00 00 00200
150x12CVT_I403 00 00 00 02 00 00 002
180x134VT_LPSTR1e 00 00 00 11 00 00 00 72 75 62 72 61 70 61 63 ...rubrapack 0.39.0

문자열 값은 형식(30), NUL 을 포함한 바이트 수, 바이트, NUL, 그리고 4 의 배수까지 채움이다. 속성 9 인 패키지 코드는 --reproducible 이면 내용에서 끌어내고, 없으면 빌드마다 새것이다.