📄 ext2fs.h
字号:
PIRP Irp;
struct _EXT2_EXTENT * Next;
} EXT2_EXTENT, *PEXT2_EXTENT;
/* FUNCTIONS DECLARATION *****************************************************/
//
// The following macro is used to determine if an FSD thread can block
// for I/O or wait for a resource. It returns TRUE if the thread can
// block and FALSE otherwise. This attribute can then be used to call
// the FSD & FSP common work routine with the proper wait value.
//
#define CanExt2Wait(IRP) IoIsOperationSynchronous(Irp)
//
// memory allocation statistics
//
__inline
VOID
Ext2TraceMemory(BOOLEAN _n, int _i, PVOID _p, LONG _s)
{
if (_n) {
InterlockedIncrement(&Ext2Global->PerfStat.Current.Slot[_i]);
InterlockedIncrement(&Ext2Global->PerfStat.Total.Slot[_i]);
InterlockedExchangeAdd(&Ext2Global->PerfStat.Size.Slot[_i], _s);
} else {
InterlockedDecrement(&Ext2Global->PerfStat.Current.Slot[_i]);
InterlockedExchangeAdd(&Ext2Global->PerfStat.Size.Slot[_i], -1 * _s);
}
}
__inline
VOID
Ext2TraceIrpContext(BOOLEAN _n, PEXT2_IRP_CONTEXT IrpContext)
{
if (_n) {
INC_MEM_COUNT(PS_IRP_CONTEXT, IrpContext, sizeof(EXT2_IRP_CONTEXT));
InterlockedIncrement(&(Ext2Global->PerfStat.Irps[IrpContext->MajorFunction].Current));
} else {
DEC_MEM_COUNT(PS_IRP_CONTEXT, IrpContext, sizeof(EXT2_IRP_CONTEXT));
InterlockedIncrement(&Ext2Global->PerfStat.Irps[IrpContext->MajorFunction].Processed);
InterlockedDecrement(&Ext2Global->PerfStat.Irps[IrpContext->MajorFunction].Current);
}
}
//
// Block.c
//
NTSTATUS
Ext2LockUserBuffer (
IN PIRP Irp,
IN ULONG Length,
IN LOCK_OPERATION Operation);
PVOID
Ext2GetUserBuffer (IN PIRP Irp);
NTSTATUS
Ext2ReadWriteBlocks(
IN PEXT2_IRP_CONTEXT IrpContext,
IN PEXT2_VCB Vcb,
IN PEXT2_EXTENT Extent,
IN ULONG Length,
IN BOOLEAN bVerify );
NTSTATUS
Ext2ReadSync(
IN PEXT2_VCB Vcb,
IN ULONGLONG Offset,
IN ULONG Length,
OUT PVOID Buffer,
IN BOOLEAN bVerify );
NTSTATUS
Ext2ReadDisk(
IN PEXT2_VCB Vcb,
IN ULONGLONG Offset,
IN ULONG Size,
IN PVOID Buffer,
IN BOOLEAN bVerify );
NTSTATUS
Ext2DiskIoControl (
IN PDEVICE_OBJECT DeviceOjbect,
IN ULONG IoctlCode,
IN PVOID InputBuffer,
IN ULONG InputBufferSize,
IN OUT PVOID OutputBuffer,
IN OUT PULONG OutputBufferSize );
VOID
Ext2MediaEjectControl (
IN PEXT2_IRP_CONTEXT IrpContext,
IN PEXT2_VCB Vcb,
IN BOOLEAN bPrevent );
NTSTATUS
Ext2DiskShutDown(PEXT2_VCB Vcb);
//
// Cleanup.c
//
NTSTATUS
Ext2Cleanup (IN PEXT2_IRP_CONTEXT IrpContext);
//
// Close.c
//
NTSTATUS
Ext2Close (IN PEXT2_IRP_CONTEXT IrpContext);
VOID
Ext2QueueCloseRequest (IN PEXT2_IRP_CONTEXT IrpContext);
VOID
Ext2DeQueueCloseRequest (IN PVOID Context);
//
// Cmcb.c
//
BOOLEAN
Ext2AcquireForLazyWrite (
IN PVOID Context,
IN BOOLEAN Wait );
VOID
Ext2ReleaseFromLazyWrite (IN PVOID Context);
BOOLEAN
Ext2AcquireForReadAhead (
IN PVOID Context,
IN BOOLEAN Wait );
VOID
Ext2ReleaseFromReadAhead (IN PVOID Context);
BOOLEAN
Ext2NoOpAcquire (
IN PVOID Fcb,
IN BOOLEAN Wait );
VOID
Ext2NoOpRelease (IN PVOID Fcb );
//
// Create.c
//
BOOLEAN
Ext2IsNameValid(PUNICODE_STRING FileName);
NTSTATUS
Ext2FollowLink (
IN PEXT2_IRP_CONTEXT IrpContext,
IN PEXT2_VCB Vcb,
IN PEXT2_MCB Parent,
IN PEXT2_MCB Mcb,
IN USHORT Linkdep
);
NTSTATUS
Ext2ScanDir (
IN PEXT2_IRP_CONTEXT IrpContext,
IN PEXT2_VCB Vcb,
IN PEXT2_MCB Parent,
IN PUNICODE_STRING FileName,
IN OUT PULONG Index,
IN OUT PULONG Inode
);
BOOLEAN
Ext2IsSpecialSystemFile(
IN PUNICODE_STRING FileName,
IN BOOLEAN bDirectory
);
NTSTATUS
Ext2LookupFile (
IN PEXT2_IRP_CONTEXT IrpContext,
IN PEXT2_VCB Vcb,
IN PUNICODE_STRING FullName,
IN PEXT2_MCB Parent,
OUT PEXT2_MCB * Ext2Mcb,
IN USHORT Linkdep
);
NTSTATUS
Ext2CreateFile(
IN PEXT2_IRP_CONTEXT IrpContext,
IN PEXT2_VCB Vcb,
OUT PBOOLEAN OpPostIrp
);
NTSTATUS
Ext2CreateVolume(
IN PEXT2_IRP_CONTEXT IrpContext,
IN PEXT2_VCB Vcb );
NTSTATUS
Ext2Create (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2CreateInode(
IN PEXT2_IRP_CONTEXT IrpContext,
IN PEXT2_VCB Vcb,
IN PEXT2_FCB pParentFcb,
IN ULONG Type,
IN ULONG FileAttr,
IN PUNICODE_STRING FileName);
NTSTATUS
Ext2SupersedeOrOverWriteFile(
IN PEXT2_IRP_CONTEXT IrpContext,
IN PFILE_OBJECT FileObject,
IN PEXT2_VCB Vcb,
IN PEXT2_FCB Fcb,
IN PLARGE_INTEGER AllocationSize,
IN ULONG Disposition
);
//
// Debug.c
//
/* debug levels */
#define DL_VIT 0
#define DL_ERR 1
#define DL_USR 2
#define DL_DBG 3
#define DL_INF 4
#define DL_FUN 5
#define DL_LOW 6
#define DL_DEFAULT DL_USR
#define DL_REN DL_ERR /* renaming operation */
#define DL_RES DL_DBG /* entry reference managment */
#define DL_BLK DL_LOW /* data block allocation / free */
#define DL_CP DL_LOW /* code pages (create, querydir) */
#define DL_EXT DL_LOW + 1 /* extents */
#define DL_MAP DL_EXT /* retrieval points */
#define DL_JNL DL_USR /* dump journal operations */
#if EXT2_DEBUG
extern ULONG DebugLevel;
VOID
__cdecl
Ext2NiPrintf(
PCHAR DebugMessage,
...
);
#define DEBUG(_DL, arg) do {if (_DL <= DebugLevel) Ext2Printf arg;} while(0)
#define DEBUGNI(_DL, arg) do {if (_DL <= DebugLevel) Ext2NiPrintf arg;} while(0)
#define Ext2CompleteRequest(Irp, bPrint, PriorityBoost) \
Ext2DbgPrintComplete(Irp, bPrint); \
IoCompleteRequest(Irp, PriorityBoost)
#else
#define DEBUG(_DL, arg) do {if (_DL <= DL_ERR) DbgPrint arg;} while(0)
#define Ext2CompleteRequest(Irp, bPrint, PriorityBoost) \
IoCompleteRequest(Irp, PriorityBoost)
#endif // EXT2_DEBUG
VOID
__cdecl
Ext2Printf(
PCHAR DebugMessage,
...
);
extern ULONG ProcessNameOffset;
#define Ext2GetCurrentProcessName() ( \
(PUCHAR) PsGetCurrentProcess() + ProcessNameOffset \
)
ULONG
Ext2GetProcessNameOffset (VOID);
VOID
Ext2DbgPrintCall (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp );
VOID
Ext2DbgPrintComplete (
IN PIRP Irp,
IN BOOLEAN bPrint
);
PUCHAR
Ext2NtStatusToString (IN NTSTATUS Status );
//
// Devctl.c
//
NTSTATUS
Ext2ProcessGlobalProperty(
IN PDEVICE_OBJECT DeviceObject,
IN PEXT2_VOLUME_PROPERTY2 Property
);
NTSTATUS
Ext2ProcessVolumeProperty(
IN PEXT2_VCB Vcb,
IN PEXT2_VOLUME_PROPERTY2 Property
);
NTSTATUS
Ext2ProcessUserProperty(
IN PEXT2_IRP_CONTEXT IrpContext,
IN PEXT2_VOLUME_PROPERTY2 Property,
IN ULONG Length
);
NTSTATUS
Ex2ProcessUserPerfStat(
IN PEXT2_IRP_CONTEXT IrpContext,
IN PEXT2_QUERY_PERFSTAT QueryPerf,
IN ULONG Length
);
NTSTATUS
Ex2ProcessMountPoint(
IN PEXT2_IRP_CONTEXT IrpContext,
IN PEXT2_MOUNT_POINT MountPoint,
IN ULONG Length
);
NTSTATUS
Ext2DeviceControlNormal (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2PrepareToUnload (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2DeviceControl (IN PEXT2_IRP_CONTEXT IrpContext);
//
// Dirctl.c
//
ULONG
Ext2GetInfoLength(IN FILE_INFORMATION_CLASS FileInformationClass);
NTSTATUS
Ext2ProcessDirEntry(
IN PEXT2_IRP_CONTEXT IrpContext,
IN PEXT2_VCB Vcb,
IN PEXT2_FCB Dcb,
IN FILE_INFORMATION_CLASS FileInformationClass,
IN ULONG in,
IN PVOID Buffer,
IN ULONG UsedLength,
IN ULONG Length,
IN ULONG FileIndex,
IN PUNICODE_STRING pName,
OUT PULONG EntrySize,
IN BOOLEAN Single
);
BOOLEAN
Ext2IsWearingCloak(
IN PEXT2_VCB Vcb,
IN POEM_STRING OeName
);
NTSTATUS
Ext2QueryDirectory (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2NotifyChangeDirectory (
IN PEXT2_IRP_CONTEXT IrpContext
);
VOID
Ext2NotifyReportChange (
IN PEXT2_IRP_CONTEXT IrpContext,
IN PEXT2_VCB Vcb,
IN PEXT2_MCB Mcb,
IN ULONG Filter,
IN ULONG Action
);
NTSTATUS
Ext2DirectoryControl (IN PEXT2_IRP_CONTEXT IrpContext);
BOOLEAN
Ext2IsDirectoryEmpty (
IN PEXT2_IRP_CONTEXT IrpContext,
IN PEXT2_VCB Vcb,
IN PEXT2_MCB Mcb
);
//
// Dispatch.c
//
VOID
Ext2OplockComplete (
IN PVOID Context,
IN PIRP Irp
);
VOID
Ext2LockIrp (
IN PVOID Context,
IN PIRP Irp
);
NTSTATUS
Ext2QueueRequest (IN PEXT2_IRP_CONTEXT IrpContext);
VOID
Ext2DeQueueRequest (IN PVOID Context);
NTSTATUS
Ext2DispatchRequest (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2BuildRequest (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
//
// Except.c
//
NTSTATUS
Ext2ExceptionFilter (
IN PEXT2_IRP_CONTEXT IrpContext,
IN PEXCEPTION_POINTERS ExceptionPointer
);
NTSTATUS
Ext2ExceptionHandler (IN PEXT2_IRP_CONTEXT IrpContext);
//
// ext3\generic.c
//
NTSTATUS
Ext2LoadSuper(
IN PEXT2_VCB Vcb,
IN BOOLEAN bVerify,
OUT PEXT2_SUPER_BLOCK * Sb
);
BOOLEAN
Ext2SaveSuper(
IN PEXT2_IRP_CONTEXT IrpContext,
IN PEXT2_VCB Vcb
);
BOOLEAN
Ext2RefreshSuper(
IN PEXT2_IRP_CONTEXT IrpContext,
IN PEXT2_VCB Vcb
);
BOOLEAN
Ext2LoadGroup(IN PEXT2_VCB Vcb);
BOOLEAN
Ext2SaveGroup(
IN PEXT2_IRP_CONTEXT IrpContext,
IN PEXT2_VCB Vcb,
IN ULONG Group
);
BOOLEAN
Ext2RefreshGroup(
IN PEXT2_IRP_CONTEXT IrpContext,
IN PEXT2_VCB Vcb
);
BOOLEAN
Ext2GetInodeLba (
IN PEXT2_VCB Vcb,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -