Index: sandbox/src/handle_table.cc |
=================================================================== |
--- sandbox/src/handle_table.cc (revision 91270) |
+++ sandbox/src/handle_table.cc (working copy) |
@@ -17,8 +17,6 @@ |
return a.ProcessId < b.ProcessId; |
} |
-static NtQueryObject QueryObject = NULL; |
- |
} // namespace |
namespace sandbox { |
@@ -86,6 +84,7 @@ |
} |
void HandleTable::HandleEntry::UpdateInfo(UpdateType flag) { |
+ static NtQueryObject QueryObject = NULL; |
if (!QueryObject) |
ResolveNTFunctionPtr("NtQueryObject", &QueryObject); |
@@ -120,8 +119,18 @@ |
switch (flag) { |
case UPDATE_INFO_AND_NAME: |
if (type_info_buffer_.size() && handle_name_.empty()) { |
- GetHandleName(reinterpret_cast<HANDLE>(handle_entry_->Handle), |
- &handle_name_); |
+ ULONG size = MAX_PATH; |
+ scoped_ptr<UNICODE_STRING> name; |
+ do { |
+ name.reset(reinterpret_cast<UNICODE_STRING*>(new BYTE[size])); |
+ result = QueryObject(reinterpret_cast<HANDLE>( |
+ handle_entry_->Handle), ObjectNameInformation, name.get(), |
+ size, &size); |
+ } while (result == STATUS_INFO_LENGTH_MISMATCH); |
+ |
+ if (NT_SUCCESS(result)) { |
+ handle_name_.assign(name->Buffer, name->Length / sizeof(wchar_t)); |
+ } |
} |
break; |
@@ -135,27 +144,6 @@ |
} |
} |
-// Returns the object manager's name associated with a handle |
-bool GetHandleName(HANDLE handle, string16* handle_name) { |
- if (!QueryObject) |
- ResolveNTFunctionPtr("NtQueryObject", &QueryObject); |
- |
- ULONG size = MAX_PATH; |
- scoped_ptr<UNICODE_STRING> name; |
- NTSTATUS result; |
- |
- do { |
- name.reset(reinterpret_cast<UNICODE_STRING*>(new BYTE[size])); |
- result = QueryObject(handle, ObjectNameInformation, name.get(), |
- size, &size); |
- } while (result == STATUS_INFO_LENGTH_MISMATCH); |
- |
- if (NT_SUCCESS(result)) |
- handle_name->assign(name->Buffer, name->Length / sizeof(wchar_t)); |
- |
- return NT_SUCCESS(result); |
-} |
- |
const OBJECT_TYPE_INFORMATION* HandleTable::HandleEntry::TypeInfo() { |
UpdateInfo(UPDATE_INFO_ONLY); |
return type_info_buffer_.empty() ? NULL : type_info_internal(); |