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 14 namespace sandbox { 15 16 const int kMaxThunkDataBytes = 64; 17 18 enum 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: 29 struct 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: 39 struct 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: 49 struct 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: 56 struct ThunkData { 57 char data[kMaxThunkDataBytes]; 58 }; 59 60 // In-memory representation of the interceptions for a given dll: 61 struct 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