| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef SANDBOX_SRC_SANDBOX_NT_UTIL_H_ | 5 #ifndef SANDBOX_SRC_SANDBOX_NT_UTIL_H_ |
| 6 #define SANDBOX_SRC_SANDBOX_NT_UTIL_H_ | 6 #define SANDBOX_SRC_SANDBOX_NT_UTIL_H_ |
| 7 | 7 |
| 8 #include <intrin.h> | 8 #include <intrin.h> |
| 9 #include <stdint.h> | |
| 10 | 9 |
| 11 #include "base/macros.h" | 10 #include "base/basictypes.h" |
| 12 #include "sandbox/win/src/nt_internals.h" | 11 #include "sandbox/win/src/nt_internals.h" |
| 13 #include "sandbox/win/src/sandbox_nt_types.h" | 12 #include "sandbox/win/src/sandbox_nt_types.h" |
| 14 | 13 |
| 15 // Placement new and delete to be used from ntdll interception code. | 14 // Placement new and delete to be used from ntdll interception code. |
| 16 void* __cdecl operator new(size_t size, sandbox::AllocationType type, | 15 void* __cdecl operator new(size_t size, sandbox::AllocationType type, |
| 17 void* near_to = NULL); | 16 void* near_to = NULL); |
| 18 void __cdecl operator delete(void* memory, sandbox::AllocationType type); | 17 void __cdecl operator delete(void* memory, sandbox::AllocationType type); |
| 19 // Add operator delete that matches the placement form of the operator new | 18 // Add operator delete that matches the placement form of the operator new |
| 20 // above. This is required by compiler to generate code to call operator delete | 19 // above. This is required by compiler to generate code to call operator delete |
| 21 // in case the object's constructor throws an exception. | 20 // in case the object's constructor throws an exception. |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 // or write. | 94 // or write. |
| 96 // Note that write intent implies destruction of the buffer content (we actually | 95 // Note that write intent implies destruction of the buffer content (we actually |
| 97 // write) | 96 // write) |
| 98 bool ValidParameter(void* buffer, size_t size, RequiredAccess intent); | 97 bool ValidParameter(void* buffer, size_t size, RequiredAccess intent); |
| 99 | 98 |
| 100 // Copies data from a user buffer to our buffer. Returns the operation status. | 99 // Copies data from a user buffer to our buffer. Returns the operation status. |
| 101 NTSTATUS CopyData(void* destination, const void* source, size_t bytes); | 100 NTSTATUS CopyData(void* destination, const void* source, size_t bytes); |
| 102 | 101 |
| 103 // Copies the name from an object attributes. | 102 // Copies the name from an object attributes. |
| 104 NTSTATUS AllocAndCopyName(const OBJECT_ATTRIBUTES* in_object, | 103 NTSTATUS AllocAndCopyName(const OBJECT_ATTRIBUTES* in_object, |
| 105 wchar_t** out_name, | 104 wchar_t** out_name, uint32* attributes, HANDLE* root); |
| 106 uint32_t* attributes, | |
| 107 HANDLE* root); | |
| 108 | 105 |
| 109 // Determine full path name from object root and path. | 106 // Determine full path name from object root and path. |
| 110 NTSTATUS AllocAndGetFullPath(HANDLE root, | 107 NTSTATUS AllocAndGetFullPath(HANDLE root, |
| 111 wchar_t* path, | 108 wchar_t* path, |
| 112 wchar_t** full_path); | 109 wchar_t** full_path); |
| 113 | 110 |
| 114 // Initializes our ntdll level heap | 111 // Initializes our ntdll level heap |
| 115 bool InitHeap(); | 112 bool InitHeap(); |
| 116 | 113 |
| 117 // Returns true if the provided handle refers to the current process. | 114 // Returns true if the provided handle refers to the current process. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 130 // The returned buffer must be freed with a placement delete from the ntdll | 127 // The returned buffer must be freed with a placement delete from the ntdll |
| 131 // level allocator: | 128 // level allocator: |
| 132 // | 129 // |
| 133 // UNICODE_STRING* name = GetPEImageInfoFromModule(HMODULE module, &flags); | 130 // UNICODE_STRING* name = GetPEImageInfoFromModule(HMODULE module, &flags); |
| 134 // if (!name) { | 131 // if (!name) { |
| 135 // // probably not a valid dll | 132 // // probably not a valid dll |
| 136 // return; | 133 // return; |
| 137 // } | 134 // } |
| 138 // InsertYourLogicHere(name); | 135 // InsertYourLogicHere(name); |
| 139 // operator delete(name, NT_ALLOC); | 136 // operator delete(name, NT_ALLOC); |
| 140 UNICODE_STRING* GetImageInfoFromModule(HMODULE module, uint32_t* flags); | 137 UNICODE_STRING* GetImageInfoFromModule(HMODULE module, uint32* flags); |
| 141 | 138 |
| 142 // Returns the full path and filename for a given dll. | 139 // Returns the full path and filename for a given dll. |
| 143 // May return NULL if the provided address is not backed by a named section, or | 140 // May return NULL if the provided address is not backed by a named section, or |
| 144 // if the current OS version doesn't support the call. The returned buffer must | 141 // if the current OS version doesn't support the call. The returned buffer must |
| 145 // be freed with a placement delete (see GetImageNameFromModule example). | 142 // be freed with a placement delete (see GetImageNameFromModule example). |
| 146 UNICODE_STRING* GetBackingFilePath(PVOID address); | 143 UNICODE_STRING* GetBackingFilePath(PVOID address); |
| 147 | 144 |
| 148 // Returns the last component of a path that contains the module name. | 145 // Returns the last component of a path that contains the module name. |
| 149 // It will return NULL if the path ends with the path separator. The returned | 146 // It will return NULL if the path ends with the path separator. The returned |
| 150 // buffer must be freed with a placement delete (see GetImageNameFromModule | 147 // buffer must be freed with a placement delete (see GetImageNameFromModule |
| (...skipping 27 matching lines...) Expand all Loading... |
| 178 bool changed_; | 175 bool changed_; |
| 179 void* address_; | 176 void* address_; |
| 180 size_t bytes_; | 177 size_t bytes_; |
| 181 ULONG old_protect_; | 178 ULONG old_protect_; |
| 182 | 179 |
| 183 DISALLOW_COPY_AND_ASSIGN(AutoProtectMemory); | 180 DISALLOW_COPY_AND_ASSIGN(AutoProtectMemory); |
| 184 }; | 181 }; |
| 185 | 182 |
| 186 // Returns true if the file_rename_information structure is supported by our | 183 // Returns true if the file_rename_information structure is supported by our |
| 187 // rename handler. | 184 // rename handler. |
| 188 bool IsSupportedRenameCall(FILE_RENAME_INFORMATION* file_info, | 185 bool IsSupportedRenameCall(FILE_RENAME_INFORMATION* file_info, DWORD length, |
| 189 DWORD length, | 186 uint32 file_info_class); |
| 190 uint32_t file_info_class); | |
| 191 | 187 |
| 192 } // namespace sandbox | 188 } // namespace sandbox |
| 193 | 189 |
| 194 | 190 |
| 195 #endif // SANDBOX_SRC_SANDBOX_NT_UTIL_H__ | 191 #endif // SANDBOX_SRC_SANDBOX_NT_UTIL_H__ |
| OLD | NEW |