From fa1514e9b3acc7ca351f8f6d24385add1866b114 Mon Sep 17 00:00:00 2001 From: Simon Rozman Date: Fri, 23 Aug 2019 10:48:09 +0200 Subject: [PATCH] Support NULL-tokens in user_impersonator Specifying NULL token is a no-op now. This simplifies client code when impersonation is optional. Signed-off-by: Simon Rozman --- include/WinStd/Win.h | 4 ++-- src/Win.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/WinStd/Win.h b/include/WinStd/Win.h index a779872e..ddf06ada 100644 --- a/include/WinStd/Win.h +++ b/include/WinStd/Win.h @@ -832,11 +832,11 @@ namespace winstd /// /// 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 + /// \param[in] hToken A handle to a primary or impersonation access token that represents a logged-on user or NULL for no impersonation. /// /// \sa [ImpersonateLoggedOnUser function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa378612.aspx) /// - user_impersonator(_In_ HANDLE hToken); + user_impersonator(_In_opt_ HANDLE hToken); /// /// Reverts to current user and destructs the impersonator diff --git a/src/Win.cpp b/src/Win.cpp index 2bcd3cb1..b60a9dc4 100644 --- a/src/Win.cpp +++ b/src/Win.cpp @@ -283,9 +283,9 @@ winstd::actctx_activator::~actctx_activator() // winstd::user_impersonator ////////////////////////////////////////////////////////////////////// -winstd::user_impersonator::user_impersonator(_In_ HANDLE hToken) +winstd::user_impersonator::user_impersonator(_In_opt_ HANDLE hToken) { - m_cookie = ImpersonateLoggedOnUser(hToken); + m_cookie = hToken && ImpersonateLoggedOnUser(hToken); }