aboutsummaryrefslogtreecommitdiff
path: root/src/burn/engine/container.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/burn/engine/container.h')
-rw-r--r--src/burn/engine/container.h191
1 files changed, 191 insertions, 0 deletions
diff --git a/src/burn/engine/container.h b/src/burn/engine/container.h
new file mode 100644
index 00000000..c2c1c9a8
--- /dev/null
+++ b/src/burn/engine/container.h
@@ -0,0 +1,191 @@
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)
6extern "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
38enum BURN_CONTAINER_TYPE
39{
40 BURN_CONTAINER_TYPE_NONE,
41 BURN_CONTAINER_TYPE_CABINET,
42 BURN_CONTAINER_TYPE_SEVENZIP,
43};
44
45enum 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
56// structs
57
58typedef struct _BURN_CONTAINER
59{
60 LPWSTR sczId;
61 BURN_CONTAINER_TYPE type;
62 BOOL fPrimary;
63 BOOL fAttached;
64 DWORD dwAttachedIndex;
65 DWORD64 qwFileSize;
66 LPWSTR sczHash;
67 LPWSTR sczFilePath; // relative path to container.
68 DOWNLOAD_SOURCE downloadSource;
69
70 BYTE* pbHash;
71 DWORD cbHash;
72 DWORD64 qwAttachedOffset;
73 BOOL fActuallyAttached; // indicates whether an attached container is attached or missing.
74
75 // mutable members
76 BOOL fPlanned;
77 LPWSTR sczSourcePath;
78 LPWSTR sczUnverifiedPath;
79 DWORD64 qwExtractSizeTotal;
80 DWORD64 qwCommittedCacheProgress;
81 DWORD64 qwCommittedExtractProgress;
82 HRESULT hrExtract;
83} BURN_CONTAINER;
84
85typedef struct _BURN_CONTAINERS
86{
87 BURN_CONTAINER* rgContainers;
88 DWORD cContainers;
89} BURN_CONTAINERS;
90
91typedef struct _BURN_CONTAINER_CONTEXT_CABINET_VIRTUAL_FILE_POINTER
92{
93 HANDLE hFile;
94 LARGE_INTEGER liPosition;
95} BURN_CONTAINER_CONTEXT_CABINET_VIRTUAL_FILE_POINTER;
96
97typedef struct _BURN_CONTAINER_CONTEXT_CABINET
98{
99 LPWSTR sczFile;
100
101 HANDLE hThread;
102 HANDLE hBeginOperationEvent;
103 HANDLE hOperationCompleteEvent;
104
105 BURN_CAB_OPERATION operation;
106 HRESULT hrError;
107
108 LPWSTR* psczStreamName;
109 LPCWSTR wzTargetFile;
110 HANDLE hTargetFile;
111 BYTE* pbTargetBuffer;
112 DWORD cbTargetBuffer;
113 DWORD iTargetBuffer;
114
115 BURN_CONTAINER_CONTEXT_CABINET_VIRTUAL_FILE_POINTER* rgVirtualFilePointers;
116 DWORD cVirtualFilePointers;
117} BURN_CONTAINER_CONTEXT_CABINET;
118
119typedef struct _BURN_CONTAINER_CONTEXT
120{
121 HANDLE hFile;
122 DWORD64 qwOffset;
123 DWORD64 qwSize;
124
125 //PFN_EXTRACTOPEN pfnExtractOpen;
126 //PFN_EXTRACTNEXTSTREAM pfnExtractNextStream;
127 //PFN_EXTRACTSTREAMTOFILE pfnExtractStreamToFile;
128 //PFN_EXTRACTSTREAMTOBUFFER pfnExtractStreamToBuffer;
129 //PFN_EXTRACTCLOSE pfnExtractClose;
130 //void* pCookie;
131 BURN_CONTAINER_TYPE type;
132 union
133 {
134 BURN_CONTAINER_CONTEXT_CABINET Cabinet;
135 };
136
137} BURN_CONTAINER_CONTEXT;
138
139
140// functions
141
142HRESULT ContainersParseFromXml(
143 __in BURN_CONTAINERS* pContainers,
144 __in IXMLDOMNode* pixnBundle
145 );
146HRESULT ContainersInitialize(
147 __in BURN_CONTAINERS* pContainers,
148 __in BURN_SECTION* pSection
149 );
150void ContainersUninitialize(
151 __in BURN_CONTAINERS* pContainers
152 );
153HRESULT ContainerOpenUX(
154 __in BURN_SECTION* pSection,
155 __in BURN_CONTAINER_CONTEXT* pContext
156 );
157HRESULT ContainerOpen(
158 __in BURN_CONTAINER_CONTEXT* pContext,
159 __in BURN_CONTAINER* pContainer,
160 __in HANDLE hContainerFile,
161 __in_z LPCWSTR wzFilePath
162 );
163HRESULT ContainerNextStream(
164 __in BURN_CONTAINER_CONTEXT* pContext,
165 __inout_z LPWSTR* psczStreamName
166 );
167HRESULT ContainerStreamToFile(
168 __in BURN_CONTAINER_CONTEXT* pContext,
169 __in_z LPCWSTR wzFileName
170 );
171HRESULT ContainerStreamToBuffer(
172 __in BURN_CONTAINER_CONTEXT* pContext,
173 __out BYTE** ppbBuffer,
174 __out SIZE_T* pcbBuffer
175 );
176HRESULT ContainerSkipStream(
177 __in BURN_CONTAINER_CONTEXT* pContext
178 );
179HRESULT ContainerClose(
180 __in BURN_CONTAINER_CONTEXT* pContext
181 );
182HRESULT ContainerFindById(
183 __in BURN_CONTAINERS* pContainers,
184 __in_z LPCWSTR wzId,
185 __out BURN_CONTAINER** ppContainer
186 );
187
188
189#if defined(__cplusplus)
190}
191#endif