1// Copyright (c) 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#ifndef SANDBOX_SRC_EAT_RESOLVER_H__
6#define SANDBOX_SRC_EAT_RESOLVER_H__
7
8#include "base/basictypes.h"
9#include "sandbox/win/src/nt_internals.h"
10#include "sandbox/win/src/resolver.h"
11
12namespace sandbox {
13
14// This is the concrete resolver used to perform exports table interceptions.
15class EatResolverThunk : public ResolverThunk {
16 public:
17  EatResolverThunk() : eat_entry_(NULL) {}
18  virtual ~EatResolverThunk() {}
19
20  // Implementation of Resolver::Setup.
21  virtual NTSTATUS Setup(const void* target_module,
22                         const void* interceptor_module,
23                         const char* target_name,
24                         const char* interceptor_name,
25                         const void* interceptor_entry_point,
26                         void* thunk_storage,
27                         size_t storage_bytes,
28                         size_t* storage_used);
29
30  // Implementation of Resolver::ResolveTarget.
31  virtual NTSTATUS ResolveTarget(const void* module,
32                                 const char* function_name,
33                                 void** address);
34
35  // Implementation of Resolver::GetThunkSize.
36  virtual size_t GetThunkSize() const;
37
38 private:
39  // The entry to patch.
40  DWORD* eat_entry_;
41
42  DISALLOW_COPY_AND_ASSIGN(EatResolverThunk);
43};
44
45}  // namespace sandbox
46
47
48#endif  // SANDBOX_SRC_EAT_RESOLVER_H__
49