CF_OPEN_FILE_FLAGS
列挙型フラグメンバー 5
| 名前 | 10進 | 16進 | 説明 |
|---|---|---|---|
| CF_OPEN_FILE_FLAG_NONE | 0 | 0x0 | ファイルオープンフラグを指定しません。 |
| CF_OPEN_FILE_FLAG_EXCLUSIVE | 1 | 0x1 | 指定した場合、CfOpenFileWithOplock は 共有なし のハンドルを返し、そのファイルに対して RH (OPLOCK_LEVEL_CACHE_READ | OPLOCK_LEVEL_CACHE_HANDLE) の oplock を要求します。 FILE_EXECUTE | FILE_READ_DATA | FILE_WRITE_DATA | FILE_APPEND_DATA | DELETE のいずれか (または GENERIC_READ | GENERIC_WRITE のいずれか、もしくは両方) でオープンする通常の CreateFile 呼び出しは、解説 セクションで説明するとおり、共有の競合によって oplock を解除します。oplock の所有者は処理を完了して確認応答することができます。 |
| CF_OPEN_FILE_FLAG_WRITE_ACCESS | 2 | 0x2 | 指定した場合、CfOpenFileWithOplock は FILE_READ_DATA/FILE_LIST_DIRECTORY および FILE_WRITE_DATA/FILE_ADD_FILE アクセスでファイルまたはディレクトリを開こうとします。指定しない場合は、FILE_READ_DATA/FILE_LIST_DIRECTORY でファイルまたはディレクトリを開こうとします。 |
| CF_OPEN_FILE_FLAG_DELETE_ACCESS | 4 | 0x4 | 指定した場合、CfOpenFileWithOplock は DELETE アクセスでファイルまたはディレクトリを開こうとします。指定しない場合は、通常どおりファイルを開きます。 |
| CF_OPEN_FILE_FLAG_FOREGROUND | 8 | 0x8 | このフラグを使用すると、CfOpenFileWithOplock は oplock を要求しません。これは、呼び出し元がフォアグラウンドアプリケーションとして動作している場合に使用します。つまり、この API によって作成されたファイルハンドルが他の呼び出し元に対して共有違反を引き起こすかどうかを気にせず、また、そのファイルに既に設定されている oplock を解除することも気にしない場合です。そのため、oplock を要求せずにハンドルを開きます。 注: 既定の バックグラウンド 動作では、ファイルハンドルを開く際に oplock を要求します。これにより、既に oplock が存在する場合は呼び出しが失敗し、後で共有違反を引き起こさないように処理を譲る必要があるときは、ハンドルを閉じるよう通知を受けられます。 |
公式ドキュメント
ファイルを開く際にさまざまな権限を要求するためのフラグです。
解説(Remarks)
バックグラウンドアプリケーションは通常、ファイルに対して透過的に動作することを望みます。特に、他の (フォアグラウンドの) オープン元に対して共有違反を引き起こすことを避けたいと考えます。そのために、CfOpenFileWithOplock で CF_OPEN_FILE_FLAG_EXCLUSIVE を使用した場合に付与されるような (OPLOCK_LEVEL_CACHE_READ | OPLOCK_LEVEL_CACHE_HANDLE) の oplock を取得します。その後、要求する共有モードやアクセスモードがバックグラウンドアプリケーションのモードと競合する別のオープン元が現れると、バックグラウンドアプリケーションの oplock が解除されます。これにより、バックグラウンドアプリケーションはファイルハンドルを閉じるよう促されます (Cf ハンドルの場合、ハンドルは無効になります。実際の基になるハンドルは閉じられています)。バックグラウンドアプリケーションがハンドルを閉じると、もう一方のオープン要求は共有違反に遭遇することなく続行されます。これらはすべて oplock の OPLOCK_LEVEL_CACHE_HANDLE の部分によって機能します。CF_OPEN_FILE_FLAG_EXCLUSIVE を指定しない場合、oplock は OPLOCK_LEVEL_CACHE_READ の保護しか持たないため、共有違反に対する保護は提供されません。
CF_OPEN_FILE_FLAG_EXCLUSIVE を指定しない場合、オープンは すべて共有 となり、OPLOCK_LEVEL_CACHE_READ の oplock が取得されます。
通常の CreateFile 呼び出しでは oplock は解除されません。通常の CreateFile が Cf ハンドルのアクセスと競合する共有モードを指定した場合 (たとえば、通常の CreateFile が FILE_SHARE_READ を指定しない場合)、通常の CreateFile は ERROR_SHARING_VIOLATION で失敗します。oplock は、他の呼び出し元が書き込みなどの競合する I/O を発行するまで解除されません。その場合、oplock の解除は勧告的なものにすぎません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
列挙メンバーの定義。HSP タブは #define global(値は16進)。
typedef enum CF_OPEN_FILE_FLAGS : int {
CF_OPEN_FILE_FLAG_NONE = 0,
CF_OPEN_FILE_FLAG_EXCLUSIVE = 1,
CF_OPEN_FILE_FLAG_WRITE_ACCESS = 2,
CF_OPEN_FILE_FLAG_DELETE_ACCESS = 4,
CF_OPEN_FILE_FLAG_FOREGROUND = 8
} CF_OPEN_FILE_FLAGS;[Flags]
public enum CF_OPEN_FILE_FLAGS : int
{
CF_OPEN_FILE_FLAG_NONE = 0,
CF_OPEN_FILE_FLAG_EXCLUSIVE = 1,
CF_OPEN_FILE_FLAG_WRITE_ACCESS = 2,
CF_OPEN_FILE_FLAG_DELETE_ACCESS = 4,
CF_OPEN_FILE_FLAG_FOREGROUND = 8,
}<Flags>
Public Enum CF_OPEN_FILE_FLAGS As Integer
CF_OPEN_FILE_FLAG_NONE = 0
CF_OPEN_FILE_FLAG_EXCLUSIVE = 1
CF_OPEN_FILE_FLAG_WRITE_ACCESS = 2
CF_OPEN_FILE_FLAG_DELETE_ACCESS = 4
CF_OPEN_FILE_FLAG_FOREGROUND = 8
End Enumimport enum
class CF_OPEN_FILE_FLAGS(enum.IntFlag):
CF_OPEN_FILE_FLAG_NONE = 0
CF_OPEN_FILE_FLAG_EXCLUSIVE = 1
CF_OPEN_FILE_FLAG_WRITE_ACCESS = 2
CF_OPEN_FILE_FLAG_DELETE_ACCESS = 4
CF_OPEN_FILE_FLAG_FOREGROUND = 8// CF_OPEN_FILE_FLAGS (flags)
pub const CF_OPEN_FILE_FLAG_NONE: i32 = 0;
pub const CF_OPEN_FILE_FLAG_EXCLUSIVE: i32 = 1;
pub const CF_OPEN_FILE_FLAG_WRITE_ACCESS: i32 = 2;
pub const CF_OPEN_FILE_FLAG_DELETE_ACCESS: i32 = 4;
pub const CF_OPEN_FILE_FLAG_FOREGROUND: i32 = 8;// CF_OPEN_FILE_FLAGS
const (
CF_OPEN_FILE_FLAG_NONE int32 = 0
CF_OPEN_FILE_FLAG_EXCLUSIVE int32 = 1
CF_OPEN_FILE_FLAG_WRITE_ACCESS int32 = 2
CF_OPEN_FILE_FLAG_DELETE_ACCESS int32 = 4
CF_OPEN_FILE_FLAG_FOREGROUND int32 = 8
)const
CF_OPEN_FILE_FLAG_NONE = 0;
CF_OPEN_FILE_FLAG_EXCLUSIVE = 1;
CF_OPEN_FILE_FLAG_WRITE_ACCESS = 2;
CF_OPEN_FILE_FLAG_DELETE_ACCESS = 4;
CF_OPEN_FILE_FLAG_FOREGROUND = 8;// CF_OPEN_FILE_FLAGS
pub const CF_OPEN_FILE_FLAG_NONE: i32 = 0;
pub const CF_OPEN_FILE_FLAG_EXCLUSIVE: i32 = 1;
pub const CF_OPEN_FILE_FLAG_WRITE_ACCESS: i32 = 2;
pub const CF_OPEN_FILE_FLAG_DELETE_ACCESS: i32 = 4;
pub const CF_OPEN_FILE_FLAG_FOREGROUND: i32 = 8;const
CF_OPEN_FILE_FLAG_NONE* = 0
CF_OPEN_FILE_FLAG_EXCLUSIVE* = 1
CF_OPEN_FILE_FLAG_WRITE_ACCESS* = 2
CF_OPEN_FILE_FLAG_DELETE_ACCESS* = 4
CF_OPEN_FILE_FLAG_FOREGROUND* = 8enum CF_OPEN_FILE_FLAGS : int {
CF_OPEN_FILE_FLAG_NONE = 0,
CF_OPEN_FILE_FLAG_EXCLUSIVE = 1,
CF_OPEN_FILE_FLAG_WRITE_ACCESS = 2,
CF_OPEN_FILE_FLAG_DELETE_ACCESS = 4,
CF_OPEN_FILE_FLAG_FOREGROUND = 8,
}#define global CF_OPEN_FILE_FLAG_NONE 0x0
#define global CF_OPEN_FILE_FLAG_EXCLUSIVE 0x1
#define global CF_OPEN_FILE_FLAG_WRITE_ACCESS 0x2
#define global CF_OPEN_FILE_FLAG_DELETE_ACCESS 0x4
#define global CF_OPEN_FILE_FLAG_FOREGROUND 0x8
; ※フラグ列挙型。ビットORで組み合わせ可(例: FOO|BAR)。