📄 rfsd.h
字号:
IN PRFSD_VCB Vcb );
NTSTATUS
RfsdCreate (IN PRFSD_IRP_CONTEXT IrpContext);
NTSTATUS
RfsdCreateInode(
IN PRFSD_IRP_CONTEXT IrpContext,
IN PRFSD_VCB Vcb,
IN PRFSD_FCB pParentFcb,
IN ULONG Type,
IN ULONG FileAttr,
IN PUNICODE_STRING FileName);
#if DISABLED
NTSTATUS
RfsdSupersedeOrOverWriteFile(
IN PRFSD_IRP_CONTEXT IrpContext,
IN PRFSD_VCB Vcb,
IN PRFSD_FCB Fcb,
IN ULONG Disposition);
#endif
//
// Debug.c
//
#define DBG_VITAL 0
#define DBG_ERROR 1
#define DBG_USER 2
#define DBG_TRACE 3
#define DBG_INFO 4
#define DBG_FUNC 5
#if DBG
#define RfsdPrint(arg) RfsdPrintf arg
#define RfsdPrintNoIndent(arg) RfsdNIPrintf arg
#define RfsdCompleteRequest(Irp, bPrint, PriorityBoost) \
RfsdDbgPrintComplete(Irp, bPrint); \
IoCompleteRequest(Irp, PriorityBoost)
#else
#define RfsdPrint(arg)
#define RfsdCompleteRequest(Irp, bPrint, PriorityBoost) \
IoCompleteRequest(Irp, PriorityBoost)
#endif // DBG
VOID
__cdecl
RfsdPrintf(
LONG DebugPrintLevel,
PCHAR DebugMessage,
...
);
VOID
__cdecl
RfsdNIPrintf(
LONG DebugPrintLevel,
PCHAR DebugMessage,
...
);
extern ULONG ProcessNameOffset;
#define RfsdGetCurrentProcessName() ( \
(PUCHAR) PsGetCurrentProcess() + ProcessNameOffset \
)
ULONG
RfsdGetProcessNameOffset (VOID);
VOID
RfsdDbgPrintCall (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp );
VOID
RfsdDbgPrintComplete (
IN PIRP Irp,
IN BOOLEAN bPrint
);
PUCHAR
RfsdNtStatusToString (IN NTSTATUS Status );
//
// Devctl.c
//
NTSTATUS
RfsdDeviceControlNormal (IN PRFSD_IRP_CONTEXT IrpContext);
NTSTATUS
RfsdPrepareToUnload (IN PRFSD_IRP_CONTEXT IrpContext);
NTSTATUS
RfsdDeviceControl (IN PRFSD_IRP_CONTEXT IrpContext);
//
// Dirctl.c
//
ULONG
RfsdGetInfoLength(IN FILE_INFORMATION_CLASS FileInformationClass);
ULONG
RfsdProcessDirEntry(
IN PRFSD_VCB Vcb,
IN FILE_INFORMATION_CLASS FileInformationClass,
IN __u32 Key_ParentID,
IN __u32 Key_ObjectID,
IN PVOID Buffer,
IN ULONG UsedLength,
IN ULONG Length,
IN ULONG FileIndex,
IN PUNICODE_STRING pName,
IN BOOLEAN Single,
IN PVOID pPreviousEntry );
NTSTATUS
RfsdQueryDirectory (IN PRFSD_IRP_CONTEXT IrpContext);
NTSTATUS
RfsdNotifyChangeDirectory (
IN PRFSD_IRP_CONTEXT IrpContext
);
VOID
RfsdNotifyReportChange (
IN PRFSD_IRP_CONTEXT IrpContext,
IN PRFSD_VCB Vcb,
IN PRFSD_FCB Fcb,
IN ULONG Filter,
IN ULONG Action
);
NTSTATUS
RfsdDirectoryControl (IN PRFSD_IRP_CONTEXT IrpContext);
BOOLEAN
RfsdIsDirectoryEmpty (
IN PRFSD_VCB Vcb,
IN PRFSD_FCB Fcb
);
//
// Dispatch.c
//
NTSTATUS
RfsdQueueRequest (IN PRFSD_IRP_CONTEXT IrpContext);
VOID
RfsdDeQueueRequest (IN PVOID Context);
NTSTATUS
RfsdDispatchRequest (IN PRFSD_IRP_CONTEXT IrpContext);
NTSTATUS
RfsdBuildRequest (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
//
// Except.c
//
NTSTATUS
RfsdExceptionFilter (
IN PRFSD_IRP_CONTEXT IrpContext,
IN PEXCEPTION_POINTERS ExceptionPointer
);
NTSTATUS
RfsdExceptionHandler (IN PRFSD_IRP_CONTEXT IrpContext);
//
// Rfsd.c
//
PRFSD_SUPER_BLOCK
RfsdLoadSuper(
IN PRFSD_VCB Vcb,
IN BOOLEAN bVerify
);
BOOLEAN
RfsdSaveSuper(
IN PRFSD_IRP_CONTEXT IrpContext,
IN PRFSD_VCB Vcb
);
BOOLEAN
RfsdLoadGroup(IN PRFSD_VCB Vcb);
BOOLEAN
RfsdSaveGroup(
IN PRFSD_IRP_CONTEXT IrpContext,
IN PRFSD_VCB Vcb,
IN ULONG Group
);
BOOLEAN
RfsdGetInodeLba (IN PRFSD_VCB Vcb,
IN __u32 DirectoryID,
IN __u32 ParentID,
OUT PLONGLONG offset);
BOOLEAN
RfsdLoadInode (IN PRFSD_VCB Vcb,
IN PRFSD_KEY_IN_MEMORY pKey,
IN OUT PRFSD_INODE Inode);
BOOLEAN
RfsdLoadInode2 (IN PRFSD_VCB Vcb,
IN __u32 a,
IN __u32 b,
IN OUT PRFSD_INODE Inode);
BOOLEAN
RfsdSaveInode (
IN PRFSD_IRP_CONTEXT IrpContext,
IN PRFSD_VCB Vcb,
IN ULONG inode,
IN PRFSD_INODE Inode
);
BOOLEAN
RfsdLoadBlock (
IN PRFSD_VCB Vcb,
IN ULONG dwBlk,
IN PVOID Buffer
);
BOOLEAN
RfsdSaveBlock (
IN PRFSD_IRP_CONTEXT IrpContext,
IN PRFSD_VCB Vcb,
IN ULONG dwBlk,
IN PVOID Buf
);
BOOLEAN
RfsdSaveBuffer(
IN PRFSD_IRP_CONTEXT IrpContext,
IN PRFSD_VCB Vcb,
IN LONGLONG Offset,
IN ULONG Size,
IN PVOID Buf
);
NTSTATUS
RfsdGetBlock(
IN PRFSD_IRP_CONTEXT IrpContext,
IN PRFSD_VCB Vcb,
IN ULONG dwContent,
IN ULONG Index,
IN ULONG Layer,
IN BOOLEAN bAlloc,
OUT PULONG pBlock
);
NTSTATUS
RfsdBlockMap(
IN PRFSD_IRP_CONTEXT IrpContext,
IN PRFSD_VCB Vcb,
IN ULONG InodeNo,
IN PRFSD_INODE Inode,
IN ULONG Index,
IN BOOLEAN bAlloc,
OUT PULONG pBlock
);
NTSTATUS
RfsdBuildBDL2(
IN PRFSD_VCB Vcb,
IN PRFSD_KEY_IN_MEMORY pKey,
IN PRFSD_INODE pInode,
OUT PULONG out_Count,
OUT PRFSD_BDL* out_ppBdl );
NTSTATUS
RfsdBuildBDL(
IN PRFSD_IRP_CONTEXT IrpContext,
IN PRFSD_VCB Vcb,
IN PRFSD_KEY_IN_MEMORY InodeNo,
IN PRFSD_INODE Inode,
IN ULONGLONG Offset,
IN ULONG Size,
IN BOOLEAN bAlloc,
OUT PRFSD_BDL * Bdls,
OUT PULONG Count
);
NTSTATUS
RfsdNewBlock(
PRFSD_IRP_CONTEXT IrpContext,
PRFSD_VCB Vcb,
ULONG GroupHint,
ULONG BlockHint,
PULONG dwRet );
NTSTATUS
RfsdFreeBlock(
PRFSD_IRP_CONTEXT IrpContext,
PRFSD_VCB Vcb,
ULONG Block );
NTSTATUS
RfsdExpandBlock(
PRFSD_IRP_CONTEXT IrpContext,
PRFSD_VCB Vcb,
PRFSD_FCB Fcb,
ULONG dwContent,
ULONG Index,
ULONG layer,
BOOLEAN bNew,
ULONG *dwRet );
NTSTATUS
RfsdExpandInode(
PRFSD_IRP_CONTEXT IrpContext,
PRFSD_VCB Vcb,
PRFSD_FCB Fcb,
ULONG *dwRet );
NTSTATUS
RfsdNewInode(
PRFSD_IRP_CONTEXT IrpContext,
PRFSD_VCB Vcb,
ULONG GroupHint,
ULONG mode,
PULONG Inode );
BOOLEAN
RfsdFreeInode(
PRFSD_IRP_CONTEXT IrpContext,
PRFSD_VCB Vcb,
ULONG Inode,
ULONG Type );
NTSTATUS
RfsdAddEntry (
IN PRFSD_IRP_CONTEXT IrpContext,
IN PRFSD_VCB Vcb,
IN PRFSD_FCB Dcb,
IN ULONG FileType,
IN ULONG Inode,
IN PUNICODE_STRING FileName );
NTSTATUS
RfsdRemoveEntry (
IN PRFSD_IRP_CONTEXT IrpContext,
IN PRFSD_VCB Vcb,
IN PRFSD_FCB Dcb,
IN ULONG FileType,
IN ULONG Inode );
NTSTATUS
RfsdSetParentEntry (
IN PRFSD_IRP_CONTEXT IrpContext,
IN PRFSD_VCB Vcb,
IN PRFSD_FCB Dcb,
IN ULONG OldParent,
IN ULONG NewParent );
NTSTATUS
RfsdTruncateBlock(
IN PRFSD_IRP_CONTEXT IrpContext,
IN PRFSD_VCB Vcb,
IN PRFSD_FCB Fcb,
IN ULONG dwContent,
IN ULONG Index,
IN ULONG layer,
OUT BOOLEAN *bFreed );
NTSTATUS
RfsdTruncateInode(
IN PRFSD_IRP_CONTEXT IrpContext,
IN PRFSD_VCB Vcb,
IN PRFSD_FCB Fcb );
BOOLEAN
RfsdAddMcbEntry (
IN PRFSD_VCB Vcb,
IN LONGLONG Lba,
IN LONGLONG Length );
VOID
RfsdRemoveMcbEntry (
IN PRFSD_VCB Vcb,
IN LONGLONG Lba,
IN LONGLONG Length );
BOOLEAN
RfsdLookupMcbEntry (
IN PRFSD_VCB Vcb,
IN LONGLONG Offset,
OUT PLONGLONG Lba OPTIONAL,
OUT PLONGLONG Length OPTIONAL,
OUT PLONGLONG RunStart OPTIONAL,
OUT PLONGLONG RunLength OPTIONAL,
OUT PULONG Index OPTIONAL );
BOOLEAN
SuperblockContainsMagicKey(PRFSD_SUPER_BLOCK sb);
__u32
ConvertKeyTypeUniqueness(__u32 k_uniqueness);
void
FillInMemoryKey(
IN PRFSD_KEY_ON_DISK pKeyOnDisk,
IN RFSD_KEY_VERSION KeyVersion,
IN OUT PRFSD_KEY_IN_MEMORY pKeyInMemory );
RFSD_KEY_VERSION DetermineOnDiskKeyFormat(const PRFSD_KEY_ON_DISK key);
RFSD_KEY_COMPARISON
CompareShortKeys(
IN PRFSD_KEY_IN_MEMORY a,
IN PRFSD_KEY_IN_MEMORY b );
RFSD_KEY_COMPARISON
CompareKeysWithoutOffset(
IN PRFSD_KEY_IN_MEMORY a,
IN PRFSD_KEY_IN_MEMORY b );
RFSD_KEY_COMPARISON
CompareKeys(
IN PRFSD_KEY_IN_MEMORY a,
IN PRFSD_KEY_IN_MEMORY b );
NTSTATUS
NavigateToLeafNode(
IN PRFSD_VCB Vcb,
IN PRFSD_KEY_IN_MEMORY Key,
IN ULONG StartingBlockNumber,
OUT PULONG out_NextBlockNumber );
NTSTATUS
RfsdParseFilesystemTree(
IN PRFSD_VCB Vcb,
IN PRFSD_KEY_IN_MEMORY Key, // Key to search for.
IN ULONG StartingBlockNumber, // Block number of an internal or leaf node, to start the search from
IN RFSD_CALLBACK(fpDirectoryCallback), // A function ptr to trigger on hitting a matching leaf block
IN PVOID Context
);
NTSTATUS
_NavigateToLeafNode(
IN PRFSD_VCB Vcb,
IN PRFSD_KEY_IN_MEMORY Key,
IN ULONG StartingBlockNumber,
OUT PULONG out_NextBlockNumber,
IN BOOLEAN ReturnOnFirstMatch,
IN RFSD_KEY_COMPARISON (*fpComparisonFunction)(PRFSD_KEY_IN_MEMORY, PRFSD_KEY_IN_MEMORY),
RFSD_CALLBACK(fpDirectoryCallback),
IN PVOID pContext
);
//
// Fastio.c
//
BOOLEAN
RfsdFastIoCheckIfPossible (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
IN BOOLEAN Wait,
IN ULONG LockKey,
IN BOOLEAN CheckForReadOperation,
OUT PIO_STATUS_BLOCK IoStatus,
IN PDEVICE_OBJECT DeviceObject );
BOOLEAN
RfsdFastIoRead (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);
BOOLEAN
RfsdFastIoWrite (
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,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -