次の方法で共有


CREATE_BIND_LINK_FLAGS列挙 (bindlink.h)

これらのフラグを CreateBindLink に渡して、ユーザーのニーズに合わせて既定のバインド リンク動作を変更できます。

構文

typedef enum CREATE_BIND_LINK_FLAGS {
  CREATE_BIND_LINK_FLAG_NONE,
  CREATE_BIND_LINK_FLAG_READ_ONLY,
  CREATE_BIND_LINK_FLAG_MERGED
} ;

定数

 
CREATE_BIND_LINK_FLAG_NONE
0x00000000

バインド リンク フラグは指定されません。
CREATE_BIND_LINK_FLAG_READ_ONLY
0x00000001

読み取り専用リンクは、システム上のユーザーが仮想パスを介してアクセスされた場合にバッキング パスに存在するファイルを変更できないようにするバインド リンクです。 つまり、バッキング パス上のファイルを変更するアクセス許可を持つユーザーは、バッキング パスを介してファイルにアクセスする場合でもそのファイルを変更できますが、仮想パスを介してアクセスする場合は変更できません。 通常、バッキング パスのアクセス許可は、対応する仮想パスにアクセスするときに適用されますが、 READ_ONLY フラグを 使用すると、"書き込み" アクセス許可はマスクされます。 これにより、アプリケーションでファイルが READ_ONLYされていることを確認できます。

読み取り専用の制限は、ディスク上のバッキング パスにあるファイルにのみ適用されることに注意してください。 リンクがマージされ、仮想ディレクトリ パスから作成されたファイルが表示される場合は、変更可能なままになります。 例:

C:\Foo は、ファイル Cat.txt を含むディスク上に存在します
C:\Bar は、ファイル Cow.txt を含むディスク上に存在します

リンクが仮想パスとして C:\Foo、バッキング パスとして C:\Bar が作成され、リンクが読み取り専用とマークされ、マージされると、Cat.txt と Cow.txt の両方が C:\Foo に表示されますが、Cat.txt は変更可能ですが、Cow.txt は変更可能ではありません。
CREATE_BIND_LINK_FLAG_MERGED
0x00000002

マージされたリンクはシャドウ リンクに似ていますが、仮想パス内の既存のコンテンツがバッキング パスとマージされる点が除きます。

このフラグを追加して、シャドウ リンクの前の例をもう一度考えてみましょう。 例:

- C:\Foo は、Cat.txt と Dog.txt の 2 つのファイルを含むディスク上に存在します
- C:\Bar は、Cow.txt と Mouse.txt の 2 つのファイルを含むディスク上に存在します

リンクが仮想パスとして C:\Foo で作成され、フラグが CREATE_BIND_LINK_FLAG_MERGEDされたバッキング パスとして C:\Bar が作成されると、C:\Foo パスに Cat.txt、Dog.txt、Cow.txt、Mouse.txt が表示されます。

マージされたリンクは、仮想パスがディレクトリの場合にのみ適用されることに注意してください。 バッキング パスと仮想パスの両方にファイルが表示される場合は、バッキング パス内のファイルが優先されます (つまり、仮想パス内のファイルはマスクされます)。 これは、仮想パス内のすべてのディレクトリに再帰的に適用されます。 マージはディレクトリに適用されるため、 virtualPathbackingPath の両方に同じレベルの同じ名前のディレクトリがある場合、ディレクトリはリンクの結果としてマージされます。 リンクがマージされたリンクでない場合は、バッキング パス内のディレクトリが優先され、 virtualPath 内のディレクトリがオーバーライドされます。 マージされたリンクが存在するときにマージされたパスにファイルが作成された場合、そのファイルはバッキング パスに物理的に作成され (バインド リンクの場合と同様)、 virtualPath で同じ名前のファイルをオーバーライドします。

次のディレクトリ構造を考えてみましょう。

- c:\Foo\Sub\Foo_sub.txt
- c:\Bar\Sub\Bar_sub.txt

2 つの異なるリンク:

- {c:\Foo は c:\Bar WITHOUT merge} にリンクされています。 この場合、c:\Foo\Sub は Bar_sub.txt のみを表示します。
- {c:\Foo は c:\Bar WITH merge} にリンクされています。 この場合、c:\Foo\Sub は Foo_sub.txt と Bar_sub.txt の両方を表示します。

バインド リンクはパスベースのリンクであるため、リンクの作成後にバッキング パスでファイルが置換、変更、または削除/再作成された場合、仮想パスはリンクのフォロー時に存在するファイルを指します。 これは、ファイルが開かれた時点でリンクが解決されるために発生します。 したがって、バッキング パスのファイルがリンクのために仮想パス内のファイルをマスクしていて、バッキング パス内のファイルが削除された場合は、後続の開いたファイルが仮想パスで開きます。

要件

要件
Header bindlink.h

こちらもご覧ください

CreateBindLink