diff --git a/Ext4Fsd/cleanup.c b/Ext4Fsd/cleanup.c index 87540f4..09a72c8 100644 --- a/Ext4Fsd/cleanup.c +++ b/Ext4Fsd/cleanup.c @@ -29,7 +29,6 @@ Ext2Cleanup (IN PEXT2_IRP_CONTEXT IrpContext) PIRP Irp = NULL; PEXT2_MCB Mcb = NULL; - BOOLEAN VcbResourceAcquired = FALSE; BOOLEAN FcbResourceAcquired = FALSE; BOOLEAN FcbPagingIoResourceAcquired = FALSE; @@ -163,10 +162,9 @@ Ext2Cleanup (IN PEXT2_IRP_CONTEXT IrpContext) LARGE_INTEGER SysTime; KeQuerySystemTime(&SysTime); - Fcb->Inode->i_atime = - Fcb->Inode->i_mtime = Ext2LinuxTime(SysTime); - Fcb->Mcb->LastAccessTime = - Fcb->Mcb->LastWriteTime = Ext2NtTime(Fcb->Inode->i_atime); + Ext2SetInodeTime(&SysTime, &Fcb->Inode->i_mtime, &Fcb->Inode->i_mtime_extra); + Ext2SetInodeTime(&SysTime, &Fcb->Inode->i_atime, &Fcb->Inode->i_atime_extra); + Fcb->Mcb->LastAccessTime = Fcb->Mcb->LastWriteTime = Ext2GetInodeTime(Fcb->Inode->i_atime, Fcb->Inode->i_atime_extra); Ext2SaveInode(IrpContext, Vcb, Fcb->Inode); diff --git a/Ext4Fsd/create.c b/Ext4Fsd/create.c index 59d3e32..3830c18 100644 --- a/Ext4Fsd/create.c +++ b/Ext4Fsd/create.c @@ -31,7 +31,6 @@ extern PEXT2_GLOBAL Ext2Global; #pragma alloc_text(PAGE, Ext2SupersedeOrOverWriteFile) #endif - BOOLEAN Ext2IsNameValid(PUNICODE_STRING FileName) { @@ -62,7 +61,6 @@ Ext2IsNameValid(PUNICODE_STRING FileName) return TRUE; } - NTSTATUS Ext2FollowLink ( IN PEXT2_IRP_CONTEXT IrpContext, @@ -486,10 +484,10 @@ Ext2LookupFile ( } } - Mcb->CreationTime = Ext2NtTime(Mcb->Inode.i_ctime); - Mcb->LastAccessTime = Ext2NtTime(Mcb->Inode.i_atime); - Mcb->LastWriteTime = Ext2NtTime(Mcb->Inode.i_mtime); - Mcb->ChangeTime = Ext2NtTime(Mcb->Inode.i_mtime); + Mcb->CreationTime = Ext2GetInodeTime(Mcb->Inode.i_ctime, Mcb->Inode.i_ctime_extra); + Mcb->LastAccessTime = Ext2GetInodeTime(Mcb->Inode.i_atime, Mcb->Inode.i_atime_extra); + Mcb->LastWriteTime = Ext2GetInodeTime(Mcb->Inode.i_mtime, Mcb->Inode.i_mtime_extra); + Mcb->ChangeTime = Ext2GetInodeTime(Mcb->Inode.i_mtime, Mcb->Inode.i_mtime_extra); /* process symlink */ if (S_ISLNK(Mcb->Inode.i_mode) && !bNotFollow) { @@ -561,7 +559,6 @@ Ext2LookupFile ( return Status; } - NTSTATUS Ext2ScanDir ( IN PEXT2_IRP_CONTEXT IrpContext, @@ -1949,7 +1946,6 @@ errorout: return Status; } - NTSTATUS Ext2Create (IN PEXT2_IRP_CONTEXT IrpContext) { @@ -2075,8 +2071,9 @@ Ext2CreateInode( Ext2ClearInode(IrpContext, Vcb, iNo); Inode.i_sb = &Vcb->sb; Inode.i_ino = iNo; - Inode.i_ctime = Inode.i_mtime = - Inode.i_atime = Ext2LinuxTime(SysTime); + Ext2SetInodeTime(&SysTime, &Inode.i_ctime, &Inode.i_ctime_extra); + Ext2SetInodeTime(&SysTime, &Inode.i_mtime, &Inode.i_mtime_extra); + Ext2SetInodeTime(&SysTime, &Inode.i_atime, &Inode.i_atime_extra); if (IsFlagOn(Vcb->Flags, VCB_USER_IDS)) { Inode.i_uid = Vcb->uid; Inode.i_gid = Vcb->gid; @@ -2135,7 +2132,6 @@ errorout: return Status; } - NTSTATUS Ext2SupersedeOrOverWriteFile( IN PEXT2_IRP_CONTEXT IrpContext, @@ -2186,10 +2182,10 @@ Ext2SupersedeOrOverWriteFile( Fcb->Inode->i_size = 0; if (Disposition == FILE_SUPERSEDE) { - Fcb->Inode->i_ctime = Ext2LinuxTime(CurrentTime); + Ext2SetInodeTime(&CurrentTime, &Fcb->Inode->i_ctime, &Fcb->Inode->i_ctime_extra); } - Fcb->Inode->i_atime = - Fcb->Inode->i_mtime = Ext2LinuxTime(CurrentTime); + Ext2SetInodeTime(&CurrentTime, &Fcb->Inode->i_mtime, &Fcb->Inode->i_mtime_extra); + Ext2SetInodeTime(&CurrentTime, &Fcb->Inode->i_atime, &Fcb->Inode->i_atime_extra); Ext2SaveInode(IrpContext, Vcb, Fcb->Inode); // See if we need to overwrite EA of the file diff --git a/Ext4Fsd/dirctl.c b/Ext4Fsd/dirctl.c index 78b8ab8..9523fba 100644 --- a/Ext4Fsd/dirctl.c +++ b/Ext4Fsd/dirctl.c @@ -250,10 +250,10 @@ Ext2ProcessEntry( } else { - FDI->CreationTime = Ext2NtTime(Inode.i_ctime); - FDI->LastAccessTime = Ext2NtTime(Inode.i_atime); - FDI->LastWriteTime = Ext2NtTime(Inode.i_mtime); - FDI->ChangeTime = Ext2NtTime(Inode.i_mtime); + FDI->CreationTime = Ext2GetInodeTime(Inode.i_ctime, Inode.i_ctime_extra); + FDI->LastAccessTime = Ext2GetInodeTime(Inode.i_atime, Inode.i_atime_extra); + FDI->LastWriteTime = Ext2GetInodeTime(Inode.i_mtime, Inode.i_mtime_extra); + FDI->ChangeTime = Ext2GetInodeTime(Inode.i_mtime, Inode.i_mtime_extra); } FDI->FileAttributes = FileAttributes; @@ -306,10 +306,10 @@ Ext2ProcessEntry( } else { - FBI->CreationTime = Ext2NtTime(Inode.i_ctime); - FBI->LastAccessTime = Ext2NtTime(Inode.i_atime); - FBI->LastWriteTime = Ext2NtTime(Inode.i_mtime); - FBI->ChangeTime = Ext2NtTime(Inode.i_mtime); + FBI->CreationTime = Ext2GetInodeTime(Inode.i_ctime, Inode.i_ctime_extra); + FBI->LastAccessTime = Ext2GetInodeTime(Inode.i_atime, Inode.i_atime_extra); + FBI->LastWriteTime = Ext2GetInodeTime(Inode.i_mtime, Inode.i_mtime_extra); + FBI->ChangeTime = Ext2GetInodeTime(Inode.i_mtime, Inode.i_mtime_extra); } FBI->FileAttributes = FileAttributes; diff --git a/Ext4Fsd/ext3/generic.c b/Ext4Fsd/ext3/generic.c index 4a89826..947d196 100644 --- a/Ext4Fsd/ext3/generic.c +++ b/Ext4Fsd/ext3/generic.c @@ -113,10 +113,10 @@ Ext2RefreshSuper ( return FALSE; /* initializeroot node */ - Vcb->McbTree->CreationTime = Ext2NtTime(Vcb->McbTree->Inode.i_ctime); - Vcb->McbTree->LastAccessTime = Ext2NtTime(Vcb->McbTree->Inode.i_atime); - Vcb->McbTree->LastWriteTime = Ext2NtTime(Vcb->McbTree->Inode.i_mtime); - Vcb->McbTree->ChangeTime = Ext2NtTime(Vcb->McbTree->Inode.i_mtime); + Vcb->McbTree->CreationTime = Ext2GetInodeTime(Vcb->McbTree->Inode.i_ctime, Vcb->McbTree->Inode.i_ctime_extra); + Vcb->McbTree->LastAccessTime = Ext2GetInodeTime(Vcb->McbTree->Inode.i_atime, Vcb->McbTree->Inode.i_atime_extra); + Vcb->McbTree->LastWriteTime = Ext2GetInodeTime(Vcb->McbTree->Inode.i_mtime, Vcb->McbTree->Inode.i_mtime_extra); + Vcb->McbTree->ChangeTime = Ext2GetInodeTime(Vcb->McbTree->Inode.i_mtime, Vcb->McbTree->Inode.i_mtime_extra); } return TRUE; diff --git a/Ext4Fsd/ext3/htree.c b/Ext4Fsd/ext3/htree.c index bd91ba6..7e54c6c 100644 --- a/Ext4Fsd/ext3/htree.c +++ b/Ext4Fsd/ext3/htree.c @@ -108,7 +108,6 @@ static void TEA_transform(__u32 buf[4], __u32 const in[]) buf[1] += b1; } - /* The old legacy hash */ static __u32 dx_hack_hash_unsigned(const char *name, int len) { @@ -198,15 +197,18 @@ static void str2hashbuf_unsigned(const char *msg, int len, __u32 *buf, int num) *buf++ = pad; } - #endif /* EXT2_HTREE_INDEX */ __u32 ext3_current_time(struct inode *in) { - LARGE_INTEGER SysTime; - KeQuerySystemTime(&SysTime); + LARGE_INTEGER SysTime; + ULONG hi, lo; - return Ext2LinuxTime(SysTime); + KeQuerySystemTime(&SysTime); + Ext2SetInodeTime(&SysTime, &lo, &hi); + in->i_ctime_extra = in->i_mtime_extra = hi; + in->i_ctime = in->i_mtime = lo; + return lo; } void ext3_warning (struct super_block * sb, const char * function, @@ -224,7 +226,6 @@ void ext3_warning (struct super_block * sb, const char * function, #endif } - /* ext3_bread is safe for meta-data blocks. it's not safe to read file data, since file data is managed by file cache, not volume cache */ struct buffer_head *ext3_bread(struct ext2_icb *icb, struct inode *inode, @@ -303,7 +304,6 @@ struct buffer_head *ext3_append(struct ext2_icb *icb, struct inode *inode, return ext3_bread(icb, inode, *block, err); } - void ext3_inc_count(struct inode *inode) { inode->i_nlink++; @@ -551,7 +551,6 @@ int ext3_dirhash(const char *name, int len, struct dx_hash_info *hinfo) } EXPORT_SYMBOL(ext3_dirhash); - /* * These functions convert from the major/minor hash to an f_pos * value. @@ -628,7 +627,6 @@ static void free_rb_tree_fname(struct rb_root *root) root->rb_node = NULL; } - static struct dir_private_info *create_dir_info(loff_t pos) { struct dir_private_info *p; @@ -924,7 +922,6 @@ struct stats dx_show_entries(struct ext2_icb *icb, struct dx_hash_info *hinfo, } #endif /* DX_DEBUG */ - int ext3_save_inode ( struct ext2_icb *icb, struct inode *in) { return Ext2SaveInode(icb, in->i_sb->s_priv, in); @@ -1293,7 +1290,6 @@ errout: return (err); } - /* * Directory block splitting, compacting */ diff --git a/Ext4Fsd/fileinfo.c b/Ext4Fsd/fileinfo.c index 546ded8..68f8f92 100644 --- a/Ext4Fsd/fileinfo.c +++ b/Ext4Fsd/fileinfo.c @@ -495,7 +495,6 @@ Ext2QueryFileInformation (IN PEXT2_IRP_CONTEXT IrpContext) return Status; } - NTSTATUS Ext2SetFileInformation (IN PEXT2_IRP_CONTEXT IrpContext) { @@ -658,20 +657,20 @@ Ext2SetFileInformation (IN PEXT2_IRP_CONTEXT IrpContext) struct inode *Inode = &Mcb->Inode; if (FBI->CreationTime.QuadPart != 0 && FBI->CreationTime.QuadPart != -1) { - Inode->i_ctime = Ext2LinuxTime(FBI->CreationTime); - Mcb->CreationTime = Ext2NtTime(Inode->i_ctime); + Ext2SetInodeTime(&FBI->CreationTime, &Inode->i_ctime, &Inode->i_ctime_extra); + Mcb->CreationTime = Ext2GetInodeTime(Inode->i_ctime, Inode->i_ctime_extra); NotifyFilter |= FILE_NOTIFY_CHANGE_CREATION; } if (FBI->LastAccessTime.QuadPart != 0 && FBI->LastAccessTime.QuadPart != -1) { - Inode->i_atime = Ext2LinuxTime(FBI->LastAccessTime); - Mcb->LastAccessTime = Ext2NtTime(Inode->i_atime); + Ext2SetInodeTime(&FBI->LastAccessTime, &Inode->i_atime, &Inode->i_atime_extra); + Mcb->LastAccessTime = Ext2GetInodeTime(Inode->i_atime, Inode->i_atime_extra); NotifyFilter |= FILE_NOTIFY_CHANGE_LAST_ACCESS; } if (FBI->LastWriteTime.QuadPart != 0 && FBI->LastWriteTime.QuadPart != -1) { - Inode->i_mtime = Ext2LinuxTime(FBI->LastWriteTime); - Mcb->LastWriteTime = Ext2NtTime(Inode->i_mtime); + Ext2SetInodeTime(&FBI->LastWriteTime, &Inode->i_mtime, &Inode->i_mtime_extra); + Mcb->LastWriteTime = Ext2GetInodeTime(Inode->i_mtime, Inode->i_mtime_extra); NotifyFilter |= FILE_NOTIFY_CHANGE_LAST_WRITE; SetFlag(Ccb->Flags, CCB_LAST_WRITE_UPDATED); } @@ -1133,7 +1132,6 @@ Ext2BlockMap( return status; } - NTSTATUS Ext2ExpandFile( PEXT2_IRP_CONTEXT IrpContext, @@ -1185,7 +1183,6 @@ errorout: return status; } - NTSTATUS Ext2TruncateFile( PEXT2_IRP_CONTEXT IrpContext, @@ -2044,7 +2041,7 @@ Ext2DeleteFile( /* set delete time and free the inode */ KeQuerySystemTime(&SysTime); Mcb->Inode.i_nlink = 0; - Mcb->Inode.i_dtime = Ext2LinuxTime(SysTime); + { ULONG dummy; Ext2TimeToSecondsSince1970(&SysTime, &Mcb->Inode.i_dtime, &dummy); } Ext2SaveInode(IrpContext, Vcb, &Mcb->Inode); Ext2FreeInode(IrpContext, Vcb, Mcb->Inode.i_ino, Ext2InodeType(Mcb)); } diff --git a/Ext4Fsd/flush.c b/Ext4Fsd/flush.c index 3dbbe13..5da995e 100644 --- a/Ext4Fsd/flush.c +++ b/Ext4Fsd/flush.c @@ -77,8 +77,8 @@ Ext2FlushFile ( LARGE_INTEGER SysTime; KeQuerySystemTime(&SysTime); - Fcb->Inode->i_mtime = Ext2LinuxTime(SysTime); - Fcb->Mcb->LastWriteTime = Ext2NtTime(Fcb->Inode->i_mtime); + Ext2SetInodeTime(&SysTime, &Fcb->Inode->i_mtime, &Fcb->Inode->i_mtime_extra); + Fcb->Mcb->LastWriteTime = Ext2GetInodeTime(Fcb->Inode->i_mtime, Fcb->Inode->i_mtime_extra); Ext2SaveInode(IrpContext, Fcb->Vcb, Fcb->Inode); } } diff --git a/Ext4Fsd/memory.c b/Ext4Fsd/memory.c index b92e094..efe0150 100644 --- a/Ext4Fsd/memory.c +++ b/Ext4Fsd/memory.c @@ -2693,10 +2693,10 @@ Ext2InitializeVcb( IN PEXT2_IRP_CONTEXT IrpContext, } /* initializeroot node */ - Vcb->McbTree->CreationTime = Ext2NtTime(Vcb->McbTree->Inode.i_ctime); - Vcb->McbTree->LastAccessTime = Ext2NtTime(Vcb->McbTree->Inode.i_atime); - Vcb->McbTree->LastWriteTime = Ext2NtTime(Vcb->McbTree->Inode.i_mtime); - Vcb->McbTree->ChangeTime = Ext2NtTime(Vcb->McbTree->Inode.i_mtime); + Vcb->McbTree->CreationTime = Ext2GetInodeTime(Vcb->McbTree->Inode.i_ctime, Vcb->McbTree->Inode.i_ctime_extra); + Vcb->McbTree->LastAccessTime = Ext2GetInodeTime(Vcb->McbTree->Inode.i_atime, Vcb->McbTree->Inode.i_atime_extra); + Vcb->McbTree->LastWriteTime = Ext2GetInodeTime(Vcb->McbTree->Inode.i_mtime, Vcb->McbTree->Inode.i_mtime_extra); + Vcb->McbTree->ChangeTime = Ext2GetInodeTime(Vcb->McbTree->Inode.i_mtime, Vcb->McbTree->Inode.i_mtime_extra); /* check bitmap if user specifies it */ if (IsFlagOn(Ext2Global->Flags, EXT2_CHECKING_BITMAP)) {