次の方法で共有


CreateHardLinkTransactedA 関数 (winbase.h)

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

トランザクション操作として、既存のファイルと新しいファイルの間にハード リンクを確立します。 この関数は NTFS ファイル システムでのみサポートされ、ディレクトリではなくファイルに対してのみサポートされます。

構文

BOOL CreateHardLinkTransactedA(
  [in] LPCSTR                lpFileName,
  [in] LPCSTR                lpExistingFileName,
       LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  [in] HANDLE                hTransaction
);

パラメーター

[in] lpFileName

新しいファイルの名前。

このパラメーターは、ディレクトリの名前を指定できません。

[in] lpExistingFileName

既存のファイルの名前。

このパラメーターは、ディレクトリの名前を指定できません。

lpSecurityAttributes

引っ込み思案;は NULLする必要があります。

[in] hTransaction

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

戻り値

関数が成功した場合、戻り値は 0 以外です。

関数が失敗した場合、戻り値はゼロ (0) になります。 拡張エラー情報を取得するには、GetLastError呼び出します。

この関数で作成できるハード リンクの最大数は、ファイルあたり 1023 です。 ファイルに対して 1023 を超えるリンクが作成されると、エラーが発生します。

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

備考

CreateFileTransacted または CreateHardLinkTransacted 使用して作成されたファイルのディレクトリ エントリは、関連付けられているファイルへのハード リンクです。 CreateHardLinkTransacted 関数を使用して作成される追加のハード リンクを使用すると、1 つのファイルに対して複数のディレクトリ エントリを作成できます。つまり、同じファイルへの複数のハード リンク (同じディレクトリ内の異なる名前でも、異なるディレクトリ内の同じまたは異なる名前でもかまいません)。 ただし、ファイルへのハード リンクはすべて同じボリューム上にある必要があります。

ハード リンクはファイルのディレクトリ エントリのみであるため、アプリケーションがハード リンクを介してファイルを変更すると、そのファイルへの他のハード リンクを使用するすべてのアプリケーションで変更が表示されます。 また、ファイルが変更されると、すべてのディレクトリ エントリが更新されます。 たとえば、ファイル サイズが変更された場合、ファイルへのすべてのハード リンクに新しいファイル サイズが表示されます。

セキュリティ記述子は、ハード リンクが指すファイルに属しています。 リンク自体はディレクトリ エントリのみで、セキュリティ記述子はありません。 したがって、ハード リンクのセキュリティ記述子を変更すると、基になるファイルのセキュリティ記述子が変更され、ファイルを指すすべてのハード リンクで新しく指定されたアクセスが許可されます。 ハード リンクごとにファイルに異なるセキュリティ記述子を指定することはできません。

この関数は、lpSecurityAttributes パラメーターにセキュリティ記述子情報が渡された場合でも、リンク先のファイルのセキュリティ記述子を変更しません。

DeleteFileTransacted を使用して、ハード リンクを削除します。 作成された順序に関係なく、任意の順序で削除できます。

CreateFileTransacted で指定 フラグ、属性、アクセス、および共有は、ファイルごとに動作します。 つまり、共有を許可しないファイルを開くと、別のアプリケーションがファイルへの新しいハード リンクを作成してファイルを共有することはできません。

NTFS ファイル システムでハード リンクを作成すると、ディレクトリ エントリ内のファイル属性情報が更新されるのは、ファイルが開かれている場合、または GetFileInformationByHandle が特定のファイルのハンドルで呼び出されたときだけです。

シンボリック リンク: パスがシンボリック リンクを指している場合、関数はターゲットへのハード リンクを作成します。

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

テクノロジー サポート
サーバー メッセージ ブロック (SMB) 3.0 プロトコル いいえ
SMB 3.0 透過的フェールオーバー (TFO) いいえ
SMB 3.0 とスケールアウト ファイル共有 (SO) いいえ
クラスター共有ボリューム ファイル システム (CsvFS) いいえ
回復性のあるファイル システム (ReFS) いいえ
 

SMB 3.0 では TxF がサポートされないことに注意してください。

手記

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

必要条件

要件 価値
サポートされる最小クライアント Windows Vista [デスクトップ アプリのみ]
サポートされる最小サーバー Windows Server 2008 [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー winbase.h (Windows.h を含む)
ライブラリ Kernel32.lib
DLL Kernel32.dll

関連項目

CreateFileTransacted の

DeleteFileTransacted の

ファイル管理機能の

ハード リンクとジャンクション

シンボリック リンク の

トランザクション NTFS の