mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 10:04:49 +00:00
173 lines
3.9 KiB
C
173 lines
3.9 KiB
C
/*
|
|
* PROJECT: ReactOS Kernel
|
|
* LICENSE: GPL - See COPYING in the top level directory
|
|
* FILE: ntoskrnl/include/internal/fsrtl.h
|
|
* PURPOSE: Internal header for the File System Runtime Library
|
|
* PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
|
|
*/
|
|
|
|
//
|
|
// Define this if you want debugging support
|
|
//
|
|
#define _FSRTL_DEBUG_ 0x00
|
|
|
|
//
|
|
// These define the Debug Masks Supported
|
|
//
|
|
#define FSRTL_FASTIO_DEBUG 0x01
|
|
#define FSRTL_OPLOCK_DEBUG 0x02
|
|
#define FSRTL_TUNNEL_DEBUG 0x04
|
|
#define FSRTL_MCB_DEBUG 0x08
|
|
#define FSRTL_NAME_DEBUG 0x10
|
|
#define FSRTL_NOTIFY_DEBUG 0x20
|
|
#define FSRTL_FILELOCK_DEBUG 0x40
|
|
#define FSRTL_UNC_DEBUG 0x80
|
|
#define FSRTL_FILTER_DEBUG 0x100
|
|
#define FSRTL_CONTEXT_DEBUG 0x200
|
|
|
|
//
|
|
// Debug/Tracing support
|
|
//
|
|
#if _FSRTL_DEBUG_
|
|
#ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented
|
|
#define FSTRACE DbgPrintEx
|
|
#else
|
|
#define FSTRACE(x, ...) \
|
|
if (x & FsRtlpTraceLevel) DbgPrint(__VA_ARGS__)
|
|
#endif
|
|
#else
|
|
#define FSTRACE(x, ...) DPRINT(__VA_ARGS__)
|
|
#endif
|
|
|
|
//
|
|
// Number of internal ERESOURCE structures allocated for callers to request
|
|
//
|
|
#define FSRTL_MAX_RESOURCES 16
|
|
|
|
//
|
|
// Number of maximum pair count per MCB
|
|
//
|
|
#define MAXIMUM_PAIR_COUNT 15
|
|
|
|
//
|
|
// Notifications flags
|
|
//
|
|
#define WATCH_TREE 0x01
|
|
#define NOTIFY_IMMEDIATELY 0x02
|
|
#define CLEANUP_IN_PROCESS 0x04
|
|
#define NOTIFY_LATER 0x08
|
|
#define WATCH_ROOT 0x10
|
|
#define DELETE_IN_PROCESS 0x20
|
|
|
|
//
|
|
// Internal structure for NOTIFY_SYNC
|
|
//
|
|
typedef struct _REAL_NOTIFY_SYNC
|
|
{
|
|
FAST_MUTEX FastMutex;
|
|
ULONG_PTR OwningThread;
|
|
ULONG OwnerCount;
|
|
} REAL_NOTIFY_SYNC, * PREAL_NOTIFY_SYNC;
|
|
|
|
//
|
|
// Internal structure for notifications
|
|
//
|
|
typedef struct _NOTIFY_CHANGE
|
|
{
|
|
PREAL_NOTIFY_SYNC NotifySync;
|
|
PVOID FsContext;
|
|
PVOID StreamID;
|
|
PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback;
|
|
PSECURITY_SUBJECT_CONTEXT SubjectContext;
|
|
PSTRING FullDirectoryName;
|
|
LIST_ENTRY NotifyList;
|
|
LIST_ENTRY NotifyIrps;
|
|
PFILTER_REPORT_CHANGE FilterCallback;
|
|
USHORT Flags;
|
|
UCHAR CharacterSize;
|
|
ULONG CompletionFilter;
|
|
PVOID AllocatedBuffer;
|
|
PVOID Buffer;
|
|
ULONG BufferLength;
|
|
ULONG ThisBufferLength;
|
|
ULONG DataLength;
|
|
ULONG LastEntry;
|
|
ULONG ReferenceCount;
|
|
PEPROCESS OwningProcess;
|
|
} NOTIFY_CHANGE, *PNOTIFY_CHANGE;
|
|
|
|
//
|
|
// Internal structure for MCB Mapping pointer
|
|
//
|
|
typedef struct _INT_MAPPING
|
|
{
|
|
VBN Vbn;
|
|
LBN Lbn;
|
|
} INT_MAPPING, *PINT_MAPPING;
|
|
|
|
//
|
|
// Initialization Routines
|
|
//
|
|
CODE_SEG("INIT")
|
|
VOID
|
|
NTAPI
|
|
FsRtlInitializeLargeMcbs(
|
|
VOID
|
|
);
|
|
|
|
CODE_SEG("INIT")
|
|
VOID
|
|
NTAPI
|
|
FsRtlInitializeTunnels(
|
|
VOID
|
|
);
|
|
|
|
//
|
|
// File contexts Routines
|
|
//
|
|
VOID
|
|
NTAPI
|
|
FsRtlPTeardownPerFileObjectContexts(
|
|
IN PFILE_OBJECT FileObject
|
|
);
|
|
|
|
CODE_SEG("INIT")
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlInitSystem(
|
|
VOID
|
|
);
|
|
|
|
//
|
|
// Global data inside the File System Runtime Library
|
|
//
|
|
extern PERESOURCE FsRtlPagingIoResources;
|
|
extern PAGED_LOOKASIDE_LIST FsRtlFileLockLookasideList;
|
|
|
|
//
|
|
// File locking routine
|
|
//
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlAcquireToCreateMappedSection(_In_ PFILE_OBJECT FileObject,
|
|
_In_ ULONG SectionPageProtection);
|
|
|
|
VOID
|
|
NTAPI
|
|
FsRtlReleaseFileForCcFlush(IN PFILE_OBJECT FileObject);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlAcquireFileForCcFlushEx(IN PFILE_OBJECT FileObject);
|
|
|
|
_Check_return_
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlAcquireFileForModWriteEx(_In_ PFILE_OBJECT FileObject,
|
|
_In_ PLARGE_INTEGER EndingOffset,
|
|
_Outptr_result_maybenull_ PERESOURCE *ResourceToRelease);
|
|
|
|
VOID
|
|
NTAPI
|
|
FsRtlReleaseFileForModWrite(IN PFILE_OBJECT FileObject,
|
|
IN PERESOURCE ResourceToRelease);
|