update for HEAD-2002110701
[reactos.git] / include / ddk / fstypes.h
1 #ifndef __INCLUDE_DDK_FSTYPES_H
2 #define __INCLUDE_DDK_FSTYPES_H
3 /* $Id$ */
4
5 #define FSRTL_TAG       TAG('F','S','r','t')
6
7 typedef struct _FILE_LOCK_INFO {
8     LARGE_INTEGER   StartingByte;
9     LARGE_INTEGER   Length;
10     BOOLEAN         ExclusiveLock;
11     ULONG           Key;
12     PFILE_OBJECT    FileObject;
13     PEPROCESS       Process;
14     LARGE_INTEGER   EndingByte;
15 } FILE_LOCK_INFO, *PFILE_LOCK_INFO;
16
17 typedef struct _FILE_LOCK_TOC {
18         KSPIN_LOCK                      SpinLock;
19         LIST_ENTRY                      GrantedListHead;
20         LIST_ENTRY                      PendingListHead;
21 } FILE_LOCK_TOC, *PFILE_LOCK_TOC;
22
23 typedef struct _FILE_LOCK_GRANTED {
24         LIST_ENTRY                      ListEntry;
25         FILE_LOCK_INFO          Lock;
26 } FILE_LOCK_GRANTED, *PFILE_LOCK_GRANTED;
27
28 typedef struct _FILE_LOCK_PENDING {
29         LIST_ENTRY                      ListEntry;
30         PIRP                            Irp;
31         PVOID                           Context;
32 } FILE_LOCK_PENDING, *PFILE_LOCK_PENDING;
33
34 // raw internal file lock struct returned from FsRtlGetNextFileLock
35 typedef struct _FILE_SHARED_LOCK_ENTRY {
36     PVOID           Unknown1;
37     PVOID           Unknown2;
38     FILE_LOCK_INFO  FileLock;
39 } FILE_SHARED_LOCK_ENTRY, *PFILE_SHARED_LOCK_ENTRY;
40
41 // raw internal file lock struct returned from FsRtlGetNextFileLock
42 typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY {
43     LIST_ENTRY      ListEntry;
44     PVOID           Unknown1;
45     PVOID           Unknown2;
46     FILE_LOCK_INFO  FileLock;
47 } FILE_EXCLUSIVE_LOCK_ENTRY, *PFILE_EXCLUSIVE_LOCK_ENTRY;
48
49 typedef NTSTATUS (*PCOMPLETE_LOCK_IRP_ROUTINE) (
50     IN PVOID    Context,
51     IN PIRP     Irp
52 );
53
54 typedef VOID (*PUNLOCK_ROUTINE) (
55     IN PVOID            Context,
56     IN PFILE_LOCK_INFO  FileLockInfo
57 );
58
59 typedef struct _FILE_LOCK {
60     PCOMPLETE_LOCK_IRP_ROUTINE  CompleteLockIrpRoutine;
61     PUNLOCK_ROUTINE             UnlockRoutine;
62     BOOLEAN                     FastIoIsQuestionable;
63     BOOLEAN                     Pad[3];
64     PVOID                       LockInformation;
65     FILE_LOCK_INFO              LastReturnedLockInfo;
66     PVOID                       LastReturnedLock;
67 } FILE_LOCK, *PFILE_LOCK;
68
69 typedef struct _TUNNEL {
70     FAST_MUTEX          Mutex;
71     PRTL_SPLAY_LINKS    Cache;
72     LIST_ENTRY          TimerQueue;
73     USHORT              NumEntries;
74 } TUNNEL, *PTUNNEL;
75
76 typedef struct _NOTIFY_SYNC
77 {
78         DWORD   Unknown0;       /* 0x00 */
79         DWORD   Unknown1;       /* 0x04 */
80         DWORD   Unknown2;       /* 0x08 */
81         WORD    Unknown3;       /* 0x0c */
82         WORD    Unknown4;       /* 0x0e */
83         DWORD   Unknown5;       /* 0x10 */
84         DWORD   Unknown6;       /* 0x14 */
85         DWORD   Unknown7;       /* 0x18 */
86         DWORD   Unknown8;       /* 0x1c */
87         DWORD   Unknown9;       /* 0x20 */
88         DWORD   Unknown10;      /* 0x24 */
89         
90 } NOTIFY_SYNC, * PNOTIFY_SYNC;
91
92
93 typedef struct _LARGE_MCB
94 {
95   PFAST_MUTEX FastMutex;
96   ULONG MaximumPairCount;
97   ULONG PairCount;
98   POOL_TYPE PoolType;
99   PVOID Mapping;
100 } LARGE_MCB, *PLARGE_MCB;
101
102
103 typedef VOID
104 (*POPLOCK_WAIT_COMPLETE_ROUTINE)(PVOID Context,
105                                  PIRP Irp);
106
107 typedef VOID
108 (*POPLOCK_FS_PREPOST_IRP)(PVOID Context,
109                           PIRP Irp);
110
111 typedef PVOID OPLOCK, *POPLOCK;
112
113 #endif /* __INCLUDE_DDK_FSFUNCS_H */