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