chrome_create_file.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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// Partial reimplementation of kernel32!CreateFile (very partial: only handles
24// reading and writing to files in the User Data directory).
25HANDLE CreateFileNTDLL(
26    LPCWSTR file_name,
27    DWORD desired_access,
28    DWORD share_mode,
29    LPSECURITY_ATTRIBUTES security_attributes,
30    DWORD creation_disposition,
31    DWORD flags_and_attributes,
32    HANDLE template_file);
33
34// Determines whether or not we should use our version of CreateFile, or the
35// system version (only uses ours if we're writing to the user data directory).
36bool ShouldBypass(LPCWSTR file_name);
37
38// Returns true if |exe_path| points to a Chrome installed in a SxS
39// installation.
40bool IsCanary(LPWSTR exe_path);
41
42#endif  // CHROME_ELF_CREATE_FILE_CHROME_CREATE_FILE_H_
43