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 删除更改日志。 NTFS 文件系统启动删除操作并立即返回到调用进程,除非 在 DELETE_USN_JOURNAL_DATADeleteFlags 成员中设置了 USN_DELETE_FLAG_NOTIFY标志。

如果 同时设置了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 值时,管理员应删除日记帐。

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

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

\.\X

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

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

另请参阅

CREATE_USN_JOURNAL_DATA

更改日志

CreateFile

DELETE_USN_JOURNAL_DATA

DeviceIoControl

FSCTL_CREATE_USN_JOURNAL

OVERLAPPED

卷管理控制代码