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