| 1388 | } |
| 1389 | |
| 1390 | bool BrowserFactory::ProtectedModeSettingsAreValid() { |
| 1391 | LOG(TRACE) << "Entering BrowserFactory::ProtectedModeSettingsAreValid"; |
| 1392 | |
| 1393 | bool settings_are_valid = true; |
| 1394 | LOG(DEBUG) << "Detected IE version: " << this->ie_major_version_ |
| 1395 | << ", Windows version supports Protected Mode: " |
| 1396 | << IsWindowsVistaOrGreater() ? "true" : "false"; |
| 1397 | // Only need to check Protected Mode settings on IE 7 or higher |
| 1398 | // and on Windows Vista or higher. Otherwise, Protected Mode |
| 1399 | // doesn't come into play, and are valid. |
| 1400 | // Documentation of registry settings can be found at the following |
| 1401 | // Microsoft KnowledgeBase article: |
| 1402 | // http://support.microsoft.com/kb/182569 |
| 1403 | if (this->ie_major_version_ >= 7 && IsWindowsVistaOrGreater()) { |
| 1404 | HKEY key_handle; |
| 1405 | if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, |
| 1406 | IE_SECURITY_ZONES_REGISTRY_KEY, |
| 1407 | 0, |
| 1408 | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS, |
| 1409 | &key_handle)) { |
| 1410 | DWORD subkey_count = 0; |
| 1411 | DWORD max_subkey_name_length = 0; |
| 1412 | if (ERROR_SUCCESS == ::RegQueryInfoKey(key_handle, |
| 1413 | NULL, |
| 1414 | NULL, |
| 1415 | NULL, |
| 1416 | &subkey_count, |
| 1417 | &max_subkey_name_length, |
| 1418 | NULL, |
| 1419 | NULL, |
| 1420 | NULL, |
| 1421 | NULL, |
| 1422 | NULL, |
| 1423 | NULL)) { |
| 1424 | int protected_mode_value = -1; |
| 1425 | std::vector<wchar_t> subkey_name_buffer(max_subkey_name_length + 1); |
| 1426 | for (size_t index = 0; index < subkey_count; ++index) { |
| 1427 | DWORD number_of_characters_copied = max_subkey_name_length + 1; |
| 1428 | ::RegEnumKeyEx(key_handle, |
| 1429 | static_cast<DWORD>(index), |
| 1430 | &subkey_name_buffer[0], |
| 1431 | &number_of_characters_copied, |
| 1432 | NULL, |
| 1433 | NULL, |
| 1434 | NULL, |
| 1435 | NULL); |
| 1436 | std::wstring subkey_name = &subkey_name_buffer[0]; |
| 1437 | // Ignore the "My Computer" zone, since it's not displayed |
| 1438 | // in the UI. |
| 1439 | if (subkey_name != ZONE_MY_COMPUTER) { |
| 1440 | int value = this->GetZoneProtectedModeSetting(key_handle, |
| 1441 | subkey_name); |
| 1442 | if (protected_mode_value == -1) { |
| 1443 | protected_mode_value = value; |
| 1444 | } else { |
| 1445 | if (value != protected_mode_value) { |
| 1446 | settings_are_valid = false; |
| 1447 | break; |
no test coverage detected