10 #define FSRTL_COMMON_FCB_HEADER_LAYOUT \
11 CSHORT NodeTypeCode; \
12 CSHORT NodeByteSize; \
14 UCHAR IsFastIoPossible; \
18 PERESOURCE Resource; \
19 PERESOURCE PagingIoResource; \
20 LARGE_INTEGER AllocationSize; \
21 LARGE_INTEGER FileSize; \
22 LARGE_INTEGER ValidDataLength;
24 typedef struct _FSRTL_COMMON_FCB_HEADER
{
25 FSRTL_COMMON_FCB_HEADER_LAYOUT
26 } FSRTL_COMMON_FCB_HEADER
, *PFSRTL_COMMON_FCB_HEADER
;
29 typedef struct _FSRTL_ADVANCED_FCB_HEADER
:FSRTL_COMMON_FCB_HEADER
{
30 #else /* __cplusplus */
31 typedef struct _FSRTL_ADVANCED_FCB_HEADER
{
32 FSRTL_COMMON_FCB_HEADER_LAYOUT
33 #endif /* __cplusplus */
34 PFAST_MUTEX FastMutex
;
35 LIST_ENTRY FilterContexts
;
36 #if (NTDDI_VERSION >= NTDDI_VISTA)
37 EX_PUSH_LOCK PushLock
;
38 PVOID
*FileContextSupportPointer
;
40 } FSRTL_ADVANCED_FCB_HEADER
, *PFSRTL_ADVANCED_FCB_HEADER
;
42 #define FSRTL_FCB_HEADER_V0 (0x00)
43 #define FSRTL_FCB_HEADER_V1 (0x01)
45 #define FSRTL_FLAG_FILE_MODIFIED (0x01)
46 #define FSRTL_FLAG_FILE_LENGTH_CHANGED (0x02)
47 #define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04)
48 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08)
49 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10)
50 #define FSRTL_FLAG_USER_MAPPED_FILE (0x20)
51 #define FSRTL_FLAG_ADVANCED_HEADER (0x40)
52 #define FSRTL_FLAG_EOF_ADVANCE_ACTIVE (0x80)
54 #define FSRTL_FLAG2_DO_MODIFIED_WRITE (0x01)
55 #define FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS (0x02)
56 #define FSRTL_FLAG2_PURGE_WHEN_MAPPED (0x04)
57 #define FSRTL_FLAG2_IS_PAGING_FILE (0x08)
59 #define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
60 #define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
61 #define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
62 #define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
63 #define FSRTL_NETWORK1_TOP_LEVEL_IRP ((LONG_PTR)0x05)
64 #define FSRTL_NETWORK2_TOP_LEVEL_IRP ((LONG_PTR)0x06)
65 #define FSRTL_MAX_TOP_LEVEL_IRP_FLAG ((LONG_PTR)0xFFFF)
67 typedef struct _FSRTL_AUXILIARY_BUFFER
{
72 } FSRTL_AUXILIARY_BUFFER
, *PFSRTL_AUXILIARY_BUFFER
;
74 #define FSRTL_AUXILIARY_FLAG_DEALLOCATE 0x00000001
76 typedef enum _FSRTL_COMPARISON_RESULT
{
80 } FSRTL_COMPARISON_RESULT
;
82 #define FSRTL_FAT_LEGAL 0x01
83 #define FSRTL_HPFS_LEGAL 0x02
84 #define FSRTL_NTFS_LEGAL 0x04
85 #define FSRTL_WILD_CHARACTER 0x08
86 #define FSRTL_OLE_LEGAL 0x10
87 #define FSRTL_NTFS_STREAM_LEGAL (FSRTL_NTFS_LEGAL | FSRTL_OLE_LEGAL)
89 #define FSRTL_VOLUME_DISMOUNT 1
90 #define FSRTL_VOLUME_DISMOUNT_FAILED 2
91 #define FSRTL_VOLUME_LOCK 3
92 #define FSRTL_VOLUME_LOCK_FAILED 4
93 #define FSRTL_VOLUME_UNLOCK 5
94 #define FSRTL_VOLUME_MOUNT 6
95 #define FSRTL_VOLUME_NEEDS_CHKDSK 7
96 #define FSRTL_VOLUME_WORM_NEAR_FULL 8
97 #define FSRTL_VOLUME_WEARING_OUT 9
98 #define FSRTL_VOLUME_FORCED_CLOSED 10
99 #define FSRTL_VOLUME_INFO_MAKE_COMPAT 11
100 #define FSRTL_VOLUME_PREPARING_EJECT 12
101 #define FSRTL_VOLUME_CHANGE_SIZE 13
102 #define FSRTL_VOLUME_BACKGROUND_FORMAT 14
105 (NTAPI
*PFSRTL_STACK_OVERFLOW_ROUTINE
) (
109 #if (NTDDI_VERSION >= NTDDI_VISTA)
111 #define FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED 0x00000001
112 #define FSRTL_UNC_PROVIDER_FLAGS_CSC_ENABLED 0x00000002
113 #define FSRTL_UNC_PROVIDER_FLAGS_DOMAIN_SVC_AWARE 0x00000004
115 #define FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA 0x00000001
117 #define FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA 0x00000001
118 #define FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL 0x00000002
120 #define FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL 0x00000002
122 #define FSRTL_VIRTDISK_FULLY_ALLOCATED 0x00000001
123 #define FSRTL_VIRTDISK_NO_DRIVE_LETTER 0x00000002
125 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_1
{
127 } FSRTL_MUP_PROVIDER_INFO_LEVEL_1
, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_1
;
129 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_2
{
131 UNICODE_STRING ProviderName
;
132 } FSRTL_MUP_PROVIDER_INFO_LEVEL_2
, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_2
;
135 (*PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK
) (
136 IN OUT PVOID EcpContext
,
139 typedef struct _ECP_LIST ECP_LIST
, *PECP_LIST
;
141 typedef ULONG FSRTL_ALLOCATE_ECPLIST_FLAGS
;
142 typedef ULONG FSRTL_ALLOCATE_ECP_FLAGS
;
143 typedef ULONG FSRTL_ECP_LOOKASIDE_FLAGS
;
145 typedef enum _FSRTL_CHANGE_BACKING_TYPE
{
146 ChangeDataControlArea
,
147 ChangeImageControlArea
,
149 } FSRTL_CHANGE_BACKING_TYPE
, *PFSRTL_CHANGE_BACKING_TYPE
;
151 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
153 typedef struct _FSRTL_PER_FILE_CONTEXT
{
157 PFREE_FUNCTION FreeCallback
;
158 } FSRTL_PER_FILE_CONTEXT
, *PFSRTL_PER_FILE_CONTEXT
;
160 typedef struct _FSRTL_PER_STREAM_CONTEXT
{
164 PFREE_FUNCTION FreeCallback
;
165 } FSRTL_PER_STREAM_CONTEXT
, *PFSRTL_PER_STREAM_CONTEXT
;
167 #if (NTDDI_VERSION >= NTDDI_WIN2K)
169 (*PFN_FSRTLTEARDOWNPERSTREAMCONTEXTS
) (
170 IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader
);
173 typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT
{
177 } FSRTL_PER_FILEOBJECT_CONTEXT
, *PFSRTL_PER_FILEOBJECT_CONTEXT
;
179 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_HARD_ERROR 0x1
180 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_LOG_ENTRY 0x2
183 (NTAPI
*PCOMPLETE_LOCK_IRP_ROUTINE
) (
187 typedef struct _FILE_LOCK_INFO
{
188 LARGE_INTEGER StartingByte
;
189 LARGE_INTEGER Length
;
190 BOOLEAN ExclusiveLock
;
192 PFILE_OBJECT FileObject
;
194 LARGE_INTEGER EndingByte
;
195 } FILE_LOCK_INFO
, *PFILE_LOCK_INFO
;
198 (NTAPI
*PUNLOCK_ROUTINE
) (
200 IN PFILE_LOCK_INFO FileLockInfo
);
202 typedef struct _FILE_LOCK
{
203 PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine
;
204 PUNLOCK_ROUTINE UnlockRoutine
;
205 BOOLEAN FastIoIsQuestionable
;
207 PVOID LockInformation
;
208 FILE_LOCK_INFO LastReturnedLockInfo
;
209 PVOID LastReturnedLock
;
210 LONG
volatile LockRequestsInProgress
;
211 } FILE_LOCK
, *PFILE_LOCK
;
213 typedef struct _TUNNEL
{
215 PRTL_SPLAY_LINKS Cache
;
216 LIST_ENTRY TimerQueue
;
220 typedef struct _BASE_MCB
{
221 ULONG MaximumPairCount
;
226 } BASE_MCB
, *PBASE_MCB
;
228 typedef struct _LARGE_MCB
{
229 PKGUARDED_MUTEX GuardedMutex
;
231 } LARGE_MCB
, *PLARGE_MCB
;
233 #define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
235 typedef struct _MCB
{
236 LARGE_MCB DummyFieldThatSizesThisStructureCorrectly
;
239 typedef enum _FAST_IO_POSSIBLE
{
240 FastIoIsNotPossible
= 0,
245 typedef struct _EOF_WAIT_BLOCK
{
246 LIST_ENTRY EofWaitLinks
;
248 } EOF_WAIT_BLOCK
, *PEOF_WAIT_BLOCK
;
250 typedef PVOID OPLOCK
, *POPLOCK
;
253 (NTAPI
*POPLOCK_WAIT_COMPLETE_ROUTINE
) (
258 (NTAPI
*POPLOCK_FS_PREPOST_IRP
) (
262 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
263 #define OPLOCK_FLAG_COMPLETE_IF_OPLOCKED 0x00000001
266 #if (NTDDI_VERSION >= NTDDI_WIN7)
267 #define OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY 0x00000002
268 #define OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK 0x00000004
269 #define OPLOCK_FLAG_IGNORE_OPLOCK_KEYS 0x00000008
270 #define OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH 0x00000001
273 #if (NTDDI_VERSION >= NTDDI_WIN7)
275 typedef struct _OPLOCK_KEY_ECP_CONTEXT
{
278 } OPLOCK_KEY_ECP_CONTEXT
, *POPLOCK_KEY_ECP_CONTEXT
;
280 DEFINE_GUID(GUID_ECP_OPLOCK_KEY
, 0x48850596, 0x3050, 0x4be7, 0x98, 0x63, 0xfe, 0xc3, 0x50, 0xce, 0x8d, 0x7f);
284 typedef PVOID PNOTIFY_SYNC
;
286 #if (NTDDI_VERSION >= NTDDI_WIN7)
287 typedef struct _ECP_HEADER ECP_HEADER
, *PECP_HEADER
;
291 (NTAPI
*PCHECK_FOR_TRAVERSE_ACCESS
) (
292 IN PVOID NotifyContext
,
293 IN PVOID TargetContext OPTIONAL
,
294 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
);
297 (NTAPI
*PFILTER_REPORT_CHANGE
) (
298 IN PVOID NotifyContext
,
299 IN PVOID FilterContext
);