From cd78963fd2d090dac0e36c56eed56c66fca08612 Mon Sep 17 00:00:00 2001 From: Simon Rozman Date: Tue, 18 Dec 2018 12:33:21 +0100 Subject: [PATCH] Add support for WinTrust API --- build/WinStd-10.0.vcxproj.filters | 6 +++ build/WinStd-15.0.vcxproj.filters | 6 +++ build/WinStd.props | 2 + include/WinStd/WinTrust.h | 76 +++++++++++++++++++++++++++++++ src/WinTrust.cpp | 34 ++++++++++++++ 5 files changed, 124 insertions(+) create mode 100644 include/WinStd/WinTrust.h create mode 100644 src/WinTrust.cpp diff --git a/build/WinStd-10.0.vcxproj.filters b/build/WinStd-10.0.vcxproj.filters index 8e79e359..cbf838d0 100644 --- a/build/WinStd-10.0.vcxproj.filters +++ b/build/WinStd-10.0.vcxproj.filters @@ -32,6 +32,9 @@ Source Files + + Source Files + Source Files @@ -46,6 +49,9 @@ Header Files + + Header Files + Header Files diff --git a/build/WinStd-15.0.vcxproj.filters b/build/WinStd-15.0.vcxproj.filters index 8e79e359..cbf838d0 100644 --- a/build/WinStd-15.0.vcxproj.filters +++ b/build/WinStd-15.0.vcxproj.filters @@ -32,6 +32,9 @@ Source Files + + Source Files + Source Files @@ -46,6 +49,9 @@ Header Files + + Header Files + Header Files diff --git a/build/WinStd.props b/build/WinStd.props index d65987cd..65fbe029 100644 --- a/build/WinStd.props +++ b/build/WinStd.props @@ -31,6 +31,7 @@ Create + @@ -46,6 +47,7 @@ + diff --git a/include/WinStd/WinTrust.h b/include/WinStd/WinTrust.h new file mode 100644 index 00000000..9f8a6b06 --- /dev/null +++ b/include/WinStd/WinTrust.h @@ -0,0 +1,76 @@ +/* + Copyright 1991-2018 Amebis + Copyright 2016 GÉANT + + This file is part of WinStd. + + Setup is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Setup is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Setup. If not, see . +*/ + +#pragma once + +/// +/// \defgroup WinTrustAPI WinTrust API +/// Integrates WinStd classes with Microsoft WinTrust API +/// + +#include "Common.h" + +namespace winstd +{ + class WINSTD_API wintrust; +} + +#pragma once + +#include + + +namespace winstd +{ + /// \addtogroup WinTrustAPI + /// @{ + + /// + /// WinTrust engine wrapper class + /// + class WINSTD_API wintrust + { + public: + /// + /// Initializes a new class instance. + /// + inline wintrust(_In_opt_ HWND hwnd, _In_ const GUID &action, _Inout_ WINTRUST_DATA &wtd) : + m_hwnd(hwnd), + m_action(action), + m_wtd(wtd) + { + LONG lResult = WinVerifyTrust(m_hwnd, &m_action, &m_wtd); + if (lResult != ERROR_SUCCESS) + throw win_runtime_error(lResult, "WinVerifyTrust failed."); + } + + /// + /// Destroys the WinTrust context. + /// + virtual ~wintrust(); + + protected: + HWND m_hwnd; + GUID m_action; + WINTRUST_DATA &m_wtd; + }; + + /// @} +} diff --git a/src/WinTrust.cpp b/src/WinTrust.cpp new file mode 100644 index 00000000..ca74c56b --- /dev/null +++ b/src/WinTrust.cpp @@ -0,0 +1,34 @@ +/* + Copyright 1991-2018 Amebis + Copyright 2016 GÉANT + + This file is part of WinStd. + + Setup is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Setup is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Setup. If not, see . +*/ + +#include "StdAfx.h" + +#pragma comment(lib, "Wintrust.lib") + + +////////////////////////////////////////////////////////////////////// +// winstd::wintrust +////////////////////////////////////////////////////////////////////// + +winstd::wintrust::~wintrust() +{ + m_wtd.dwStateAction = WTD_STATEACTION_CLOSE; + WinVerifyTrust(m_hwnd, (GUID*)&m_action, &m_wtd); +}