Index: sandbox/win/src/policy_engine_params.h |
diff --git a/sandbox/win/src/policy_engine_params.h b/sandbox/win/src/policy_engine_params.h |
deleted file mode 100644 |
index fb4c00e3da104f5cfd43165c1f52d50c4af04664..0000000000000000000000000000000000000000 |
--- a/sandbox/win/src/policy_engine_params.h |
+++ /dev/null |
@@ -1,202 +0,0 @@ |
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef SANDBOX_SRC_POLICY_ENGINE_PARAMS_H__ |
-#define SANDBOX_SRC_POLICY_ENGINE_PARAMS_H__ |
- |
-#include <stdint.h> |
- |
-#include "sandbox/win/src/internal_types.h" |
-#include "sandbox/win/src/nt_internals.h" |
-#include "sandbox/win/src/sandbox_nt_util.h" |
- |
-// This header defines the classes that allow the low level policy to select |
-// the input parameters. In order to better make sense of this header is |
-// recommended that you check policy_engine_opcodes.h first. |
- |
-namespace sandbox { |
- |
-// Models the set of interesting parameters of an intercepted system call |
-// normally you don't create objects of this class directly, instead you |
-// use the POLPARAMS_XXX macros. |
-// For example, if an intercepted function has the following signature: |
-// |
-// NTSTATUS NtOpenFileFunction (PHANDLE FileHandle, |
-// ACCESS_MASK DesiredAccess, |
-// POBJECT_ATTRIBUTES ObjectAttributes, |
-// PIO_STATUS_BLOCK IoStatusBlock, |
-// ULONG ShareAccess, |
-// ULONG OpenOptions); |
-// |
-// You could say that the following parameters are of interest to policy: |
-// |
-// POLPARAMS_BEGIN(open_params) |
-// POLPARAM(DESIRED_ACCESS) |
-// POLPARAM(OBJECT_NAME) |
-// POLPARAM(SECURITY_DESCRIPTOR) |
-// POLPARAM(IO_STATUS) |
-// POLPARAM(OPEN_OPTIONS) |
-// POLPARAMS_END; |
-// |
-// and the actual code will use this for defining the parameters: |
-// |
-// CountedParameterSet<open_params> p; |
-// p[open_params::DESIRED_ACCESS] = ParamPickerMake(DesiredAccess); |
-// p[open_params::OBJECT_NAME] = |
-// ParamPickerMake(ObjectAttributes->ObjectName); |
-// p[open_params::SECURITY_DESCRIPTOR] = |
-// ParamPickerMake(ObjectAttributes->SecurityDescriptor); |
-// p[open_params::IO_STATUS] = ParamPickerMake(IoStatusBlock); |
-// p[open_params::OPEN_OPTIONS] = ParamPickerMake(OpenOptions); |
-// |
-// These will create an stack-allocated array of ParameterSet objects which |
-// have each 1) the address of the parameter 2) a numeric id that encodes the |
-// original C++ type. This allows the policy to treat any set of supported |
-// argument types uniformily and with some type safety. |
-// |
-// TODO(cpu): support not fully implemented yet for unicode string and will |
-// probably add other types as well. |
-class ParameterSet { |
- public: |
- ParameterSet() : real_type_(INVALID_TYPE), address_(NULL) {} |
- |
- // Retrieve the stored parameter. If the type does not match ulong fail. |
- bool Get(uint32_t* destination) const { |
- if (real_type_ != UINT32_TYPE) { |
- return false; |
- } |
- *destination = Void2TypePointerCopy<uint32_t>(); |
- return true; |
- } |
- |
- // Retrieve the stored parameter. If the type does not match void* fail. |
- bool Get(const void** destination) const { |
- if (real_type_ != VOIDPTR_TYPE) { |
- return false; |
- } |
- *destination = Void2TypePointerCopy<void*>(); |
- return true; |
- } |
- |
- // Retrieve the stored parameter. If the type does not match wchar_t* fail. |
- bool Get(const wchar_t** destination) const { |
- if (real_type_ != WCHAR_TYPE) { |
- return false; |
- } |
- *destination = Void2TypePointerCopy<const wchar_t*>(); |
- return true; |
- } |
- |
- // False if the parameter is not properly initialized. |
- bool IsValid() const { |
- return real_type_ != INVALID_TYPE; |
- } |
- |
- protected: |
- // The constructor can only be called by derived types, which should |
- // safely provide the real_type and the address of the argument. |
- ParameterSet(ArgType real_type, const void* address) |
- : real_type_(real_type), address_(address) { |
- } |
- |
- private: |
- // This template provides the same functionality as bits_cast but |
- // it works with pointer while the former works only with references. |
- template <typename T> |
- T Void2TypePointerCopy() const { |
- return *(reinterpret_cast<const T*>(address_)); |
- } |
- |
- ArgType real_type_; |
- const void* address_; |
-}; |
- |
-// To safely infer the type, we use a set of template specializations |
-// in ParameterSetEx with a template function ParamPickerMake to do the |
-// parameter type deduction. |
- |
-// Base template class. Not implemented so using unsupported types should |
-// fail to compile. |
-template <typename T> |
-class ParameterSetEx : public ParameterSet { |
- public: |
- ParameterSetEx(const void* address); |
-}; |
- |
-template<> |
-class ParameterSetEx<void const*> : public ParameterSet { |
- public: |
- ParameterSetEx(const void* address) |
- : ParameterSet(VOIDPTR_TYPE, address) {} |
-}; |
- |
-template<> |
-class ParameterSetEx<void*> : public ParameterSet { |
- public: |
- ParameterSetEx(const void* address) |
- : ParameterSet(VOIDPTR_TYPE, address) {} |
-}; |
- |
- |
-template<> |
-class ParameterSetEx<wchar_t*> : public ParameterSet { |
- public: |
- ParameterSetEx(const void* address) |
- : ParameterSet(WCHAR_TYPE, address) {} |
-}; |
- |
-template<> |
-class ParameterSetEx<wchar_t const*> : public ParameterSet { |
- public: |
- ParameterSetEx(const void* address) |
- : ParameterSet(WCHAR_TYPE, address) {} |
-}; |
- |
-template <> |
-class ParameterSetEx<uint32_t> : public ParameterSet { |
- public: |
- ParameterSetEx(const void* address) |
- : ParameterSet(UINT32_TYPE, address) {} |
-}; |
- |
-template<> |
-class ParameterSetEx<UNICODE_STRING> : public ParameterSet { |
- public: |
- ParameterSetEx(const void* address) |
- : ParameterSet(UNISTR_TYPE, address) {} |
-}; |
- |
-template <typename T> |
-ParameterSet ParamPickerMake(T& parameter) { |
- return ParameterSetEx<T>(¶meter); |
-}; |
- |
-struct CountedParameterSetBase { |
- int count; |
- ParameterSet parameters[1]; |
-}; |
- |
-// This template defines the actual list of policy parameters for a given |
-// interception. |
-// Warning: This template stores the address to the actual variables, in |
-// other words, the values are not copied. |
-template <typename T> |
-struct CountedParameterSet { |
- CountedParameterSet() : count(T::PolParamLast) {} |
- |
- ParameterSet& operator[](typename T::Args n) { |
- return parameters[n]; |
- } |
- |
- CountedParameterSetBase* GetBase() { |
- return reinterpret_cast<CountedParameterSetBase*>(this); |
- } |
- |
- int count; |
- ParameterSet parameters[T::PolParamLast]; |
-}; |
- |
-} // namespace sandbox |
- |
-#endif // SANDBOX_SRC_POLICY_ENGINE_PARAMS_H__ |