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