FSCTL_GET_VOLUME_BITMAP IOCTL (winioctl.h)

检索卷上已占用群集和可用群集的位图。

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

BOOL DeviceIoControl(
  (HANDLE) hDevice,             // handle to volume
  FSCTL_GET_VOLUME_BITMAP,      // 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
);

注解

FSCTL_GET_VOLUME_BITMAP控制代码检索一个数据结构,该结构描述文件系统中每个群集的分配状态,从请求的开始 LCN 到卷上的最后一个群集。 位图使用一个位来表示每个群集:

  • 值 1 指示群集已分配 (正在使用) 。
  • 值 0 指示群集未分配 (可用) 。

请注意,位图表示一个时间点,如果卷有写入活动,则一旦读取该位图就可能不正确。 因此,尽管最近的位图指示群集未分配,但有可能尝试将群集移动到分配的群集上。 必须将 将 DeviceIoControl 函数与 FSCTL_MOVE_FILE 控制代码配合使用的程序做好这种可能性的准备。

此处使用的句柄必须是卷句柄,并且已使用任何访问权限打开。 请注意,只有管理员才能打开卷句柄。

在计算位图之前,输入缓冲区中的起始 LCN 可能会向下舍入。 舍入限制取决于文件系统。

有关重叠 I/O 对此操作的影响,请参阅 DeviceIoControl 主题的“备注”部分。

此操作将对齐它在页面边界上返回的位图。

Windows Server 2003 和 Windows XP: 此操作在字节边界上对齐它返回的位图。

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

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

要求

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

另请参阅