1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_ELF_CREATE_FILE_CHROME_CREATE_FILE_H_
6#define CHROME_ELF_CREATE_FILE_CHROME_CREATE_FILE_H_
7
8#include <windows.h>
9
10#include "chrome_elf/chrome_elf_types.h"
11
12// A CreateFileW replacement that will call NTCreateFile directly when the
13// criteria defined in ShouldBypass() are satisfied for |lp_file_name|.
14extern "C" HANDLE WINAPI CreateFileWRedirect(
15    LPCWSTR file_name,
16    DWORD desired_access,
17    DWORD share_mode,
18    LPSECURITY_ATTRIBUTES security_attributes,
19    DWORD creation_disposition,
20    DWORD flags_and_attributes,
21    HANDLE template_file);
22
23// Returns the count of CreateFile calls redirected so far.
24extern "C" int GetRedirectCount();
25
26// Partial reimplementation of kernel32!CreateFile (very partial: only handles
27// reading and writing to files in the User Data directory).
28HANDLE CreateFileNTDLL(
29    LPCWSTR file_name,
30    DWORD desired_access,
31    DWORD share_mode,
32    LPSECURITY_ATTRIBUTES security_attributes,
33    DWORD creation_disposition,
34    DWORD flags_and_attributes,
35    HANDLE template_file);
36
37// Determines whether or not we should use our version of CreateFile, or the
38// system version (only uses ours if we're writing to the user data directory).
39bool ShouldBypass(LPCWSTR file_name);
40
41#endif  // CHROME_ELF_CREATE_FILE_CHROME_CREATE_FILE_H_
42