winstd::user_impersonator helper class introduced
This commit is contained in:
parent
028979524a
commit
37d768dabf
@ -67,6 +67,7 @@ namespace winstd
|
||||
class WINSTD_API library;
|
||||
class WINSTD_API heap;
|
||||
class WINSTD_API actctx_activator;
|
||||
class WINSTD_API user_impersonator;
|
||||
}
|
||||
|
||||
#pragma once
|
||||
@ -1002,5 +1003,32 @@ namespace winstd
|
||||
ULONG_PTR m_cookie; ///< Cookie for context deactivation
|
||||
};
|
||||
|
||||
|
||||
///
|
||||
/// Lets the calling thread impersonate the security context of a logged-on user
|
||||
///
|
||||
class WINSTD_API user_impersonator
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Construct the impersonator and impersonates the given user
|
||||
///
|
||||
/// \param[in] hToken A handle to a primary or impersonation access token that represents a logged-on user
|
||||
///
|
||||
/// \sa [ImpersonateLoggedOnUser function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa378612.aspx)
|
||||
///
|
||||
user_impersonator(_In_ HANDLE hToken);
|
||||
|
||||
///
|
||||
/// Reverts to current user and destructs the impersonator
|
||||
///
|
||||
/// \sa [RevertToSelf function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa379317.aspx)
|
||||
///
|
||||
virtual ~user_impersonator();
|
||||
|
||||
protected:
|
||||
BOOL m_cookie; ///< Did impersonation succeed?
|
||||
};
|
||||
|
||||
/// @}
|
||||
}
|
||||
|
17
src/Win.cpp
17
src/Win.cpp
@ -111,3 +111,20 @@ winstd::actctx_activator::~actctx_activator()
|
||||
if (m_cookie)
|
||||
DeactivateActCtx(0, m_cookie);
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// winstd::user_impersonator
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
winstd::user_impersonator::user_impersonator(_In_ HANDLE hToken)
|
||||
{
|
||||
m_cookie = ImpersonateLoggedOnUser(hToken);
|
||||
}
|
||||
|
||||
|
||||
winstd::user_impersonator::~user_impersonator()
|
||||
{
|
||||
if (m_cookie)
|
||||
RevertToSelf();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user