1a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// found in the LICENSE file. 4a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 5a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#ifndef REMOTING_PROTOCOL_PAIRING_REGISTRY_DELEGATE_WIN_H_ 6a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#define REMOTING_PROTOCOL_PAIRING_REGISTRY_DELEGATE_WIN_H_ 7a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include <string> 9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/basictypes.h" 11a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/compiler_specific.h" 12a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 134311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "base/win/registry.h" 14a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "remoting/protocol/pairing_registry.h" 15a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 16a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)namespace base { 17a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)class ListValue; 18a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} // namespace base 19a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 20a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)namespace remoting { 21a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 22a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Stores client pairing information in Windows registry. Two separate registry 23a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// keys are used: 24a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// - |privileged| - contains the shared secrets of all pairings. This key must 25a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// be protected by a strong ACL denying access to unprivileged 26a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// code. 27a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// - |unprivileged| - contains the rest of pairing state. 28a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// 29a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Creator of this object is responsible for passing the registry key handles 30a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// with appropriate access. |privileged| may be NULL if read-only access is 31a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// sufficient. Shared secrets will not be returned in such a case. 32a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)class PairingRegistryDelegateWin 33a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) : public protocol::PairingRegistry::Delegate { 34a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) public: 35a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) PairingRegistryDelegateWin(); 36a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual ~PairingRegistryDelegateWin(); 37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Passes the root keys to be used to access the pairing registry store. 39a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // |privileged| is optional and may be NULL. The caller retains ownership of 40a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // the passed handles. 41a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) bool SetRootKeys(HKEY privileged, HKEY unprivileged); 42a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 43a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // PairingRegistry::Delegate interface 44a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual scoped_ptr<base::ListValue> LoadAll() OVERRIDE; 45a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual bool DeleteAll() OVERRIDE; 46a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual protocol::PairingRegistry::Pairing Load( 47a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const std::string& client_id) OVERRIDE; 48a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual bool Save(const protocol::PairingRegistry::Pairing& pairing) OVERRIDE; 49a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual bool Delete(const std::string& client_id) OVERRIDE; 50a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 51a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) private: 524311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch base::win::RegKey privileged_; 534311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch base::win::RegKey unprivileged_; 54a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 55a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PairingRegistryDelegateWin); 56a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}; 57a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 58a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} // namespace remoting 59a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 60a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif // REMOTING_PROTOCOL_PAIRING_REGISTRY_DELEGATE_WIN_H_ 61