Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Crashpad Authors. All rights reserved. | 1 // Copyright 2015 The Crashpad Authors. All rights reserved. |
| 2 // | 2 // |
| 3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 // you may not use this file except in compliance with the License. | 4 // you may not use this file except in compliance with the License. |
| 5 // You may obtain a copy of the License at | 5 // You may obtain a copy of the License at |
| 6 // | 6 // |
| 7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
| 8 // | 8 // |
| 9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
| 10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
| 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 // See the License for the specific language governing permissions and | 12 // See the License for the specific language governing permissions and |
| 13 // limitations under the License. | 13 // limitations under the License. |
| 14 | 14 |
| 15 #include "util/win/process_info.h" | 15 #include "util/win/process_info.h" |
| 16 | 16 |
| 17 #include <dbghelp.h> | 17 #include <dbghelp.h> |
| 18 #include <intrin.h> | 18 #include <intrin.h> |
| 19 #include <wchar.h> | 19 #include <wchar.h> |
| 20 | 20 |
| 21 #include "base/files/file_path.h" | 21 #include "base/files/file_path.h" |
| 22 #include "base/memory/scoped_ptr.h" | 22 #include "base/memory/scoped_ptr.h" |
| 23 #include "base/rand_util.h" | |
| 24 #include "base/strings/stringprintf.h" | |
| 25 #include "base/strings/utf_string_conversions.h" | |
| 23 #include "build/build_config.h" | 26 #include "build/build_config.h" |
| 24 #include "gtest/gtest.h" | 27 #include "gtest/gtest.h" |
| 28 #include "test/scoped_temp_dir.h" | |
| 25 #include "test/paths.h" | 29 #include "test/paths.h" |
| 26 #include "test/win/child_launcher.h" | 30 #include "test/win/child_launcher.h" |
| 27 #include "util/file/file_io.h" | 31 #include "util/file/file_io.h" |
| 28 #include "util/misc/uuid.h" | 32 #include "util/misc/uuid.h" |
| 29 #include "util/win/scoped_handle.h" | 33 #include "util/win/scoped_handle.h" |
| 30 | 34 |
| 31 namespace crashpad { | 35 namespace crashpad { |
| 32 namespace test { | 36 namespace test { |
| 33 namespace { | 37 namespace { |
| 34 | 38 |
| (...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 503 current_process, no_access, into.get(), kBlockSize, &bytes_read)); | 507 current_process, no_access, into.get(), kBlockSize, &bytes_read)); |
| 504 EXPECT_FALSE(ReadProcessMemory( | 508 EXPECT_FALSE(ReadProcessMemory( |
| 505 current_process, reserve_region, into.get(), kBlockSize, &bytes_read)); | 509 current_process, reserve_region, into.get(), kBlockSize, &bytes_read)); |
| 506 EXPECT_FALSE(ReadProcessMemory(current_process, | 510 EXPECT_FALSE(ReadProcessMemory(current_process, |
| 507 reserve_region, | 511 reserve_region, |
| 508 into.get(), | 512 into.get(), |
| 509 kBlockSize * 6, | 513 kBlockSize * 6, |
| 510 &bytes_read)); | 514 &bytes_read)); |
| 511 } | 515 } |
| 512 | 516 |
| 517 struct ScopedRegistryKeyCloseTraits { | |
| 518 static HKEY InvalidValue() { | |
| 519 return nullptr; | |
| 520 } | |
| 521 static void Free(HKEY key) { | |
| 522 RegCloseKey(key); | |
| 523 } | |
| 524 }; | |
| 525 using ScopedRegistryKey = | |
| 526 base::ScopedGeneric<HKEY, ScopedRegistryKeyCloseTraits>; | |
| 527 | |
| 528 TEST(ProcessInfo, Handles) { | |
| 529 ScopedTempDir temp_dir; | |
| 530 ScopedFileHandle file(LoggingOpenFileForWrite( | |
| 531 temp_dir.path().Append(FILE_PATH_LITERAL("test_file")), | |
| 532 FileWriteMode::kTruncateOrCreate, | |
| 533 FilePermissions::kWorldReadable)); | |
| 534 ASSERT_TRUE(file.is_valid()); | |
| 535 | |
| 536 HKEY key; | |
| 537 ASSERT_EQ(ERROR_SUCCESS, | |
| 538 RegOpenKeyEx( | |
| 539 HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft", 0, KEY_READ, &key)); | |
| 540 ScopedRegistryKey scoped_key(key); | |
| 541 ASSERT_TRUE(scoped_key.is_valid()); | |
| 542 | |
| 543 std::wstring mapping_name = | |
| 544 base::UTF8ToUTF16(base::StringPrintf("Global\\test_mapping_%d_%I64x", | |
| 545 GetCurrentProcessId(), | |
| 546 base::RandUint64())); | |
| 547 ScopedKernelHANDLE mapping(CreateFileMapping(INVALID_HANDLE_VALUE, | |
| 548 nullptr, | |
| 549 PAGE_READWRITE, | |
| 550 0, | |
| 551 1024, | |
| 552 mapping_name.c_str())); | |
| 553 ASSERT_TRUE(mapping.is_valid()); | |
| 554 | |
| 555 ProcessInfo info; | |
| 556 info.Initialize(GetCurrentProcess()); | |
| 557 bool found_file_handle = false; | |
| 558 bool found_key_handle = false; | |
| 559 bool found_mapping_handle = false; | |
| 560 for (auto handle : info.Handles()) { | |
| 561 if (reinterpret_cast<uint32_t>(file.get()) == handle.handle) { | |
| 562 EXPECT_FALSE(found_file_handle); | |
| 563 found_file_handle = true; | |
| 564 EXPECT_EQ(L"File", handle.type_name); | |
| 565 EXPECT_EQ(1, handle.handle_count); | |
|
Mark Mentovai
2015/10/14 22:49:55
Any way to reason about attributes and access here
scottmg
2015/10/15 00:17:42
attributes is almost always 0, but added some chec
| |
| 566 } | |
| 567 if (reinterpret_cast<uint32_t>(scoped_key.get()) == handle.handle) { | |
| 568 EXPECT_FALSE(found_key_handle); | |
| 569 found_key_handle = true; | |
| 570 EXPECT_EQ(L"Key", handle.type_name); | |
| 571 EXPECT_EQ(1, handle.handle_count); | |
| 572 } | |
| 573 if (reinterpret_cast<uint32_t>(mapping.get()) == handle.handle) { | |
| 574 EXPECT_FALSE(found_mapping_handle); | |
| 575 found_mapping_handle = true; | |
| 576 EXPECT_EQ(L"Section", handle.type_name); | |
| 577 EXPECT_EQ(1, handle.handle_count); | |
| 578 } | |
| 579 } | |
| 580 EXPECT_TRUE(found_file_handle); | |
| 581 EXPECT_TRUE(found_key_handle); | |
| 582 EXPECT_TRUE(found_mapping_handle); | |
| 583 } | |
| 584 | |
| 513 } // namespace | 585 } // namespace |
| 514 } // namespace test | 586 } // namespace test |
| 515 } // namespace crashpad | 587 } // namespace crashpad |
| OLD | NEW |