Filled in prototype for: FsRtlBalanceReads(), FsRtlDissectName()
[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 NTSTATUS
85 STDCALL
86 FsRtlBalanceReads (
87         IN PDEVICE_OBJECT TargetDevice
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         IN UNICODE_STRING       Path,
159         OUT PUNICODE_STRING     FirstName,
160         OUT PUNICODE_STRING     RemainingName
161         );
162 BOOLEAN
163 STDCALL
164 FsRtlDoesDbcsContainWildCards (
165         IN      DWORD   Unknown0
166         );
167 BOOLEAN
168 STDCALL
169 FsRtlDoesNameContainWildCards (
170         IN      PUNICODE_STRING Name
171         );
172 BOOLEAN
173 STDCALL
174 FsRtlFastCheckLockForRead (
175         IN      PFILE_LOCK              FileLock,
176         IN      PLARGE_INTEGER          FileOffset,
177         IN      PLARGE_INTEGER          Length,
178         IN      ULONG                   Key,
179         IN      PFILE_OBJECT            FileObject,
180         IN      PEPROCESS               Process
181         );
182 BOOLEAN
183 STDCALL
184 FsRtlFastCheckLockForWrite (
185         IN      PFILE_LOCK              FileLock,
186         IN      PLARGE_INTEGER          FileOffset,
187         IN      PLARGE_INTEGER          Length,
188         IN      ULONG                   Key,
189         IN      PFILE_OBJECT            FileObject,
190         IN      PEPROCESS               Process
191         );
192 NTSTATUS
193 STDCALL
194 FsRtlFastUnlockAll (
195         IN      PFILE_LOCK           FileLock,
196         IN      PFILE_OBJECT         FileObject,
197         IN      PEPROCESS            Process,
198         IN      PVOID                Context OPTIONAL
199         );
200 NTSTATUS
201 STDCALL
202 FsRtlFastUnlockAllByKey (
203         IN      PFILE_LOCK      FileLock,
204         IN      PFILE_OBJECT    FileObject,
205         IN      PEPROCESS       Process,
206         IN      DWORD           Key,
207         IN      PVOID           Context OPTIONAL
208         );
209 NTSTATUS
210 STDCALL
211 FsRtlFastUnlockSingle (
212     IN PFILE_LOCK           FileLock,
213     IN PFILE_OBJECT         FileObject,
214     IN PLARGE_INTEGER       FileOffset,
215     IN PLARGE_INTEGER       Length,
216     IN PEPROCESS            Process,
217     IN ULONG                Key,
218     IN PVOID                Context OPTIONAL,
219     IN BOOLEAN              AlreadySynchronized
220     );
221 BOOLEAN
222 STDCALL
223 FsRtlFindInTunnelCache (
224     IN PTUNNEL          Cache,
225     IN ULONGLONG        DirectoryKey,
226     IN PUNICODE_STRING  Name,
227     OUT PUNICODE_STRING ShortName,
228     OUT PUNICODE_STRING LongName,
229     IN OUT PULONG       DataLength,
230     OUT PVOID           Data
231     );
232 NTSTATUS
233 STDCALL
234 FsRtlGetFileSize (
235         IN      PFILE_OBJECT    FileObject,
236         IN OUT  PLARGE_INTEGER  FileSize
237         );
238 PFILE_LOCK_INFO
239 STDCALL
240 FsRtlGetNextFileLock (
241         IN      PFILE_LOCK      FileLock,
242         IN      BOOLEAN         Restart
243         );
244
245 BOOLEAN STDCALL
246 FsRtlGetNextLargeMcbEntry(IN PLARGE_MCB Mcb,
247                           IN ULONG RunIndex,
248                           OUT PLONGLONG Vbn,
249                           OUT PLONGLONG Lbn,
250                           OUT PLONGLONG SectorCount);
251
252 VOID
253 STDCALL
254 FsRtlGetNextMcbEntry (
255         DWORD   Unknown0,
256         DWORD   Unknown1,
257         DWORD   Unknown2,
258         DWORD   Unknown3,
259         DWORD   Unknown4
260         );
261 #define FsRtlEnterFileSystem    KeEnterCriticalRegion
262 #define FsRtlExitFileSystem     KeLeaveCriticalRegion
263 VOID
264 STDCALL
265 FsRtlInitializeFileLock (
266         IN PFILE_LOCK                   FileLock,
267         IN PCOMPLETE_LOCK_IRP_ROUTINE   CompleteLockIrpRoutine OPTIONAL,
268         IN PUNLOCK_ROUTINE              UnlockRoutine OPTIONAL
269         );
270
271 VOID STDCALL
272 FsRtlInitializeLargeMcb(IN PLARGE_MCB Mcb,
273                         IN POOL_TYPE PoolType);
274
275 VOID
276 STDCALL
277 FsRtlInitializeMcb (
278         DWORD   Unknown0,
279         DWORD   Unknown1
280         );
281
282 VOID STDCALL
283 FsRtlInitializeOplock(IN OUT POPLOCK Oplock);
284
285 VOID
286 STDCALL
287 FsRtlInitializeTunnelCache (
288     IN PTUNNEL Cache
289     );
290 BOOLEAN
291 STDCALL
292 FsRtlIsDbcsInExpression (
293         DWORD   Unknown0,
294         DWORD   Unknown1
295         );
296 BOOLEAN
297 STDCALL
298 FsRtlIsFatDbcsLegal (
299     IN ANSI_STRING DbcsName,
300     IN BOOLEAN WildCardsPermissible,
301     IN BOOLEAN PathNamePermissible,
302     IN BOOLEAN LeadingBackslashPermissible
303     );
304 BOOLEAN
305 STDCALL
306 FsRtlIsHpfsDbcsLegal (
307         DWORD   Unknown0,
308         DWORD   Unknown1,
309         DWORD   Unknown2,
310         DWORD   Unknown3,
311         DWORD   Unknown4
312         );
313 BOOLEAN
314 STDCALL
315 FsRtlIsNameInExpression (
316         IN      PUNICODE_STRING Expression,
317         IN      PUNICODE_STRING Name,
318         IN      BOOLEAN         IgnoreCase,
319         IN      PWCHAR          UpcaseTable     OPTIONAL
320         );
321
322 BOOLEAN STDCALL
323 FsRtlIsNtstatusExpected(IN NTSTATUS NtStatus);
324
325 BOOLEAN STDCALL
326 FsRtlIsTotalDeviceFailure(IN NTSTATUS NtStatus);
327
328 /* Set as flags in FsRtlLegalAnsiCharacterArray character-array */
329 #define FSRTL_FAT_LEGAL         0x01
330 #define FSRTL_HPFS_LEGAL        0x02
331 #define FSRTL_NTFS_LEGAL        0x04
332 #define FSRTL_WILD_CHARACTER    0x08
333 #define FSRTL_OLE_LEGAL         0x10
334 #define FSRTL_NTFS_STREAM_LEGAL (FSRTL_NTFS_LEGAL | FSRTL_OLE_LEGAL)
335
336 #define FsRtlIsUnicodeCharacterWild(C) ( \
337     (((C) >= 0x40) ? \
338     FALSE : \
339     FlagOn((*FsRtlLegalAnsiCharacterArray)[(C)], FSRTL_WILD_CHARACTER )) \
340     )
341
342 BOOLEAN STDCALL
343 FsRtlLookupLargeMcbEntry(IN PLARGE_MCB Mcb,
344                          IN LONGLONG Vbn,
345                          OUT PLONGLONG Lbn OPTIONAL,
346                          OUT PLONGLONG SectorCountFromLbn OPTIONAL,
347                          OUT PLONGLONG StartingLbn OPTIONAL,
348                          OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
349                          OUT PULONG Index OPTIONAL);
350
351 BOOLEAN STDCALL
352 FsRtlLookupLastLargeMcbEntry(IN PLARGE_MCB Mcb,
353                              OUT PLONGLONG Vbn,
354                              OUT PLONGLONG Lbn);
355
356 VOID
357 STDCALL
358 FsRtlLookupLastMcbEntry (
359         DWORD   Unknown0,
360         DWORD   Unknown1,
361         DWORD   Unknown2
362         );
363 VOID
364 STDCALL
365 FsRtlLookupMcbEntry (
366         DWORD   Unknown0,
367         DWORD   Unknown1,
368         DWORD   Unknown2,
369         DWORD   Unknown3,
370         DWORD   Unknown4
371         );
372 BOOLEAN
373 STDCALL
374 FsRtlMdlRead (
375         IN      PFILE_OBJECT            FileObject,
376         IN      PLARGE_INTEGER          FileOffset,
377         IN      ULONG                   Length,
378         IN      ULONG                   LockKey,
379         OUT     PMDL                    *MdlChain,
380         OUT     PIO_STATUS_BLOCK        IoStatus
381         );
382 BOOLEAN
383 STDCALL
384 FsRtlMdlReadComplete (
385         IN      PFILE_OBJECT    FileObject,
386         IN OUT  PMDL            MdlChain
387         );
388 BOOLEAN
389 STDCALL
390 FsRtlMdlReadCompleteDev (
391         IN      PFILE_OBJECT    FileObject,
392         IN      PMDL            MdlChain,
393         IN      PDEVICE_OBJECT  DeviceObject
394         );
395 BOOLEAN
396 STDCALL
397 FsRtlMdlReadDev (
398         IN      PFILE_OBJECT            FileObject,
399         IN      PLARGE_INTEGER          FileOffset,
400         IN      ULONG                   Length,
401         IN      ULONG                   LockKey,
402         OUT     PMDL                    *MdlChain,
403         OUT     PIO_STATUS_BLOCK        IoStatus,
404         IN      PDEVICE_OBJECT          DeviceObject
405         );
406 BOOLEAN
407 STDCALL
408 FsRtlMdlWriteComplete (
409         IN      PFILE_OBJECT    FileObject,
410         IN      PLARGE_INTEGER  FileOffset,
411         IN      PMDL            MdlChain
412         );
413 BOOLEAN
414 STDCALL
415 FsRtlMdlWriteCompleteDev (
416         IN      PFILE_OBJECT    FileObject,
417         IN      PLARGE_INTEGER  FileOffset,
418         IN      PMDL            MdlChain,
419         IN      PDEVICE_OBJECT  DeviceObject
420         );
421 VOID
422 STDCALL
423 FsRtlNotifyChangeDirectory (
424         IN      PNOTIFY_SYNC    NotifySync,
425         IN      PVOID           FsContext,
426         IN      PSTRING         FullDirectoryName,
427         IN      PLIST_ENTRY     NotifyList,
428         IN      BOOLEAN         WatchTree,
429         IN      ULONG           CompletionFilter,
430         IN      PIRP            NotifyIrp
431         );
432 VOID
433 STDCALL
434 FsRtlNotifyCleanup (
435         IN      PNOTIFY_SYNC    NotifySync,
436         IN      PLIST_ENTRY     NotifyList,
437         IN      PVOID           FsContext
438         );
439 typedef
440 BOOLEAN (*PCHECK_FOR_TRAVERSE_ACCESS) (
441         IN      PVOID                           NotifyContext,
442         IN      PVOID                           TargetContext,
443         IN      PSECURITY_SUBJECT_CONTEXT       SubjectContext
444         );
445 VOID
446 STDCALL
447 FsRtlNotifyFullChangeDirectory (
448         IN      PNOTIFY_SYNC                    NotifySync,
449         IN      PLIST_ENTRY                     NotifyList,
450         IN      PVOID                           FsContext,
451         IN      PSTRING                         FullDirectoryName,
452         IN      BOOLEAN                         WatchTree,
453         IN      BOOLEAN                         IgnoreBuffer,
454         IN      ULONG                           CompletionFilter,
455         IN      PIRP                            NotifyIrp,
456         IN      PCHECK_FOR_TRAVERSE_ACCESS      TraverseCallback        OPTIONAL,
457         IN      PSECURITY_SUBJECT_CONTEXT       SubjectContext          OPTIONAL
458         );
459 VOID
460 STDCALL
461 FsRtlNotifyFullReportChange (
462         IN      PNOTIFY_SYNC    NotifySync,
463         IN      PLIST_ENTRY     NotifyList,
464         IN      PSTRING         FullTargetName,
465         IN      USHORT          TargetNameOffset,
466         IN      PSTRING         StreamName OPTIONAL,
467         IN      PSTRING         NormalizedParentName    OPTIONAL,
468         IN      ULONG           FilterMatch,
469         IN      ULONG           Action,
470         IN      PVOID           TargetContext
471         );
472 VOID
473 STDCALL
474 FsRtlNotifyUninitializeSync (
475         IN OUT  PNOTIFY_SYNC    * NotifySync
476         );
477 VOID
478 STDCALL
479 FsRtlNotifyReportChange (
480         IN      PNOTIFY_SYNC    NotifySync,
481         IN      PLIST_ENTRY     NotifyList,
482         IN      PSTRING         FullTargetName,
483         IN      PUSHORT         FileNamePartLength,
484         IN      ULONG           FilterMatch
485         );
486
487 VOID STDCALL
488 FsRtlNotifyInitializeSync(IN OUT PNOTIFY_SYNC *NotifySync);
489
490 NTSTATUS STDCALL
491 FsRtlNotifyVolumeEvent(IN PFILE_OBJECT FileObject,
492                        IN ULONG EventCode);
493
494 NTSTATUS STDCALL
495 FsRtlOplockFsctrl(IN POPLOCK Oplock,
496                   IN PIRP Irp,
497                   IN ULONG OpenCount);
498
499 BOOLEAN STDCALL
500 FsRtlOplockIsFastIoPossible(IN POPLOCK Oplock);
501
502 BOOLEAN
503 STDCALL
504 FsRtlPrepareMdlWrite (
505         IN      PFILE_OBJECT            FileObject,
506         IN      PLARGE_INTEGER          FileOffset,
507         IN      ULONG                   Length,
508         IN      ULONG                   LockKey,
509         OUT     PMDL                    *MdlChain,
510         OUT     PIO_STATUS_BLOCK        IoStatus
511         );
512 BOOLEAN
513 STDCALL
514 FsRtlPrepareMdlWriteDev (
515         IN      PFILE_OBJECT            FileObject,
516         IN      PLARGE_INTEGER          FileOffset,
517         IN      ULONG                   Length,
518         IN      ULONG                   LockKey,
519         OUT     PMDL                    *MdlChain,
520         OUT     PIO_STATUS_BLOCK        IoStatus,
521         IN      PDEVICE_OBJECT          DeviceObject
522         );
523
524 NTSTATUS STDCALL
525 FsRtlNormalizeNtstatus(IN NTSTATUS NtStatusToNormalize,
526                        IN NTSTATUS NormalizedNtStatus);
527
528 ULONG STDCALL
529 FsRtlNumberOfRunsInLargeMcb(IN PLARGE_MCB Mcb);
530
531 VOID
532 STDCALL
533 FsRtlNumberOfRunsInMcb (
534         DWORD   Unknown0
535         );
536 VOID
537 STDCALL
538 FsRtlPostPagingFileStackOverflow (
539         DWORD   Unknown0,
540         DWORD   Unknown1,
541         DWORD   Unknown2
542         );
543 VOID
544 STDCALL
545 FsRtlPostStackOverflow (
546         DWORD   Unknown0,
547         DWORD   Unknown1,
548         DWORD   Unknown2
549         );
550 BOOLEAN
551 STDCALL
552 FsRtlPrivateLock (
553     IN PFILE_LOCK           FileLock,
554     IN PFILE_OBJECT         FileObject,
555     IN PLARGE_INTEGER       FileOffset,
556     IN PLARGE_INTEGER       Length,
557     IN PEPROCESS            Process,
558     IN ULONG                Key,
559     IN BOOLEAN              FailImmediately,
560     IN BOOLEAN              ExclusiveLock,
561     OUT PIO_STATUS_BLOCK    IoStatus,
562     IN PIRP                 Irp OPTIONAL,
563     IN PVOID                Context,
564     IN BOOLEAN              AlreadySynchronized
565     );
566 NTSTATUS
567 STDCALL
568 FsRtlProcessFileLock (
569     IN PFILE_LOCK   FileLock,
570     IN PIRP         Irp,
571     IN PVOID        Context OPTIONAL
572     );
573
574 NTSTATUS STDCALL
575 FsRtlRegisterUncProvider(IN OUT PHANDLE Handle,
576                          IN PUNICODE_STRING RedirectorDeviceName,
577                          IN BOOLEAN MailslotsSupported);
578
579 VOID STDCALL
580 FsRtlRemoveLargeMcbEntry(IN PLARGE_MCB Mcb,
581                          IN LONGLONG Vbn,
582                          IN LONGLONG SectorCount);
583
584 VOID
585 STDCALL
586 FsRtlRemoveMcbEntry (
587         DWORD   Unknown0,
588         DWORD   Unknown1,
589         DWORD   Unknown2
590         );
591
592 BOOLEAN STDCALL
593 FsRtlSplitLargeMcb(IN PLARGE_MCB Mcb,
594                    IN LONGLONG Vbn,
595                    IN LONGLONG Amount);
596
597 NTSTATUS
598 STDCALL
599 FsRtlSyncVolumes (
600         DWORD   Unknown0,
601         DWORD   Unknown1,
602         DWORD   Unknown2
603         );
604
605 VOID STDCALL
606 FsRtlTruncateLargeMcb(IN PLARGE_MCB Mcb,
607                       IN LONGLONG Vbn);
608
609 VOID
610 STDCALL
611 FsRtlTruncateMcb (
612         DWORD   Unknown0,
613         DWORD   Unknown1
614         );
615 VOID
616 STDCALL
617 FsRtlUninitializeFileLock (
618     IN PFILE_LOCK FileLock
619     );
620
621 VOID STDCALL
622 FsRtlUninitializeLargeMcb(IN PLARGE_MCB Mcb);
623
624 VOID
625 STDCALL
626 FsRtlUninitializeMcb (
627         DWORD   Unknown0
628         );
629
630 VOID STDCALL
631 FsRtlUninitializeOplock(IN POPLOCK Oplock);
632
633 #endif /* __INCLUDE_DDK_FSFUNCS_H */