FILE_OBJECTID_INFORMATION结构 (ntifs.h)
FILE_OBJECTID_INFORMATION 结构用于查询 NTFS 卷上目录中文件的对象 ID 信息。
语法
typedef struct _FILE_OBJECTID_INFORMATION {
LONGLONG FileReference;
UCHAR ObjectId[16];
union {
struct {
UCHAR BirthVolumeId[16];
UCHAR BirthObjectId[16];
UCHAR DomainId[16];
} DUMMYSTRUCTNAME;
UCHAR ExtendedInfo[48];
} DUMMYUNIONNAME;
} FILE_OBJECTID_INFORMATION, *PFILE_OBJECTID_INFORMATION;
成员
FileReference
文件的 8 字节文件引用编号。 NTFS 生成此数字,并在创建文件时自动将其分配给该文件。
ObjectId[16]
文件的 16 字节文件对象 ID。 NTFS 生成此数字,并在驱动程序或应用程序的请求下将其分配给文件。 文件对象 ID 保证仅在文件所在的卷内是唯一的。
DUMMYUNIONNAME
DUMMYUNIONNAME.DUMMYSTRUCTNAME
DUMMYUNIONNAME.DUMMYSTRUCTNAME.BirthVolumeId[16]
创建对象标识符时文件所在的卷的对象标识符;如果卷当时没有对象标识符,则为零。 复制操作、移动操作或其他文件操作后,BirthVolumeId 可能与对象当前所在的卷的对象标识符不同。
DUMMYUNIONNAME.DUMMYSTRUCTNAME.BirthObjectId[16]
创建文件时文件的对象标识符。 复制操作、移动操作或其他文件操作 BirthObjectId 可能与 ObjectId 成员的当前值不同。
DUMMYUNIONNAME.DUMMYSTRUCTNAME.DomainId[16]
保留;必须为零。
DUMMYUNIONNAME.ExtendedInfo[48]
用户提供的数据。 可以使用它来包含 BirthVolumeID、BirthObjectID,以及 DomainID 成员,也可以定义不同的数据结构。
言论
可通过以下任一方式查询此信息:
调用 ZwQueryDirectoryFile,将 FileObjectIdInformation 作为 FileInformationClass 的值传递,并将调用方分配的 FILE_OBJECTID_INFORMATION结构化缓冲区作为 fileInformation的值传递。
使用主要函数代码IRP_MJ_DIRECTORY_CONTROL和次要函数代码IRP_MN_QUERY_DIRECTORY创建 IRP。
查询此信息不需要任何特殊的访问权限。
对文件引用编号和文件对象 ID 的支持特定于文件系统:
- 文件对象 ID 仅在 NTFS 卷上受支持。 NTFS 允许通过对象 ID 和文件引用编号打开文件。
- ReFS 不支持对象 ID。 ReFS 使用 128 位文件 ID,因此在处理按 ID 打开时,无法完全区分文件 ID 与对象 ID。 (文件 ID 是 NTFS 上的 64 位,因此可以轻松区分对象 ID。NTFS 还同时支持以 128 位 ID 打开:如果高 64 位为零,则低 64 位被视为文件 ID;否则,128 位值被视为对象 ID。
应测试使用文件对象 ID 的文件系统筛选器驱动程序,以便与 DFS、复制器服务和分布式链接跟踪服务实现互操作性,所有这些驱动程序都使用和操作文件对象 ID。
此结构必须在 LONG(4 字节)边界上对齐。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 2000 |
标头 | ntifs.h(包括 Ntifs.h、Fltkernel.h) |