1 // Copyright (c) 2012 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 #ifndef SANDBOX_WIN_SRC_INTERNAL_TYPES_H_ 6 #define SANDBOX_WIN_SRC_INTERNAL_TYPES_H_ 7 8 namespace sandbox { 9 10 const wchar_t kNtdllName[] = L"ntdll.dll"; 11 const wchar_t kKerneldllName[] = L"kernel32.dll"; 12 const wchar_t kKernelBasedllName[] = L"kernelbase.dll"; 13 14 // Defines the supported C++ types encoding to numeric id. Like a poor's man 15 // RTTI. Note that true C++ RTTI will not work because the types are not 16 // polymorphic anyway. 17 enum ArgType { 18 INVALID_TYPE = 0, 19 WCHAR_TYPE, 20 ULONG_TYPE, 21 UNISTR_TYPE, 22 VOIDPTR_TYPE, 23 INPTR_TYPE, 24 INOUTPTR_TYPE, 25 LAST_TYPE 26 }; 27 28 // Encapsulates a pointer to a buffer and the size of the buffer. 29 class CountedBuffer { 30 public: CountedBuffer(void * buffer,uint32 size)31 CountedBuffer(void* buffer, uint32 size) : size_(size), buffer_(buffer) {} 32 Size()33 uint32 Size() const { 34 return size_; 35 } 36 Buffer()37 void* Buffer() const { 38 return buffer_; 39 } 40 41 private: 42 uint32 size_; 43 void* buffer_; 44 }; 45 46 // Helper class to convert void-pointer packed ints for both 47 // 32 and 64 bit builds. This construct is non-portable. 48 class IPCInt { 49 public: IPCInt(void * buffer)50 explicit IPCInt(void* buffer) { 51 buffer_.vp = buffer; 52 } 53 IPCInt(unsigned __int32 i32)54 explicit IPCInt(unsigned __int32 i32) { 55 buffer_.vp = NULL; 56 buffer_.i32 = i32; 57 } 58 As32Bit()59 unsigned __int32 As32Bit() const { 60 return buffer_.i32; 61 } 62 AsVoidPtr()63 void* AsVoidPtr() const { 64 return buffer_.vp; 65 } 66 67 private: 68 union U { 69 void* vp; 70 unsigned __int32 i32; 71 } buffer_; 72 }; 73 74 } // namespace sandbox 75 76 #endif // SANDBOX_WIN_SRC_INTERNAL_TYPES_H_ 77