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