📄 ext2fs.h
字号:
typedef struct _EXT2_CCB {
// Identifier for this structure
EXT2_IDENTIFIER Identifier;
// State that may need to be maintained
ULONG CurrentByteOffset;
UNICODE_STRING DirectorySearchPattern;
} EXT2_CCB, *PEXT2_CCB;
//
// EXT2_IRP_CONTEXT
//
// Used to pass information about a request between the drivers functions
//
typedef struct _EXT2_IRP_CONTEXT {
// Identifier for this structure
EXT2_IDENTIFIER Identifier;
// Pointer to the IRP this request describes
PIRP Irp;
// The major and minor function code for the request
UCHAR MajorFunction;
UCHAR MinorFunction;
// The device object
PDEVICE_OBJECT DeviceObject;
// The file object
PFILE_OBJECT FileObject;
// If the request is synchronous (we are allowed to block)
BOOLEAN IsSynchronous;
// If the request is top level
BOOLEAN IsTopLevel;
// Used if the request needs to be queued for later processing
WORK_QUEUE_ITEM WorkQueueItem;
// If an exception is currently in progress
BOOLEAN ExceptionInProgress;
// The exception code when an exception is in progress
NTSTATUS ExceptionCode;
} EXT2_IRP_CONTEXT, *PEXT2_IRP_CONTEXT;
//
// EXT2_ALLOC_HEADER
//
// In the checked version of the driver this header is put in the beginning of
// every memory allocation
//
typedef struct _EXT2_ALLOC_HEADER {
EXT2_IDENTIFIER Identifier;
} EXT2_ALLOC_HEADER, *PEXT2_ALLOC_HEADER;
typedef struct _FCB_LIST_ENTRY {
PEXT2_FCB Fcb;
LIST_ENTRY Next;
} FCB_LIST_ENTRY, *PFCB_LIST_ENTRY;
#pragma pack()
/* FUNCTIONS DECLARATION *****************************************************/
LARGE_INTEGER
Ext2SysTime (IN ULONG i_time);
ULONG
Ext2InodeTime (IN LARGE_INTEGER SysTime);
NTSTATUS
Ext2ReadSectors(IN PDEVICE_OBJECT pDeviceObject,
IN ULONG DiskSector,
IN ULONG SectorCount,
IN PVOID Buffer);
NTSTATUS
Ext2WriteSectors(IN PDEVICE_OBJECT pDeviceObject,
IN ULONG DiskSector,
IN ULONG SectorCount,
IN PVOID Buffer);
NTSTATUS
Ext2ReadDisk(IN PDEVICE_OBJECT pDeviceObject,
IN ULONG lba,
IN ULONG offset,
IN ULONG Size,
IN PVOID Buffer);
NTSTATUS
Ext2WriteDisk(IN PDEVICE_OBJECT pDeviceObject,
IN ULONG lba,
IN ULONG offset,
IN ULONG Size,
IN PVOID Buffer);
NTSTATUS
Ext2DiskIoControl (IN PDEVICE_OBJECT pDeviceObject,
IN ULONG IoctlCode,
IN PVOID InputBuffer,
IN ULONG InputBufferSize,
IN OUT PVOID OutputBuffer,
IN OUT PULONG OutputBufferSize);
NTSTATUS
Ext2ReadDiskOverrideVerify (IN PDEVICE_OBJECT pDeviceObject,
IN ULONG DiskSector,
IN ULONG SectorCount,
IN OUT PUCHAR Buffer);
struct ext2_super_block *
Ext2LoadSuper(IN PDEVICE_OBJECT pDeviceObject);
NTSTATUS
Ext2SaveSuper(IN PDEVICE_OBJECT pDeviceObject,
IN struct ext2_super_block * sb);
struct ext2_group_desc *
Ext2LoadGroup(IN PEXT2_VCB vcb);
NTSTATUS
Ext2SaveGroup(IN PEXT2_VCB vcb,
IN struct ext2_group_desc * gd);
BOOLEAN
Ext2GetInodeLba (IN PEXT2_VCB vcb,
IN ULONG inode,
OUT PULONG lba,
OUT PULONG offset);
BOOLEAN
Ext2LoadInode (IN PEXT2_VCB vcb,
IN ULONG inode,
IN struct ext2_inode *ext2_inode);
BOOLEAN
Ext2SaveInode (IN PEXT2_VCB vcb,
IN ULONG inode,
IN struct ext2_inode *ext2_inode);
ULONG Ext2GetBlock(IN PEXT2_VCB vcb,
ULONG dwContent,
ULONG Index,
int layer);
ULONG Ext2BlockMap(IN PEXT2_VCB vcb,
IN struct ext2_inode* ext2_inode,
IN ULONG Index);
ULONG
Ext2ReadInode (IN PEXT2_VCB vcb,
IN struct ext2_inode* ext2_inode,
IN ULONG offset,
IN PVOID Buffer,
IN ULONG size);
ULONG
Ext2WriteInode (IN PEXT2_VCB vcb,
IN struct ext2_inode* ext2_inode,
IN ULONG offset,
IN PVOID Buffer,
IN ULONG size);
PEXT2_IRP_CONTEXT
Ext2AllocateIrpContext (IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp );
VOID
Ext2FreeIrpContext (IN PEXT2_IRP_CONTEXT IrpContext);
PEXT2_FCB
Ext2AllocateFcb (IN PEXT2_VCB Vcb,
IN PUNICODE_STRING FileName,
IN ULONG IndexNumber,
IN ULONG inode,
IN ULONG dir_inode,
IN struct ext2_inode* ext2_inode );
VOID
Ext2FreeFcb (IN PEXT2_FCB Fcb);
PEXT2_CCB
Ext2AllocateCcb (VOID);
VOID
Ext2FreeCcb (IN PEXT2_CCB Ccb);
VOID
Ext2FreeVcb (IN PEXT2_VCB Vcb );
BOOLEAN
Ext2FastIoQueryBasicInfo (IN PFILE_OBJECT FileObject,
IN BOOLEAN Wait,
OUT PFILE_BASIC_INFORMATION Buffer,
OUT PIO_STATUS_BLOCK IoStatus,
IN PDEVICE_OBJECT DeviceObject);
BOOLEAN
Ext2FastIoQueryStandardInfo (IN PFILE_OBJECT FileObject,
IN BOOLEAN Wait,
OUT PFILE_STANDARD_INFORMATION Buffer,
OUT PIO_STATUS_BLOCK IoStatus,
IN PDEVICE_OBJECT DeviceObject);
BOOLEAN
Ext2FastIoLock (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN PLARGE_INTEGER Length,
IN PEPROCESS ProcessId,
IN ULONG Key,
IN BOOLEAN FailImmediately,
IN BOOLEAN ExclusiveLock,
OUT PIO_STATUS_BLOCK IoStatus,
IN PDEVICE_OBJECT DeviceObject
);
BOOLEAN
Ext2FastIoUnlockSingle (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN PLARGE_INTEGER Length,
IN PEPROCESS ProcessId,
IN ULONG Key,
OUT PIO_STATUS_BLOCK IoStatus,
IN PDEVICE_OBJECT DeviceObject
);
BOOLEAN
Ext2FastIoUnlockAll (
IN PFILE_OBJECT FileObject,
IN PEPROCESS ProcessId,
OUT PIO_STATUS_BLOCK IoStatus,
IN PDEVICE_OBJECT DeviceObject
);
BOOLEAN
Ext2FastIoUnlockAllByKey (
IN PFILE_OBJECT FileObject,
IN PEPROCESS ProcessId,
IN ULONG Key,
OUT PIO_STATUS_BLOCK IoStatus,
IN PDEVICE_OBJECT DeviceObject
);
NTSTATUS
Ext2LockControl (IN PEXT2_IRP_CONTEXT IrpContext);
BOOLEAN
Ext2FastIoQueryNetworkOpenInfo (
IN PFILE_OBJECT FileObject,
IN BOOLEAN Wait,
OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
OUT PIO_STATUS_BLOCK IoStatus,
IN PDEVICE_OBJECT DeviceObject );
BOOLEAN
Ext2FastIoQueryNetworkOpenInfo (IN PFILE_OBJECT FileObject,
IN BOOLEAN Wait,
OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
OUT PIO_STATUS_BLOCK IoStatus,
IN PDEVICE_OBJECT DeviceObject);
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);
NTSTATUS
Ext2Close (IN PEXT2_IRP_CONTEXT IrpContext);
VOID
Ext2QueueCloseRequest (IN PEXT2_IRP_CONTEXT IrpContext);
VOID
Ext2DeQueueCloseRequest (IN PVOID Context);
NTSTATUS
Ext2ScanDir (IN PEXT2_VCB Vcb,
IN ULONG inode,
IN PUNICODE_STRING FileName,
IN OUT PULONG Index,
IN PEXT2_INODE ext2_inode,
IN PEXT2_DIR_ENTRY dir_entry);
NTSTATUS
Ext2LookupFileName (IN PEXT2_VCB Vcb,
IN PUNICODE_STRING FullFileName,
IN OUT PULONG Offset,
IN OUT PULONG Inode,
IN OUT PULONG DirInode,
IN OUT PEXT2_INODE ext2_inode);
NTSTATUS
Ext2OpenFile(PEXT2_VCB Vcb, PIRP Irp);
NTSTATUS
Ext2Create (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2ReadFileData (IN PEXT2_VCB Vcb,
IN ULONG Index,
IN struct ext2_inode* Inode,
IN PLARGE_INTEGER Offset,
IN ULONG Length,
IN OUT PVOID Buffer);
NTSTATUS
Ext2Read (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2ReadNormal (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2ReadComplete (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2SetInformation (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2QueryVolumeInformation (IN PEXT2_IRP_CONTEXT IrpContext);
VOID
Ext2CharToWchar (IN OUT PWCHAR Destination,
IN PCHAR Source,
IN ULONG Length);
NTSTATUS
Ext2WcharToChar (IN OUT PCHAR Destination,
IN PWCHAR Source,
IN ULONG Length);
NTSTATUS
Ext2LockUserBuffer (IN PIRP Irp,
IN ULONG Length,
IN LOCK_OPERATION Operation);
PVOID
Ext2GetUserBuffer (IN PIRP Irp);
ULONG
Ext2GetInfoLength(IN FILE_INFORMATION_CLASS FileInformationClass);
ULONG
Ext2ProcessDirEntry(IN PEXT2_VCB Vcb,
IN FILE_INFORMATION_CLASS FileInformationClass,
IN ULONG in,
IN PVOID Buffer,
IN ULONG UsedLength,
IN ULONG Length,
IN ULONG FileIndex,
IN UNICODE_STRING* pName,
IN BOOLEAN Single );
NTSTATUS
Ext2QueryDirectory (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2DirectoryControl (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2QueueRequest (IN PEXT2_IRP_CONTEXT IrpContext);
VOID
Ext2DeQueueRequest (IN PVOID Context);
NTSTATUS
Ext2Cleanup (IN PEXT2_IRP_CONTEXT IrpContext);
#if DBG
NTSTATUS
Ext2DeviceControlCompletion (IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context);
#endif
NTSTATUS
Ext2DeviceControlNormal (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2PrepareToUnload (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2DeviceControl (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2VerifyVolume (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2IsVolumeMounted (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2DismountVolume (IN PEXT2_IRP_CONTEXT IrpContext);
VOID
Ext2PurgeVolume (IN PEXT2_VCB Vcb,
IN BOOLEAN FlushBeforePurge);
VOID
Ext2PurgeFile (IN PEXT2_FCB Fcb,
IN BOOLEAN FlushBeforePurge);
NTSTATUS
Ext2LockVolume (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2UnlockVolume (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2UserFsRequest (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2MountVolume (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2FileSystemControl (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2DispatchRequest (IN PEXT2_IRP_CONTEXT IrpContext);
NTSTATUS
Ext2ExceptionFilter (IN PEXT2_IRP_CONTEXT IrpContext,
IN NTSTATUS ExceptionCode);
NTSTATUS
Ext2ExceptionHandler (IN PEXT2_IRP_CONTEXT IrpContext);
VOID
Ext2SetVpbFlag (IN PVPB Vpb,
IN USHORT Flag );
VOID
Ext2ClearVpbFlag (IN PVPB Vpb,
IN USHORT Flag );
NTSTATUS
Ext2BuildRequest (IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp);
VOID
DriverUnload (IN PDRIVER_OBJECT DriverObject);
BOOLEAN
Ext2FastIoCheckIfPossible (
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 );
PUCHAR
Ext2NtStatusToString (IN NTSTATUS Status );
#if DBG
BOOLEAN
Ext2FastIoRead (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);
VOID
Ext2DbgPrintCall (IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp );
VOID
Ext2DbgPrintComplete (IN PIRP Irp);
#define Ext2CompleteRequest(Irp, PriorityBoost) \
Ext2DbgPrintComplete(Irp); \
IoCompleteRequest(Irp, PriorityBoost)
#else
#define Ext2DbgPrintCall(DeviceObject, Irp)
#define Ext2CompleteRequest(Irp, PriorityBoost) \
IoCompleteRequest(Irp, PriorityBoost)
#endif /* DBG */
#endif /* _EXT2_HEADER_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -