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