#include "chrome/windows_services/service_program/scoped_client_impersonation.h"
#include <objbase.h>
#include <ostream>
#include "base/check.h"
ScopedClientImpersonation::ScopedClientImpersonation()
: result_(::CoGetCallContext(IID_PPV_ARGS(&server_security_))) {
if (SUCCEEDED(result_)) {
CHECK(!server_security_->IsImpersonating());
result_ = server_security_->ImpersonateClient();
if (FAILED(result_)) {
server_security_.Reset();
}
}
}
ScopedClientImpersonation::~ScopedClientImpersonation() {
if (server_security_) {
HRESULT hr = server_security_->RevertToSelf();
CHECK(SUCCEEDED(hr)) << hr;
}
}