Win32で事実上メモリ上に展開されるテンポラリファイルを作成する

CreateFileにフラグとしてFILE_ATTRIBUTE_TEMPORARYを渡せば、なるべくメモリ上で処理をしてくれる。また、共有フラグを0にして他人にはアクセスされないように設定し、さらに、FILE_FLAG_DELETE_ON_CLOSEを指定し、CloseHandle時にファイルを削除するように設定する。これでかなりセキュアなテンポラリファイルを利用することができる。

WCHAR tempDir[MAX_PATH], tempFn[MAX_PATH];
::GetTempPathW(MAX_PATH, tempDir);
::GetTempFileNameW(tempDir, L"VSP", 0, tempFn);
HANDLE hFile = ::CreateFileW(
  tempFn, GENERIC_READ | GENERIC_WRITE, 0, NULL,
  OPEN_EXISTING,
  FILE_ATTRIBUTE_TEMPORARY |
  FILE_ATTRIBUTE_HIDDEN |
  FILE_ATTRIBUTE_NOT_CONTENT_INDEXED |
  FILE_FLAG_RANDOM_ACCESS |
  FILE_FLAG_DELETE_ON_CLOSE,
  NULL);