0b43541a5a59c45da84192c1e15585120cc6adaf
[reactos.git] / reactos / drivers / filesystems / mup / mup.h
1 #ifndef _MUP_PCH_
2 #define _MUP_PCH_
3
4 #include <wdm.h>
5 #include <ntifs.h>
6 #include <pseh/pseh2.h>
7 #include <ndk/muptypes.h>
8
9 #ifdef __GNUC__
10 #define INIT_SECTION __attribute__((section ("INIT")))
11 #define INIT_FUNCTION INIT_SECTION
12 #else
13 #define INIT_SECTION /* Done via alloc_text for MSC */
14 #define INIT_FUNCTION INIT_SECTION
15 #endif
16
17 #define ROUND_UP(N, S) ((((N) + (S) - 1) / (S)) * (S))
18 #define IO_METHOD_FROM_CTL_CODE(C) (C & 0x00000003)
19
20 #define TAG_MUP ' puM'
21
22 #define DFS_MAGIC_CCB (PVOID)0x11444653
23 #define FILE_SIMPLE_RIGHTS_MASK (FILE_ALL_ACCESS & ~STANDARD_RIGHTS_REQUIRED &~ SYNCHRONIZE)
24
25 #define NODE_TYPE_VCB 0x1
26 #define NODE_TYPE_UNC 0x2
27 #define NODE_TYPE_PFX 0x3
28 #define NODE_TYPE_FCB 0x4
29 #define NODE_TYPE_CCB 0x5
30 #define NODE_TYPE_MIC 0x6
31 #define NODE_TYPE_MQC 0x8
32
33 #define NODE_STATUS_HEALTHY 0x1
34 #define NODE_STATUS_CLEANUP 0x2
35
36 typedef struct _MUP_VCB
37 {
38 ULONG NodeType;
39 ULONG NodeStatus;
40 LONG NodeReferences;
41 ULONG NodeSize;
42 SHARE_ACCESS ShareAccess;
43 } MUP_VCB, *PMUP_VCB;
44
45 typedef struct _MUP_FCB
46 {
47 ULONG NodeType;
48 ULONG NodeStatus;
49 LONG NodeReferences;
50 ULONG NodeSize;
51 PFILE_OBJECT FileObject;
52 LIST_ENTRY CcbList;
53 } MUP_FCB, *PMUP_FCB;
54
55 typedef struct _MUP_CCB
56 {
57 ULONG NodeType;
58 ULONG NodeStatus;
59 LONG NodeReferences;
60 ULONG NodeSize;
61 PMUP_FCB Fcb;
62 LIST_ENTRY CcbListEntry;
63 PDEVICE_OBJECT DeviceObject;
64 PFILE_OBJECT FileObject;
65 } MUP_CCB, *PMUP_CCB;
66
67 typedef struct _MUP_MIC
68 {
69 ULONG NodeType;
70 ULONG NodeStatus;
71 LONG NodeReferences;
72 ULONG NodeSize;
73 PIRP Irp;
74 NTSTATUS LastSuccess;
75 NTSTATUS LastFailed;
76 PMUP_FCB Fcb;
77 } MUP_MIC, *PMUP_MIC;
78
79 typedef struct _MUP_UNC
80 {
81 ULONG NodeType;
82 ULONG NodeStatus;
83 LONG NodeReferences;
84 ULONG NodeSize;
85 LIST_ENTRY ProviderListEntry;
86 UNICODE_STRING DeviceName;
87 HANDLE DeviceHandle;
88 PDEVICE_OBJECT DeviceObject;
89 PFILE_OBJECT FileObject;
90 ULONG ProviderOrder;
91 BOOLEAN MailslotsSupported;
92 BOOLEAN Registered;
93 } MUP_UNC, *PMUP_UNC;
94
95 typedef struct _MUP_PFX
96 {
97 ULONG NodeType;
98 ULONG NodeStatus;
99 LONG NodeReferences;
100 ULONG NodeSize;
101 UNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry;
102 UNICODE_STRING AcceptedPrefix;
103 ULONG Reserved;
104 LARGE_INTEGER ValidityTimeout;
105 PMUP_UNC UncProvider;
106 BOOLEAN ExternalAlloc;
107 BOOLEAN InTable;
108 BOOLEAN KeepExtraRef;
109 BOOLEAN Padding;
110 LIST_ENTRY PrefixListEntry;
111 } MUP_PFX, *PMUP_PFX;
112
113 typedef struct _MUP_MQC
114 {
115 ULONG NodeType;
116 ULONG NodeStatus;
117 LONG NodeReferences;
118 ULONG NodeSize;
119 PIRP Irp;
120 PFILE_OBJECT FileObject;
121 PMUP_UNC LatestProvider;
122 ERESOURCE QueryPathListLock;
123 PMUP_PFX Prefix;
124 NTSTATUS LatestStatus;
125 LIST_ENTRY QueryPathList;
126 LIST_ENTRY MQCListEntry;
127 } MUP_MQC, *PMUP_MQC;
128
129 typedef struct _FORWARDED_IO_CONTEXT
130 {
131 PMUP_CCB Ccb;
132 PMUP_MIC MasterIoContext;
133 WORK_QUEUE_ITEM WorkQueueItem;
134 PDEVICE_OBJECT DeviceObject;
135 PIRP Irp;
136 } FORWARDED_IO_CONTEXT, *PFORWARDED_IO_CONTEXT;
137
138 typedef struct _QUERY_PATH_CONTEXT
139 {
140 PMUP_MQC MasterQueryContext;
141 PMUP_UNC UncProvider;
142 PQUERY_PATH_REQUEST QueryPathRequest;
143 LIST_ENTRY QueryPathListEntry;
144 PIRP Irp;
145 } QUERY_PATH_CONTEXT, *PQUERY_PATH_CONTEXT;
146
147 #endif /* _MUP_PCH_ */