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 Transparent Failover (TFO) | はい |
スケールアウト ファイル共有 (SO) を使う SMB 3.0 | はい |
クラスターの共有ボリューム ファイル システム (CsvFS) | はい |
Resilient File System (ReFS) | いいえ |
要件
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
Header | winioctl.h (Windows.h を含む) |