| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #include "sandbox/win/src/handle_closer.h" | 5 #include "sandbox/win/src/handle_closer.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/win/windows_version.h" | 9 #include "base/win/windows_version.h" |
| 10 #include "sandbox/win/src/interceptors.h" | 10 #include "sandbox/win/src/interceptors.h" |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 173 | 173 |
| 174 return true; | 174 return true; |
| 175 } | 175 } |
| 176 | 176 |
| 177 bool GetHandleName(HANDLE handle, string16* handle_name) { | 177 bool GetHandleName(HANDLE handle, string16* handle_name) { |
| 178 static NtQueryObject QueryObject = NULL; | 178 static NtQueryObject QueryObject = NULL; |
| 179 if (!QueryObject) | 179 if (!QueryObject) |
| 180 ResolveNTFunctionPtr("NtQueryObject", &QueryObject); | 180 ResolveNTFunctionPtr("NtQueryObject", &QueryObject); |
| 181 | 181 |
| 182 ULONG size = MAX_PATH; | 182 ULONG size = MAX_PATH; |
| 183 scoped_ptr<UNICODE_STRING> name; | 183 scoped_ptr<UNICODE_STRING, base::FreeDeleter> name; |
| 184 NTSTATUS result; | 184 NTSTATUS result; |
| 185 | 185 |
| 186 do { | 186 do { |
| 187 name.reset(reinterpret_cast<UNICODE_STRING*>(new BYTE[size])); | 187 name.reset(static_cast<UNICODE_STRING*>(malloc(size))); |
| 188 DCHECK(name.get()); |
| 188 result = QueryObject(handle, ObjectNameInformation, name.get(), | 189 result = QueryObject(handle, ObjectNameInformation, name.get(), |
| 189 size, &size); | 190 size, &size); |
| 190 } while (result == STATUS_INFO_LENGTH_MISMATCH || | 191 } while (result == STATUS_INFO_LENGTH_MISMATCH || |
| 191 result == STATUS_BUFFER_OVERFLOW); | 192 result == STATUS_BUFFER_OVERFLOW); |
| 192 | 193 |
| 193 if (NT_SUCCESS(result) && name->Buffer && name->Length) | 194 if (NT_SUCCESS(result) && name->Buffer && name->Length) |
| 194 handle_name->assign(name->Buffer, name->Length / sizeof(wchar_t)); | 195 handle_name->assign(name->Buffer, name->Length / sizeof(wchar_t)); |
| 195 else | 196 else |
| 196 handle_name->clear(); | 197 handle_name->clear(); |
| 197 | 198 |
| 198 return NT_SUCCESS(result); | 199 return NT_SUCCESS(result); |
| 199 } | 200 } |
| 200 | 201 |
| 201 } // namespace sandbox | 202 } // namespace sandbox |
| OLD | NEW |