mirror of
https://github.com/bobranten/Ext4Fsd.git
synced 2025-10-29 13:18:30 -05:00
implemented support for new inode field i_crtime
This commit is contained in:
@@ -484,10 +484,13 @@ Ext2LookupFile (
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
Mcb->ChangeTime = Ext2GetInodeTime(Mcb->Inode.i_ctime, Mcb->Inode.i_ctime_extra);
|
||||
if (Mcb->Inode.i_crtime)
|
||||
Mcb->CreationTime = Ext2GetInodeTime(Mcb->Inode.i_crtime, Mcb->Inode.i_crtime_extra);
|
||||
else
|
||||
Mcb->CreationTime = Ext2GetInodeTime(Mcb->Inode.i_ctime, Mcb->Inode.i_ctime_extra);
|
||||
|
||||
/* process symlink */
|
||||
if (S_ISLNK(Mcb->Inode.i_mode) && !bNotFollow) {
|
||||
|
||||
@@ -250,10 +250,13 @@ Ext2ProcessEntry(
|
||||
|
||||
} else {
|
||||
|
||||
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->ChangeTime = Ext2GetInodeTime(Inode.i_ctime, Inode.i_ctime_extra);
|
||||
if (Inode.i_crtime)
|
||||
FDI->CreationTime = Ext2GetInodeTime(Inode.i_crtime, Inode.i_crtime_extra);
|
||||
else
|
||||
FDI->CreationTime = Ext2GetInodeTime(Inode.i_ctime, Inode.i_ctime_extra);
|
||||
}
|
||||
|
||||
FDI->FileAttributes = FileAttributes;
|
||||
@@ -306,10 +309,13 @@ Ext2ProcessEntry(
|
||||
|
||||
} else {
|
||||
|
||||
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->ChangeTime = Ext2GetInodeTime(Inode.i_ctime, Inode.i_ctime_extra);
|
||||
if (Inode.i_crtime)
|
||||
FBI->CreationTime = Ext2GetInodeTime(Inode.i_crtime, Inode.i_crtime_extra);
|
||||
else
|
||||
FBI->CreationTime = Ext2GetInodeTime(Inode.i_ctime, Inode.i_ctime_extra);
|
||||
}
|
||||
|
||||
FBI->FileAttributes = FileAttributes;
|
||||
|
||||
@@ -113,10 +113,13 @@ Ext2RefreshSuper (
|
||||
return FALSE;
|
||||
|
||||
/* initializeroot node */
|
||||
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);
|
||||
Vcb->McbTree->ChangeTime = Ext2GetInodeTime(Vcb->McbTree->Inode.i_ctime, Vcb->McbTree->Inode.i_ctime_extra);
|
||||
if (Vcb->McbTree->Inode.i_crtime)
|
||||
Vcb->McbTree->CreationTime = Ext2GetInodeTime(Vcb->McbTree->Inode.i_crtime, Vcb->McbTree->Inode.i_crtime_extra);
|
||||
else
|
||||
Vcb->McbTree->CreationTime = Ext2GetInodeTime(Vcb->McbTree->Inode.i_ctime, Vcb->McbTree->Inode.i_ctime_extra);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
||||
@@ -657,8 +657,8 @@ Ext2SetFileInformation (IN PEXT2_IRP_CONTEXT IrpContext)
|
||||
struct inode *Inode = &Mcb->Inode;
|
||||
|
||||
if (FBI->CreationTime.QuadPart != 0 && FBI->CreationTime.QuadPart != -1) {
|
||||
Ext2SetInodeTime(&FBI->CreationTime, &Inode->i_ctime, &Inode->i_ctime_extra);
|
||||
Mcb->CreationTime = Ext2GetInodeTime(Inode->i_ctime, Inode->i_ctime_extra);
|
||||
Ext2SetInodeTime(&FBI->CreationTime, &Inode->i_crtime, &Inode->i_crtime_extra);
|
||||
Mcb->CreationTime = Ext2GetInodeTime(Inode->i_crtime, Inode->i_crtime_extra);
|
||||
NotifyFilter |= FILE_NOTIFY_CHANGE_CREATION;
|
||||
}
|
||||
|
||||
@@ -676,7 +676,9 @@ Ext2SetFileInformation (IN PEXT2_IRP_CONTEXT IrpContext)
|
||||
}
|
||||
|
||||
if (FBI->ChangeTime.QuadPart !=0 && FBI->ChangeTime.QuadPart != -1) {
|
||||
Mcb->ChangeTime = FBI->ChangeTime;
|
||||
Ext2SetInodeTime(&FBI->ChangeTime, &Inode->i_ctime, &Inode->i_ctime_extra);
|
||||
Mcb->ChangeTime = Ext2GetInodeTime(Inode->i_ctime, Inode->i_ctime_extra);
|
||||
NotifyFilter |= FILE_NOTIFY_CHANGE_ATTRIBUTES;
|
||||
}
|
||||
|
||||
if (FBI->FileAttributes != 0) {
|
||||
@@ -2041,6 +2043,7 @@ Ext2DeleteFile(
|
||||
/* set delete time and free the inode */
|
||||
KeQuerySystemTime(&SysTime);
|
||||
Mcb->Inode.i_nlink = 0;
|
||||
/* i_dtime is only the lower 32-bits because it is used as a relative time */
|
||||
{ ULONG dummy; Ext2TimeToSecondsSince1970(&SysTime, &Mcb->Inode.i_dtime, &dummy); }
|
||||
Ext2SaveInode(IrpContext, Vcb, &Mcb->Inode);
|
||||
Ext2FreeInode(IrpContext, Vcb, Mcb->Inode.i_ino, Ext2InodeType(Mcb));
|
||||
|
||||
@@ -2694,10 +2694,13 @@ Ext2InitializeVcb( IN PEXT2_IRP_CONTEXT IrpContext,
|
||||
}
|
||||
|
||||
/* initializeroot node */
|
||||
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);
|
||||
Vcb->McbTree->ChangeTime = Ext2GetInodeTime(Vcb->McbTree->Inode.i_ctime, Vcb->McbTree->Inode.i_ctime_extra);
|
||||
if (Vcb->McbTree->Inode.i_crtime)
|
||||
Vcb->McbTree->CreationTime = Ext2GetInodeTime(Vcb->McbTree->Inode.i_crtime, Vcb->McbTree->Inode.i_crtime_extra);
|
||||
else
|
||||
Vcb->McbTree->CreationTime = Ext2GetInodeTime(Vcb->McbTree->Inode.i_ctime, Vcb->McbTree->Inode.i_ctime_extra);
|
||||
|
||||
/* check bitmap if user specifies it */
|
||||
if (IsFlagOn(Ext2Global->Flags, EXT2_CHECKING_BITMAP)) {
|
||||
|
||||
Reference in New Issue
Block a user