FSCTL_ALLOW_EXTENDED_DASD_IO IOCTL (winioctl.h)

指示文件系统驱动程序不对分区读取或写入调用执行任何 I/O 边界检查。 相反,边界检查由设备驱动程序执行。

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

C++
BOOL DeviceIoControl(
  (HANDLE) hDevice,              // handle to device
  FSCTL_ALLOW_EXTENDED_DASD_IO,  // dwIoControlCodeNULL,                          // lpInBuffer0,                             // nInBufferSizeNULL,                          // lpOutBuffer0,                             // nOutBufferSize(LPDWORD) lpBytesReturned,     // number of bytes returned
  (LPOVERLAPPED) lpOverlapped    // OVERLAPPED structure
);

注解

只有熟悉硬盘驱动器和文件系统基础结构的程序员才能使用 FSCTL_ALLOW_EXTENDED_DASD_IO 控制代码的调用。 对分区的后续写入操作使用不当或检查不准确可能会导致分区上的数据损坏或整个分区损坏。

FSCTL_ALLOW_EXTENDED_DASD_IO控制代码用于指示文件系统驱动程序不对使用指定句柄进行的读取或写入调用执行任何 I/O 边界检查。 FSCTL_ALLOW_EXTENDED_DASD_IO 允许访问隐藏扇区,这是分区的第一个扇区 (启动参数块) 和分区的第一个有用扇区之间可能存在的分区的一部分。 FSCTL_ALLOW_EXTENDED_DASD_IO 还允许访问丢失的群集,这些群集可能存在于最后一个有用的群集和分区的末尾之间。

此操作后发出的 I/O 请求将直接传递到设备驱动程序。 如果这些后续调用请求超出分区边界的数据,驱动程序会导致它们失败。

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

若要检索分区的句柄,请调用 CreateFile ,并将 lpFileName 参数设置为以下格式的字符串:

\.\X

其中 X 是驱动器号。

调用 CreateFile 的应用程序还必须在 CreateFiledwShareMode 参数中指定FILE_SHARE_READFILE_SHARE_WRITE标志。 有关详细信息,请参阅 CreateFile 中的“磁盘设备”部分。

若要确定驱动器的分区结构并确定系统是否识别分区,请根据需要使用 IOCTL_DISK_GET_DRIVE_LAYOUT_EXIOCTL_DISK_GET_DRIVE_LAYOUT 控制代码。 有关单个分区的类似信息,请根据需要使用 IOCTL_DISK_GET_PARTITION_INFO_EXIOCTL_DISK_GET_PARTITION_INFO 控制代码。 若要确定群集的大小,请根据需要使用 GetDiskFreeSpaceExGetDiskFreeSpace 函数。

在 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)

另请参阅

CreateFile

DeviceIoControl

文件管理控制代码

GetDiskFreeSpace

GetDiskFreeSpaceEx

IOCTL_DISK_GET_DRIVE_LAYOUT

IOCTL_DISK_GET_DRIVE_LAYOUT_EX

IOCTL_DISK_GET_PARTITION_INFO

IOCTL_DISK_GET_PARTITION_INFO_EX

OVERLAPPED