mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 07:56:59 +00:00
[NTIFS]
- Group related definitions - Add FSRTL_AUXILIARY_BUFFER, FSRTL_AUXILIARY_FLAG_DEALLOCATE and several FsRtl* - Update FILE_LOCK - Missed FSRTL_COMMON_FCB_HEADER in my previous commit svn path=/branches/header-work/; revision=46132
This commit is contained in:
parent
cff140ca5c
commit
d663a6400c
1 changed files with 342 additions and 334 deletions
|
@ -6570,6 +6570,21 @@ typedef enum _FAST_IO_POSSIBLE {
|
||||||
FastIoIsQuestionable
|
FastIoIsQuestionable
|
||||||
} FAST_IO_POSSIBLE;
|
} FAST_IO_POSSIBLE;
|
||||||
|
|
||||||
|
typedef struct _FSRTL_COMMON_FCB_HEADER {
|
||||||
|
CSHORT NodeTypeCode;
|
||||||
|
CSHORT NodeByteSize;
|
||||||
|
UCHAR Flags;
|
||||||
|
UCHAR IsFastIoPossible;
|
||||||
|
UCHAR Flags2;
|
||||||
|
UCHAR Reserved:4;
|
||||||
|
UCHAR Version:4;
|
||||||
|
PERESOURCE Resource;
|
||||||
|
PERESOURCE PagingIoResource;
|
||||||
|
LARGE_INTEGER AllocationSize;
|
||||||
|
LARGE_INTEGER FileSize;
|
||||||
|
LARGE_INTEGER ValidDataLength;
|
||||||
|
} FSRTL_COMMON_FCB_HEADER, *PFSRTL_COMMON_FCB_HEADER;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
typedef struct _FSRTL_ADVANCED_FCB_HEADER:FSRTL_COMMON_FCB_HEADER {
|
typedef struct _FSRTL_ADVANCED_FCB_HEADER:FSRTL_COMMON_FCB_HEADER {
|
||||||
#else /* __cplusplus */
|
#else /* __cplusplus */
|
||||||
|
@ -6614,6 +6629,333 @@ typedef struct _EOF_WAIT_BLOCK {
|
||||||
KEVENT Event;
|
KEVENT Event;
|
||||||
} EOF_WAIT_BLOCK, *PEOF_WAIT_BLOCK;
|
} EOF_WAIT_BLOCK, *PEOF_WAIT_BLOCK;
|
||||||
|
|
||||||
|
#if (NTDDI_VERSION >= NTDDI_WIN2K)
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
|
FsRtlCopyRead(
|
||||||
|
IN PFILE_OBJECT FileObject,
|
||||||
|
IN PLARGE_INTEGER FileOffset,
|
||||||
|
IN ULONG Length,
|
||||||
|
IN BOOLEAN Wait,
|
||||||
|
IN ULONG LockKey,
|
||||||
|
OUT PVOID Buffer,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatus,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
|
FsRtlCopyWrite(
|
||||||
|
IN PFILE_OBJECT FileObject,
|
||||||
|
IN PLARGE_INTEGER FileOffset,
|
||||||
|
IN ULONG Length,
|
||||||
|
IN BOOLEAN Wait,
|
||||||
|
IN ULONG LockKey,
|
||||||
|
IN PVOID Buffer,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatus,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
|
FsRtlMdlReadDev(
|
||||||
|
IN PFILE_OBJECT FileObject,
|
||||||
|
IN PLARGE_INTEGER FileOffset,
|
||||||
|
IN ULONG Length,
|
||||||
|
IN ULONG LockKey,
|
||||||
|
OUT PMDL *MdlChain,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatus,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject OPTIONAL);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
|
FsRtlMdlReadCompleteDev(
|
||||||
|
IN PFILE_OBJECT FileObject,
|
||||||
|
IN PMDL MdlChain,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject OPTIONAL);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
|
FsRtlPrepareMdlWriteDev(
|
||||||
|
IN PFILE_OBJECT FileObject,
|
||||||
|
IN PLARGE_INTEGER FileOffset,
|
||||||
|
IN ULONG Length,
|
||||||
|
IN ULONG LockKey,
|
||||||
|
OUT PMDL *MdlChain,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatus,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
|
FsRtlMdlWriteCompleteDev(
|
||||||
|
IN PFILE_OBJECT FileObject,
|
||||||
|
IN PLARGE_INTEGER FileOffset,
|
||||||
|
IN PMDL MdlChain,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
FsRtlAcquireFileExclusive(
|
||||||
|
IN PFILE_OBJECT FileObject);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
FsRtlReleaseFile(
|
||||||
|
IN PFILE_OBJECT FileObject);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
FsRtlGetFileSize(
|
||||||
|
IN PFILE_OBJECT FileObject,
|
||||||
|
OUT PLARGE_INTEGER FileSize);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
|
FsRtlIsTotalDeviceFailure(
|
||||||
|
IN NTSTATUS Status);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
PFILE_LOCK
|
||||||
|
NTAPI
|
||||||
|
FsRtlAllocateFileLock(
|
||||||
|
IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
|
||||||
|
IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
FsRtlFreeFileLock(
|
||||||
|
IN PFILE_LOCK FileLock);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
FsRtlInitializeFileLock(
|
||||||
|
IN PFILE_LOCK FileLock,
|
||||||
|
IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
|
||||||
|
IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
FsRtlUninitializeFileLock(
|
||||||
|
IN PFILE_LOCK FileLock);
|
||||||
|
|
||||||
|
/*
|
||||||
|
FsRtlProcessFileLock:
|
||||||
|
|
||||||
|
ret:
|
||||||
|
-STATUS_INVALID_DEVICE_REQUEST
|
||||||
|
-STATUS_RANGE_NOT_LOCKED from unlock routines.
|
||||||
|
-STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
|
||||||
|
(redirected IoStatus->Status).
|
||||||
|
|
||||||
|
Internals:
|
||||||
|
-switch ( Irp->CurrentStackLocation->MinorFunction )
|
||||||
|
lock: return FsRtlPrivateLock;
|
||||||
|
unlocksingle: return FsRtlFastUnlockSingle;
|
||||||
|
unlockall: return FsRtlFastUnlockAll;
|
||||||
|
unlockallbykey: return FsRtlFastUnlockAllByKey;
|
||||||
|
default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
|
||||||
|
return STATUS_INVALID_DEVICE_REQUEST;
|
||||||
|
|
||||||
|
-'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
|
||||||
|
-'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
|
||||||
|
*/
|
||||||
|
NTKERNELAPI
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
FsRtlProcessFileLock(
|
||||||
|
IN PFILE_LOCK FileLock,
|
||||||
|
IN PIRP Irp,
|
||||||
|
IN PVOID Context OPTIONAL);
|
||||||
|
|
||||||
|
/*
|
||||||
|
FsRtlCheckLockForReadAccess:
|
||||||
|
|
||||||
|
All this really does is pick out the lock parameters from the irp (io stack
|
||||||
|
location?), get IoGetRequestorProcess, and pass values on to
|
||||||
|
FsRtlFastCheckLockForRead.
|
||||||
|
*/
|
||||||
|
NTKERNELAPI
|
||||||
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
|
FsRtlCheckLockForReadAccess(
|
||||||
|
IN PFILE_LOCK FileLock,
|
||||||
|
IN PIRP Irp);
|
||||||
|
|
||||||
|
/*
|
||||||
|
FsRtlCheckLockForWriteAccess:
|
||||||
|
|
||||||
|
All this really does is pick out the lock parameters from the irp (io stack
|
||||||
|
location?), get IoGetRequestorProcess, and pass values on to
|
||||||
|
FsRtlFastCheckLockForWrite.
|
||||||
|
*/
|
||||||
|
NTKERNELAPI
|
||||||
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
|
FsRtlCheckLockForWriteAccess(
|
||||||
|
IN PFILE_LOCK FileLock,
|
||||||
|
IN PIRP Irp);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
|
FsRtlFastCheckLockForRead(
|
||||||
|
IN PFILE_LOCK FileLock,
|
||||||
|
IN PLARGE_INTEGER FileOffset,
|
||||||
|
IN PLARGE_INTEGER Length,
|
||||||
|
IN ULONG Key,
|
||||||
|
IN PFILE_OBJECT FileObject,
|
||||||
|
IN PVOID Process);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
|
FsRtlFastCheckLockForWrite(
|
||||||
|
IN PFILE_LOCK FileLock,
|
||||||
|
IN PLARGE_INTEGER FileOffset,
|
||||||
|
IN PLARGE_INTEGER Length,
|
||||||
|
IN ULONG Key,
|
||||||
|
IN PFILE_OBJECT FileObject,
|
||||||
|
IN PVOID Process);
|
||||||
|
|
||||||
|
/*
|
||||||
|
FsRtlGetNextFileLock:
|
||||||
|
|
||||||
|
ret: NULL if no more locks
|
||||||
|
|
||||||
|
Internals:
|
||||||
|
FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
|
||||||
|
FileLock->LastReturnedLock as storage.
|
||||||
|
LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
|
||||||
|
list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
|
||||||
|
calls with Restart = FALSE.
|
||||||
|
*/
|
||||||
|
NTKERNELAPI
|
||||||
|
PFILE_LOCK_INFO
|
||||||
|
NTAPI
|
||||||
|
FsRtlGetNextFileLock(
|
||||||
|
IN PFILE_LOCK FileLock,
|
||||||
|
IN BOOLEAN Restart);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
FsRtlFastUnlockSingle(
|
||||||
|
IN PFILE_LOCK FileLock,
|
||||||
|
IN PFILE_OBJECT FileObject,
|
||||||
|
IN PLARGE_INTEGER FileOffset,
|
||||||
|
IN PLARGE_INTEGER Length,
|
||||||
|
IN PEPROCESS Process,
|
||||||
|
IN ULONG Key,
|
||||||
|
IN PVOID Context OPTIONAL,
|
||||||
|
IN BOOLEAN AlreadySynchronized);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
FsRtlFastUnlockAll(
|
||||||
|
IN PFILE_LOCK FileLock,
|
||||||
|
IN PFILE_OBJECT FileObject,
|
||||||
|
IN PEPROCESS Process,
|
||||||
|
IN PVOID Context OPTIONAL);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
FsRtlFastUnlockAllByKey(
|
||||||
|
IN PFILE_LOCK FileLock,
|
||||||
|
IN PFILE_OBJECT FileObject,
|
||||||
|
IN PEPROCESS Process,
|
||||||
|
IN ULONG Key,
|
||||||
|
IN PVOID Context OPTIONAL);
|
||||||
|
|
||||||
|
/*
|
||||||
|
FsRtlPrivateLock:
|
||||||
|
|
||||||
|
ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
|
||||||
|
|
||||||
|
Internals:
|
||||||
|
-Calls IoCompleteRequest if Irp
|
||||||
|
-Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
|
||||||
|
*/
|
||||||
|
NTKERNELAPI
|
||||||
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
|
FsRtlPrivateLock(
|
||||||
|
IN PFILE_LOCK FileLock,
|
||||||
|
IN PFILE_OBJECT FileObject,
|
||||||
|
IN PLARGE_INTEGER FileOffset,
|
||||||
|
IN PLARGE_INTEGER Length,
|
||||||
|
IN PEPROCESS Process,
|
||||||
|
IN ULONG Key,
|
||||||
|
IN BOOLEAN FailImmediately,
|
||||||
|
IN BOOLEAN ExclusiveLock,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatus,
|
||||||
|
IN PIRP Irp OPTIONAL,
|
||||||
|
IN PVOID Context,
|
||||||
|
IN BOOLEAN AlreadySynchronized);
|
||||||
|
|
||||||
|
#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
|
||||||
|
|
||||||
|
#if (NTDDI_VERSION >= NTDDI_WIN7)
|
||||||
|
NTKERNELAPI
|
||||||
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
|
FsRtlAreThereCurrentOrInProgressFileLocks(
|
||||||
|
IN PFILE_LOCK FileLock);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct _FSRTL_AUXILIARY_BUFFER {
|
||||||
|
PVOID Buffer;
|
||||||
|
ULONG Length;
|
||||||
|
ULONG Flags;
|
||||||
|
PMDL Mdl;
|
||||||
|
} FSRTL_AUXILIARY_BUFFER, *PFSRTL_AUXILIARY_BUFFER;
|
||||||
|
|
||||||
|
#define FSRTL_AUXILIARY_FLAG_DEALLOCATE 0x00000001
|
||||||
|
|
||||||
|
typedef struct _FILE_LOCK_INFO {
|
||||||
|
LARGE_INTEGER StartingByte;
|
||||||
|
LARGE_INTEGER Length;
|
||||||
|
BOOLEAN ExclusiveLock;
|
||||||
|
ULONG Key;
|
||||||
|
PFILE_OBJECT FileObject;
|
||||||
|
PVOID ProcessId;
|
||||||
|
LARGE_INTEGER EndingByte;
|
||||||
|
} FILE_LOCK_INFO, *PFILE_LOCK_INFO;
|
||||||
|
|
||||||
|
typedef NTSTATUS
|
||||||
|
(NTAPI *PCOMPLETE_LOCK_IRP_ROUTINE) (
|
||||||
|
IN PVOID Context,
|
||||||
|
IN PIRP Irp);
|
||||||
|
|
||||||
|
typedef VOID
|
||||||
|
(NTAPI *PUNLOCK_ROUTINE) (
|
||||||
|
IN PVOID Context,
|
||||||
|
IN PFILE_LOCK_INFO FileLockInfo);
|
||||||
|
|
||||||
|
typedef struct _FILE_LOCK {
|
||||||
|
PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine;
|
||||||
|
PUNLOCK_ROUTINE UnlockRoutine;
|
||||||
|
BOOLEAN FastIoIsQuestionable;
|
||||||
|
BOOLEAN SpareC[3];
|
||||||
|
PVOID LockInformation;
|
||||||
|
FILE_LOCK_INFO LastReturnedLockInfo;
|
||||||
|
PVOID LastReturnedLock;
|
||||||
|
LONG volatile LockRequestsInProgress;
|
||||||
|
} FILE_LOCK, *PFILE_LOCK;
|
||||||
|
|
||||||
#pragma pack(push,4)
|
#pragma pack(push,4)
|
||||||
|
|
||||||
#ifndef VER_PRODUCTBUILD
|
#ifndef VER_PRODUCTBUILD
|
||||||
|
@ -6883,17 +7225,6 @@ typedef struct _FILE_FS_OBJECTID_INFORMATION
|
||||||
UCHAR ExtendedInfo[48];
|
UCHAR ExtendedInfo[48];
|
||||||
} FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;
|
} FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;
|
||||||
|
|
||||||
typedef struct _FILE_LOCK_INFO
|
|
||||||
{
|
|
||||||
LARGE_INTEGER StartingByte;
|
|
||||||
LARGE_INTEGER Length;
|
|
||||||
BOOLEAN ExclusiveLock;
|
|
||||||
ULONG Key;
|
|
||||||
PFILE_OBJECT FileObject;
|
|
||||||
PVOID ProcessId;
|
|
||||||
LARGE_INTEGER EndingByte;
|
|
||||||
} FILE_LOCK_INFO, *PFILE_LOCK_INFO;
|
|
||||||
|
|
||||||
/* raw internal file lock struct returned from FsRtlGetNextFileLock */
|
/* raw internal file lock struct returned from FsRtlGetNextFileLock */
|
||||||
typedef struct _FILE_SHARED_LOCK_ENTRY {
|
typedef struct _FILE_SHARED_LOCK_ENTRY {
|
||||||
PVOID Unknown1;
|
PVOID Unknown1;
|
||||||
|
@ -6909,26 +7240,6 @@ typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY {
|
||||||
FILE_LOCK_INFO FileLock;
|
FILE_LOCK_INFO FileLock;
|
||||||
} FILE_EXCLUSIVE_LOCK_ENTRY, *PFILE_EXCLUSIVE_LOCK_ENTRY;
|
} FILE_EXCLUSIVE_LOCK_ENTRY, *PFILE_EXCLUSIVE_LOCK_ENTRY;
|
||||||
|
|
||||||
typedef NTSTATUS (NTAPI *PCOMPLETE_LOCK_IRP_ROUTINE) (
|
|
||||||
IN PVOID Context,
|
|
||||||
IN PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
typedef VOID (NTAPI *PUNLOCK_ROUTINE) (
|
|
||||||
IN PVOID Context,
|
|
||||||
IN PFILE_LOCK_INFO FileLockInfo
|
|
||||||
);
|
|
||||||
|
|
||||||
typedef struct _FILE_LOCK {
|
|
||||||
PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine;
|
|
||||||
PUNLOCK_ROUTINE UnlockRoutine;
|
|
||||||
BOOLEAN FastIoIsQuestionable;
|
|
||||||
BOOLEAN Pad[3];
|
|
||||||
PVOID LockInformation;
|
|
||||||
FILE_LOCK_INFO LastReturnedLockInfo;
|
|
||||||
PVOID LastReturnedLock;
|
|
||||||
} FILE_LOCK, *PFILE_LOCK;
|
|
||||||
|
|
||||||
typedef struct _FILE_MAILSLOT_PEEK_BUFFER {
|
typedef struct _FILE_MAILSLOT_PEEK_BUFFER {
|
||||||
ULONG ReadDataAvailable;
|
ULONG ReadDataAvailable;
|
||||||
ULONG NumberOfMessages;
|
ULONG NumberOfMessages;
|
||||||
|
@ -6998,21 +7309,6 @@ typedef struct _FILE_OLE_STATE_BITS_INFORMATION {
|
||||||
ULONG StateBitsMask;
|
ULONG StateBitsMask;
|
||||||
} FILE_OLE_STATE_BITS_INFORMATION, *PFILE_OLE_STATE_BITS_INFORMATION;
|
} FILE_OLE_STATE_BITS_INFORMATION, *PFILE_OLE_STATE_BITS_INFORMATION;
|
||||||
|
|
||||||
typedef struct _FSRTL_COMMON_FCB_HEADER {
|
|
||||||
CSHORT NodeTypeCode;
|
|
||||||
CSHORT NodeByteSize;
|
|
||||||
UCHAR Flags;
|
|
||||||
UCHAR IsFastIoPossible;
|
|
||||||
UCHAR Flags2;
|
|
||||||
UCHAR Reserved:4;
|
|
||||||
UCHAR Version:4;
|
|
||||||
PERESOURCE Resource;
|
|
||||||
PERESOURCE PagingIoResource;
|
|
||||||
LARGE_INTEGER AllocationSize;
|
|
||||||
LARGE_INTEGER FileSize;
|
|
||||||
LARGE_INTEGER ValidDataLength;
|
|
||||||
} FSRTL_COMMON_FCB_HEADER, *PFSRTL_COMMON_FCB_HEADER;
|
|
||||||
|
|
||||||
typedef enum _FSRTL_COMPARISON_RESULT
|
typedef enum _FSRTL_COMPARISON_RESULT
|
||||||
{
|
{
|
||||||
LessThan = -1,
|
LessThan = -1,
|
||||||
|
@ -7975,17 +8271,6 @@ FsRtlAddToTunnelCache (
|
||||||
IN PVOID Data
|
IN PVOID Data
|
||||||
);
|
);
|
||||||
|
|
||||||
#if (VER_PRODUCTBUILD >= 2195)
|
|
||||||
|
|
||||||
PFILE_LOCK
|
|
||||||
NTAPI
|
|
||||||
FsRtlAllocateFileLock (
|
|
||||||
IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
|
|
||||||
IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
|
|
||||||
);
|
|
||||||
|
|
||||||
#endif /* (VER_PRODUCTBUILD >= 2195) */
|
|
||||||
|
|
||||||
NTKERNELAPI
|
NTKERNELAPI
|
||||||
PVOID
|
PVOID
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -8034,36 +8319,6 @@ FsRtlAreNamesEqual (
|
||||||
((FL)->FastIoIsQuestionable) \
|
((FL)->FastIoIsQuestionable) \
|
||||||
)
|
)
|
||||||
|
|
||||||
/*
|
|
||||||
FsRtlCheckLockForReadAccess:
|
|
||||||
|
|
||||||
All this really does is pick out the lock parameters from the irp (io stack
|
|
||||||
location?), get IoGetRequestorProcess, and pass values on to
|
|
||||||
FsRtlFastCheckLockForRead.
|
|
||||||
*/
|
|
||||||
NTKERNELAPI
|
|
||||||
BOOLEAN
|
|
||||||
NTAPI
|
|
||||||
FsRtlCheckLockForReadAccess (
|
|
||||||
IN PFILE_LOCK FileLock,
|
|
||||||
IN PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
FsRtlCheckLockForWriteAccess:
|
|
||||||
|
|
||||||
All this really does is pick out the lock parameters from the irp (io stack
|
|
||||||
location?), get IoGetRequestorProcess, and pass values on to
|
|
||||||
FsRtlFastCheckLockForWrite.
|
|
||||||
*/
|
|
||||||
NTKERNELAPI
|
|
||||||
BOOLEAN
|
|
||||||
NTAPI
|
|
||||||
FsRtlCheckLockForWriteAccess (
|
|
||||||
IN PFILE_LOCK FileLock,
|
|
||||||
IN PIRP Irp
|
|
||||||
);
|
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(NTAPI*POPLOCK_WAIT_COMPLETE_ROUTINE) (
|
(NTAPI*POPLOCK_WAIT_COMPLETE_ROUTINE) (
|
||||||
|
@ -8089,34 +8344,6 @@ FsRtlCheckOplock (
|
||||||
IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
|
IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
BOOLEAN
|
|
||||||
NTAPI
|
|
||||||
FsRtlCopyRead (
|
|
||||||
IN PFILE_OBJECT FileObject,
|
|
||||||
IN PLARGE_INTEGER FileOffset,
|
|
||||||
IN ULONG Length,
|
|
||||||
IN BOOLEAN Wait,
|
|
||||||
IN ULONG LockKey,
|
|
||||||
OUT PVOID Buffer,
|
|
||||||
OUT PIO_STATUS_BLOCK IoStatus,
|
|
||||||
IN PDEVICE_OBJECT DeviceObject
|
|
||||||
);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
BOOLEAN
|
|
||||||
NTAPI
|
|
||||||
FsRtlCopyWrite (
|
|
||||||
IN PFILE_OBJECT FileObject,
|
|
||||||
IN PLARGE_INTEGER FileOffset,
|
|
||||||
IN ULONG Length,
|
|
||||||
IN BOOLEAN Wait,
|
|
||||||
IN ULONG LockKey,
|
|
||||||
IN PVOID Buffer,
|
|
||||||
OUT PIO_STATUS_BLOCK IoStatus,
|
|
||||||
IN PDEVICE_OBJECT DeviceObject
|
|
||||||
);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
NTKERNELAPI
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -8198,72 +8425,10 @@ FsRtlIsFatDbcsLegal (
|
||||||
|
|
||||||
#define FsRtlExitFileSystem KeLeaveCriticalRegion
|
#define FsRtlExitFileSystem KeLeaveCriticalRegion
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
BOOLEAN
|
|
||||||
NTAPI
|
|
||||||
FsRtlFastCheckLockForRead (
|
|
||||||
IN PFILE_LOCK FileLock,
|
|
||||||
IN PLARGE_INTEGER FileOffset,
|
|
||||||
IN PLARGE_INTEGER Length,
|
|
||||||
IN ULONG Key,
|
|
||||||
IN PFILE_OBJECT FileObject,
|
|
||||||
IN PVOID Process
|
|
||||||
);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
BOOLEAN
|
|
||||||
NTAPI
|
|
||||||
FsRtlFastCheckLockForWrite (
|
|
||||||
IN PFILE_LOCK FileLock,
|
|
||||||
IN PLARGE_INTEGER FileOffset,
|
|
||||||
IN PLARGE_INTEGER Length,
|
|
||||||
IN ULONG Key,
|
|
||||||
IN PFILE_OBJECT FileObject,
|
|
||||||
IN PVOID Process
|
|
||||||
);
|
|
||||||
|
|
||||||
#define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \
|
#define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \
|
||||||
FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \
|
FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \
|
||||||
)
|
)
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
FsRtlFastUnlockAll (
|
|
||||||
IN PFILE_LOCK FileLock,
|
|
||||||
IN PFILE_OBJECT FileObject,
|
|
||||||
IN PEPROCESS Process,
|
|
||||||
IN PVOID Context OPTIONAL
|
|
||||||
);
|
|
||||||
/* ret: STATUS_RANGE_NOT_LOCKED */
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
FsRtlFastUnlockAllByKey (
|
|
||||||
IN PFILE_LOCK FileLock,
|
|
||||||
IN PFILE_OBJECT FileObject,
|
|
||||||
IN PEPROCESS Process,
|
|
||||||
IN ULONG Key,
|
|
||||||
IN PVOID Context OPTIONAL
|
|
||||||
);
|
|
||||||
/* ret: STATUS_RANGE_NOT_LOCKED */
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
FsRtlFastUnlockSingle (
|
|
||||||
IN PFILE_LOCK FileLock,
|
|
||||||
IN PFILE_OBJECT FileObject,
|
|
||||||
IN PLARGE_INTEGER FileOffset,
|
|
||||||
IN PLARGE_INTEGER Length,
|
|
||||||
IN PEPROCESS Process,
|
|
||||||
IN ULONG Key,
|
|
||||||
IN PVOID Context OPTIONAL,
|
|
||||||
IN BOOLEAN AlreadySynchronized
|
|
||||||
);
|
|
||||||
/* ret: STATUS_RANGE_NOT_LOCKED */
|
|
||||||
|
|
||||||
NTKERNELAPI
|
NTKERNELAPI
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -8277,25 +8442,6 @@ FsRtlFindInTunnelCache (
|
||||||
OUT PVOID Data
|
OUT PVOID Data
|
||||||
);
|
);
|
||||||
|
|
||||||
#if (VER_PRODUCTBUILD >= 2195)
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
FsRtlFreeFileLock (
|
|
||||||
IN PFILE_LOCK FileLock
|
|
||||||
);
|
|
||||||
|
|
||||||
#endif /* (VER_PRODUCTBUILD >= 2195) */
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
FsRtlGetFileSize (
|
|
||||||
IN PFILE_OBJECT FileObject,
|
|
||||||
IN OUT PLARGE_INTEGER FileSize
|
|
||||||
);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
NTKERNELAPI
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -8307,26 +8453,6 @@ FsRtlGetNextBaseMcbEntry (
|
||||||
OUT PLONGLONG SectorCount
|
OUT PLONGLONG SectorCount
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
|
||||||
FsRtlGetNextFileLock:
|
|
||||||
|
|
||||||
ret: NULL if no more locks
|
|
||||||
|
|
||||||
Internals:
|
|
||||||
FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
|
|
||||||
FileLock->LastReturnedLock as storage.
|
|
||||||
LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
|
|
||||||
list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
|
|
||||||
calls with Restart = FALSE.
|
|
||||||
*/
|
|
||||||
NTKERNELAPI
|
|
||||||
PFILE_LOCK_INFO
|
|
||||||
NTAPI
|
|
||||||
FsRtlGetNextFileLock (
|
|
||||||
IN PFILE_LOCK FileLock,
|
|
||||||
IN BOOLEAN Restart
|
|
||||||
);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
NTKERNELAPI
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -8361,15 +8487,6 @@ FsRtlInitializeBaseMcb (
|
||||||
IN POOL_TYPE PoolType
|
IN POOL_TYPE PoolType
|
||||||
);
|
);
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
FsRtlInitializeFileLock (
|
|
||||||
IN PFILE_LOCK FileLock,
|
|
||||||
IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
|
|
||||||
IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
|
|
||||||
);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
NTKERNELAPI
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -8579,19 +8696,6 @@ FsRtlLookupPerStreamContextInternal (
|
||||||
IN PVOID InstanceId OPTIONAL
|
IN PVOID InstanceId OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
BOOLEAN
|
|
||||||
NTAPI
|
|
||||||
FsRtlMdlReadDev (
|
|
||||||
IN PFILE_OBJECT FileObject,
|
|
||||||
IN PLARGE_INTEGER FileOffset,
|
|
||||||
IN ULONG Length,
|
|
||||||
IN ULONG LockKey,
|
|
||||||
OUT PMDL *MdlChain,
|
|
||||||
OUT PIO_STATUS_BLOCK IoStatus,
|
|
||||||
IN PDEVICE_OBJECT DeviceObject
|
|
||||||
);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
NTKERNELAPI
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -8600,28 +8704,6 @@ FsRtlMdlReadComplete (
|
||||||
IN PMDL MdlChain
|
IN PMDL MdlChain
|
||||||
);
|
);
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
BOOLEAN
|
|
||||||
NTAPI
|
|
||||||
FsRtlMdlReadCompleteDev (
|
|
||||||
IN PFILE_OBJECT FileObject,
|
|
||||||
IN PMDL MdlChain,
|
|
||||||
IN PDEVICE_OBJECT DeviceObject
|
|
||||||
);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
BOOLEAN
|
|
||||||
NTAPI
|
|
||||||
FsRtlPrepareMdlWriteDev (
|
|
||||||
IN PFILE_OBJECT FileObject,
|
|
||||||
IN PLARGE_INTEGER FileOffset,
|
|
||||||
IN ULONG Length,
|
|
||||||
IN ULONG LockKey,
|
|
||||||
OUT PMDL *MdlChain,
|
|
||||||
OUT PIO_STATUS_BLOCK IoStatus,
|
|
||||||
IN PDEVICE_OBJECT DeviceObject
|
|
||||||
);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
NTKERNELAPI
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -8631,16 +8713,6 @@ FsRtlMdlWriteComplete (
|
||||||
IN PMDL MdlChain
|
IN PMDL MdlChain
|
||||||
);
|
);
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
BOOLEAN
|
|
||||||
NTAPI
|
|
||||||
FsRtlMdlWriteCompleteDev (
|
|
||||||
IN PFILE_OBJECT FileObject,
|
|
||||||
IN PLARGE_INTEGER FileOffset,
|
|
||||||
IN PMDL MdlChain,
|
|
||||||
IN PDEVICE_OBJECT DeviceObject
|
|
||||||
);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
NTKERNELAPI
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -8826,63 +8898,6 @@ FsRtlPostStackOverflow (
|
||||||
IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine
|
IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
|
||||||
FsRtlPrivateLock:
|
|
||||||
|
|
||||||
ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
|
|
||||||
|
|
||||||
Internals:
|
|
||||||
-Calls IoCompleteRequest if Irp
|
|
||||||
-Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
|
|
||||||
*/
|
|
||||||
NTKERNELAPI
|
|
||||||
BOOLEAN
|
|
||||||
NTAPI
|
|
||||||
FsRtlPrivateLock (
|
|
||||||
IN PFILE_LOCK FileLock,
|
|
||||||
IN PFILE_OBJECT FileObject,
|
|
||||||
IN PLARGE_INTEGER FileOffset,
|
|
||||||
IN PLARGE_INTEGER Length,
|
|
||||||
IN PEPROCESS Process,
|
|
||||||
IN ULONG Key,
|
|
||||||
IN BOOLEAN FailImmediately,
|
|
||||||
IN BOOLEAN ExclusiveLock,
|
|
||||||
OUT PIO_STATUS_BLOCK IoStatus,
|
|
||||||
IN PIRP Irp OPTIONAL,
|
|
||||||
IN PVOID Context,
|
|
||||||
IN BOOLEAN AlreadySynchronized
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
FsRtlProcessFileLock:
|
|
||||||
|
|
||||||
ret:
|
|
||||||
-STATUS_INVALID_DEVICE_REQUEST
|
|
||||||
-STATUS_RANGE_NOT_LOCKED from unlock routines.
|
|
||||||
-STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
|
|
||||||
(redirected IoStatus->Status).
|
|
||||||
|
|
||||||
Internals:
|
|
||||||
-switch ( Irp->CurrentStackLocation->MinorFunction )
|
|
||||||
lock: return FsRtlPrivateLock;
|
|
||||||
unlocksingle: return FsRtlFastUnlockSingle;
|
|
||||||
unlockall: return FsRtlFastUnlockAll;
|
|
||||||
unlockallbykey: return FsRtlFastUnlockAllByKey;
|
|
||||||
default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
|
|
||||||
return STATUS_INVALID_DEVICE_REQUEST;
|
|
||||||
|
|
||||||
-'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
|
|
||||||
-'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
|
|
||||||
*/
|
|
||||||
NTKERNELAPI
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
FsRtlProcessFileLock (
|
|
||||||
IN PFILE_LOCK FileLock,
|
|
||||||
IN PIRP Irp,
|
|
||||||
IN PVOID Context OPTIONAL
|
|
||||||
);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
NTKERNELAPI
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -8998,13 +9013,6 @@ FsRtlUninitializeBaseMcb (
|
||||||
IN PBASE_MCB Mcb
|
IN PBASE_MCB Mcb
|
||||||
);
|
);
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
FsRtlUninitializeFileLock (
|
|
||||||
IN PFILE_LOCK FileLock
|
|
||||||
);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
NTKERNELAPI
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue