码迷,mamicode.com
首页 > 其他好文 > 详细

USN Journal 相关结构体

时间:2015-02-04 18:32:55      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:

1、USN_RECORD 单条USN记录结构信息结构

该USN记录,记录了磁盘上每一个文件或目录的相关信息,文件或目录名字可以通过 每条USN记录的指针位置、FileNameLength、FileNameOffset 三个值得出,为了后期版本的兼容性,最好不要直接使用FileName来获取。

typedef struct {

    DWORD RecordLength;                //该条USN记录长度
    WORD   MajorVersion;                //主版本
    WORD   MinorVersion;                //次版本
    DWORDLONG FileReferenceNumber;    //文件引用数
    DWORDLONG ParentFileReferenceNumber;//父文件引用数
    USN Usn;                        //USN(一般为int64类型)
    LARGE_INTEGER TimeStamp;            //时间戳    
    DWORD Reason;                    //原因
    DWORD SourceInfo;                //源信息
    DWORD SecurityId;                //安全    
    DWORD FileAttributes;                //文件属性(文件或目录)
    WORD   FileNameLength;            //文件名长度
    WORD   FileNameOffset;                //文件名偏移量
    WCHAR FileName[1];                //文件名第一位的指针

} USN_RECORD, *PUSN_RECORD;

 

2、USN_JOURNAL_DATA   USN日志信息结构

可以用来查询某个磁盘的USN日志信息。实际用于USN遍历,该结构中的NextUsn值被赋给MFT_ENUM_DATA结构中的HighUsn字段。

typedef struct {

    DWORDLONG UsnJournalID;        //USN日志ID
    USN FirstUsn;                //第一条USN记录的位置
    USN NextUsn;                //下一条USN记录将要写入的位置
    USN LowestValidUsn;            //最小的有效的USN(FistUSN小于该值)
    USN MaxUsn;                    //USN最大值
    DWORDLONG MaximumSize;        //USN日志最大大小(按Byte算)
    DWORDLONG AllocationDelta;        //USN日志每次创建和释放的内存字节数

} USN_JOURNAL_DATA, *PUSN_JOURNAL_DATA;

 

3、MFT_ENUM_DATA  遍历USN记录时的结构

在枚举USN记录时,做为 DeviceIoControl() API函数的输入缓冲变量,每次枚举时要更改StartFileReferenceNumber值(其值为输出缓冲区的前8个字节的值,为整型数据)。

typedef struct {

    DWORDLONG StartFileReferenceNumber;//开始文件引用数,第一次调用必须为0
    USN LowUsn;    //最小USN,第一次调用,最好为0
    USN HighUsn;//最大USN

} MFT_ENUM_DATA, *PMFT_ENUM_DATA;


4、READ_USN_JOURNAL_DATA  获取USN日志变更的结构   

USN日志变更信息,在磁盘文件或目录变化时,用来枚举这些变化的USN记录

typedef struct {

    USN StartUsn;//变更的USN记录开始位置,即第一次读取USN日志的LastUsn值。
    DWORD ReasonMask;    //原因标识
    DWORD ReturnOnlyOnClose;    //只有在记录关闭时才返回
    DWORDLONG Timeout;        //延迟时间
    DWORDLONG BytesToWaitFor;//当USN日志大小大于该值时返回
    DWORDLONG UsnJournalID;    //USN日志ID

} READ_USN_JOURNAL_DATA, *PREAD_USN_JOURNAL_DATA;


5、CREATE_USN_JOURNAL_DATA  创建USN日志的结构

用于创建USN日志

typedef struct {

    DWORDLONG MaximumSize;//NTFS文件系统分配给USN日志的最大大小(字节)
    DWORDLONG AllocationDelta;    //USN日志每次创建和释放的内存字节数

} CREATE_USN_JOURNAL_DATA, *PCREATE_USN_JOURNAL_DATA;


6、DELETE_USN_JOURNAL_DATA  删除USN日志的结构

用于删除USN日志

typedef struct {

    DWORDLONG UsnJournalID;//USN日志ID
    DWORD DeleteFlags;        //删除标志

} DELETE_USN_JOURNAL_DATA, *PDELETE_USN_JOURNAL_DATA;

 

USN Journal 相关结构体

标签:

原文地址:http://www.cnblogs.com/running-tao/p/4272832.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!