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