blob: f9f15c356348155c3cccfcef47a203435a5e927a [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_ELF_CREATE_FILE_CHROME_CREATE_FILE_H_
#define CHROME_ELF_CREATE_FILE_CHROME_CREATE_FILE_H_
#include <windows.h>
#include "chrome_elf/chrome_elf_types.h"
// A CreateFileW replacement that will call NTCreateFile directly when the
// criteria defined in ShouldBypass() are satisfied for |lp_file_name|.
extern "C" HANDLE WINAPI CreateFileWRedirect(
LPCWSTR file_name,
DWORD desired_access,
DWORD share_mode,
LPSECURITY_ATTRIBUTES security_attributes,
DWORD creation_disposition,
DWORD flags_and_attributes,
HANDLE template_file);
// Returns the count of CreateFile calls redirected so far.
extern "C" int GetRedirectCount();
// Partial reimplementation of kernel32!CreateFile (very partial: only handles
// reading and writing to files in the User Data directory).
HANDLE CreateFileNTDLL(
LPCWSTR file_name,
DWORD desired_access,
DWORD share_mode,
LPSECURITY_ATTRIBUTES security_attributes,
DWORD creation_disposition,
DWORD flags_and_attributes,
HANDLE template_file);
// Determines whether or not we should use our version of CreateFile, or the
// system version (only uses ours if we're writing to the user data directory).
bool ShouldBypass(LPCWSTR file_name);
#endif // CHROME_ELF_CREATE_FILE_CHROME_CREATE_FILE_H_