12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #ifndef BASE_WIN_COM_INIT_BALANCER_H_
- #define BASE_WIN_COM_INIT_BALANCER_H_
- #include <objidl.h>
- #include <winnt.h>
- #include <wrl/implements.h>
- #include "base/base_export.h"
- #include "base/optional.h"
- #include "base/threading/thread_checker.h"
- #include "base/win/windows_types.h"
- namespace base {
- namespace win {
- namespace internal {
- class BASE_EXPORT ComInitBalancer
- : public Microsoft::WRL::RuntimeClass<
- Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom>,
- IInitializeSpy> {
- public:
-
-
- explicit ComInitBalancer(DWORD co_init);
- ComInitBalancer(const ComInitBalancer&) = delete;
- ComInitBalancer& operator=(const ComInitBalancer&) = delete;
- ~ComInitBalancer() override;
-
-
- void Disable();
- DWORD GetReferenceCountForTesting() const;
- private:
-
- IFACEMETHODIMP PreInitialize(DWORD apartment_type,
- DWORD reference_count) override;
- IFACEMETHODIMP PostInitialize(HRESULT result,
- DWORD apartment_type,
- DWORD new_reference_count) override;
- IFACEMETHODIMP PreUninitialize(DWORD reference_count) override;
- IFACEMETHODIMP PostUninitialize(DWORD new_reference_count) override;
- const DWORD co_init_;
-
-
- DWORD reference_count_ = 0;
- base::Optional<ULARGE_INTEGER> spy_cookie_;
- THREAD_CHECKER(thread_checker_);
- };
- }
- }
- }
- #endif
|