main
h 202 lines 4.75 KB
Raw
1 #pragma once
2 // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
3
4
5 #if defined(__cplusplus)
6 extern "C" {
7 #endif
8
9
10 // typedefs
11
12 //typedef HRESULT (*PFN_EXTRACTOPEN)(
13 // __in HANDLE hFile,
14 // __in DWORD64 qwOffset,
15 // __in DWORD64 qwSize,
16 // __out void** ppCookie
17 // );
18 //typedef HRESULT (*PFN_EXTRACTNEXTSTREAM)(
19 // __in void* pCookie,
20 // __inout_z LPWSTR* psczStreamName
21 // );
22 //typedef HRESULT (*PFN_EXTRACTSTREAMTOFILE)(
23 // __in void* pCookie,
24 // __in_z LPCWSTR wzFileName
25 // );
26 //typedef HRESULT (*PFN_EXTRACTSTREAMTOBUFFER)(
27 // __in void* pCookie,
28 // __out BYTE** ppbBuffer,
29 // __out SIZE_T* pcbBuffer
30 // );
31 //typedef HRESULT (*PFN_EXTRACTCLOSE)(
32 // __in void* pCookie
33 // );
34
35
36 // constants
37
38 enum BURN_CONTAINER_TYPE
39 {
40 BURN_CONTAINER_TYPE_NONE,
41 BURN_CONTAINER_TYPE_CABINET,
42 BURN_CONTAINER_TYPE_SEVENZIP,
43 };
44
45 enum BURN_CAB_OPERATION
46 {
47 BURN_CAB_OPERATION_NONE,
48 BURN_CAB_OPERATION_NEXT_STREAM,
49 BURN_CAB_OPERATION_STREAM_TO_FILE,
50 BURN_CAB_OPERATION_STREAM_TO_BUFFER,
51 BURN_CAB_OPERATION_SKIP_STREAM,
52 BURN_CAB_OPERATION_CLOSE,
53 };
54
55 enum BURN_CONTAINER_VERIFICATION
56 {
57 BURN_CONTAINER_VERIFICATION_NONE,
58 BURN_CONTAINER_VERIFICATION_HASH,
59 };
60
61
62 // structs
63
64 typedef struct _BURN_CONTAINER
65 {
66 LPWSTR sczId;
67 BURN_CONTAINER_TYPE type;
68 BOOL fAttached;
69 DWORD dwAttachedIndex;
70 DWORD64 qwFileSize;
71 LPWSTR sczHash;
72 LPWSTR sczFilePath; // relative path to container.
73 DOWNLOAD_SOURCE downloadSource;
74
75 DWORD cParsedPayloads;
76 STRINGDICT_HANDLE sdhPayloads; // value is BURN_PAYLOAD*
77
78 BYTE* pbHash;
79 DWORD cbHash;
80 BURN_CONTAINER_VERIFICATION verification;
81 DWORD64 qwAttachedOffset;
82 BOOL fActuallyAttached; // indicates whether an attached container is attached or missing.
83
84 // mutable members
85 BOOL fPlanned;
86 LPWSTR sczSourcePath;
87 LPWSTR sczUnverifiedPath;
88 DWORD64 qwExtractSizeTotal;
89 DWORD64 qwCommittedCacheProgress;
90 DWORD64 qwCommittedExtractProgress;
91 BOOL fExtracted;
92 BOOL fFailedVerificationFromAcquisition;
93 LPWSTR sczFailedLocalAcquisitionPath;
94 } BURN_CONTAINER;
95
96 typedef struct _BURN_CONTAINERS
97 {
98 BURN_CONTAINER* rgContainers;
99 DWORD cContainers;
100 } BURN_CONTAINERS;
101
102 typedef struct _BURN_CONTAINER_CONTEXT_CABINET_VIRTUAL_FILE_POINTER
103 {
104 HANDLE hFile;
105 LARGE_INTEGER liPosition;
106 } BURN_CONTAINER_CONTEXT_CABINET_VIRTUAL_FILE_POINTER;
107
108 typedef struct _BURN_CONTAINER_CONTEXT_CABINET
109 {
110 LPWSTR sczFile;
111
112 HANDLE hThread;
113 HANDLE hBeginOperationEvent;
114 HANDLE hOperationCompleteEvent;
115
116 BURN_CAB_OPERATION operation;
117 HRESULT hrError;
118
119 LPWSTR* psczStreamName;
120 LPCWSTR wzTargetFile;
121 HANDLE hTargetFile;
122 BYTE* pbTargetBuffer;
123 DWORD cbTargetBuffer;
124 DWORD iTargetBuffer;
125
126 BURN_CONTAINER_CONTEXT_CABINET_VIRTUAL_FILE_POINTER* rgVirtualFilePointers;
127 DWORD cVirtualFilePointers;
128 } BURN_CONTAINER_CONTEXT_CABINET;
129
130 typedef struct _BURN_CONTAINER_CONTEXT
131 {
132 HANDLE hFile;
133 DWORD64 qwOffset;
134 DWORD64 qwSize;
135
136 //PFN_EXTRACTOPEN pfnExtractOpen;
137 //PFN_EXTRACTNEXTSTREAM pfnExtractNextStream;
138 //PFN_EXTRACTSTREAMTOFILE pfnExtractStreamToFile;
139 //PFN_EXTRACTSTREAMTOBUFFER pfnExtractStreamToBuffer;
140 //PFN_EXTRACTCLOSE pfnExtractClose;
141 //void* pCookie;
142 BURN_CONTAINER_TYPE type;
143 union
144 {
145 BURN_CONTAINER_CONTEXT_CABINET Cabinet;
146 };
147
148 } BURN_CONTAINER_CONTEXT;
149
150
151 // functions
152
153 HRESULT ContainersParseFromXml(
154 __in BURN_CONTAINERS* pContainers,
155 __in IXMLDOMNode* pixnBundle
156 );
157 HRESULT ContainersInitialize(
158 __in BURN_CONTAINERS* pContainers,
159 __in BURN_SECTION* pSection
160 );
161 void ContainersUninitialize(
162 __in BURN_CONTAINERS* pContainers
163 );
164 HRESULT ContainerOpenUX(
165 __in BURN_SECTION* pSection,
166 __in BURN_CONTAINER_CONTEXT* pContext
167 );
168 HRESULT ContainerOpen(
169 __in BURN_CONTAINER_CONTEXT* pContext,
170 __in BURN_CONTAINER* pContainer,
171 __in HANDLE hContainerFile,
172 __in_z LPCWSTR wzFilePath
173 );
174 HRESULT ContainerNextStream(
175 __in BURN_CONTAINER_CONTEXT* pContext,
176 __inout_z LPWSTR* psczStreamName
177 );
178 HRESULT ContainerStreamToFile(
179 __in BURN_CONTAINER_CONTEXT* pContext,
180 __in_z LPCWSTR wzFileName
181 );
182 HRESULT ContainerStreamToBuffer(
183 __in BURN_CONTAINER_CONTEXT* pContext,
184 __out BYTE** ppbBuffer,
185 __out SIZE_T* pcbBuffer
186 );
187 HRESULT ContainerSkipStream(
188 __in BURN_CONTAINER_CONTEXT* pContext
189 );
190 HRESULT ContainerClose(
191 __in BURN_CONTAINER_CONTEXT* pContext
192 );
193 HRESULT ContainerFindById(
194 __in BURN_CONTAINERS* pContainers,
195 __in_z LPCWSTR wzId,
196 __out BURN_CONTAINER** ppContainer
197 );
198
199
200 #if defined(__cplusplus)
201 }
202 #endif