// Copyright 2017 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.

#include "base/win/patch_util.h"

#include "base/logging.h"

namespace base {
namespace win {
namespace internal {

DWORD ModifyCode(void* destination, const void* source, int length) {
  if ((NULL == destination) || (NULL == source) || (0 == length)) {
    NOTREACHED();
    return ERROR_INVALID_PARAMETER;
  }

  // Change the page protection so that we can write.
  MEMORY_BASIC_INFORMATION memory_info;
  DWORD error = NO_ERROR;
  DWORD old_page_protection = 0;

  if (!VirtualQuery(destination, &memory_info, sizeof(memory_info))) {
    error = GetLastError();
    return error;
  }

  DWORD is_executable = (PAGE_EXECUTE | PAGE_EXECUTE_READ |
                         PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY) &
                        memory_info.Protect;

  if (VirtualProtect(destination, length,
                     is_executable ? PAGE_EXECUTE_READWRITE : PAGE_READWRITE,
                     &old_page_protection)) {
    // Write the data.
    CopyMemory(destination, source, length);

    // Restore the old page protection.
    error = ERROR_SUCCESS;
    VirtualProtect(destination, length, old_page_protection,
                   &old_page_protection);
  } else {
    error = GetLastError();
  }

  return error;
}

}  // namespace internal
}  // namespace win
}  // namespace bsae
