| Index: sandbox/src/broker_services.h
|
| ===================================================================
|
| --- sandbox/src/broker_services.h (revision 131782)
|
| +++ sandbox/src/broker_services.h (working copy)
|
| @@ -6,8 +6,10 @@
|
| #define SANDBOX_SRC_BROKER_SERVICES_H__
|
|
|
| #include <list>
|
| +#include <map>
|
| #include <set>
|
| #include "base/basictypes.h"
|
| +#include "base/win/scoped_handle.h"
|
| #include "sandbox/src/crosscall_server.h"
|
| #include "sandbox/src/job.h"
|
| #include "sandbox/src/sandbox.h"
|
| @@ -15,6 +17,13 @@
|
| #include "sandbox/src/win2k_threadpool.h"
|
| #include "sandbox/src/win_utils.h"
|
|
|
| +namespace {
|
| +
|
| +struct JobTracker;
|
| +struct PeerTracker;
|
| +
|
| +} // namespace
|
| +
|
| namespace sandbox {
|
|
|
| class PolicyBase;
|
| @@ -45,6 +54,8 @@
|
|
|
| virtual ResultCode WaitForAllTargets();
|
|
|
| + virtual ResultCode AddTargetPeer(HANDLE peer_process);
|
| +
|
| // Checks if the supplied process ID matches one of the broker's active
|
| // target processes
|
| // Returns:
|
| @@ -52,16 +63,6 @@
|
| bool IsActiveTarget(DWORD process_id);
|
|
|
| private:
|
| - // Helper structure that allows the Broker to associate a job notification
|
| - // with a job object and with a policy.
|
| - struct JobTracker {
|
| - HANDLE job;
|
| - PolicyBase* policy;
|
| - JobTracker(HANDLE cjob, PolicyBase* cpolicy)
|
| - : job(cjob), policy(cpolicy) {
|
| - }
|
| - };
|
| -
|
| // Releases the Job and notifies the associated Policy object to its
|
| // resources as well.
|
| static void FreeResources(JobTracker* tracker);
|
| @@ -70,6 +71,9 @@
|
| // notifications and cleanup-related tasks.
|
| static DWORD WINAPI TargetEventsThread(PVOID param);
|
|
|
| + // Removes a target peer from the process list if it expires.
|
| + static VOID CALLBACK RemovePeerData(PVOID parameter, BOOLEAN);
|
| +
|
| // The completion port used by the job objects to communicate events to
|
| // the worker thread.
|
| HANDLE job_port_;
|
| @@ -92,6 +96,11 @@
|
| typedef std::list<JobTracker*> JobTrackerList;
|
| JobTrackerList tracker_list_;
|
|
|
| + // Maps peer process IDs to the saved handle and wait event.
|
| + // Prevents peer callbacks from accessing the broker after destruction.
|
| + typedef std::map<DWORD, PeerTracker*> PeerTrackerMap;
|
| + PeerTrackerMap peer_map_;
|
| +
|
| // Provides a fast lookup to identify sandboxed processes.
|
| std::set<DWORD> child_process_ids_;
|
|
|
|
|