FSCTL_LOCK_VOLUME IOCTL (winioctl.h)

ボリュームが使用中でない場合はロックします。 ロックされたボリュームには、ボリュームをロックするファイル オブジェクト (*hDevice) へのハンドルを介してのみアクセスできます。 詳細については、「解説」を参照してください。

この操作を実行するには、次のパラメーターを使用して DeviceIoControl 関数を呼び出します。

BOOL DeviceIoControl(
  (HANDLE) hVolume,            // handle to a volume
  (DWORD) FSCTL_LOCK_VOLUME,   // dwIoControlCode
  NULL,                        // lpInBuffer
  0,                           // nInBufferSize
  NULL,                        // lpOutBuffer
  0,                           // nOutBufferSize
  (LPDWORD) lpBytesReturned,   // number of bytes returned
  NULL                         // OVERLAPPED structure
);

Irp-IoStatus.Status> は、要求が成功した場合にSTATUS_SUCCESSに設定されます。

それ以外の場合は、NTSTATUS コードとして適切なエラー条件に対する状態。

詳細については、「 NTSTATUS 値」を参照してください。

注釈

DeviceIoControl に渡される hDevice ハンドルは、直接アクセス用に開かれたボリュームへのハンドルである必要があります。 このハンドルを取得するには、 lpFileName パラメーターを次の形式の文字列に設定して CreateFile を呼び出します。

\。\X:

X は、ハード ドライブパーティション文字、フロッピーディスクドライブ、または CD-ROM ドライブです。 アプリケーションでは、CreateFiledwShareMode パラメーターにFILE_SHARE_READフラグとFILE_SHARE_WRITE フラグも指定する必要があります。

指定されたボリュームがシステム ボリュームであるか、ページ ファイルが含まれている場合、操作は失敗します。

ボリュームに開いているファイルがある場合、この操作は失敗します。 逆に、この操作が成功すると、開いているファイルがないことを示します。

この操作は、ボリュームへの排他アクセスを一定期間必要とするアプリケーション (ディスク ユーティリティやバックアップ プログラムなど) に役立ちます。

ロックされたボリュームは、次のいずれかが発生するまでロックされたままになります。

  • アプリケーションでは、 FSCTL_UNLOCK_VOLUME コントロール コードを使用してボリュームのロックを解除します。
  • ハンドルは CloseHandle を介して直接閉じるか、プロセスが終了したときに間接的に閉じます。
システムは、キャッシュされたすべてのデータをロックする前にボリュームにフラッシュします。 たとえば、遅延書き込みキャッシュに保持されているデータは、ボリュームに書き込まれます。

NTFS ファイル システムは、ロックされたボリュームをマウント解除されたボリュームとして扱います。 FSCTL_DISMOUNT_VOLUMEコントロール コードは同様に機能しますが、マウントを解除する前に開いているファイルに対してチェックされません。 ロック操作が正常に行われると、マウント解除されたボリュームはいつでも任意のプロセスによって再マウントされる可能性があることに注意してください。 これは、たとえば、ボリューム バックアップを実行するための理想的な状態ではありません。

Windows 8とWindows Server 2012では、このコードは次のテクノロジでサポートされています。

テクノロジ サポートされています
サーバー メッセージ ブロック (SMB) 3.0 プロトコル いいえ
SMB 3.0 Transparent Failover (TFO) いいえ
スケールアウト ファイル共有 (SO) を使う SMB 3.0 いいえ
クラスターの共有ボリューム ファイル システム (CsvFS) コメントを表示する
 

CsvFs ロック ボリュームでは、PNP 通知はロック要求が発行されたノードでのみ送信されます。 NTFS 上の CsvFs フィルターに開いているファイルが表示されない場合にのみ、ロックは成功します。

CSV ボリュームのロックを取得した後、ボリュームへのハンドルを開く前に、そのボリュームをロックするために使用するハンドルを閉じる必要があります。 FSCTL_UNLOCK_VOLUMEを使用してボリュームのロックを解除するだけでは十分ではありません。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
Header winioctl.h (Windows.h を含む)

こちらもご覧ください

CloseHandle

CreateFile

DeviceIoControl

FSCTL_DISMOUNT_VOLUME

FSCTL_UNLOCK_VOLUME

ボリューム管理の制御コード