読者です 読者をやめる 読者になる 読者になる

くつろぎ備忘録

趣味で適当にくつろぐ人。真偽のほどは要検証で。

CreateFile(kernel32)

使い方
HANDLE CreateFile(
LPCTSTR lpFileName, // ファイル名
DWORD dwDesiredAccess, // アクセスモード
DWORD dwShareMode, // 共有モード
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // セキュリティ記述子
DWORD dwCreationDisposition, // 作成方法
DWORD dwFlagsAndAttributes, // ファイル属性
HANDLE hTemplateFile // テンプレートファイルのハンドル
);

 

戻り値
関数が成功すると、指定したファイルに対する、開いているハンドルが返る。
dwCreationDistribution パラメータで CREATE_ALWAYS または OPEN_ALWAYS を指定し、lpFileName パラメータで指定したファイルが既に存在している場合、(CreateFile が成功した場合でも) 関数は 183(ERROR_ALREADY_EXISTS) が返る。
CreateFile を実行する前にファイルが存在していない場合、GetLastError は 0 が返る。

 

関数が失敗すると、-1(INVALID_HANDLE_VALUE) が返る。
拡張エラー情報を取得するには、GetLastError 関数を使う。

 

他の例
hTemplateFile = NULL
Attributes = NORMAL
Mode = CREATE_ALWAYS
pSecurity = NULL
ShareMode = 0
Access = GENERIC_WRITE
FileName = "C:\Users\[ユーザ名]\AppData\Local\Temp\ファイル名.exe"

 

説明
FileNameで指定したパスを参照し、既にファイルがあれば上書き、なければファイルの作成を行う。
作成されるファイルには属性の指定がない。

 

補足
dwDesiredAccess(Access)
0x00000000…0(デバイス属性の問い合わせ)
0x40000000…GENERIC_READ(読み取りアクセス)
0x80000000…GENERIC_WRITE(書き込みアクセス)

 

dwShareMode(ShareMode)
0x0…0(オブジェクト共有しない)
0x1…FILE_SHARE_READ(読み取りアクセス要求を許可)
0x2…FILE_SHARE_WRITE(書き込みアクセス要求を許可)
0x4…FILE_SHARE_DELETE(削除アクセス要求を許可)

 

dwCreationDisposition(Mode)
0x1…CREATE_NEW(新しいファイルを作成。既にファイルがある場合は失敗)
0x2…CREATE_ALWAYS(新しいファイルを作成。既にファイルがある場合は上書き)
0x3…OPEN_EXISTING(ファイルを開く。指定したファイルがない場合は失敗)
0x4…OPEN_ALWAYS(既にファイルがある場合、そのファイルを開く。ない場合は新しいファイルを作成)
0x5…TRUNCATE_EXISTING(ファイルを開き、ファイルのサイズを 0 バイトにする。ない場合は失敗)

 

dwFlagsAndAttributes(Attributes)
0x00000000…SECURITY_ANONYMOUS
0x00000001…FILE_ATTRIBUTE_READONLY(読み取り専用)
0x00000002…FILE_ATTRIBUTE_HIDDEN(隠しファイル)
0x00000004…FILE_ATTRIBUTE_SYSTEM(オペレーティングシステム用のファイル)
0x00000020…FILE_ATTRIBUTE_ARCHIVE
0x00000080…FILE_ATTRIBUTE_NORMAL(特に属性を設定しない)
0x00000100…FILE_ATTRIBUTE_TEMPORARY(一時ファイル)
0x00001000…FILE_ATTRIBUTE_OFFLINE
0x00002000…FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
0x00004000…FILE_ATTRIBUTE_ENCRYPTED(ファイルまたはディレクトリを暗号化)
0x00010000…SECURITY_IDENTIFICATION
0x00020000…SECURITY_IMPERSONATION
0x00030000…SECURITY_DELEGATION
0x00040000…SECURITY_CONTEXT_TRACKING
0x00080000…SECURITY_EFFECTIVE_ONLY
0x00100000…FILE_FLAG_OPEN_NO_RECALL
0x00200000…FILE_FLAG_OPEN_REPARSE_POINT
0x01000000…FILE_FLAG_POSIX_SEMANTICS
0x02000000…FILE_FLAG_BACKUP_SEMANTICS
0x04000000…FILE_FLAG_DELETE_ON_CLOSE
0x08000000…FILE_FLAG_SEQUENTIAL_SCAN
0x10000000…FILE_FLAG_RANDOM_ACCESS(ファイルにランダムアクセスする)
0x20000000…FILE_FLAG_NO_BUFFERING(バッファやキャッシュを使わずにファイルを開く)
0x40000000…FILE_FLAG_OVERLAPPED(オブジェクトを初期化)
0x80000000…FILE_FLAG_WRITE_THROUGH(キャッシュに書き込まれたデータを直接ディスクに書き込む)


参考
Microsoft MSDN
https://msdn.microsoft.com/ja-jp/library/cc429198.aspx
ちょくとのページ
http://chokuto.ifdef.jp/index.html

広告を非表示にする