| Index: sandbox/win/src/sandbox_nt_util.h
|
| diff --git a/sandbox/win/src/sandbox_nt_util.h b/sandbox/win/src/sandbox_nt_util.h
|
| deleted file mode 100644
|
| index 3e0238206768676a76e199b618db97c8d1ca93ae..0000000000000000000000000000000000000000
|
| --- a/sandbox/win/src/sandbox_nt_util.h
|
| +++ /dev/null
|
| @@ -1,196 +0,0 @@
|
| -// Copyright (c) 2010 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 SANDBOX_SRC_SANDBOX_NT_UTIL_H_
|
| -#define SANDBOX_SRC_SANDBOX_NT_UTIL_H_
|
| -
|
| -#include <intrin.h>
|
| -#include <stddef.h>
|
| -#include <stdint.h>
|
| -
|
| -#include "base/macros.h"
|
| -#include "sandbox/win/src/nt_internals.h"
|
| -#include "sandbox/win/src/sandbox_nt_types.h"
|
| -
|
| -// Placement new and delete to be used from ntdll interception code.
|
| -void* __cdecl operator new(size_t size, sandbox::AllocationType type,
|
| - void* near_to = NULL);
|
| -void __cdecl operator delete(void* memory, sandbox::AllocationType type);
|
| -// Add operator delete that matches the placement form of the operator new
|
| -// above. This is required by compiler to generate code to call operator delete
|
| -// in case the object's constructor throws an exception.
|
| -// See http://msdn.microsoft.com/en-us/library/cxdxz3x6.aspx
|
| -void __cdecl operator delete(void* memory, sandbox::AllocationType type,
|
| - void* near_to);
|
| -
|
| -// Regular placement new and delete
|
| -void* __cdecl operator new(size_t size, void* buffer,
|
| - sandbox::AllocationType type);
|
| -void __cdecl operator delete(void* memory, void* buffer,
|
| - sandbox::AllocationType type);
|
| -
|
| -// DCHECK_NT is defined to be pretty much an assert at this time because we
|
| -// don't have logging from the ntdll layer on the child.
|
| -//
|
| -// VERIFY_NT and VERIFY_SUCCESS are the standard asserts on debug, but
|
| -// execute the actual argument on release builds. VERIFY_NT expects an action
|
| -// returning a bool, while VERIFY_SUCCESS expects an action returning
|
| -// NTSTATUS.
|
| -#ifndef NDEBUG
|
| -#define DCHECK_NT(condition) { (condition) ? (void)0 : __debugbreak(); }
|
| -#define VERIFY(action) DCHECK_NT(action)
|
| -#define VERIFY_SUCCESS(action) DCHECK_NT(NT_SUCCESS(action))
|
| -#else
|
| -#define DCHECK_NT(condition)
|
| -#define VERIFY(action) (action)
|
| -#define VERIFY_SUCCESS(action) (action)
|
| -#endif
|
| -
|
| -#define CHECK_NT(condition) { (condition) ? (void)0 : __debugbreak(); }
|
| -
|
| -#define NOTREACHED_NT() DCHECK_NT(false)
|
| -
|
| -namespace sandbox {
|
| -
|
| -#if defined(_M_X64)
|
| -#pragma intrinsic(_InterlockedCompareExchange)
|
| -#pragma intrinsic(_InterlockedCompareExchangePointer)
|
| -
|
| -#elif defined(_M_IX86)
|
| -extern "C" long _InterlockedCompareExchange(long volatile* destination,
|
| - long exchange, long comperand);
|
| -
|
| -#pragma intrinsic(_InterlockedCompareExchange)
|
| -
|
| -// We want to make sure that we use an intrinsic version of the function, not
|
| -// the one provided by kernel32.
|
| -__forceinline void* _InterlockedCompareExchangePointer(
|
| - void* volatile* destination, void* exchange, void* comperand) {
|
| - size_t ret = _InterlockedCompareExchange(
|
| - reinterpret_cast<long volatile*>(destination),
|
| - static_cast<long>(reinterpret_cast<size_t>(exchange)),
|
| - static_cast<long>(reinterpret_cast<size_t>(comperand)));
|
| -
|
| - return reinterpret_cast<void*>(static_cast<size_t>(ret));
|
| -}
|
| -
|
| -#else
|
| -#error Architecture not supported.
|
| -
|
| -#endif
|
| -
|
| -// Returns a pointer to the IPC shared memory.
|
| -void* GetGlobalIPCMemory();
|
| -
|
| -// Returns a pointer to the Policy shared memory.
|
| -void* GetGlobalPolicyMemory();
|
| -
|
| -enum RequiredAccess {
|
| - READ,
|
| - WRITE
|
| -};
|
| -
|
| -// Performs basic user mode buffer validation. In any case, buffers access must
|
| -// be protected by SEH. intent specifies if the buffer should be tested for read
|
| -// or write.
|
| -// Note that write intent implies destruction of the buffer content (we actually
|
| -// write)
|
| -bool ValidParameter(void* buffer, size_t size, RequiredAccess intent);
|
| -
|
| -// Copies data from a user buffer to our buffer. Returns the operation status.
|
| -NTSTATUS CopyData(void* destination, const void* source, size_t bytes);
|
| -
|
| -// Copies the name from an object attributes.
|
| -NTSTATUS AllocAndCopyName(const OBJECT_ATTRIBUTES* in_object,
|
| - wchar_t** out_name,
|
| - uint32_t* attributes,
|
| - HANDLE* root);
|
| -
|
| -// Determine full path name from object root and path.
|
| -NTSTATUS AllocAndGetFullPath(HANDLE root,
|
| - wchar_t* path,
|
| - wchar_t** full_path);
|
| -
|
| -// Initializes our ntdll level heap
|
| -bool InitHeap();
|
| -
|
| -// Returns true if the provided handle refers to the current process.
|
| -bool IsSameProcess(HANDLE process);
|
| -
|
| -enum MappedModuleFlags {
|
| - MODULE_IS_PE_IMAGE = 1, // Module is an executable.
|
| - MODULE_HAS_ENTRY_POINT = 2, // Execution entry point found.
|
| - MODULE_HAS_CODE = 4 // Non zero size of executable sections.
|
| -};
|
| -
|
| -// Returns the name and characteristics for a given PE module. The return
|
| -// value is the name as defined by the export table and the flags is any
|
| -// combination of the MappedModuleFlags enumeration.
|
| -//
|
| -// The returned buffer must be freed with a placement delete from the ntdll
|
| -// level allocator:
|
| -//
|
| -// UNICODE_STRING* name = GetPEImageInfoFromModule(HMODULE module, &flags);
|
| -// if (!name) {
|
| -// // probably not a valid dll
|
| -// return;
|
| -// }
|
| -// InsertYourLogicHere(name);
|
| -// operator delete(name, NT_ALLOC);
|
| -UNICODE_STRING* GetImageInfoFromModule(HMODULE module, uint32_t* flags);
|
| -
|
| -// Returns the full path and filename for a given dll.
|
| -// May return NULL if the provided address is not backed by a named section, or
|
| -// if the current OS version doesn't support the call. The returned buffer must
|
| -// be freed with a placement delete (see GetImageNameFromModule example).
|
| -UNICODE_STRING* GetBackingFilePath(PVOID address);
|
| -
|
| -// Returns the last component of a path that contains the module name.
|
| -// It will return NULL if the path ends with the path separator. The returned
|
| -// buffer must be freed with a placement delete (see GetImageNameFromModule
|
| -// example).
|
| -UNICODE_STRING* ExtractModuleName(const UNICODE_STRING* module_path);
|
| -
|
| -// Returns true if the parameters correspond to a dll mapped as code.
|
| -bool IsValidImageSection(HANDLE section, PVOID *base, PLARGE_INTEGER offset,
|
| - PSIZE_T view_size);
|
| -
|
| -// Converts an ansi string to an UNICODE_STRING.
|
| -UNICODE_STRING* AnsiToUnicode(const char* string);
|
| -
|
| -// Provides a simple way to temporarily change the protection of a memory page.
|
| -class AutoProtectMemory {
|
| - public:
|
| - AutoProtectMemory()
|
| - : changed_(false), address_(NULL), bytes_(0), old_protect_(0) {}
|
| -
|
| - ~AutoProtectMemory() {
|
| - RevertProtection();
|
| - }
|
| -
|
| - // Sets the desired protection of a given memory range.
|
| - NTSTATUS ChangeProtection(void* address, size_t bytes, ULONG protect);
|
| -
|
| - // Restores the original page protection.
|
| - NTSTATUS RevertProtection();
|
| -
|
| - private:
|
| - bool changed_;
|
| - void* address_;
|
| - size_t bytes_;
|
| - ULONG old_protect_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(AutoProtectMemory);
|
| -};
|
| -
|
| -// Returns true if the file_rename_information structure is supported by our
|
| -// rename handler.
|
| -bool IsSupportedRenameCall(FILE_RENAME_INFORMATION* file_info,
|
| - DWORD length,
|
| - uint32_t file_info_class);
|
| -
|
| -} // namespace sandbox
|
| -
|
| -
|
| -#endif // SANDBOX_SRC_SANDBOX_NT_UTIL_H__
|
|
|