diff options
author | rsleevi@chromium.org <rsleevi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-01 05:37:45 +0000 |
---|---|---|
committer | rsleevi@chromium.org <rsleevi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-01 05:37:45 +0000 |
commit | 8450637fa37ca5499b5ab35a669daa085a0a88a5 (patch) | |
tree | cce497ef407158887bd72718908ca4354569911c /sandbox | |
parent | 855b53a0bfe5039065f3795633c0b6f6c8e060f2 (diff) | |
download | chromium_src-8450637fa37ca5499b5ab35a669daa085a0a88a5.zip chromium_src-8450637fa37ca5499b5ab35a669daa085a0a88a5.tar.gz chromium_src-8450637fa37ca5499b5ab35a669daa085a0a88a5.tar.bz2 |
Revert 91270 - sbox_unittests HandleTable.FindTable failing on Win XP & Vista
Had a bug in the handle table unit test. Added GetHandleName to fix the bug and make handle management easier.
TEST=sbox_unittests --gtest_filter=HandleTable.*
Review URL: http://codereview.chromium.org/7218066
TBR=jschuh@chromium.org
Review URL: http://codereview.chromium.org/7292028
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@91271 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sandbox')
-rw-r--r-- | sandbox/src/handle_table.cc | 38 | ||||
-rw-r--r-- | sandbox/src/handle_table.h | 4 | ||||
-rw-r--r-- | sandbox/src/handle_table_unittest.cc | 4 |
3 files changed, 14 insertions, 32 deletions
diff --git a/sandbox/src/handle_table.cc b/sandbox/src/handle_table.cc index a18fe2c..c7fcf0a 100644 --- a/sandbox/src/handle_table.cc +++ b/sandbox/src/handle_table.cc @@ -17,8 +17,6 @@ bool CompareHandleEntries(const SYSTEM_HANDLE_INFORMATION& a, return a.ProcessId < b.ProcessId; } -static NtQueryObject QueryObject = NULL; - } // namespace namespace sandbox { @@ -86,6 +84,7 @@ HandleTable::HandleEntry::HandleEntry( } void HandleTable::HandleEntry::UpdateInfo(UpdateType flag) { + static NtQueryObject QueryObject = NULL; if (!QueryObject) ResolveNTFunctionPtr("NtQueryObject", &QueryObject); @@ -120,8 +119,18 @@ void HandleTable::HandleEntry::UpdateInfo(UpdateType flag) { 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 @@ void HandleTable::HandleEntry::UpdateInfo(UpdateType flag) { } } -// 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(); diff --git a/sandbox/src/handle_table.h b/sandbox/src/handle_table.h index 08b4cb6..9b1fc66 100644 --- a/sandbox/src/handle_table.h +++ b/sandbox/src/handle_table.h @@ -155,10 +155,6 @@ class HandleTable { DISALLOW_COPY_AND_ASSIGN(HandleTable); }; -// Returns the object manager's name associated with a handle -bool GetHandleName(HANDLE handle, string16* handle_name); - - } // namespace sandbox #endif // SANDBOX_SRC_HANDLE_TABLE_H_ diff --git a/sandbox/src/handle_table_unittest.cc b/sandbox/src/handle_table_unittest.cc index 1e8ddcb..696037f 100644 --- a/sandbox/src/handle_table_unittest.cc +++ b/sandbox/src/handle_table_unittest.cc @@ -47,8 +47,6 @@ TEST(HandleTable, FindHandle) { FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, NULL); EXPECT_NE(INVALID_HANDLE_VALUE, file); - string16 handle_name; - ASSERT_EQ(sandbox::GetHandleName(file, &handle_name), true); // Look for the handle in our process bool handle_found = false; @@ -56,7 +54,7 @@ TEST(HandleTable, FindHandle) { for (HandleTable::Iterator it = handles.HandlesForProcess(::GetCurrentProcessId()); it != handles.end(); ++it) { - if (it->IsType(HandleTable::kTypeFile) && it->Name() == handle_name) { + if (it->IsType(HandleTable::kTypeFile) && it->Name().compare(my_file)) { handle_found = true; break; } |