CreateFileTransactedA 関数 (winbase.h)

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

トランザクション操作として、ファイル、ファイル ストリーム、またはディレクトリを作成するか、開きます。 関数は、オブジェクトへのアクセスに使用できるハンドルを返します。

この操作を非トランザクション操作として実行したり、ファイル以外のオブジェクト (名前付きパイプ、物理デバイス、メールスロットなど) にアクセスしたりするには、 CreateFile 関数を使用します。

トランザクションの詳細については、このトピックの「解説」セクションを参照してください。

構文

HANDLE CreateFileTransactedA(
  [in]           LPCSTR                lpFileName,
  [in]           DWORD                 dwDesiredAccess,
  [in]           DWORD                 dwShareMode,
  [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  [in]           DWORD                 dwCreationDisposition,
  [in]           DWORD                 dwFlagsAndAttributes,
  [in, optional] HANDLE                hTemplateFile,
  [in]           HANDLE                hTransaction,
  [in, optional] PUSHORT               pusMiniVersion,
                 PVOID                 lpExtendedParameter
);

パラメーター

[in] lpFileName

作成するか、または開くオブジェクトの名前。

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

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

ヒント

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

ファイル ストリームを作成するには、ファイルの名前、コロン、ストリームの名前を指定します。 詳細については、「 ファイル ストリーム」を参照してください。

[in] dwDesiredAccess

オブジェクトへのアクセス。読み取り、書き込み、両方またはどちらも (ゼロ) として要約できます。 最も一般的に使用される値は、GENERIC_READGENERIC_WRITE、またはその両方 (GENERIC_READ GENERIC_WRITE | ) です。 詳細については、「 汎用アクセス権 」および「 ファイル セキュリティとアクセス権」を参照してください。

このパラメーターが 0 の場合、アプリケーションは、そのファイルまたはデバイスにアクセスすることなく、ファイル、ディレクトリ、またはデバイスの属性に対してクエリを実行できます。 詳細については、このトピックの「解説」セクションを参照してください。

オープン ハンドルを持つオープン要求で指定された共有モードと競合するアクセス モードを要求することはできません。 詳細については、「ファイルの作成とオープン」を参照してください。

[in] dwShareMode

オブジェクトの共有モード。読み取り、書き込み、両方、削除、これらすべて、またはなしを指定できます (次の表を参照)。

このパラメーターが 0 で 、CreateFileTransacted が成功した 場合、オブジェクトは共有できず、ハンドルが閉じられるまでもう一度開くことができません。 詳細については、このトピックの「解説」セクションを参照してください。

開いているハンドルを持つオープン要求で指定されたアクセス モードと競合する共有モードを要求することはできません。これは、共有違反が発生するためです: ERROR_SHARING_VIOLATION。 詳細については、「ファイルの作成とオープン」を参照してください。

別のプロセスがオブジェクトを開いている間にプロセスがオブジェクトを共有できるようにするには、次の値の 1 つ以上の組み合わせを使用して、オブジェクトを開くために要求できるアクセス モードを指定します。

メモ 開いている各ハンドルの共有オプションは、プロセス コンテキストに関係なく、そのハンドルが閉じられるまで有効です。
 
意味
0
0x00000000
オブジェクトに対する後続のオープン操作を無効にして、そのオブジェクトへの任意の種類のアクセスを要求します。
FILE_SHARE_DELETE
0x00000004
オブジェクトに対する後続のオープン操作で削除アクセスを要求できるようにします。

それ以外の場合、削除アクセスを要求した場合、他のプロセスは オブジェクトを開くことができません。

このフラグが指定されていないが、オブジェクトが削除アクセス用に開かれている場合、関数は失敗します。

FILE_SHARE_READ
0x00000001
オブジェクトに対する後続のオープン操作で読み取りアクセスを要求できるようにします。

それ以外の場合、他のプロセスは、読み取りアクセスを要求する場合、オブジェクトを開くことができません。

このフラグが指定されていないが、オブジェクトが読み取りアクセスのために開かれている場合、関数は失敗します。

FILE_SHARE_WRITE
0x00000002
オブジェクトに対する後続のオープン操作を有効にして、書き込みアクセスを要求します。

それ以外の場合、他のプロセスは、書き込みアクセスを要求する場合、オブジェクトを開くことができません。

このフラグが指定されていないが、オブジェクトが書き込みアクセス用に開かれているか、書き込みアクセス権を持つファイル マッピングを持っている場合、関数は失敗します。

[in, optional] lpSecurityAttributes

オプションのセキュリティ記述子を含み、返されるハンドルを子プロセスによって継承できるかどうかを決定する、SECURITY_ATTRIBUTES構造体へのポインター。 パラメーターには NULL を指定できます。

lpSecurityAttributes パラメーターが NULL の場合、CreateFileTransacted によって返されるハンドルは、アプリケーションで作成できる子プロセスによって継承できず、返されるハンドルに関連付けられたオブジェクトは既定のセキュリティ記述子を取得します。

構造体の bInheritHandle メンバーは、返されたハンドルを継承できるかどうかを指定します。

構造体の lpSecurityDescriptor メンバーは、オブジェクトの セキュリティ記述子 を指定しますが、 NULL にすることもできます。

lpSecurityDescriptor メンバーが NULL の場合、返されるハンドルに関連付けられているオブジェクトには、既定のセキュリティ記述子が割り当てられます。

CreateFileTransacted は 、既存のファイルを開くときに lpSecurityDescriptor メンバーを無視しますが、引き続き bInheritHandle メンバーを使用します。

詳細については、このトピックの「解説」セクションを参照してください。

[in] dwCreationDisposition

存在するファイルと存在しないファイルに対して実行するアクション。

詳細については、このトピックの「解説」セクションを参照してください。

このパラメーターは、組み合わせることができない次のいずれかの値である必要があります。

意味
CREATE_ALWAYS
2
常に新しいファイルを作成します。

指定したファイルが存在し、書き込み可能な場合、関数はファイルを切り捨て、関数は成功し、最後のエラー コードは ERROR_ALREADY_EXISTS (183) に設定されます。

指定したファイルが存在せず、有効なパスである場合は、新しいファイルが作成され、関数が成功し、最後のエラー コードが 0 に設定されます。

詳細については、このトピックの「解説」セクションを参照してください。

CREATE_NEW
1
まだ存在しない場合にのみ、新しいファイルを作成します。

指定したファイルが存在する場合、関数は失敗し、最後のエラー コードは ERROR_FILE_EXISTS (80) に設定されます。

指定したファイルが存在せず、書き込み可能な場所への有効なパスである場合は、新しいファイルが作成されます。

OPEN_ALWAYS
4
常にファイルを開きます。

指定したファイルが存在する場合、関数は成功し、最後のエラー コードは ERROR_ALREADY_EXISTS (183) に設定されます。

指定したファイルが存在せず、書き込み可能な場所への有効なパスである場合、関数はファイルを作成し、最後のエラー コードを 0 に設定します。

OPEN_EXISTING
3
ファイルまたはデバイスが存在する場合にのみ開きます。

指定したファイルが存在しない場合、関数は失敗し、最後のエラー コードは ERROR_FILE_NOT_FOUND (2) に設定されます。

詳細については、このトピックの「解説」セクションを参照してください。

TRUNCATE_EXISTING
5
ファイルを開き、サイズが 0 バイトになるように切り捨てます(存在する場合のみ)。

指定したファイルが存在しない場合、関数は失敗し、最後のエラー コードは ERROR_FILE_NOT_FOUND (2) に設定されます。

呼び出し元のプロセスでは、dwDesiredAccess パラメーターの一部としてGENERIC_WRITE ビットが設定されたファイルを開く必要があります。

[in] dwFlagsAndAttributes

ファイルの属性とフラグFILE_ATTRIBUTE_NORMAL最も一般的な既定値です。

このパラメーターには、使用可能なファイル属性の任意の組み合わせを含めることができます (FILE_ATTRIBUTE_*)。 その他のすべてのファイル属性は、 FILE_ATTRIBUTE_NORMALをオーバーライドします。

このパラメーターには、バッファリング動作、アクセス モード、およびその他の特殊な目的のフラグを制御するためのフラグ (FILE_FLAG_) の組み合わせを含めることもできます。 これらは、任意 のFILE_ATTRIBUTE_ 値と組み合わされます。

このパラメーターには、 SECURITY_SQOS_PRESENT フラグを指定することで、サービスのセキュリティ品質 (SQOS) 情報を含めることもできます。 その他の SQOS 関連のフラグ情報は、属性テーブルとフラグ テーブルの後の表に示されています。

  

CreateFileTransacted によって既存のファイルが開かれると、通常、ファイル フラグと既存のファイルのファイル属性が結合され、dwFlagsAndAttributes の一部として指定されたファイル属性はすべて無視されます。 特殊なケースについては、「 ファイルの作成と開き方」を参照してください

 
次のファイル属性とフラグは、 CreateFileTransacted が開く他の種類のオブジェクトではなく、ファイル オブジェクトにのみ使用されます (追加情報については、このトピックの「解説」セクションを参照してください)。 ファイル属性へのより高度なアクセスについては、「 SetFileAttributes」を参照してください。 値と説明を含むすべてのファイル属性の完全な一覧については、「 ファイル属性定数」を参照してください。
属性 説明
FILE_ATTRIBUTE_ARCHIVE
32 (0x20)
ファイルはアーカイブする必要があります。 アプリケーションでは、この属性を使用して、バックアップまたは削除の対象にファイルをマークします。
FILE_ATTRIBUTE_ENCRYPTED
16384 (0x4000)
ファイルまたはディレクトリは暗号化されています。 ファイルの場合は、ファイルのすべてのデータが暗号化されています。 ディレクトリの場合、これは、新しく作成されたファイルとサブディレクトリの暗号化が既定であることを意味します。 詳細については、「 ファイルの暗号化」を参照してください。

FILE_ATTRIBUTE_SYSTEMも指定されている場合、このフラグは無効です。

FILE_ATTRIBUTE_HIDDEN
2 (0x2)
ファイルが非表示になっています。 通常のディレクトリ 一覧には含めないでください。
FILE_ATTRIBUTE_NORMAL
128 (0x80)
ファイルに他の属性が設定されていません。 この属性は、単独で使用された場合にのみ有効です。
FILE_ATTRIBUTE_OFFLINE
4096 (0x1000)
ファイルのデータはすぐには使用できません。 この属性は、ファイル データが物理的にオフライン ストレージに移動されることを示します。 この属性は、階層ストレージ管理ソフトウェアであるリモート ストレージによって使用されます。 アプリケーションはこの属性を任意に変更しないでください。
FILE_ATTRIBUTE_READONLY
1 (0x1)
ファイルは読み取り専用です。 アプリケーションはファイルを読み取ることができますが、書き込みや削除はできません。
FILE_ATTRIBUTE_SYSTEM
4 (0x4)
ファイルは、オペレーティング システムの一部であるか、オペレーティング システムによって排他的に使用されます。
FILE_ATTRIBUTE_TEMPORARY
256 (0x100)
ファイルは一時ストレージに使用されています。 十分なキャッシュ メモリが使用可能な場合、ハンドルが閉じられた後にアプリケーションによって一時ファイルが削除されるため、ファイル システムは大容量ストレージにデータを書き戻さないようにします。 その場合、システムはデータの書き込みを完全に回避できます。 それ以外の場合は、ハンドルが閉じられた後にデータが書き込まれます。
 
フラグ 説明
FILE_FLAG_BACKUP_SEMANTICS
0x02000000
ファイルは、バックアップまたは復元操作のために開かれているか作成されています。 システムは、プロセスにSE_BACKUP_NAMEとSE_RESTORE_NAMEの特権がある場合に、呼び出し元のプロセスがファイル セキュリティ チェックをオーバーライドすることを保証します。 詳細については、「 トークンでの特権の変更」を参照してください。

ディレクトリへのハンドルを取得するには、このフラグを設定する必要があります。 ディレクトリ ハンドルは、ファイル ハンドルではなく一部の関数に渡すことができます。 詳細については、「 ディレクトリ ハンドル」を参照してください。

FILE_FLAG_DELETE_ON_CLOSE
0x04000000
トランザクションがまだアクティブな場合は、ファイルに対する最後のトランザクション ライター ハンドルが閉じられた直後に、ファイルが削除されます。 ファイルが削除対象としてマークされていて、トランザクションの完了後もトランザクション ライター ハンドルが開いている場合、ファイルは削除されません。

ファイルに対する既存の開いているハンドルがある場合、 FILE_SHARE_DELETE 共有モードですべて開かなければ、呼び出しは失敗します。

FILE_SHARE_DELETE 共有モードが指定されていない限り、ファイルに対する後続のオープン要求は失敗します。

FILE_FLAG_NO_BUFFERING
0x20000000
ファイルは、システム キャッシュなしで開かれています。 このフラグは、ハード ディスクキャッシュやメモリマップされたファイルには影響しません。 FILE_FLAG_OVERLAPPEDと組み合わせると、I/O はメモリ マネージャーの同期操作に依存しないため、フラグによって最大の非同期パフォーマンスが得られます。 ただし、データがキャッシュに保持されていないため、一部の I/O 操作には時間がかかります。 また、ファイル メタデータは引き続きキャッシュされる可能性があります。 メタデータをディスクにフラッシュするには、FlushFileBuffers 関数を使用します。

アプリケーションは、FILE_FLAG_NO_BUFFERINGで開かれたファイルを操作するときに、特定の要件 満たす必要があります。

  • ファイル アクセスは、ボリューム セクター サイズの整数倍数であるファイル内のバイト オフセットから開始する必要があります。
  • ファイル アクセスは、ボリューム セクター サイズの整数倍数であるバイト数に対してである必要があります。 たとえば、セクター サイズが 512 バイトの場合、アプリケーションは 512、1024、1536、または 2048 バイトの読み取りと書き込みを要求できますが、335、981、または 7171 バイトは要求できません。
  • 読み取りおよび書き込み操作のバッファー アドレスはセクターアラインメントする必要があります。つまり、ボリューム セクター サイズの整数倍数であるメモリ内のアドレスにアラインされます。 ディスクによっては、この要件が適用されない場合があります。
ボリューム セクター サイズの整数倍数にバッファーを配置する方法の 1 つは、 VirtualAlloc を使用してバッファーを割り当てることです。 オペレーティング システムのメモリ ページ サイズの整数倍数であるアドレスにアラインされたメモリを割り当てます。 メモリ ページ サイズとボリューム セクター サイズの両方が 2 の累乗であるため、このメモリは、ボリューム セクター サイズの整数倍数であるアドレスにも配置されます。 メモリ ページのサイズは 4 KB または 8 KB です。セクターは 512 バイト (ハード ディスク)、2048 バイト (CD)、または 4096 バイト (ハード ディスク) であるため、ボリューム セクターをメモリ ページよりも大きくすることはできません。

アプリケーションは 、GetDiskFreeSpace 関数を呼び出すことによってボリューム セクター のサイズを決定できます。

FILE_FLAG_OPEN_NO_RECALL
0x00100000
ファイル データは要求されますが、引き続きリモート ストレージに配置する必要があります。 ローカル ストレージに転送しないでください。 このフラグは、リモート・ストレージ・システムで使用されます。
FILE_FLAG_OPEN_REPARSE_POINT
0x00200000
通常 の再解析ポイント 処理は行われません。 CreateFileTransacted は、再解析ポイントを開こうとします。 ファイルが開かれると、再解析ポイントを制御するフィルターが操作可能かどうかに関係なく、ファイル ハンドルが返されます。 このフラグは 、CREATE_ALWAYS フラグと共に使用できません。 ファイルが再解析ポイントでない場合、このフラグは無視されます。
FILE_FLAG_OVERLAPPED
0x40000000
非同期 I/O 用にファイルが開かれるか、または作成されます。 操作が完了すると、 OVERLAPPED 構造体で指定されたイベントがシグナル状態に設定されます。 処理にかなりの時間がかかる操作は 、ERROR_IO_PENDINGを返します。

このフラグを指定すると、ファイルを読み取りと書き込みの同時操作に使用できます。 システムはファイル ポインターを維持しないため、 OVERLAPPED 構造体の読み取りおよび書き込み関数にファイル位置を渡すか、ファイル ポインターを更新する必要があります。

このフラグが指定されていない場合、読み取りおよび書き込み関数の呼び出しで OVERLAPPED 構造体が指定されている場合でも、I/O 操作がシリアル化されます。

FILE_FLAG_POSIX_SEMANTICS
0x01000000
ファイルは POSIX 規則に従ってアクセスされます。 これには、名前付けをサポートするファイル システムに対して、大文字と小文字のみが異なる複数のファイルを許可することが含まれます。 MS-DOS または 16 ビット Windows 用に作成されたアプリケーションでは、このフラグで作成されたファイルにアクセスできない可能性があるため、このオプションを使用する場合は注意が必要です。
FILE_FLAG_RANDOM_ACCESS
0x10000000
ファイルはランダムにアクセスされます。 システムはこれをヒントとしてファイルのキャッシュを最適化します。
FILE_FLAG_SESSION_AWARE
0x00800000
ファイルまたはデバイスがセッション認識で開かれています。 このフラグが指定されていない場合、セッション 0 で実行されているプロセスによってセッションごとのデバイス (RemoteFX USB リダイレクトを使用するデバイスなど) を開くことができません。 このフラグは、セッション 0 にない呼び出し元には影響しません。 このフラグは、Windows のサーバー エディションでのみサポートされます。

Windows Server 2008 R2 と Windows Server 2008: このフラグは、Windows Server 2012する前にはサポートされていません。

FILE_FLAG_SEQUENTIAL_SCAN
0x08000000
ファイルは、最初から最後まで順番にアクセスされます。 システムはこれをヒントとしてファイルのキャッシュを最適化します。 アプリケーションがランダム アクセスのためにファイル ポインターを移動した場合、最適なキャッシュが発生しない可能性があります。 ただし、正しい操作は引き続き保証されます。

このフラグを指定すると、シーケンシャル アクセスを使用して大きなファイルを読み取るアプリケーションのパフォーマンスが向上する可能性があります。 大きなファイルを主に順番に読み取るが、小さなバイト範囲をスキップする場合があるアプリケーションでは、パフォーマンスの向上がさらに顕著になる可能性があります。

ファイル・システムがキャッシュされた入出力および FILE_FLAG_NO_BUFFERINGをサポートしていない場合、このフラグは無効です。

FILE_FLAG_WRITE_THROUGH
0x80000000
書き込み操作は中間キャッシュを通過せず、ディスクに直接移動します。

FILE_FLAG_NO_BUFFERINGも指定されていないので、システム キャッシュが有効になっている場合、データはシステム キャッシュに書き込まれますが、ディスクに遅延なくフラッシュされます。

FILE_FLAG_NO_BUFFERINGも指定して、システム キャッシュが有効でないようにした場合、データはシステム キャッシュを経由せずにすぐにディスクにフラッシュされます。 オペレーティング システムは、ハード ディスク キャッシュを永続メディアに書き込み経由で要求します。 ただし、すべてのハードウェアでこの書き込みスルー機能がサポートされているわけではありません。

 

dwFlagsAndAttributes パラメーターは、セキュリティサービスの品質情報を指定することもできます。 詳細については、「 偽装レベル」を参照してください。 呼び出し元のアプリケーションが dwFlagsAndAttributes の一部としてSECURITY_SQOS_PRESENT フラグを指定する場合は、次の値の 1 つ以上を含めることもできます。

セキュリティ フラグ 意味
SECURITY_ANONYMOUS
匿名偽装レベルでクライアントを偽装します。
SECURITY_CONTEXT_TRACKING
セキュリティ追跡モードは動的です。 このフラグが指定されていない場合、セキュリティ追跡モードは静的です。
SECURITY_DELEGATION
委任の偽装レベルでクライアントを偽装します。
SECURITY_EFFECTIVE_ONLY
サーバーで使用できるのは、クライアントのセキュリティ コンテキストの有効な側面のみです。 このフラグを指定しない場合は、クライアントのセキュリティ コンテキストのすべての側面を使用できます。

これにより、クライアントは、クライアントの偽装中にサーバーが使用できるグループと特権を制限できます。

SECURITY_IDENTIFICATION
Id 偽装レベルでクライアントを偽装します。
SECURITY_IMPERSONATION
偽装レベルでクライアントを偽装する。 これは、 SECURITY_SQOS_PRESENT フラグと共に他のフラグが指定されていない場合の既定の動作です。

[in, optional] hTemplateFile

GENERIC_READアクセス権を持つテンプレート ファイルへの有効なハンドル。 テンプレート ファイルは、作成するファイルにファイル属性と拡張属性を提供します。 このパラメーターは、NULL でもかまいません。

既存のファイルを開くと、 CreateFileTransacted はテンプレート ファイルを無視します。

新しい EFS で暗号化されたファイルを開くと、そのファイルは親ディレクトリから DACL を継承します。

[in] hTransaction

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

[in, optional] pusMiniVersion

開くミニバージョン。 hTransaction で指定されたトランザクションがファイルを変更しているトランザクションではない場合、このパラメーターは NULL である必要があります。 それ以外の場合、このパラメーターには、 FSCTL_TXFS_CREATE_MINIVERSION コントロール コードによって返されるミニバージョン識別子、または次のいずれかの値を指定できます。

意味
TXFS_MINIVERSION_COMMITTED_VIEW
0x0000
最後のコミット時点でのファイルのビュー。
TXFS_MINIVERSION_DIRTY_VIEW
0xFFFF
トランザクションによって変更されているファイルのビュー。
TXFS_MINIVERSION_DEFAULT_VIEW
0xFFFE
コンテキストに応じて、ファイルのコミット済みビューまたはダーティビューのいずれか。 ファイルを変更しているトランザクションはダーティ ビューを取得し、ファイルを変更していないトランザクションはコミット済みビューを取得します。

lpExtendedParameter

このパラメーターは予約済みであり、 NULL である必要があります。

戻り値

関数が成功した場合、戻り値は、指定されたファイル、デバイス、名前付きパイプ、またはメール スロットへの開いているハンドルです。

失敗した場合の戻り値は、INVALID_HANDLE_VALUE です。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

CreateFileTransacted によって返されるハンドルを使用する場合は、必要に応じて、標準のファイル I/O 関数ではなく、トランザクションバージョンのファイル I/O 関数を使用します。 詳細については、「 トランザクション NTFS のプログラミングに関する考慮事項」を参照してください。

トランザクション ハンドルをディレクトリに開く場合、そのハンドルには FILE_WRITE_DATA (FILE_ADD_FILE) と FILE_APPEND_DATA (FILE_ADD_SUBDIRECTORY) のアクセス許可が必要です。 これらは、 FILE_GENERIC_WRITE アクセス許可に含まれています。 ハンドルを使用してファイルまたはサブディレクトリを作成するだけの場合は、アクセス許可の少ないディレクトリを開く必要があります。そうしないと、共有違反が発生する可能性があります。

そのファイルが別のトランザクションの一部である場合 (つまり、別のアプリケーションが CreateFileTransacted を呼び出して開いた場合)、アクセス レベルFILE_EXECUTEファイルを開くことはできません。 つまり、アクセス レベルがFILE_EXECUTEまたはFILE_ALL_ACCESSが指定されている場合、CreateFileTransacted は失敗します

トランザクションされていないアプリケーションで createFileTransacted を呼び出し、lpSecurityAttributes対して MAXIMUM_ALLOWED指定すると、毎回同じアクセス レベルでハンドルが開かれます。 トランザクションアプリケーションが createFileTransacted を呼び出し、lpSecurityAttributes に対して指定されたMAXIMUM_ALLOWEDを使用すると、トランザクションによってファイルがロックされているかどうかに基づいて、異なる量のアクセス権でハンドルが開かれます。 たとえば、呼び出し元のアプリケーションにファイルのアクセス レベル FILE_EXECUTE がある場合、開かれているファイルがトランザクションによってロックされていないか、トランザクションによってロックされていて、アプリケーションがそのファイルのトランザクション リーダーになっている場合にのみ、アプリケーションはこのアクセスを取得します。

トランザクション操作の詳細については、「 トランザクション NTFS 」を参照してください。

CloseHandle 関数を使用して、CreateFileTransacted によって返されるオブジェクト ハンドルを閉じるには、ハンドルが不要になったとき、およびトランザクションをコミットまたはロールバックする前に閉じます。

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

CreateFileTransacted を使用して、ファイルまたはディレクトリの圧縮を制御することはできません。 詳細については、「 ファイルの圧縮と圧縮解除」およびファイル暗号化」を参照してください。

シンボリック リンクの動作 — この関数の呼び出しによって新しいファイルが作成された場合、動作に変更はありません。

FILE_FLAG_OPEN_REPARSE_POINTが指定されている場合:

  • 既存のファイルが開かれ、それがシンボリック リンクである場合、返されるハンドルはシンボリック リンクへのハンドルです。
  • TRUNCATE_EXISTINGまたはFILE_FLAG_DELETE_ON_CLOSEが指定されている場合、影響を受けるファイルはシンボリック リンクです。
FILE_FLAG_OPEN_REPARSE_POINTが指定されていない場合:
  • 既存のファイルが開かれ、それがシンボリック リンクである場合、返されるハンドルはターゲットへのハンドルです。
  • CREATE_ALWAYSTRUNCATE_EXISTING、または FILE_FLAG_DELETE_ON_CLOSE が指定されている場合、影響を受けるファイルはターゲットです。
トランザクションを使用しない限り、複数セクターの書き込みはアトミックであるとは限りません (つまり、作成されるハンドルはトランザクション ハンドルです)。 単一セクターの書き込みはアトミックです。 キャッシュされた複数セクターの書き込みが、必ずしもディスクに書き込まれるとは限りません。したがって、 FILE_FLAG_WRITE_THROUGH を指定して、マルチセクター書き込み全体がキャッシュなしでディスクに書き込まれるようにします。

前述のように、 lpSecurityAttributes パラメーターが NULL の場合、 CreateFileTransacted によって返されるハンドルは、アプリケーションで作成できる子プロセスで継承できません。 このパラメーターに関する次の情報も適用されます。

  • bInheritHandleFALSE ではなく、0 以外の値である場合は、ハンドルを継承できます。 したがって、ハンドルを継承可能にする予定がない場合は、この構造体メンバーを FALSE に適切に初期化することが重要です。
  • ファイルまたはディレクトリの既定のセキュリティ記述子のアクセス制御リスト (ACL) は、親ディレクトリから継承されます。
  • ターゲット ファイル システムは、lpSecurityDescriptor がそれらに影響を与えるためにファイルとディレクトリのセキュリティをサポートする必要があります。これは、GetVolumeInformation を使用して決定できます
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 がサポートされないことに注意してください。

ファイル

フロッピー ディスクを持たないフロッピー ドライブまたは CD を持たない CD-ROM ドライブにファイルを作成しようとすると、ユーザーがディスクまたは CD を挿入するためのメッセージが表示されます。 システムでこのメッセージが表示されないようにするには、 setErrorMode 関数を SEM_FAILCRITICALERRORSと共に呼び出します。

詳細については、「ファイルの作成とオープン」を参照してください。

ファイルの名前を変更または削除した後すぐに復元すると、システムはキャッシュで復元するファイル情報を検索します。 キャッシュされた情報には、短い名前と長い名前のペアと作成時間が含まれます。

DeleteFile の前回の呼び出しの結果として削除が保留中のファイルで CreateFileTransacted を呼び出すと、関数は失敗します。 オペレーティング システムは、ファイルに対するすべてのハンドルが閉じられるまでファイルの削除を遅延します。 GetLastError はERROR_ACCESS_DENIEDを返します。

dwDesiredAccess パラメーターは 0 にすることができ、アプリケーションが適切なセキュリティ設定で実行されている場合、アプリケーションはファイルにアクセスせずにファイル属性のクエリを実行できます。 これは、読み取りアクセスや書き込みアクセスのためにファイルを開かずにファイルの存在をテストしたり、ファイルまたはディレクトリに関するその他の統計情報を取得したりするのに役立ちます。 「ファイル情報の取得と設定」および「GetFileInformationByHandle」を参照してください。

アプリケーションがネットワーク経由でファイルを作成する場合は、GENERIC_WRITEのみを使用するよりも、GENERIC_READ | GENERIC_WRITEを使用することをお勧めします。 リダイレクターはキャッシュ マネージャーを使用し、より多くのデータを含むより少ない SMB を送信できるため、結果のコードは高速になります。 この組み合わせにより、ネットワーク経由でファイルに書き込む際にERROR_ACCESS_DENIEDが返される場合がある問題も回避 できます

ファイル ストリーム

NTFS ファイル システムでは、 CreateFileTransacted を 使用して、ファイル内に個別のストリームを作成できます。

詳細については、「 ファイル ストリーム」を参照してください。

ディレクトリ

アプリケーションでは CreateFileTransacted を使用してディレクトリを作成できないため、このユース ケースでは dwCreationDisposition に対して有効なのはOPEN_EXISTING値のみです。 ディレクトリを作成するには、アプリケーションで CreateDirectoryTransacted、CreateDirectory、または CreateDirectoryEx を呼び出す必要があります。

CreateFileTransacted を使用してディレクトリを開くには、dwFlagsAndAttributes の一部として FILE_FLAG_BACKUP_SEMANTICS フラグを指定します。 このフラグが SE_BACKUP_NAME および SE_RESTORE_NAME 特権なしで使用されている場合は、適切なセキュリティ チェックが引き続き適用されます。

FAT または FAT32 ファイル システム ボリュームの最適化中に CreateFileTransacted を使用してディレクトリを開く場合は、 MAXIMUM_ALLOWED アクセス権を指定しないでください。 これが行われた場合、ディレクトリへのアクセスは拒否されます。 代わりに 、GENERIC_READ アクセス権を指定します。

詳細については、「 ディレクトリ管理について」を参照してください。

注意

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

要件

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

関連項目

CloseHandle

CopyFileTransacted

CreateDirectoryTransacted

DeleteFileTransacted

ファイルの圧縮と圧縮解除

ファイルの暗号化

ファイル管理の関数

ファイルのセキュリティとアクセス権

ファイル ストリーム

FindFirstFileTransacted

関数

GetFileAttributesTransacted

MoveFileTransacted

概要トピック

トランザクション NTFS のプログラミングに関する考慮事項

ReadFile

トランザクション NTFS (TxF)

WriteFile