FSCTL_DELETE_USN_JOURNAL IOCTL (winioctl.h)

删除卷上的更新序列号(USN)更改日志,或等待更改日志删除通知。

C++
BOOL 
WINAPI 
DeviceIoControl( (HANDLE) hDevice,              // handle to volume
                 FSCTL_DELETE_USN_JOURNAL,      // dwIoControlCode(LPVOID) lpInBuffer,           // input buffer
                 (DWORD) nInBufferSize,         // size of input buffer
                 NULL,                          // lpOutBuffer0,                             // nOutBufferSize(LPDWORD) lpBytesReturned,     // number of bytes returned
                 (LPOVERLAPPED) lpOverlapped ); // OVERLAPPED structure

言论

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

可以使用 FSCTL_DELETE_USN_JOURNAL 删除更改日记。 除非在 DeleteFlagsDELETE_USN_JOURNAL_DATA成员中设置 USN_DELETE_FLAG_NOTIFY 标志,否则 NTFS 文件系统将启动删除操作并立即返回到调用进程。

如果同时设置了 USN_DELETE_FLAG_NOTIFYUSN_DELETE_FLAG_DELETE 标志,则调用 FSCTL_DELETE_USN_JOURNAL 将开始删除过程。 然后,调用会阻止调用线程并等待删除(在同步或非重叠调用上),或使用 I/O 完成端口或其他机制设置事件通知,并返回(在异步或重叠调用中)。

还可以使用 FSCTL_DELETE_USN_JOURNAL 来接收更改日记删除已完成的通知,只需设置 USN_DELETE_FLAG_NOTIFY。 如果这样做,则 FSCTL_DELETE_USN_JOURNAL 操作在返回之前等待删除完成(在同步或非重叠调用上),或者通过使用 I/O 完成端口或其他机制(在异步或重叠调用上)设置事件通知。

应用程序接收通知的删除可能由当前进程或其他一些进程启动。 例如,当应用程序启动时,它可以使用 FSCTL_DELETE_USN_JOURNAL 来确定某个其他进程启动的删除是否正在进行,如果是,则退出。

完全删除更改日志需要扫描更改日志所在的卷,这可能需要很长时间才能在包含多个文件的卷上。 即使在系统重启后,该操作也会继续完成。 尝试在删除过程中创建、修改、删除或查询更改日志失败,并返回错误代码 ERROR_JOURNAL_DELETE_IN_PROGRESS

FSCTL_DELETE_USN_JOURNAL 操作具有显著的性能成本,因此应谨慎使用。 当当前 USN 值接近可能的最大 USN 值时,管理员应删除日记。

有关详细信息,请参阅 创建、修改和删除更改日记

若要检索卷的句柄,请调用 CreateFilelpFileName 参数设置为以下格式的字符串:

\\.\X

在前面的字符串中,X 是标识卷所在的驱动器的字母。 卷必须是 NTFS。

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

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

要求

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

另请参阅

CREATE_USN_JOURNAL_DATA

变更日记

CreateFile

DELETE_USN_JOURNAL_DATA

DeviceIoControl

FSCTL_CREATE_USN_JOURNAL

重叠的

卷管理控制代码