ReactOS  0.4.13-dev-100-gc8611ae
storage32.h
Go to the documentation of this file.
1 /*
2  * Compound Storage (32 bit version)
3  *
4  * Implemented using the documentation of the LAOLA project at
5  * <URL:http://wwwwbs.cs.tu-berlin.de/~schwartz/pmh/index.html>
6  * (Thanks to Martin Schwartz <schwartz@cs.tu-berlin.de>)
7  *
8  * This include file contains definitions of types and function
9  * prototypes that are used in the many files implementing the
10  * storage functionality
11  *
12  * Copyright 1998,1999 Francis Beaudet
13  * Copyright 1998,1999 Thuy Nguyen
14  * Copyright 2010 Vincent Povirk for CodeWeavers
15  *
16  * This library is free software; you can redistribute it and/or
17  * modify it under the terms of the GNU Lesser General Public
18  * License as published by the Free Software Foundation; either
19  * version 2.1 of the License, or (at your option) any later version.
20  *
21  * This library is distributed in the hope that it will be useful,
22  * but WITHOUT ANY WARRANTY; without even the implied warranty of
23  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24  * Lesser General Public License for more details.
25  *
26  * You should have received a copy of the GNU Lesser General Public
27  * License along with this library; if not, write to the Free Software
28  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
29  */
30 #ifndef __STORAGE32_H__
31 #define __STORAGE32_H__
32 
33 #include <stdarg.h>
34 
35 #include "windef.h"
36 #include "winbase.h"
37 #include "winnt.h"
38 #include "objbase.h"
39 #include "winreg.h"
40 #include "winternl.h"
41 #include "wine/list.h"
42 
43 /*
44  * Definitions for the file format offsets.
45  */
46 static const ULONG OFFSET_MINORVERSION = 0x00000018;
47 static const ULONG OFFSET_MAJORVERSION = 0x0000001a;
48 static const ULONG OFFSET_BYTEORDERMARKER = 0x0000001c;
49 static const ULONG OFFSET_BIGBLOCKSIZEBITS = 0x0000001e;
50 static const ULONG OFFSET_SMALLBLOCKSIZEBITS = 0x00000020;
51 static const ULONG OFFSET_DIRSECTORCOUNT = 0x00000028;
52 static const ULONG OFFSET_BBDEPOTCOUNT = 0x0000002C;
53 static const ULONG OFFSET_ROOTSTARTBLOCK = 0x00000030;
54 static const ULONG OFFSET_TRANSACTIONSIG = 0x00000034;
55 static const ULONG OFFSET_SMALLBLOCKLIMIT = 0x00000038;
56 static const ULONG OFFSET_SBDEPOTSTART = 0x0000003C;
57 static const ULONG OFFSET_SBDEPOTCOUNT = 0x00000040;
58 static const ULONG OFFSET_EXTBBDEPOTSTART = 0x00000044;
59 static const ULONG OFFSET_EXTBBDEPOTCOUNT = 0x00000048;
60 static const ULONG OFFSET_BBDEPOTSTART = 0x0000004C;
61 static const ULONG OFFSET_PS_NAME = 0x00000000;
62 static const ULONG OFFSET_PS_NAMELENGTH = 0x00000040;
63 static const ULONG OFFSET_PS_STGTYPE = 0x00000042;
64 static const ULONG OFFSET_PS_LEFTCHILD = 0x00000044;
65 static const ULONG OFFSET_PS_RIGHTCHILD = 0x00000048;
66 static const ULONG OFFSET_PS_DIRROOT = 0x0000004C;
67 static const ULONG OFFSET_PS_GUID = 0x00000050;
68 static const ULONG OFFSET_PS_CTIMELOW = 0x00000064;
69 static const ULONG OFFSET_PS_CTIMEHIGH = 0x00000068;
70 static const ULONG OFFSET_PS_MTIMELOW = 0x0000006C;
71 static const ULONG OFFSET_PS_MTIMEHIGH = 0x00000070;
72 static const ULONG OFFSET_PS_STARTBLOCK = 0x00000074;
73 static const ULONG OFFSET_PS_SIZE = 0x00000078;
74 static const ULONG OFFSET_PS_SIZE_HIGH = 0x0000007C;
75 static const WORD DEF_BIG_BLOCK_SIZE_BITS = 0x0009;
76 static const WORD MIN_BIG_BLOCK_SIZE_BITS = 0x0009;
77 static const WORD MAX_BIG_BLOCK_SIZE_BITS = 0x000c;
78 static const WORD DEF_SMALL_BLOCK_SIZE_BITS = 0x0006;
79 static const WORD DEF_BIG_BLOCK_SIZE = 0x0200;
80 static const WORD DEF_SMALL_BLOCK_SIZE = 0x0040;
81 static const ULONG BLOCK_FIRST_SPECIAL = 0xFFFFFFFB;
82 static const ULONG BLOCK_EXTBBDEPOT = 0xFFFFFFFC;
83 static const ULONG BLOCK_SPECIAL = 0xFFFFFFFD;
84 static const ULONG BLOCK_END_OF_CHAIN = 0xFFFFFFFE;
85 static const ULONG BLOCK_UNUSED = 0xFFFFFFFF;
86 static const ULONG DIRENTRY_NULL = 0xFFFFFFFF;
87 
88 #define DIRENTRY_NAME_MAX_LEN 0x20
89 #define DIRENTRY_NAME_BUFFER_LEN 0x40
90 
91 #define RAW_DIRENTRY_SIZE 0x00000080
92 
93 #define HEADER_SIZE 512
94 
95 #define MIN_BIG_BLOCK_SIZE 0x200
96 #define MAX_BIG_BLOCK_SIZE 0x1000
97 
98 /*
99  * Type of child entry link
100  */
101 #define DIRENTRY_RELATION_PREVIOUS 0
102 #define DIRENTRY_RELATION_NEXT 1
103 #define DIRENTRY_RELATION_DIR 2
104 
105 /*
106  * type constant used in files for the root storage
107  */
108 #define STGTY_ROOT 0x05
109 
110 #define COUNT_BBDEPOTINHEADER 109
111 
112 /* FIXME: This value is stored in the header, but we hard-code it to 0x1000. */
113 #define LIMIT_TO_USE_SMALL_BLOCK 0x1000
114 
115 #define STGM_ACCESS_MODE(stgm) ((stgm)&0x0000f)
116 #define STGM_SHARE_MODE(stgm) ((stgm)&0x000f0)
117 #define STGM_CREATE_MODE(stgm) ((stgm)&0x0f000)
118 
119 #define STGM_KNOWN_FLAGS (0xf0ff | \
120  STGM_TRANSACTED | STGM_CONVERT | STGM_PRIORITY | STGM_NOSCRATCH | \
121  STGM_NOSNAPSHOT | STGM_DIRECT_SWMR | STGM_DELETEONRELEASE | STGM_SIMPLE)
122 
123 /*
124  * Forward declarations of all the structures used by the storage
125  * module.
126  */
129 typedef struct StorageImpl StorageImpl;
133 typedef struct DirEntry DirEntry;
135 
136 /*
137  * A reference to a directory entry in the file or a transacted cache.
138  */
139 typedef ULONG DirRef;
140 
141 /*
142  * This utility structure is used to read/write the information in a directory
143  * entry.
144  */
145 struct DirEntry
146 {
158 };
159 
161 
162 /*************************************************************************
163  * Ole Convert support
164  */
165 
168 
170 {
174 };
175 
176 /****************************************************************************
177  * StorageBaseImpl definitions.
178  *
179  * This structure defines the base information contained in all implementations
180  * of IStorage contained in this file storage implementation.
181  *
182  * In OOP terms, this is the base class for all the IStorage implementations
183  * contained in this file.
184  */
186 {
188  IPropertySetStorage IPropertySetStorage_iface; /* interface for adding a properties stream */
191 
192  /*
193  * Stream tracking list
194  */
195 
196  struct list strmHead;
197 
198  /*
199  * Storage tracking list
200  */
202 
203  /*
204  * TRUE if this object has been invalidated
205  */
207 
208  /*
209  * Index of the directory entry of this storage
210  */
212 
213  /*
214  * virtual methods.
215  */
217 
218  /*
219  * flags that this storage was opened or created with
220  */
222 
223  /*
224  * State bits appear to only be preserved while running. No in the stream
225  */
227 
228  BOOL create; /* Was the storage created or opened.
229  The behaviour of STGM_SIMPLE depends on this */
230  /*
231  * If this storage was opened in transacted mode, the object that implements
232  * the transacted snapshot or cache.
233  */
236 };
237 
238 /* virtual methods for StorageBaseImpl objects */
256 };
257 
259 {
260  This->baseVtbl->Destroy(This);
261 }
262 
264 {
265  This->baseVtbl->Invalidate(This);
266 }
267 
269 {
270  return This->baseVtbl->Flush(This);
271 }
272 
274 {
275  return This->baseVtbl->GetFilename(This, result);
276 }
277 
279  const DirEntry *newData, DirRef *index)
280 {
281  return This->baseVtbl->CreateDirEntry(This, newData, index);
282 }
283 
285  DirRef index, const DirEntry *data)
286 {
287  return This->baseVtbl->WriteDirEntry(This, index, data);
288 }
289 
292 {
293  return This->baseVtbl->ReadDirEntry(This, index, data);
294 }
295 
297  DirRef index)
298 {
299  return This->baseVtbl->DestroyDirEntry(This, index);
300 }
301 
302 /* Read up to size bytes from this directory entry's stream at the given offset. */
304  DirRef index, ULARGE_INTEGER offset, ULONG size, void *buffer, ULONG *bytesRead)
305 {
306  return This->baseVtbl->StreamReadAt(This, index, offset, size, buffer, bytesRead);
307 }
308 
309 /* Write size bytes to this directory entry's stream at the given offset,
310  * growing the stream if necessary. */
313 {
314  return This->baseVtbl->StreamWriteAt(This, index, offset, size, buffer, bytesWritten);
315 }
316 
318  DirRef index, ULARGE_INTEGER newsize)
319 {
320  return This->baseVtbl->StreamSetSize(This, index, newsize);
321 }
322 
323 /* Make dst point to the same stream that src points to. Other stream operations
324  * will not work properly for entries that point to the same stream, so this
325  * must be a very temporary state, and only one entry pointing to a given stream
326  * may be reachable at any given time. */
328  DirRef dst, DirRef src)
329 {
330  return This->baseVtbl->StreamLink(This, dst, src);
331 }
332 
334  ULONG* result, BOOL refresh)
335 {
336  return This->baseVtbl->GetTransactionSig(This, result, refresh);
337 }
338 
340  ULONG value)
341 {
342  return This->baseVtbl->SetTransactionSig(This, value);
343 }
344 
346 {
347  return This->baseVtbl->LockTransaction(This, write);
348 }
349 
351 {
352  return This->baseVtbl->UnlockTransaction(This, write);
353 }
354 
355 /****************************************************************************
356  * StorageBaseImpl stream list handlers
357  */
358 
361 
362 /* Number of BlockChainStream objects to cache in a StorageImpl */
363 #define BLOCKCHAIN_CACHE_SIZE 4
364 
365 /****************************************************************************
366  * StorageImpl definitions.
367  *
368  * This implementation of the IStorage interface represents a root
369  * storage. Basically, a document file.
370  */
372 {
374 
375  /*
376  * File header
377  */
392 
395 
399 
400  /* All small blocks before this one are known to be in use. */
402 
403  /*
404  * Abstraction of the big block chains for the chains of the header.
405  */
409 
410  /* Cache of block chain streams objects for directory entries */
413 
415 
417 
419 };
420 
421 /****************************************************************************
422  * StgStreamImpl definitions.
423  *
424  * This class implements the IStream interface and represents a stream
425  * located inside a storage object.
426  */
428 {
431 
432  /*
433  * We are an entry in the storage object's stream handler list
434  */
436 
437  /*
438  * Storage that is the parent(owner) of the stream
439  */
441 
442  /*
443  * Access mode of this stream.
444  */
446 
447  /*
448  * Index of the directory entry that owns (points to) this stream.
449  */
451 
452  /*
453  * This is the current position of the cursor in the stream
454  */
456 };
457 
458 static inline StgStreamImpl *impl_from_IStream( IStream *iface )
459 {
460  return CONTAINING_RECORD(iface, StgStreamImpl, IStream_iface);
461 }
462 
463 /*
464  * Method definition for the StgStreamImpl class.
465  */
467  StorageBaseImpl* parentStorage,
468  DWORD grfMode,
469  DirRef dirEntry) DECLSPEC_HIDDEN;
470 
471 
472 /* Range lock constants.
473  *
474  * The storage format reserves the region from 0x7fffff00-0x7fffffff for
475  * locking and synchronization. Because it reserves the entire block containing
476  * that range, and the minimum block size is 512 bytes, 0x7ffffe00-0x7ffffeff
477  * also cannot be used for any other purpose.
478  * Unfortunately, the spec doesn't say which bytes
479  * within that range are used, and for what. These are guesses based on testing.
480  * In particular, ends of ranges may be wrong.
481 
482  0x0 through 0x57: Unknown. Causes read-only exclusive opens to fail.
483  0x58 through 0x6b: Priority mode.
484  0x6c through 0x7f: No snapshot mode.
485  0x80: Commit lock.
486  0x81 through 0x91: Priority mode, again. Not sure why it uses two regions.
487  0x92: Lock-checking lock. Held while opening so ranges can be tested without
488  causing spurious failures if others try to grab or test those ranges at the
489  same time.
490  0x93 through 0xa6: Read mode.
491  0xa7 through 0xba: Write mode.
492  0xbb through 0xce: Deny read.
493  0xcf through 0xe2: Deny write.
494  0xe2 through 0xff: Unknown. Causes read-only exclusive opens to fail.
495 */
496 
497 #define RANGELOCK_UNK1_FIRST 0x7ffffe00
498 #define RANGELOCK_UNK1_LAST 0x7fffff57
499 #define RANGELOCK_PRIORITY1_FIRST 0x7fffff58
500 #define RANGELOCK_PRIORITY1_LAST 0x7fffff6b
501 #define RANGELOCK_NOSNAPSHOT_FIRST 0x7fffff6c
502 #define RANGELOCK_NOSNAPSHOT_LAST 0x7fffff7f
503 #define RANGELOCK_COMMIT 0x7fffff80
504 #define RANGELOCK_PRIORITY2_FIRST 0x7fffff81
505 #define RANGELOCK_PRIORITY2_LAST 0x7fffff91
506 #define RANGELOCK_CHECKLOCKS 0x7fffff92
507 #define RANGELOCK_READ_FIRST 0x7fffff93
508 #define RANGELOCK_READ_LAST 0x7fffffa6
509 #define RANGELOCK_WRITE_FIRST 0x7fffffa7
510 #define RANGELOCK_WRITE_LAST 0x7fffffba
511 #define RANGELOCK_DENY_READ_FIRST 0x7fffffbb
512 #define RANGELOCK_DENY_READ_LAST 0x7fffffce
513 #define RANGELOCK_DENY_WRITE_FIRST 0x7fffffcf
514 #define RANGELOCK_DENY_WRITE_LAST 0x7fffffe2
515 #define RANGELOCK_UNK2_FIRST 0x7fffffe3
516 #define RANGELOCK_UNK2_LAST 0x7fffffff
517 #define RANGELOCK_TRANSACTION_FIRST RANGELOCK_COMMIT
518 #define RANGELOCK_TRANSACTION_LAST RANGELOCK_CHECKLOCKS
519 #define RANGELOCK_FIRST RANGELOCK_UNK1_FIRST
520 #define RANGELOCK_LAST RANGELOCK_UNK2_LAST
521 
522 /* internal value for LockRegion/UnlockRegion */
523 #define WINE_LOCK_READ 0x80000000
524 
525 
526 /******************************************************************************
527  * Endian conversion macros
528  */
529 #ifdef WORDS_BIGENDIAN
530 
531 #ifndef htole32
532 #define htole32(x) RtlUlongByteSwap(x)
533 #endif
534 #ifndef htole16
535 #define htole16(x) RtlUshortByteSwap(x)
536 #endif
537 #define lendian32toh(x) RtlUlongByteSwap(x)
538 #define lendian16toh(x) RtlUshortByteSwap(x)
539 
540 #else
541 
542 #ifndef htole32
543 #define htole32(x) (x)
544 #endif
545 #ifndef htole16
546 #define htole16(x) (x)
547 #endif
548 #define lendian32toh(x) (x)
549 #define lendian16toh(x) (x)
550 
551 #endif
552 
553 /******************************************************************************
554  * The StorageUtl_ functions are miscellaneous utility functions. Most of which
555  * are abstractions used to read values from file buffers without having to
556  * worry about bit order
557  */
568 void StorageUtl_CopyDirEntryToSTATSTG(StorageBaseImpl *storage,STATSTG* destination,
569  const DirEntry* source, int statFlags) DECLSPEC_HIDDEN;
570 
571 
572 #endif /* __STORAGE32_H__ */
interface IStorage * LPSTORAGE
Definition: objfwd.h:30
ULONG transactionSig
Definition: storage32.h:391
static const ULONG OFFSET_PS_STARTBLOCK
Definition: storage32.h:72
static void StorageBaseImpl_Destroy(StorageBaseImpl *This)
Definition: storage32.h:258
void(* Destroy)(StorageBaseImpl *)
Definition: storage32.h:240
ULARGE_INTEGER currentPosition
Definition: storage32.h:455
#define HRESULT
Definition: msvc.h:9
void StorageBaseImpl_AddStream(StorageBaseImpl *stg, StgStreamImpl *strm) DECLSPEC_HIDDEN
Definition: storage32.c:2715
DirRef storageDirEntry
Definition: storage32.h:211
static HRESULT StorageBaseImpl_Flush(StorageBaseImpl *This)
Definition: storage32.h:268
ULONG * extBigBlockDepotLocations
Definition: storage32.h:387
static const ULONG OFFSET_PS_CTIMELOW
Definition: storage32.h:68
static const ULONG OFFSET_SMALLBLOCKLIMIT
Definition: storage32.h:55
static const ULONG OFFSET_BBDEPOTSTART
Definition: storage32.h:60
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
static const ULONG BLOCK_EXTBBDEPOT
Definition: storage32.h:82
struct list strmHead
Definition: storage32.h:196
HRESULT(* LockTransaction)(StorageBaseImpl *, BOOL)
Definition: storage32.h:254
DWORD grfMode
Definition: storage32.h:445
HRESULT(* SetTransactionSig)(StorageBaseImpl *, ULONG)
Definition: storage32.h:253
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
static const ULONG OFFSET_PS_MTIMELOW
Definition: storage32.h:70
static const WORD MAX_BIG_BLOCK_SIZE_BITS
Definition: storage32.h:77
HRESULT(* CreateDirEntry)(StorageBaseImpl *, const DirEntry *, DirRef *)
Definition: storage32.h:244
static const ULONG OFFSET_PS_LEFTCHILD
Definition: storage32.h:64
ULONG prevFreeBlock
Definition: storage32.h:398
ULONG startingBlock
Definition: storage32.h:156
struct _ULARGE_INTEGER ULARGE_INTEGER
struct list StrmListEntry
Definition: storage32.h:435
ULARGE_INTEGER size
Definition: storage32.h:157
static const ULONG OFFSET_PS_STGTYPE
Definition: storage32.h:63
void StorageUtl_WriteWord(BYTE *buffer, ULONG offset, WORD value) DECLSPEC_HIDDEN
Definition: storage32.c:6952
static const ULONG OFFSET_MAJORVERSION
Definition: storage32.h:47
HRESULT(* GetFilename)(StorageBaseImpl *, LPWSTR *)
Definition: storage32.h:243
ULONG extBigBlockDepotCount
Definition: storage32.h:389
static const ULONG OFFSET_PS_SIZE
Definition: storage32.h:73
ULONG blockDepotCached[MAX_BIG_BLOCK_SIZE/4]
Definition: storage32.h:396
GLintptr offset
Definition: glext.h:5920
WORD sizeOfNameString
Definition: storage32.h:148
void StorageUtl_WriteGUID(BYTE *buffer, ULONG offset, const GUID *value) DECLSPEC_HIDDEN
Definition: storage32.c:7009
static HRESULT StorageBaseImpl_UnlockTransaction(StorageBaseImpl *This, BOOL write)
Definition: storage32.h:350
static HRESULT StorageBaseImpl_SetTransactionSig(StorageBaseImpl *This, ULONG value)
Definition: storage32.h:339
static const WORD DEF_BIG_BLOCK_SIZE_BITS
Definition: storage32.h:75
static const ULONG OFFSET_PS_SIZE_HIGH
Definition: storage32.h:74
GLuint buffer
Definition: glext.h:5915
swmr_mode
Definition: storage32.h:169
BYTE stgType
Definition: storage32.h:149
BlockChainStream * smallBlockRootChain
Definition: storage32.h:408
ULONG bigBlockSize
Definition: storage32.h:380
void(* Invalidate)(StorageBaseImpl *)
Definition: storage32.h:241
static const ULONG OFFSET_DIRSECTORCOUNT
Definition: storage32.h:51
static const ULONG OFFSET_PS_NAMELENGTH
Definition: storage32.h:62
void StorageUtl_ReadGUID(const BYTE *buffer, ULONG offset, GUID *value) DECLSPEC_HIDDEN
Definition: storage32.c:7000
static HRESULT StorageBaseImpl_LockTransaction(StorageBaseImpl *This, BOOL write)
Definition: storage32.h:345
static const ULONG BLOCK_SPECIAL
Definition: storage32.h:83
void StorageBaseImpl_RemoveStream(StorageBaseImpl *stg, StgStreamImpl *strm) DECLSPEC_HIDDEN
Definition: storage32.c:2721
ULONG smallBlockDepotStart
Definition: storage32.h:385
ULONG smallBlockSize
Definition: storage32.h:381
#define BOOL
Definition: nt_native.h:43
StgStreamImpl * StgStreamImpl_Construct(StorageBaseImpl *parentStorage, DWORD grfMode, DirRef dirEntry) DECLSPEC_HIDDEN
Definition: stg_stream.c:666
enum swmr_mode lockingrole
Definition: storage32.h:235
UINT blockChainToEvict
Definition: storage32.h:412
#define COUNT_BBDEPOTINHEADER
Definition: storage32.h:110
IStorage IStorage_iface
Definition: storage32.h:187
static const ULONG OFFSET_BYTEORDERMARKER
Definition: storage32.h:48
#define write
Definition: acwin.h:73
HRESULT(* GetTransactionSig)(StorageBaseImpl *, ULONG *, BOOL)
Definition: storage32.h:252
static const ULONG OFFSET_BIGBLOCKSIZEBITS
Definition: storage32.h:49
static const ULONG OFFSET_ROOTSTARTBLOCK
Definition: storage32.h:53
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
static const ULONG OFFSET_PS_RIGHTCHILD
Definition: storage32.h:65
HRESULT(* Flush)(StorageBaseImpl *)
Definition: storage32.h:242
void StorageUtl_ReadWord(const BYTE *buffer, ULONG offset, WORD *value) DECLSPEC_HIDDEN
Definition: storage32.c:6944
ILockBytes * lockBytes
Definition: storage32.h:416
DirRef dirEntry
Definition: storage32.h:450
HRESULT(* DestroyDirEntry)(StorageBaseImpl *, DirRef)
Definition: storage32.h:247
ULONG locks_supported
Definition: storage32.h:414
HRESULT(* UnlockTransaction)(StorageBaseImpl *, BOOL)
Definition: storage32.h:255
struct list storageHead
Definition: storage32.h:201
DirRef dirRootEntry
Definition: storage32.h:152
#define DIRENTRY_NAME_MAX_LEN
Definition: storage32.h:88
GLuint index
Definition: glext.h:6031
static const WORD DEF_SMALL_BLOCK_SIZE_BITS
Definition: storage32.h:78
static const ULONG DIRENTRY_NULL
Definition: storage32.h:86
const char * LPCSTR
Definition: xmlstorage.h:183
static const WORD DEF_SMALL_BLOCK_SIZE
Definition: storage32.h:80
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
HRESULT STORAGE_CreateOleStream(IStorage *, DWORD) DECLSPEC_HIDDEN
Definition: storage32.c:9208
static const ULONG OFFSET_BBDEPOTCOUNT
Definition: storage32.h:52
IDirectWriterLock IDirectWriterLock_iface
Definition: storage32.h:189
FILETIME mtime
Definition: storage32.h:155
static const WORD MIN_BIG_BLOCK_SIZE_BITS
Definition: storage32.h:76
ULONG firstFreeSmallBlock
Definition: storage32.h:401
HRESULT(* WriteDirEntry)(StorageBaseImpl *, DirRef, const DirEntry *)
Definition: storage32.h:245
void StorageUtl_WriteULargeInteger(BYTE *buffer, ULONG offset, const ULARGE_INTEGER *value) DECLSPEC_HIDDEN
Definition: storage32.c:6986
HRESULT OLECONVERT_CreateCompObjStream(LPSTORAGE pStorage, LPCSTR strOleTypeName) DECLSPEC_HIDDEN
Definition: storage32.c:10029
static HRESULT StorageBaseImpl_StreamSetSize(StorageBaseImpl *This, DirRef index, ULARGE_INTEGER newsize)
Definition: storage32.h:317
GLsizeiptr size
Definition: glext.h:5919
static HRESULT StorageBaseImpl_StreamWriteAt(StorageBaseImpl *This, DirRef index, ULARGE_INTEGER offset, ULONG size, const void *buffer, ULONG *bytesWritten)
Definition: storage32.h:311
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
static const ULONG OFFSET_TRANSACTIONSIG
Definition: storage32.h:54
#define BLOCKCHAIN_CACHE_SIZE
Definition: storage32.h:363
HRESULT(* StreamWriteAt)(StorageBaseImpl *, DirRef, ULARGE_INTEGER, ULONG, const void *, ULONG *)
Definition: storage32.h:249
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
static const ULONG OFFSET_PS_DIRROOT
Definition: storage32.h:66
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
BlockChainStream * rootBlockChain
Definition: storage32.h:406
void StorageUtl_ReadDWord(const BYTE *buffer, ULONG offset, DWORD *value) DECLSPEC_HIDDEN
Definition: storage32.c:6958
static const WORD DEF_BIG_BLOCK_SIZE
Definition: storage32.h:79
FILETIME ctime
Definition: storage32.h:154
void StorageUtl_WriteDWord(BYTE *buffer, ULONG offset, DWORD value) DECLSPEC_HIDDEN
Definition: storage32.c:6966
unsigned char BYTE
Definition: mem.h:68
static HRESULT StorageBaseImpl_CreateDirEntry(StorageBaseImpl *This, const DirEntry *newData, DirRef *index)
Definition: storage32.h:278
Definition: _list.h:228
GUID clsid
Definition: storage32.h:153
static const ULONG OFFSET_EXTBBDEPOTCOUNT
Definition: storage32.h:59
static const ULONG OFFSET_MINORVERSION
Definition: storage32.h:46
ULONG bigBlockDepotStart[COUNT_BBDEPOTINHEADER]
Definition: storage32.h:390
GLenum src
Definition: glext.h:6340
const StorageBaseImplVtbl * baseVtbl
Definition: storage32.h:216
ULONG DirRef
Definition: storage32.h:139
_In_ HANDLE hFile
Definition: mswsock.h:90
HRESULT(* StreamReadAt)(StorageBaseImpl *, DirRef, ULARGE_INTEGER, ULONG, void *, ULONG *)
Definition: storage32.h:248
static HRESULT StorageBaseImpl_GetFilename(StorageBaseImpl *This, LPWSTR *result)
Definition: storage32.h:273
static HRESULT StorageBaseImpl_WriteDirEntry(StorageBaseImpl *This, DirRef index, const DirEntry *data)
Definition: storage32.h:284
static const ULONG OFFSET_PS_GUID
Definition: storage32.h:67
ULONG extBlockDepotCached[MAX_BIG_BLOCK_SIZE/4]
Definition: storage32.h:393
DirRef leftChild
Definition: storage32.h:150
ULONG rootStartBlock
Definition: storage32.h:383
StorageBaseImpl * transactedChild
Definition: storage32.h:234
GLenum GLsizei GLuint GLint * bytesWritten
Definition: glext.h:11123
static HRESULT StorageBaseImpl_GetTransactionSig(StorageBaseImpl *This, ULONG *result, BOOL refresh)
Definition: storage32.h:333
StorageBaseImpl * parentStorage
Definition: storage32.h:440
BlockChainStream * smallBlockDepotChain
Definition: storage32.h:407
ULONG bigBlockDepotCount
Definition: storage32.h:382
static const ULONG OFFSET_EXTBBDEPOTSTART
Definition: storage32.h:58
static const ULONG OFFSET_SMALLBLOCKSIZEBITS
Definition: storage32.h:50
#define DECLSPEC_HIDDEN
Definition: precomp.h:8
BlockChainStream * blockChainCache[BLOCKCHAIN_CACHE_SIZE]
Definition: storage32.h:411
ULONG locked_bytes[8]
Definition: storage32.h:418
void StorageUtl_ReadULargeInteger(const BYTE *buffer, ULONG offset, ULARGE_INTEGER *value) DECLSPEC_HIDDEN
Definition: storage32.c:6972
static HRESULT StorageBaseImpl_StreamReadAt(StorageBaseImpl *This, DirRef index, ULARGE_INTEGER offset, ULONG size, void *buffer, ULONG *bytesRead)
Definition: storage32.h:303
GLenum GLenum dst
Definition: glext.h:6340
HRESULT FileLockBytesImpl_Construct(HANDLE hFile, DWORD openFlags, LPCWSTR pwcsName, ILockBytes **pLockBytes) DECLSPEC_HIDDEN
Definition: filelockbytes.c:90
ULONG extBigBlockDepotStart
Definition: storage32.h:386
ULONG indexBlockDepotCached
Definition: storage32.h:397
unsigned int UINT
Definition: ndis.h:50
static const ULONG OFFSET_SBDEPOTCOUNT
Definition: storage32.h:57
static HRESULT StorageBaseImpl_DestroyDirEntry(StorageBaseImpl *This, DirRef index)
Definition: storage32.h:296
HRESULT(* ReadDirEntry)(StorageBaseImpl *, DirRef, DirEntry *)
Definition: storage32.h:246
Definition: name.c:36
static HRESULT StorageBaseImpl_StreamLink(StorageBaseImpl *This, DirRef dst, DirRef src)
Definition: storage32.h:327
ULONG extBigBlockDepotLocationsSize
Definition: storage32.h:388
IPropertySetStorage IPropertySetStorage_iface
Definition: storage32.h:188
unsigned int ULONG
Definition: retypes.h:1
DirRef rightChild
Definition: storage32.h:151
ULONG smallBlockLimit
Definition: storage32.h:384
HRESULT(* StreamSetSize)(StorageBaseImpl *, DirRef, ULARGE_INTEGER)
Definition: storage32.h:250
static const ULONG BLOCK_UNUSED
Definition: storage32.h:85
IStream IStream_iface
Definition: storage32.h:429
static const ULONG OFFSET_SBDEPOTSTART
Definition: storage32.h:56
HRESULT(* StreamLink)(StorageBaseImpl *, DirRef, DirRef)
Definition: storage32.h:251
static const ULONG OFFSET_PS_NAME
Definition: storage32.h:61
WCHAR * LPWSTR
Definition: xmlstorage.h:184
static HRESULT StorageBaseImpl_ReadDirEntry(StorageBaseImpl *This, DirRef index, DirEntry *data)
Definition: storage32.h:290
static const ULONG BLOCK_FIRST_SPECIAL
Definition: storage32.h:81
GLuint64EXT * result
Definition: glext.h:11304
WORD bigBlockSizeBits
Definition: storage32.h:378
void StorageUtl_CopyDirEntryToSTATSTG(StorageBaseImpl *storage, STATSTG *destination, const DirEntry *source, int statFlags) DECLSPEC_HIDDEN
Definition: storage32.c:7018
static void StorageBaseImpl_Invalidate(StorageBaseImpl *This)
Definition: storage32.h:263
#define MAX_BIG_BLOCK_SIZE
Definition: storage32.h:96
static StgStreamImpl * impl_from_IStream(IStream *iface)
Definition: storage32.h:458
static const ULONG OFFSET_PS_CTIMEHIGH
Definition: storage32.h:69
static const ULONG BLOCK_END_OF_CHAIN
Definition: storage32.h:84
static const ULONG OFFSET_PS_MTIMEHIGH
Definition: storage32.h:71
ULONG indexExtBlockDepotCached
Definition: storage32.h:394
WORD smallBlockSizeBits
Definition: storage32.h:379