Home | History | Annotate | Download | only in create_file
      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|.
     14 extern "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.
     24 extern "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).
     28 HANDLE 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).
     39 bool ShouldBypass(LPCWSTR file_name);
     40 
     41 #endif  // CHROME_ELF_CREATE_FILE_CHROME_CREATE_FILE_H_
     42