FSCTL_GET_NTFS_FILE_RECORD IOCTL (winioctl.h)

检索正在使用且其序号小于或等于所请求文件引用编号的第一个文件记录。

若要执行此操作,请使用以下参数调用 DeviceIoControl 函数。

BOOL DeviceIoControl(
  (HANDLE) hDevice,                 // handle to device
  FSCTL_GET_NTFS_FILE_RECORD,       // dwIoControlCode
  (LPVOID) lpInBuffer,              // input buffer
  (DWORD) nInBufferSize,            // size of input buffer
  (LPVOID) lpOutBuffer,             // output buffer
  (DWORD) nOutBufferSize,           // size of output buffer
  (LPDWORD) lpBytesReturned,        // number of bytes returned
  (LPOVERLAPPED) lpOverlapped       // OVERLAPPED structure
);

注解

此控制代码以向下方式枚举文件标识符,并始终返回正在使用的文件记录。 这意味着此控制代码返回的文件标识符可能与输入缓冲区中指定的文件标识符不同。 例如,如果正在使用文件标识符 1 到 9 和 15,则文件标识符 10 到 14 未使用,并且请求与文件标识符 15 对应的文件记录,则返回该文件记录。

如果请求与文件标识符 10 到 14 对应的文件记录,则返回与文件标识符 9 对应的文件记录。 如果请求任何与文件标识符 1 到 9 对应的文件记录,则返回这些文件记录。

若要确定 lpOutBuffer 指向的输出缓冲区的正确大小,请首先调用 FSCTL_GET_NTFS_VOLUME_DATA 控制代码以获取一条文件记录的大小。 这是返回的 NTFS_VOLUME_DATA_BUFFER 结构的 BytesPerFileRecordSegment 成员的值。 然后将输出缓冲区的大小设置为以下表达式:

sizeof (NTFS_FILE_RECORD_OUTPUT_BUFFER) + sizeof (one file record) - 1

如果文件由多个文件记录组成,则必须单独检索它们。

在Windows 8和Windows Server 2012中,以下技术支持此代码。

技术 支持
服务器消息块 (SMB) 3.0 协议
SMB 3.0 透明故障转移 (TFO)
具有横向扩展文件共享的 SMB 3.0 (SO)
群集共享卷文件系统 (CSV)
弹性文件系统 (ReFS)

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
标头 winioctl.h (包括 Windows.h)

另请参阅