USN Journal 相关结构体

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;
时间: 2024-10-21 11:20:23

USN Journal 相关结构体的相关文章

Linux网络编程之socket相关结构体

Linux中的网络编程是通过 Socket (套接字)实现. Socket有三种类型: 流式套接字(SOCK_STREAM) 流式套接字可以提供可靠的.面向连接的通讯流,它使用TCP协议.TCP保证了数据传输的正确性和顺序性. 数据报套接字(SOCK_DGRAM) 数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错,它使用数据报协议UDP. 原始套接字(SOCK_RAM) 原始套接字允许使用IP协议,主要用于新的网络协议的测试等. Socket

libevent源码分析1 ----evnet相关结构体分析

位于代码event-internal.h中. event_base类似事件的集合,你创建一个事件,必须将该事件指定一个集合. struct event_base { 50     const struct eventop *evsel; /*evsel和evbase就类比与类和对象之间的关系,evbase是evsel的 51     一个具体实现,指在这里使用的复用模型*/ 52     void *evbase; 53     /*这个event_base所关注的事件数目*/ 54     i

文件系统及其相关结构体

fd指向打开的文件描述符列表,开始的时候指向fd_array,当大小超过max_fds时,重新分配地址 file结构体代表一个打开的文件 f_op其中包含着与文件关联的操作 进程内核栈与进程描述符之间的关系 task_struct结构体注释详解可参考http://www.educity.cn/linux/518072.html dentry的中文名称是目录项,是Linux文件系统中某个索引节点(inode)的链接.这个索引节点可以是文件,也可以是目录. struct dentry {      

linux块设备驱动---相关结构体(转)

上回最后面介绍了相关数据结构,下面再详细介绍 块设备对象结构 block_device 内核用结构block_device实例代表一个块设备对象,如:整个硬盘或特定分区.如果该结构代表一个分区,则其成员bd_part指向设备的分区结构.如果该结构代表设备,则其成员bd_disk指向设备的通用硬盘结构gendisk 当用户打开块设备文件时,内核创建结构block_device实例,设备驱动程序还将创建结构gendisk实例,分配请求队列并注册结构block_device实例. 块设备对象结构blo

线程临界区相关结构体和函数

单进程的线程可以使用临界资源对象来解决同步互斥问题,该对象不能保证哪个线程能够获得到临界资源对象,因而该系统能公平的对待每一个线程. 每个进程中访问临界资源的那段代码称为临界区(Critical Section)(临界资源是一次仅允许一个进程使用的共享资源).每次只准许一个进程进入临界区,进入后不允许其他进程进入.不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问. 多个进程中涉及到同一个临界资源的临界区称为相关临界区. 进程进入临界区的调度原则是: 1.如果有若干进程要求进入

XAudio2学习之音效相关结构体

任何XAudio2 voice都可以持有一个音频效果链.你可以使用XAUDIO2_EFFECT_DESCRIPTOR数组来指定效果链.每个描述因子都包含了由客户端提供的指向音效对象的指针.这些对象必须实现APO接口. 结构体定义为: typedef struct XAUDIO2_EFFECT_DESCRIPTOR { IUnknown *pEffect; BOOL InitialState; UINT32 OutputChannels; } XAUDIO2_EFFECT_DESCRIPTOR;

LDD和scull相关各种结构体的故事(学习笔记 不定期更新)

LDD和各种结构体的故事 struct scull_dev     位置:scull/scull.h struct scull_dev { struct scull_qset *data; /* Pointer to first quantum set */ int quantum; /* the current quantum size */ int qset; /* the current array size */ unsigned long size; /* amount of data

3. file、inode结构体及chardevs数组等相关知识解析

https://blog.csdn.net/zqixiao_09/article/details/50850004 下图描述了Linux中虚拟文件系统,一般的设备文件与设备驱动程序间的函数调用关系 上图展现了一个应用程序调用字符设备驱动的过程,在设备驱动程序的设计中,一般而言,会关系file和inode这两个结构体. 用户空间使用open()函数打开一个字符设备fd = open("/dev/hello", o_READ);这一函数会调用两个数据结构struct inode{}&

【转】结构体struct相关知识

第一篇:typedef struct与struct的区别 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等). 在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明. 至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述. 2. typedef & 结构的问题 当用下面的代码定义一个结构时,编译器