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