FSCTL_SET_OBJECT_ID_EXTENDED IOCTL (winioctl.h)

修改与指定文件或目录的对象标识符关联的用户数据。

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

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

注解

对象标识符用于跟踪文件和目录。 它们对大多数应用程序不可见,并且永远不应被应用程序修改。 修改对象标识符可能会导致文件部分(最多包括整个数据量)的数据丢失。

此操作仅在对象标识符中设置用户数据。 可能的用途是存储用于创建对象标识符的时间戳或单调递增的版本号。 忽略FILE_OBJECTID_BUFFER结构的 ObjectId 成员。 没有用于修改 ObjectId 成员的机制。 FSCTL_SET_OBJECT_ID_EXTENDED控制代码的典型用途是在系统创建对象标识符时,应用程序不使用 NTFS 文件系统生成的用户数据。

若要在还没有对象的对象上设置对象标识符,请使用 FSCTL_SET_OBJECT_ID 控件代码。 若要让 NTFS 文件系统生成对象标识符(如果不存在),请使用 FSCTL_CREATE_OR_GET_OBJECT_ID 控制代码。

请注意,可能无法为远程文件正确更新时间戳。 若要确保结果一致,请使用无缓冲区 I/O。

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

另请参阅