第一部分:
NtfsWriteLog( IrpContext,
Vcb->MftScb, //注意:Vcb->MftScb
NULL,
OpenAttributeTableDump,
Vcb->OnDiskOat->Table,
SizeOfRestartTable( Vcb->OnDiskOat ),
Noop,
NULL,
0,
(LONGLONG)0,
0,
0,
0 );
第二部分:
F:\srv03rtm>grep "OpenAttributeTableDump" -rn F:\srv03rtm\base\fs |grep -v "inary"
F:\srv03rtm\base\fs/ntfs/logsup.c:2279: OpenAttributeTableDump,
F:\srv03rtm\base\fs/ntfs/ntfskd/ntfskd.c:258: { "OpenAttributeTableDump " },
F:\srv03rtm\base\fs/ntfs/ntfslog.h:63: OpenAttributeTableDump = 0x1D, // OPEN_ATTRIBUTE_ENTRY array
F:\srv03rtm\base\fs/ntfs/restrsup.c:2466: case OpenAttributeTableDump:
F:\srv03rtm\base\fs/ntfs/restrsup.c:4475: case OpenAttributeTableDump:
第三部分:
VOID
AnalysisPass (
IN PIRP_CONTEXT IrpContext,
IN PVCB Vcb,
IN LSN CheckpointLsn,
IN OUT PRESTART_POINTERS DirtyPageTable,
OUT PLSN RedoLsn
)
{
//
// The following cases require no action in the Analysis Pass.
//
case Noop:
case OpenAttributeTableDump:
case AttributeNamesDump:
case DirtyPageTableDump:
case TransactionTableDump:
第四部分:
VOID
DoAction (
IN PIRP_CONTEXT IrpContext,
IN PVCB Vcb,
IN PNTFS_LOG_RECORD_HEADER LogRecord,
IN NTFS_LOG_OPERATION Operation,
IN PVOID Data,
IN ULONG Length,
IN ULONG LogRecordLength,
IN PLSN RedoLsn OPTIONAL,
IN PSCB Scb OPTIONAL,
OUT PBCB *Bcb,
OUT PLSN *PageLsn
)
{
//
// The following cases require no action during the Redo or Undo Pass.
//
case Noop:
case DeleteDirtyClusters:
case HotFix:
case EndTopLevelAction:
case PrepareTransaction:
case CommitTransaction:
case ForgetTransaction:
case CompensationLogRecord:
case OpenNonresidentAttribute:
case OpenAttributeTableDump:
case AttributeNamesDump:
case DirtyPageTableDump:
case TransactionTableDump:
break;