| Index: sandbox/win/src/process_mitigations_win32k_dispatcher.h
|
| diff --git a/sandbox/win/src/process_mitigations_win32k_dispatcher.h b/sandbox/win/src/process_mitigations_win32k_dispatcher.h
|
| index 55a84a76e78b65abb7ab998252239eb2594cffc6..9408d1c5ac073f981247fefa4c08abafc4a53ed6 100644
|
| --- a/sandbox/win/src/process_mitigations_win32k_dispatcher.h
|
| +++ b/sandbox/win/src/process_mitigations_win32k_dispatcher.h
|
| @@ -5,23 +5,79 @@
|
| #ifndef SANDBOX_SRC_PROCESS_MITIGATIONS_WIN32K_DISPATCHER_H_
|
| #define SANDBOX_SRC_PROCESS_MITIGATIONS_WIN32K_DISPATCHER_H_
|
|
|
| +#include <map>
|
| +
|
| #include "base/macros.h"
|
| +#include "base/memory/ref_counted.h"
|
| +#include "base/strings/string16.h"
|
| +#include "base/synchronization/lock.h"
|
| #include "sandbox/win/src/sandbox_policy_base.h"
|
|
|
| namespace sandbox {
|
|
|
| +// Class to maintain a reference to a OPM protected output handle.
|
| +class ProtectedVideoOutput
|
| + : public base::RefCountedThreadSafe<ProtectedVideoOutput> {
|
| + public:
|
| + ProtectedVideoOutput(HANDLE handle) : handle_(handle) {}
|
| + HANDLE handle() { return handle_; }
|
| +
|
| + private:
|
| + friend class base::RefCountedThreadSafe<ProtectedVideoOutput>;
|
| + ~ProtectedVideoOutput();
|
| +
|
| + HANDLE handle_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ProtectedVideoOutput);
|
| +};
|
| +
|
| // This class sets up intercepts for the Win32K lockdown policy which is set
|
| // on Windows 8 and beyond.
|
| class ProcessMitigationsWin32KDispatcher : public Dispatcher {
|
| public:
|
| explicit ProcessMitigationsWin32KDispatcher(PolicyBase* policy_base);
|
| - ~ProcessMitigationsWin32KDispatcher() override {}
|
| + ~ProcessMitigationsWin32KDispatcher() override;
|
|
|
| // Dispatcher interface.
|
| bool SetupService(InterceptionManager* manager, int service) override;
|
|
|
| + bool EnumDisplayMonitors(IPCInfo* ipc, CountedBuffer* buffer);
|
| + bool GetMonitorInfo(IPCInfo* ipc, void* monitor, CountedBuffer* buffer);
|
| + bool GetSuggestedOPMProtectedOutputArraySize(IPCInfo* ipc,
|
| + base::string16* device_name);
|
| + bool CreateOPMProtectedOutputs(IPCInfo* ipc,
|
| + base::string16* device_name,
|
| + CountedBuffer* protected_outputs);
|
| + bool GetCertificateSize(IPCInfo* ipc,
|
| + base::string16* device_name,
|
| + void* protected_output);
|
| + bool GetCertificate(IPCInfo* ipc,
|
| + base::string16* device_name,
|
| + void* protected_output,
|
| + void* shared_buffer_handle,
|
| + uint32_t shared_buffer_size);
|
| + bool DestroyOPMProtectedOutput(IPCInfo* ipc, void* protected_output);
|
| + bool GetOPMRandomNumber(IPCInfo* ipc,
|
| + void* protected_output,
|
| + CountedBuffer* random_number);
|
| + bool SetOPMSigningKeyAndSequenceNumbers(IPCInfo* ipc,
|
| + void* protected_output,
|
| + CountedBuffer* parameters);
|
| + bool ConfigureOPMProtectedOutput(IPCInfo* ipc,
|
| + void* protected_output,
|
| + void* shared_buffer_handle);
|
| + bool GetOPMInformation(IPCInfo* ipc,
|
| + void* protected_output,
|
| + void* shared_buffer_handle);
|
| +
|
| private:
|
| + scoped_refptr<ProtectedVideoOutput> GetProtectedVideoOutput(
|
| + HANDLE handle,
|
| + bool destroy_output);
|
| +
|
| PolicyBase* policy_base_;
|
| + std::map<HANDLE, scoped_refptr<ProtectedVideoOutput>> protected_outputs_;
|
| + base::Lock protected_outputs_lock_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(ProcessMitigationsWin32KDispatcher);
|
| };
|
|
|