• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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