📄 fsd.h
字号:
FsdReleaseFromLazyWrite (
IN PVOID Context
);
BOOLEAN
FsdAcquireForReadAhead (
IN PVOID Context,
IN BOOLEAN Wait
);
VOID
FsdReleaseFromReadAhead (
IN PVOID Context
);
//
// Function prototypes from create.c
//
NTSTATUS
FsdCreate (
IN PFSD_IRP_CONTEXT IrpContext
);
NTSTATUS
FsdCreateFs (
IN PFSD_IRP_CONTEXT IrpContext
);
NTSTATUS
FsdCreateVolume (
IN PFSD_IRP_CONTEXT IrpContext
);
NTSTATUS
FsdCreateFile (
IN PFSD_IRP_CONTEXT IrpContext
);
NTSTATUS
FsdLookupFileName (
IN PFSD_VCB Vcb,
IN PUNICODE_STRING FullFileName,
IN OUT PULONG Index,
IN OUT struct romfs_inode* Inode
);
NTSTATUS
FsdLookupFileNameInDir (
IN PFSD_VCB Vcb,
IN ULONG DirIndex,
IN PUNICODE_STRING FileName,
IN OUT PULONG Index,
IN OUT struct romfs_inode* Inode
);
PFSD_FCB
FsdLookupFcbByFileName (
IN PFSD_VCB Vcb,
IN PUNICODE_STRING FullFileName
);
//
// Function prototypes from debug.c
//
#if DBG
extern ULONG ProcessNameOffset;
#define FsdGetCurrentProcessName() ( \
(PUCHAR) PsGetCurrentProcess() + ProcessNameOffset \
)
ULONG
FsdGetProcessNameOffset (
VOID
);
VOID
FsdDbgPrintCall (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
VOID
FsdDbgPrintComplete (
IN PIRP Irp
);
PUCHAR
FsdNtStatusToString (
IN NTSTATUS Status
);
#define FsdCompleteRequest(Irp, PriorityBoost) \
FsdDbgPrintComplete(Irp); \
IoCompleteRequest(Irp, PriorityBoost)
#else // !DBG
#define FsdDbgPrintCall(DeviceObject, Irp)
#define FsdCompleteRequest(Irp, PriorityBoost) \
IoCompleteRequest(Irp, PriorityBoost)
#endif // !DBG
//
// Function prototypes from devctl.c
//
NTSTATUS
FsdDeviceControl (
IN PFSD_IRP_CONTEXT IrpContext
);
//
// Function prototypes from dirctl.c
//
NTSTATUS
FsdDirectoryControl (
IN PFSD_IRP_CONTEXT IrpContext
);
NTSTATUS
FsdQueryDirectory (
IN PFSD_IRP_CONTEXT IrpContext
);
NTSTATUS
FsdNotifyChangeDirectory (
IN PFSD_IRP_CONTEXT IrpContext
);
//
// Function prototypes from fastio.c
//
BOOLEAN
FsdFastIoCheckIfPossible (
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
);
#if DBG
BOOLEAN
FsdFastIoRead (
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
);
#endif // DBG
BOOLEAN
FsdFastIoQueryBasicInfo (
IN PFILE_OBJECT FileObject,
IN BOOLEAN Wait,
OUT PFILE_BASIC_INFORMATION Buffer,
OUT PIO_STATUS_BLOCK IoStatus,
IN PDEVICE_OBJECT DeviceObject
);
BOOLEAN
FsdFastIoQueryStandardInfo (
IN PFILE_OBJECT FileObject,
IN BOOLEAN Wait,
OUT PFILE_STANDARD_INFORMATION Buffer,
OUT PIO_STATUS_BLOCK IoStatus,
IN PDEVICE_OBJECT DeviceObject
);
BOOLEAN
FsdFastIoLock (
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 PDEVICE_OBJECT DeviceObject
);
BOOLEAN
FsdFastIoUnlockSingle (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN PLARGE_INTEGER Length,
IN PEPROCESS Process,
IN ULONG Key,
OUT PIO_STATUS_BLOCK IoStatus,
IN PDEVICE_OBJECT DeviceObject
);
BOOLEAN
FsdFastIoUnlockAll (
IN PFILE_OBJECT FileObject,
IN PEPROCESS Process,
OUT PIO_STATUS_BLOCK IoStatus,
IN PDEVICE_OBJECT DeviceObject
);
BOOLEAN
FsdFastIoUnlockAllByKey (
IN PFILE_OBJECT FileObject,
IN PEPROCESS Process,
IN ULONG Key,
OUT PIO_STATUS_BLOCK IoStatus,
IN PDEVICE_OBJECT DeviceObject
);
BOOLEAN
FsdFastIoQueryNetworkOpenInfo (
IN PFILE_OBJECT FileObject,
IN BOOLEAN Wait,
OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
OUT PIO_STATUS_BLOCK IoStatus,
IN PDEVICE_OBJECT DeviceObject
);
//
// Function prototypes from fileinfo.c
//
NTSTATUS
FsdQueryInformation (
IN PFSD_IRP_CONTEXT IrpContext
);
NTSTATUS
FsdSetInformation (
IN PFSD_IRP_CONTEXT IrpContext
);
//
// Function prototypes from fsctl.c
//
NTSTATUS
FsdFileSystemControl (
IN PFSD_IRP_CONTEXT IrpContext
);
NTSTATUS
FsdUserFsRequest (
IN PFSD_IRP_CONTEXT IrpContext
);
NTSTATUS
FsdLockVolume (
IN PFSD_IRP_CONTEXT IrpContext
);
NTSTATUS
FsdUnlockVolume (
IN PFSD_IRP_CONTEXT IrpContext
);
NTSTATUS
FsdDismountVolume (
IN PFSD_IRP_CONTEXT IrpContext
);
NTSTATUS
FsdIsVolumeMounted (
IN PFSD_IRP_CONTEXT IrpContext
);
NTSTATUS
FsdMountVolume (
IN PFSD_IRP_CONTEXT IrpContext
);
NTSTATUS
FsdVerifyVolume (
IN PFSD_IRP_CONTEXT IrpContext
);
VOID
FsdPurgeVolume (
IN PFSD_VCB Vcb,
IN BOOLEAN FlushBeforePurge
);
VOID
FsdPurgeFile (
IN PFSD_FCB Fcb,
IN BOOLEAN FlushBeforePurge
);
VOID
FsdSetVpbFlag (
IN PVPB Vpb,
IN USHORT Flag
);
VOID
FsdClearVpbFlag (
IN PVPB Vpb,
IN USHORT Flag
);
//
// Function prototypes from fsd.c
//
NTSTATUS
FsdBuildRequest (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
FsdQueueRequest (
IN PFSD_IRP_CONTEXT IrpContext
);
VOID
FsdDeQueueRequest (
#if (VER_PRODUCTBUILD >= 2195)
IN PDEVICE_OBJECT DeviceObject,
#endif
IN PVOID Context
);
NTSTATUS
FsdDispatchRequest (
IN PFSD_IRP_CONTEXT IrpContext
);
NTSTATUS
FsdExceptionFilter (
IN PFSD_IRP_CONTEXT IrpContext,
IN NTSTATUS ExceptionCode
);
NTSTATUS
FsdExceptionHandler (
IN PFSD_IRP_CONTEXT IrpContext
);
NTSTATUS
FsdLockUserBuffer (
IN PIRP Irp,
IN ULONG Length,
IN LOCK_OPERATION Operation
);
PVOID
FsdGetUserBuffer (
IN PIRP Irp
);
NTSTATUS
FsdReadInodeByIndex (
IN PDEVICE_OBJECT DeviceObject,
IN ULONG Index,
IN OUT struct romfs_inode* Inode
);
//
// Function prototypes from init.c
//
NTSTATUS
DriverEntry (
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
VOID
DriverUnload (
IN PDRIVER_OBJECT DriverObject
);
//
// Function prototypes from lockctl.c
//
NTSTATUS
FsdLockControl (
IN PFSD_IRP_CONTEXT IrpContext
);
//
// Function prototypes from read.c
//
NTSTATUS
FsdRead (
IN PFSD_IRP_CONTEXT IrpContext
);
NTSTATUS
FsdReadNormal (
IN PFSD_IRP_CONTEXT IrpContext
);
NTSTATUS
FsdReadComplete (
IN PFSD_IRP_CONTEXT IrpContext
);
NTSTATUS
FsdReadFileData (
IN PDEVICE_OBJECT DeviceObject,
IN ULONG Index,
IN struct romfs_inode* Inode,
IN PLARGE_INTEGER Offset,
IN ULONG Length,
IN OUT PVOID Buffer
);
//
// Function prototypes from romfsrec.c
//
NTSTATUS
FsdIsDeviceRomfs (
IN PDEVICE_OBJECT DeviceObject
);
NTSTATUS
FsdIsDeviceSameRomfs (
IN PDEVICE_OBJECT DeviceObject,
IN ULONG CheckSum
);
//
// Function prototypes from string.c
//
size_t strnlen(const char * s, size_t count);
//
// Function prototypes from volinfo.c
//
NTSTATUS
FsdQueryVolumeInformation (
IN PFSD_IRP_CONTEXT IrpContext
);
//
// These declarations is missing in some versions of the DDK and ntifs.h
//
#ifndef IoCopyCurrentIrpStackLocationToNext
#define IoCopyCurrentIrpStackLocationToNext( Irp ) { \
PIO_STACK_LOCATION irpSp; \
PIO_STACK_LOCATION nextIrpSp; \
irpSp = IoGetCurrentIrpStackLocation( (Irp) ); \
nextIrpSp = IoGetNextIrpStackLocation( (Irp) ); \
RtlCopyMemory( \
nextIrpSp, \
irpSp, \
FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine) \
); \
nextIrpSp->Control = 0; }
#endif
#ifndef IoSkipCurrentIrpStackLocation
#define IoSkipCurrentIrpStackLocation( Irp ) \
(Irp)->CurrentLocation++; \
(Irp)->Tail.Overlay.CurrentStackLocation++;
#endif
NTKERNELAPI
VOID
FsRtlNotifyChangeDirectory (
IN PNOTIFY_SYNC NotifySync,
IN PVOID FsContext,
IN PSTRING FullDirectoryName,
IN PLIST_ENTRY NotifyList,
IN BOOLEAN WatchTree,
IN ULONG CompletionFilter,
IN PIRP NotifyIrp
);
#ifndef RtlUshortByteSwap
USHORT
FASTCALL
RtlUshortByteSwap(
IN USHORT Source
);
#endif
#ifndef RtlUlongByteSwap
ULONG
FASTCALL
RtlUlongByteSwap(
IN ULONG Source
);
#endif
#ifndef RtlUlonglongByteSwap
ULONGLONG
FASTCALL
RtlUlonglongByteSwap(
IN ULONGLONG Source
);
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -