1 #ifndef Py_WINREPARSE_H
2 #define Py_WINREPARSE_H
3 
4 #ifdef MS_WINDOWS
5 #include <Windows.h>
6 
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10 
11 /* The following structure was copied from
12    http://msdn.microsoft.com/en-us/library/ff552012.aspx as the required
13    include doesn't seem to be present in the Windows SDK (at least as included
14    with Visual Studio Express). */
15 typedef struct _REPARSE_DATA_BUFFER {
16     ULONG ReparseTag;
17     USHORT ReparseDataLength;
18     USHORT Reserved;
19     union {
20         struct {
21             USHORT SubstituteNameOffset;
22             USHORT SubstituteNameLength;
23             USHORT PrintNameOffset;
24             USHORT PrintNameLength;
25             ULONG Flags;
26             WCHAR PathBuffer[1];
27         } SymbolicLinkReparseBuffer;
28 
29         struct {
30             USHORT SubstituteNameOffset;
31             USHORT  SubstituteNameLength;
32             USHORT  PrintNameOffset;
33             USHORT  PrintNameLength;
34             WCHAR  PathBuffer[1];
35         } MountPointReparseBuffer;
36 
37         struct {
38             UCHAR  DataBuffer[1];
39         } GenericReparseBuffer;
40     };
41 } REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
42 
43 #define REPARSE_DATA_BUFFER_HEADER_SIZE  FIELD_OFFSET(REPARSE_DATA_BUFFER,\
44                                                       GenericReparseBuffer)
45 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE  ( 16 * 1024 )
46 
47 #ifdef __cplusplus
48 }
49 #endif
50 
51 #endif /* MS_WINDOWS */
52 
53 #endif /* !Py_WINREPARSE_H */
54