6e5edd8045bdddeecea74401337dcf35b218c65e
[reactos.git] / include / ddk / fsfuncs.h
1 #ifndef __INCLUDE_DDK_FSFUNCS_H
2 #define __INCLUDE_DDK_FSFUNCS_H
3 /* $Id$ */
4 #define FlagOn(x,f) ((x) & (f))
5
6 VOID
7 STDCALL
8 FsRtlFreeFileLock(
9         IN PFILE_LOCK FileLock
10         );
11
12 PFILE_LOCK
13 STDCALL
14 FsRtlAllocateFileLock (
15     IN PCOMPLETE_LOCK_IRP_ROUTINE   CompleteLockIrpRoutine OPTIONAL,
16     IN PUNLOCK_ROUTINE              UnlockRoutine OPTIONAL
17     );
18
19 #define FsRtlAreThereCurrentFileLocks(FL) (((FL)->FastIoIsQuestionable))
20
21 BOOLEAN STDCALL
22 FsRtlAddLargeMcbEntry(IN PLARGE_MCB Mcb,
23                       IN LONGLONG Vbn,
24                       IN LONGLONG Lbn,
25                       IN LONGLONG SectorCount);
26
27 VOID STDCALL
28 FsRtlAddMcbEntry(
29         DWORD   Unknown0,
30         DWORD   Unknown1,
31         DWORD   Unknown2,
32         DWORD   Unknown3
33         );
34
35 VOID STDCALL
36 FsRtlAddToTunnelCache (
37     IN PTUNNEL          Cache,
38     IN ULONGLONG        DirectoryKey,
39     IN PUNICODE_STRING  ShortName,
40     IN PUNICODE_STRING  LongName,
41     IN BOOLEAN          KeyByShortName,
42     IN ULONG            DataLength,
43     IN PVOID            Data
44     );
45
46 PVOID STDCALL
47 FsRtlAllocatePool (
48         IN      POOL_TYPE       PoolType,
49         IN      ULONG           NumberOfBytes
50         );
51
52 PVOID STDCALL
53 FsRtlAllocatePoolWithQuota (
54         IN      POOL_TYPE       PoolType,
55         IN      ULONG           NumberOfBytes
56         );
57
58 PVOID STDCALL
59 FsRtlAllocatePoolWithQuotaTag (
60         IN      POOL_TYPE       PoolType,
61         IN      ULONG           NumberOfBytes,
62         IN      ULONG           Tag
63         );
64 PVOID
65 STDCALL
66 FsRtlAllocatePoolWithTag (
67         IN      POOL_TYPE       PoolType,
68         IN      ULONG           NumberOfBytes,
69         IN      ULONG           Tag
70         );
71 DWORD
72 STDCALL
73 FsRtlAllocateResource (
74         VOID
75         );
76 BOOLEAN
77 STDCALL
78 FsRtlAreNamesEqual (
79         IN      PUNICODE_STRING Name1,
80         IN      PUNICODE_STRING Name2,
81         IN      BOOLEAN         IgnoreCase,
82         IN      PWCHAR          UpcaseTable     OPTIONAL
83         );
84 DWORD
85 STDCALL
86 FsRtlBalanceReads (
87         DWORD   Unknown0
88         );
89 BOOLEAN
90 STDCALL
91 FsRtlCheckLockForReadAccess (
92         IN PFILE_LOCK   FileLock,
93         IN PIRP         Irp
94         );
95 BOOLEAN
96 STDCALL
97 FsRtlCheckLockForWriteAccess (
98         IN PFILE_LOCK   FileLock,
99         IN PIRP         Irp
100         );
101
102 NTSTATUS STDCALL
103 FsRtlCheckOplock(IN POPLOCK Oplock,
104                  IN PIRP Irp,
105                  IN PVOID Context,
106                  IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
107                  IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
108
109 BOOLEAN
110 STDCALL
111 FsRtlCopyRead (
112         IN      PFILE_OBJECT            FileObject,
113         IN      PLARGE_INTEGER          FileOffset,
114         IN      ULONG                   Length,
115         IN      BOOLEAN                 Wait,
116         IN      ULONG                   LockKey,
117         OUT     PVOID                   Buffer,
118         OUT     PIO_STATUS_BLOCK        IoStatus,
119         IN      PDEVICE_OBJECT          DeviceObject
120         );
121 BOOLEAN
122 STDCALL
123 FsRtlCopyWrite (
124         IN      PFILE_OBJECT            FileObject,
125         IN      PLARGE_INTEGER          FileOffset,
126         IN      ULONG                   Length,
127         IN      BOOLEAN                 Wait,
128         IN      ULONG                   LockKey,
129         IN      PVOID                   Buffer,
130         OUT     PIO_STATUS_BLOCK        IoStatus,
131         IN      PDEVICE_OBJECT          DeviceObject
132         );
133
134 BOOLEAN STDCALL
135 FsRtlCurrentBatchOplock(IN POPLOCK Oplock);
136
137 VOID STDCALL
138 FsRtlDeleteKeyFromTunnelCache(IN PTUNNEL Cache,
139                               IN ULONGLONG DirectoryKey);
140
141 VOID STDCALL
142 FsRtlDeleteTunnelCache(IN PTUNNEL Cache);
143
144 VOID STDCALL
145 FsRtlDeregisterUncProvider(IN HANDLE Handle);
146
147 VOID
148 STDCALL
149 FsRtlDissectDbcs (
150         DWORD   Unknown0,
151         DWORD   Unknown1,
152         DWORD   Unknown2,
153         DWORD   Unknown3
154         );
155 VOID
156 STDCALL
157 FsRtlDissectName (
158         DWORD   Unknown0,
159         DWORD   Unknown1,
160         DWORD   Unknown2,
161         DWORD   Unknown3
162         );
163 BOOLEAN
164 STDCALL
165 FsRtlDoesDbcsContainWildCards (
166         IN      DWORD   Unknown0
167         );
168 BOOLEAN
169 STDCALL
170 FsRtlDoesNameContainWildCards (
171         IN      PUNICODE_STRING Name
172         );
173 BOOLEAN
174 STDCALL
175 FsRtlFastCheckLockForRead (
176         IN      PFILE_LOCK              FileLock,
177         IN      PLARGE_INTEGER          FileOffset,
178         IN      PLARGE_INTEGER          Length,
179         IN      ULONG                   Key,
180         IN      PFILE_OBJECT            FileObject,
181         IN      PEPROCESS               Process
182         );
183 BOOLEAN
184 STDCALL
185 FsRtlFastCheckLockForWrite (
186         IN      PFILE_LOCK              FileLock,
187         IN      PLARGE_INTEGER          FileOffset,
188         IN      PLARGE_INTEGER          Length,
189         IN      ULONG                   Key,
190         IN      PFILE_OBJECT            FileObject,
191         IN      PEPROCESS               Process
192         );
193 NTSTATUS
194 STDCALL
195 FsRtlFastUnlockAll (
196         IN      PFILE_LOCK           FileLock,
197         IN      PFILE_OBJECT         FileObject,
198         IN      PEPROCESS            Process,
199         IN      PVOID                Context OPTIONAL
200         );
201 NTSTATUS
202 STDCALL
203 FsRtlFastUnlockAllByKey (
204         IN      PFILE_LOCK      FileLock,
205         IN      PFILE_OBJECT    FileObject,
206         IN      PEPROCESS       Process,
207         IN      DWORD           Key,
208         IN      PVOID           Context OPTIONAL
209         );
210 NTSTATUS
211 STDCALL
212 FsRtlFastUnlockSingle (
213     IN PFILE_LOCK           FileLock,
214     IN PFILE_OBJECT         FileObject,
215     IN PLARGE_INTEGER       FileOffset,
216     IN PLARGE_INTEGER       Length,
217     IN PEPROCESS            Process,
218     IN ULONG                Key,
219     IN PVOID                Context OPTIONAL,
220     IN BOOLEAN              AlreadySynchronized
221     );
222 BOOLEAN
223 STDCALL
224 FsRtlFindInTunnelCache (
225     IN PTUNNEL          Cache,
226     IN ULONGLONG        DirectoryKey,
227     IN PUNICODE_STRING  Name,
228     OUT PUNICODE_STRING ShortName,
229     OUT PUNICODE_STRING LongName,
230     IN OUT PULONG       DataLength,
231     OUT PVOID           Data
232     );
233 NTSTATUS
234 STDCALL
235 FsRtlGetFileSize (
236         IN      PFILE_OBJECT    FileObject,
237         IN OUT  PLARGE_INTEGER  FileSize
238         );
239 PFILE_LOCK_INFO
240 STDCALL
241 FsRtlGetNextFileLock (
242         IN      PFILE_LOCK      FileLock,
243         IN      BOOLEAN         Restart
244         );
245
246 BOOLEAN STDCALL
247 FsRtlGetNextLargeMcbEntry(IN PLARGE_MCB Mcb,
248                           IN ULONG RunIndex,
249                           OUT PLONGLONG Vbn,
250                           OUT PLONGLONG Lbn,
251                           OUT PLONGLONG SectorCount);
252
253 VOID
254 STDCALL
255 FsRtlGetNextMcbEntry (
256         DWORD   Unknown0,
257         DWORD   Unknown1,
258         DWORD   Unknown2,
259         DWORD   Unknown3,
260         DWORD   Unknown4
261         );
262 #define FsRtlEnterFileSystem    KeEnterCriticalRegion
263 #define FsRtlExitFileSystem     KeLeaveCriticalRegion
264 VOID
265 STDCALL
266 FsRtlInitializeFileLock (
267         IN PFILE_LOCK                   FileLock,
268         IN PCOMPLETE_LOCK_IRP_ROUTINE   CompleteLockIrpRoutine OPTIONAL,
269         IN PUNLOCK_ROUTINE              UnlockRoutine OPTIONAL
270         );
271
272 VOID STDCALL
273 FsRtlInitializeLargeMcb(IN PLARGE_MCB Mcb,
274                         IN POOL_TYPE PoolType);
275
276 VOID
277 STDCALL
278 FsRtlInitializeMcb (
279         DWORD   Unknown0,
280         DWORD   Unknown1
281         );
282
283 VOID STDCALL
284 FsRtlInitializeOplock(IN OUT POPLOCK Oplock);
285
286 VOID
287 STDCALL
288 FsRtlInitializeTunnelCache (
289     IN PTUNNEL Cache
290     );
291 BOOLEAN
292 STDCALL
293 FsRtlIsDbcsInExpression (
294         DWORD   Unknown0,
295         DWORD   Unknown1
296         );
297 BOOLEAN
298 STDCALL
299 FsRtlIsFatDbcsLegal (
300     IN ANSI_STRING DbcsName,
301     IN BOOLEAN WildCardsPermissible,
302     IN BOOLEAN PathNamePermissible,
303     IN BOOLEAN LeadingBackslashPermissible
304     );
305 BOOLEAN
306 STDCALL
307 FsRtlIsHpfsDbcsLegal (
308         DWORD   Unknown0,
309         DWORD   Unknown1,
310         DWORD   Unknown2,
311         DWORD   Unknown3,
312         DWORD   Unknown4
313         );
314 BOOLEAN
315 STDCALL
316 FsRtlIsNameInExpression (
317         IN      PUNICODE_STRING Expression,
318         IN      PUNICODE_STRING Name,
319         IN      BOOLEAN         IgnoreCase,
320         IN      PWCHAR          UpcaseTable     OPTIONAL
321         );
322
323 BOOLEAN STDCALL
324 FsRtlIsNtstatusExpected(IN NTSTATUS NtStatus);
325
326 BOOLEAN STDCALL
327 FsRtlIsTotalDeviceFailure(IN NTSTATUS NtStatus);
328
329 #define FsRtlIsUnicodeCharacterWild(C) ( \
330     (((C) >= 0x40) ? \
331     FALSE : \
332     FlagOn((*FsRtlLegalAnsiCharacterArray)[(C)], FSRTL_WILD_CHARACTER )) \
333     )
334
335 BOOLEAN STDCALL
336 FsRtlLookupLargeMcbEntry(IN PLARGE_MCB Mcb,
337                          IN LONGLONG Vbn,
338                          OUT PLONGLONG Lbn OPTIONAL,
339                          OUT PLONGLONG SectorCountFromLbn OPTIONAL,
340                          OUT PLONGLONG StartingLbn OPTIONAL,
341                          OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
342                          OUT PULONG Index OPTIONAL);
343
344 BOOLEAN STDCALL
345 FsRtlLookupLastLargeMcbEntry(IN PLARGE_MCB Mcb,
346                              OUT PLONGLONG Vbn,
347                              OUT PLONGLONG Lbn);
348
349 VOID
350 STDCALL
351 FsRtlLookupLastMcbEntry (
352         DWORD   Unknown0,
353         DWORD   Unknown1,
354         DWORD   Unknown2
355         );
356 VOID
357 STDCALL
358 FsRtlLookupMcbEntry (
359         DWORD   Unknown0,
360         DWORD   Unknown1,
361         DWORD   Unknown2,
362         DWORD   Unknown3,
363         DWORD   Unknown4
364         );
365 BOOLEAN
366 STDCALL
367 FsRtlMdlRead (
368         IN      PFILE_OBJECT            FileObject,
369         IN      PLARGE_INTEGER          FileOffset,
370         IN      ULONG                   Length,
371         IN      ULONG                   LockKey,
372         OUT     PMDL                    *MdlChain,
373         OUT     PIO_STATUS_BLOCK        IoStatus
374         );
375 BOOLEAN
376 STDCALL
377 FsRtlMdlReadComplete (
378         IN      PFILE_OBJECT    FileObject,
379         IN OUT  PMDL            MdlChain
380         );
381 BOOLEAN
382 STDCALL
383 FsRtlMdlReadCompleteDev (
384         IN      PFILE_OBJECT    FileObject,
385         IN      PMDL            MdlChain,
386         IN      PDEVICE_OBJECT  DeviceObject
387         );
388 BOOLEAN
389 STDCALL
390 FsRtlMdlReadDev (
391         IN      PFILE_OBJECT            FileObject,
392         IN      PLARGE_INTEGER          FileOffset,
393         IN      ULONG                   Length,
394         IN      ULONG                   LockKey,
395         OUT     PMDL                    *MdlChain,
396         OUT     PIO_STATUS_BLOCK        IoStatus,
397         IN      PDEVICE_OBJECT          DeviceObject
398         );
399 BOOLEAN
400 STDCALL
401 FsRtlMdlWriteComplete (
402         IN      PFILE_OBJECT    FileObject,
403         IN      PLARGE_INTEGER  FileOffset,
404         IN      PMDL            MdlChain
405         );
406 BOOLEAN
407 STDCALL
408 FsRtlMdlWriteCompleteDev (
409         IN      PFILE_OBJECT    FileObject,
410         IN      PLARGE_INTEGER  FileOffset,
411         IN      PMDL            MdlChain,
412         IN      PDEVICE_OBJECT  DeviceObject
413         );
414 VOID
415 STDCALL
416 FsRtlNotifyChangeDirectory (
417         IN      PNOTIFY_SYNC    NotifySync,
418         IN      PVOID           FsContext,
419         IN      PSTRING         FullDirectoryName,
420         IN      PLIST_ENTRY     NotifyList,
421         IN      BOOLEAN         WatchTree,
422         IN      ULONG           CompletionFilter,
423         IN      PIRP            NotifyIrp
424         );
425 VOID
426 STDCALL
427 FsRtlNotifyCleanup (
428         IN      PNOTIFY_SYNC    NotifySync,
429         IN      PLIST_ENTRY     NotifyList,
430         IN      PVOID           FsContext
431         );
432 typedef
433 BOOLEAN (*PCHECK_FOR_TRAVERSE_ACCESS) (
434         IN      PVOID                           NotifyContext,
435         IN      PVOID                           TargetContext,
436         IN      PSECURITY_SUBJECT_CONTEXT       SubjectContext
437         );
438 VOID
439 STDCALL
440 FsRtlNotifyFullChangeDirectory (
441         IN      PNOTIFY_SYNC                    NotifySync,
442         IN      PLIST_ENTRY                     NotifyList,
443         IN      PVOID                           FsContext,
444         IN      PSTRING                         FullDirectoryName,
445         IN      BOOLEAN                         WatchTree,
446         IN      BOOLEAN                         IgnoreBuffer,
447         IN      ULONG                           CompletionFilter,
448         IN      PIRP                            NotifyIrp,
449         IN      PCHECK_FOR_TRAVERSE_ACCESS      TraverseCallback        OPTIONAL,
450         IN      PSECURITY_SUBJECT_CONTEXT       SubjectContext          OPTIONAL
451         );
452 VOID
453 STDCALL
454 FsRtlNotifyFullReportChange (
455         IN      PNOTIFY_SYNC    NotifySync,
456         IN      PLIST_ENTRY     NotifyList,
457         IN      PSTRING         FullTargetName,
458         IN      USHORT          TargetNameOffset,
459         IN      PSTRING         StreamName OPTIONAL,
460         IN      PSTRING         NormalizedParentName    OPTIONAL,
461         IN      ULONG           FilterMatch,
462         IN      ULONG           Action,
463         IN      PVOID           TargetContext
464         );
465 VOID
466 STDCALL
467 FsRtlNotifyUninitializeSync (
468         IN OUT  PNOTIFY_SYNC    * NotifySync
469         );
470 VOID
471 STDCALL
472 FsRtlNotifyReportChange (
473         IN      PNOTIFY_SYNC    NotifySync,
474         IN      PLIST_ENTRY     NotifyList,
475         IN      PSTRING         FullTargetName,
476         IN      PUSHORT         FileNamePartLength,
477         IN      ULONG           FilterMatch
478         );
479
480 VOID STDCALL
481 FsRtlNotifyInitializeSync(IN OUT PNOTIFY_SYNC *NotifySync);
482
483 NTSTATUS STDCALL
484 FsRtlNotifyVolumeEvent(IN PFILE_OBJECT FileObject,
485                        IN ULONG EventCode);
486
487 NTSTATUS STDCALL
488 FsRtlOplockFsctrl(IN POPLOCK Oplock,
489                   IN PIRP Irp,
490                   IN ULONG OpenCount);
491
492 BOOLEAN STDCALL
493 FsRtlOplockIsFastIoPossible(IN POPLOCK Oplock);
494
495 BOOLEAN
496 STDCALL
497 FsRtlPrepareMdlWrite (
498         IN      PFILE_OBJECT            FileObject,
499         IN      PLARGE_INTEGER          FileOffset,
500         IN      ULONG                   Length,
501         IN      ULONG                   LockKey,
502         OUT     PMDL                    *MdlChain,
503         OUT     PIO_STATUS_BLOCK        IoStatus
504         );
505 BOOLEAN
506 STDCALL
507 FsRtlPrepareMdlWriteDev (
508         IN      PFILE_OBJECT            FileObject,
509         IN      PLARGE_INTEGER          FileOffset,
510         IN      ULONG                   Length,
511         IN      ULONG                   LockKey,
512         OUT     PMDL                    *MdlChain,
513         OUT     PIO_STATUS_BLOCK        IoStatus,
514         IN      PDEVICE_OBJECT          DeviceObject
515         );
516
517 NTSTATUS STDCALL
518 FsRtlNormalizeNtstatus(IN NTSTATUS NtStatusToNormalize,
519                        IN NTSTATUS NormalizedNtStatus);
520
521 ULONG STDCALL
522 FsRtlNumberOfRunsInLargeMcb(IN PLARGE_MCB Mcb);
523
524 VOID
525 STDCALL
526 FsRtlNumberOfRunsInMcb (
527         DWORD   Unknown0
528         );
529 VOID
530 STDCALL
531 FsRtlPostPagingFileStackOverflow (
532         DWORD   Unknown0,
533         DWORD   Unknown1,
534         DWORD   Unknown2
535         );
536 VOID
537 STDCALL
538 FsRtlPostStackOverflow (
539         DWORD   Unknown0,
540         DWORD   Unknown1,
541         DWORD   Unknown2
542         );
543 BOOLEAN
544 STDCALL
545 FsRtlPrivateLock (
546     IN PFILE_LOCK           FileLock,
547     IN PFILE_OBJECT         FileObject,
548     IN PLARGE_INTEGER       FileOffset,
549     IN PLARGE_INTEGER       Length,
550     IN PEPROCESS            Process,
551     IN ULONG                Key,
552     IN BOOLEAN              FailImmediately,
553     IN BOOLEAN              ExclusiveLock,
554     OUT PIO_STATUS_BLOCK    IoStatus,
555     IN PIRP                 Irp OPTIONAL,
556     IN PVOID                Context,
557     IN BOOLEAN              AlreadySynchronized
558     );
559 NTSTATUS
560 STDCALL
561 FsRtlProcessFileLock (
562     IN PFILE_LOCK   FileLock,
563     IN PIRP         Irp,
564     IN PVOID        Context OPTIONAL
565     );
566
567 NTSTATUS STDCALL
568 FsRtlRegisterUncProvider(IN OUT PHANDLE Handle,
569                          IN PUNICODE_STRING RedirectorDeviceName,
570                          IN BOOLEAN MailslotsSupported);
571
572 VOID STDCALL
573 FsRtlRemoveLargeMcbEntry(IN PLARGE_MCB Mcb,
574                          IN LONGLONG Vbn,
575                          IN LONGLONG SectorCount);
576
577 VOID
578 STDCALL
579 FsRtlRemoveMcbEntry (
580         DWORD   Unknown0,
581         DWORD   Unknown1,
582         DWORD   Unknown2
583         );
584
585 BOOLEAN STDCALL
586 FsRtlSplitLargeMcb(IN PLARGE_MCB Mcb,
587                    IN LONGLONG Vbn,
588                    IN LONGLONG Amount);
589
590 NTSTATUS
591 STDCALL
592 FsRtlSyncVolumes (
593         DWORD   Unknown0,
594         DWORD   Unknown1,
595         DWORD   Unknown2
596         );
597
598 VOID STDCALL
599 FsRtlTruncateLargeMcb(IN PLARGE_MCB Mcb,
600                       IN LONGLONG Vbn);
601
602 VOID
603 STDCALL
604 FsRtlTruncateMcb (
605         DWORD   Unknown0,
606         DWORD   Unknown1
607         );
608 VOID
609 STDCALL
610 FsRtlUninitializeFileLock (
611     IN PFILE_LOCK FileLock
612     );
613
614 VOID STDCALL
615 FsRtlUninitializeLargeMcb(IN PLARGE_MCB Mcb);
616
617 VOID
618 STDCALL
619 FsRtlUninitializeMcb (
620         DWORD   Unknown0
621         );
622
623 VOID STDCALL
624 FsRtlUninitializeOplock(IN POPLOCK Oplock);
625
626 #endif /* __INCLUDE_DDK_FSFUNCS_H */