Share via


CreateDirectoryTransactedW 関数 (winbase.h)

[Microsoft では、開発者がアプリケーションのニーズを達成するために代替手段を利用することを強くお勧めします。 TxF が開発された多くのシナリオは、よりシンプルで利用しやすい手法で実現できます。 また、将来のバージョンの Microsoft Windows では TxF を使用できない場合があります。 詳細、および TxF の代替手段については、「トランザクション NTFS の使用の代替手段」を参照してください。]

指定のテンプレート ディレクトリの属性で新しいディレクトリをトランザクション操作として作成します。 基になるファイル システムがファイルとディレクトリのセキュリティをサポートしている場合、関数は指定されたセキュリティ記述子を新しいディレクトリに適用します。 新しいディレクトリには、指定したテンプレート ディレクトリの他の属性が保持されます。

構文

BOOL CreateDirectoryTransactedW(
  [in, optional] LPCWSTR               lpTemplateDirectory,
  [in]           LPCWSTR               lpNewDirectory,
  [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  [in]           HANDLE                hTransaction
);

パラメーター

[in, optional] lpTemplateDirectory

新しいディレクトリを作成するときにテンプレートとして使用するディレクトリのパス。 このパラメーターには NULL を指定できます。

ディレクトリはローカル コンピューターに存在する必要があります。それ以外の場合、関数は失敗し、最後のエラー コードは ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE に設定されます。

既定では、名前はMAX_PATH文字に制限されています。 この制限を 32,767 文字のワイド文字に拡張するには、パスの先頭に "\\?\" を付加します。 詳細については、「ファイル、パス、および名前空間の名前付け」を参照してください。

ヒント

Windows 10 バージョン 1607 以降では、"\\?\" を前に置かずに、MAX_PATHの制限を削除するようにオプトインできます。 詳細については、「 ファイル、パス、および名前空間の名前付け 」の「最大パス長の制限」セクションを参照してください。

[in] lpNewDirectory

作成するディレクトリのパス。

既定では、名前はMAX_PATH文字に制限されています。 この制限を 32,767 文字のワイド文字に拡張するには、パスの先頭に "\\?\" を付加します。 詳細については、「ファイル、パス、および名前空間の名前付け」を参照してください。

ヒント

Windows 10 バージョン 1607 以降では、"\\?\" を前に置かずに、MAX_PATHの制限を削除するようにオプトインできます。 詳細については、「 ファイル、パス、および名前空間の名前付け 」の「最大パス長の制限」セクションを参照してください。

[in, optional] lpSecurityAttributes

SECURITY_ATTRIBUTES構造体へのポインター。 構造体の lpSecurityDescriptor メンバーは、新しいディレクトリのセキュリティ記述子を指定します。

lpSecurityAttributesNULL の場合、ディレクトリは既定のセキュリティ記述子を取得します。 ディレクトリの既定のセキュリティ記述子のアクセス制御リスト (ACL) は、その親ディレクトリから継承されます。

このパラメーターを有効にするには、ターゲット ファイル システムがファイルとディレクトリのセキュリティをサポートする必要があります。 これは、 GetVolumeInformationFS_PERSISTENT_ACLSを返したときに示されます。

[in] hTransaction

トランザクションのハンドル。 このハンドルは、 CreateTransaction 関数によって返されます。

戻り値

関数が成功すると、戻り値は 0 以外になります。

関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。 次のようなエラーが発生する可能性があります。

リターン コード 説明
ERROR_ALREADY_EXISTS
指定したディレクトリは既に存在します。
ERROR_EFS_NOT_ALLOWED_IN_TRANSACTION
暗号化が無効になっている親ディレクトリを持つ子ディレクトリを作成することはできません。
ERROR_PATH_NOT_FOUND
1 つ以上の中間ディレクトリが存在しません。 この関数は、パス内に最後のディレクトリのみを作成します。

注釈

CreateDirectoryTransacted 関数を使用すると、他のディレクトリからストリーム情報を継承するディレクトリを作成できます。 この関数は、たとえば、ディレクトリの内容を属性として適切に識別するために必要なリソース ストリームがある Macintosh ディレクトリを使用している場合に便利です。

NTFS ファイル システムなどの一部のファイル システムでは、個々のファイルとディレクトリの圧縮または暗号化がサポートされています。 このようなファイル システム用にフォーマットされたボリュームでは、新しいディレクトリは親ディレクトリの圧縮属性と暗号化属性を継承します。

暗号化が無効になっている親ディレクトリを使用して子ディレクトリを作成しようとすると、この関数は ERROR_EFS_NOT_ALLOWED_IN_TRANSACTION で失敗します。

ディレクトリへのハンドルを取得するには、FILE_FLAG_BACKUP_SEMANTICS フラグを設定して CreateFileTransacted 関数を呼び出します。

Windows 8 と Windows Server 2012 では、この関数は、次のテクノロジによってサポートされています。

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

SMB 3.0 は TxF をサポートしていません。

注意

winbase.h ヘッダーは、CreateDirectoryTransacted をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

要件
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winbase.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

CreateFileTransacted

ディレクトリの作成と削除

ディレクトリ管理の関数

RemoveDirectoryTransacted

SECURITY_ATTRIBUTES

トランザクション NTFS