1// Copyright (c) 2006-2010 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// Defines InterceptionManager, the class in charge of setting up interceptions 6// for the sandboxed process. For more details see: 7// http://dev.chromium.org/developers/design-documents/sandbox . 8 9#ifndef SANDBOX_SRC_INTERCEPTION_INTERNAL_H_ 10#define SANDBOX_SRC_INTERCEPTION_INTERNAL_H_ 11 12#include "sandbox/win/src/sandbox_types.h" 13 14namespace sandbox { 15 16const int kMaxThunkDataBytes = 64; 17 18enum InterceptorId; 19 20// The following structures contain variable size fields at the end, and will be 21// used to transfer information between two processes. In order to guarantee 22// our ability to follow the chain of structures, the alignment should be fixed, 23// hence this pragma. 24#pragma pack(push, 4) 25 26// Structures for the shared memory that contains patching information 27// for the InterceptionAgent. 28// A single interception: 29struct FunctionInfo { 30 size_t record_bytes; // rounded to sizeof(size_t) bytes 31 InterceptionType type; 32 InterceptorId id; 33 const void* interceptor_address; 34 char function[1]; // placeholder for null terminated name 35 // char interceptor[] // followed by the interceptor function 36}; 37 38// A single dll: 39struct DllPatchInfo { 40 size_t record_bytes; // rounded to sizeof(size_t) bytes 41 size_t offset_to_functions; 42 int num_functions; 43 bool unload_module; 44 wchar_t dll_name[1]; // placeholder for null terminated name 45 // FunctionInfo function_info[] // followed by the functions to intercept 46}; 47 48// All interceptions: 49struct SharedMemory { 50 int num_intercepted_dlls; 51 void* interceptor_base; 52 DllPatchInfo dll_list[1]; // placeholder for the list of dlls 53}; 54 55// Dummy single thunk: 56struct ThunkData { 57 char data[kMaxThunkDataBytes]; 58}; 59 60// In-memory representation of the interceptions for a given dll: 61struct DllInterceptionData { 62 size_t data_bytes; 63 size_t used_bytes; 64 void* base; 65 int num_thunks; 66#if defined(_WIN64) 67 int dummy; // Improve alignment. 68#endif 69 ThunkData thunks[1]; 70}; 71 72#pragma pack(pop) 73 74} // namespace sandbox 75 76#endif // SANDBOX_SRC_INTERCEPTION_INTERNAL_H_ 77