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