Doxygen annotation moved to forward declarations
This commit is contained in:
parent
ada00d74c5
commit
92f010b206
@ -23,15 +23,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace winstd
|
|
||||||
{
|
|
||||||
class WINSTD_API base64_enc;
|
|
||||||
class WINSTD_API base64_dec;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
|
|
||||||
namespace winstd
|
namespace winstd
|
||||||
{
|
{
|
||||||
///
|
///
|
||||||
@ -43,6 +34,21 @@ namespace winstd
|
|||||||
///
|
///
|
||||||
/// Base64 encoding session
|
/// Base64 encoding session
|
||||||
///
|
///
|
||||||
|
class WINSTD_API base64_enc;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Base64 decoding session
|
||||||
|
///
|
||||||
|
class WINSTD_API base64_dec;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
namespace winstd
|
||||||
|
{
|
||||||
class WINSTD_API base64_enc
|
class WINSTD_API base64_enc
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -165,9 +171,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Base64 decoding session
|
|
||||||
///
|
|
||||||
class WINSTD_API base64_dec
|
class WINSTD_API base64_dec
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -267,6 +270,4 @@ namespace winstd
|
|||||||
size_t num; ///< Number of bytes used in `buf`
|
size_t num; ///< Number of bytes used in `buf`
|
||||||
static const unsigned char lookup[256]; ///< Look-up table
|
static const unsigned char lookup[256]; ///< Look-up table
|
||||||
};
|
};
|
||||||
|
|
||||||
/// @}
|
|
||||||
}
|
}
|
||||||
|
@ -24,12 +24,45 @@
|
|||||||
|
|
||||||
namespace winstd
|
namespace winstd
|
||||||
{
|
{
|
||||||
|
///
|
||||||
|
/// \defgroup WinStdCOM COM object management
|
||||||
|
/// Provides helper templates for Windows COM object manipulation
|
||||||
|
///
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// COM object wrapper template
|
||||||
|
///
|
||||||
template <class T> class com_obj;
|
template <class T> class com_obj;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// BSTR string wrapper
|
||||||
|
///
|
||||||
class WINSTD_API bstr;
|
class WINSTD_API bstr;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// VARIANT struct wrapper
|
||||||
|
///
|
||||||
class WINSTD_API variant;
|
class WINSTD_API variant;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
class WINSTD_API com_initializer;
|
class WINSTD_API com_initializer;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// \defgroup WinStdExceptions Exceptions
|
||||||
|
/// Additional exceptions
|
||||||
|
///
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// COM runtime error
|
||||||
|
///
|
||||||
|
/// \note Must be defined as derived class from num_runtime_error<> to allow correct type info for dynamic typecasting and prevent folding with other derivates of num_runtime_error<>.
|
||||||
|
///
|
||||||
class WINSTD_API com_runtime_error;
|
class WINSTD_API com_runtime_error;
|
||||||
|
|
||||||
|
/// @}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
@ -37,16 +70,6 @@ namespace winstd
|
|||||||
|
|
||||||
namespace winstd
|
namespace winstd
|
||||||
{
|
{
|
||||||
///
|
|
||||||
/// \defgroup WinStdCOM COM object management
|
|
||||||
/// Provides helper templates for Windows COM object manipulation
|
|
||||||
///
|
|
||||||
/// @{
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// COM object wrapper template
|
|
||||||
///
|
|
||||||
template <class T>
|
template <class T>
|
||||||
class com_obj : public handle<T*>
|
class com_obj : public handle<T*>
|
||||||
{
|
{
|
||||||
@ -129,9 +152,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// BSTR string wrapper
|
|
||||||
///
|
|
||||||
class WINSTD_API bstr : public handle<BSTR>
|
class WINSTD_API bstr : public handle<BSTR>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -209,9 +229,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// VARIANT struct wrapper
|
|
||||||
///
|
|
||||||
class WINSTD_API variant : public VARIANT
|
class WINSTD_API variant : public VARIANT
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -914,8 +931,6 @@ namespace winstd
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// @}
|
|
||||||
|
|
||||||
|
|
||||||
class WINSTD_API com_initializer
|
class WINSTD_API com_initializer
|
||||||
{
|
{
|
||||||
@ -965,17 +980,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// \defgroup WinStdExceptions Exceptions
|
|
||||||
/// Additional exceptions
|
|
||||||
///
|
|
||||||
/// @{
|
|
||||||
|
|
||||||
///
|
|
||||||
/// COM runtime error
|
|
||||||
///
|
|
||||||
/// \note Must be defined as derived class from num_runtime_error<> to allow correct type info for dynamic typecasting and prevent folding with other derivates of num_runtime_error<>.
|
|
||||||
///
|
|
||||||
class WINSTD_API com_runtime_error : public num_runtime_error<HRESULT>
|
class WINSTD_API com_runtime_error : public num_runtime_error<HRESULT>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -1010,6 +1014,4 @@ namespace winstd
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// @}
|
|
||||||
}
|
}
|
||||||
|
@ -48,10 +48,40 @@
|
|||||||
|
|
||||||
inline int vsnprintf(_Out_z_cap_(capacity) char *str, _In_ size_t capacity, _In_z_ _Printf_format_string_ const char *format, _In_ va_list arg);
|
inline int vsnprintf(_Out_z_cap_(capacity) char *str, _In_ size_t capacity, _In_z_ _Printf_format_string_ const char *format, _In_ va_list arg);
|
||||||
inline int vsnprintf(_Out_z_cap_(capacity) wchar_t *str, _In_ size_t capacity, _In_z_ _Printf_format_string_ const wchar_t *format, _In_ va_list arg);
|
inline int vsnprintf(_Out_z_cap_(capacity) wchar_t *str, _In_ size_t capacity, _In_z_ _Printf_format_string_ const wchar_t *format, _In_ va_list arg);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Formats string using `printf()`.
|
||||||
|
///
|
||||||
|
/// \param[out] str Formatted string
|
||||||
|
/// \param[in ] format String template using `printf()` style
|
||||||
|
/// \param[in ] arg Arguments to `format`
|
||||||
|
///
|
||||||
|
/// \returns Number of characters in result.
|
||||||
|
///
|
||||||
template<class _Elem, class _Traits, class _Ax> inline int vsprintf(_Out_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_ const _Elem *format, _In_ va_list arg);
|
template<class _Elem, class _Traits, class _Ax> inline int vsprintf(_Out_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_ const _Elem *format, _In_ va_list arg);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Formats string using `printf()`.
|
||||||
|
///
|
||||||
|
/// \param[out] str Formatted string
|
||||||
|
/// \param[in ] format String template using `printf()` style
|
||||||
|
///
|
||||||
|
/// \returns Number of characters in result.
|
||||||
|
///
|
||||||
template<class _Elem, class _Traits, class _Ax> inline int sprintf(_Out_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_ const _Elem *format, ...);
|
template<class _Elem, class _Traits, class _Ax> inline int sprintf(_Out_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_ const _Elem *format, ...);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Formats a message string.
|
||||||
|
///
|
||||||
|
/// \sa [FormatMessage function](https://msdn.microsoft.com/en-us/library/windows/desktop/ms679351.aspx)
|
||||||
|
///
|
||||||
template<class _Traits, class _Ax> inline DWORD FormatMessage(_In_ DWORD dwFlags, _In_opt_ LPCVOID lpSource, _In_ DWORD dwMessageId, _In_ DWORD dwLanguageId, _Out_ std::basic_string<char, _Traits, _Ax> &str, _In_opt_ va_list *Arguments);
|
template<class _Traits, class _Ax> inline DWORD FormatMessage(_In_ DWORD dwFlags, _In_opt_ LPCVOID lpSource, _In_ DWORD dwMessageId, _In_ DWORD dwLanguageId, _Out_ std::basic_string<char, _Traits, _Ax> &str, _In_opt_ va_list *Arguments);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Formats a message string.
|
||||||
|
///
|
||||||
|
/// \sa [FormatMessage function](https://msdn.microsoft.com/en-us/library/windows/desktop/ms679351.aspx)
|
||||||
|
///
|
||||||
template<class _Traits, class _Ax> inline DWORD FormatMessage(_In_ DWORD dwFlags, _In_opt_ LPCVOID lpSource, _In_ DWORD dwMessageId, _In_ DWORD dwLanguageId, _Out_ std::basic_string<wchar_t, _Traits, _Ax> &str, _In_opt_ va_list *Arguments);
|
template<class _Traits, class _Ax> inline DWORD FormatMessage(_In_ DWORD dwFlags, _In_opt_ LPCVOID lpSource, _In_ DWORD dwMessageId, _In_ DWORD dwLanguageId, _Out_ std::basic_string<wchar_t, _Traits, _Ax> &str, _In_opt_ va_list *Arguments);
|
||||||
|
|
||||||
namespace winstd
|
namespace winstd
|
||||||
@ -65,10 +95,37 @@ namespace winstd
|
|||||||
typedef std::string tstring;
|
typedef std::string tstring;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Deleter for unique_ptr using LocalFree
|
||||||
|
///
|
||||||
template <class _Ty> struct LocalFree_delete;
|
template <class _Ty> struct LocalFree_delete;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Deleter for unique_ptr to array of unknown size using LocalFree
|
||||||
|
///
|
||||||
template <class _Ty> struct LocalFree_delete<_Ty[]>;
|
template <class _Ty> struct LocalFree_delete<_Ty[]>;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// \defgroup WinStdSysHandles System Handles
|
||||||
|
/// Simplifies work with object handles of various type
|
||||||
|
///
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Base abstract template class to support generic object handle keeping
|
||||||
|
///
|
||||||
|
/// It provides basic operators and methods common to all descendands of this class establishing a base to ease the replacement of native object handle type with classes in object-oriented approach.
|
||||||
|
///
|
||||||
template <class T> class handle;
|
template <class T> class handle;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Base abstract template class to support object handle keeping for objects that support handle duplication
|
||||||
|
///
|
||||||
template <class T> class dplhandle;
|
template <class T> class dplhandle;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Helper class to allow limited size FIFO queues implemented as vector of elements
|
||||||
|
///
|
||||||
template <class T> class vector_queue;
|
template <class T> class vector_queue;
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -77,14 +134,34 @@ namespace winstd
|
|||||||
///
|
///
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Numerical runtime error
|
||||||
|
///
|
||||||
template <typename _Tn> class num_runtime_error;
|
template <typename _Tn> class num_runtime_error;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Windows runtime error
|
||||||
|
///
|
||||||
class WINSTD_API win_runtime_error;
|
class WINSTD_API win_runtime_error;
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
/// \addtogroup WinStdStrFormat
|
///
|
||||||
|
/// \defgroup WinStdStrFormat String Formatting
|
||||||
|
/// Formatted string generation
|
||||||
|
///
|
||||||
|
/// \par Example
|
||||||
|
/// \code
|
||||||
|
/// // Please note the PCSTR typecasting invokes an operator to return
|
||||||
|
/// // pointer to formatted buffer rather than class reference itself.
|
||||||
|
/// cout << (PCSTR)(winstd::string_printf("%i is less than %i.\n", 1, 5));
|
||||||
|
/// \endcode
|
||||||
|
///
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Base template class to support string formatting using `printf()` style templates
|
||||||
|
///
|
||||||
template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem> > class basic_string_printf;
|
template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem> > class basic_string_printf;
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -106,6 +183,9 @@ namespace winstd
|
|||||||
typedef string_printf tstring_printf;
|
typedef string_printf tstring_printf;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Base template class to support string formatting using `FormatMessage()` style templates
|
||||||
|
///
|
||||||
template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem> > class basic_string_msg;
|
template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem> > class basic_string_msg;
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -127,8 +207,19 @@ namespace winstd
|
|||||||
typedef string_msg tstring_msg;
|
typedef string_msg tstring_msg;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Base template class to support converting GUID to string
|
||||||
|
///
|
||||||
template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem> > class basic_string_guid;
|
template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem> > class basic_string_guid;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Single-byte character implementation of a class to support converting GUID to string
|
||||||
|
///
|
||||||
class WINSTD_API string_guid;
|
class WINSTD_API string_guid;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Wide character implementation of a class to support converting GUID to string
|
||||||
|
///
|
||||||
class WINSTD_API wstring_guid;
|
class WINSTD_API wstring_guid;
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -142,9 +233,18 @@ namespace winstd
|
|||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
/// \addtogroup WinStdMemSanitize
|
/// \defgroup WinStdMemSanitize Auto-sanitize Memory Management
|
||||||
|
/// Sanitizes memory before dismissed
|
||||||
|
///
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// An allocator template that sanitizes each memory block before it is destroyed or reallocated
|
||||||
|
///
|
||||||
|
/// \note
|
||||||
|
/// `sanitizing_allocator` introduces a performance penalty. However, it provides an additional level of security.
|
||||||
|
/// Use for security sensitive data memory storage only.
|
||||||
|
///
|
||||||
template<class _Ty> class sanitizing_allocator;
|
template<class _Ty> class sanitizing_allocator;
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -221,15 +321,6 @@ inline int vsnprintf(_Out_z_cap_(capacity) wchar_t *str, _In_ size_t capacity, _
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Formats string using `printf()`.
|
|
||||||
///
|
|
||||||
/// \param[out] str Formatted string
|
|
||||||
/// \param[in ] format String template using `printf()` style
|
|
||||||
/// \param[in ] arg Arguments to `format`
|
|
||||||
///
|
|
||||||
/// \returns Number of characters in result.
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline int vsprintf(_Out_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_ const _Elem *format, _In_ va_list arg)
|
inline int vsprintf(_Out_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_ const _Elem *format, _In_ va_list arg)
|
||||||
{
|
{
|
||||||
@ -258,14 +349,6 @@ inline int vsprintf(_Out_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _P
|
|||||||
#pragma warning(pop)
|
#pragma warning(pop)
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Formats string using `printf()`.
|
|
||||||
///
|
|
||||||
/// \param[out] str Formatted string
|
|
||||||
/// \param[in ] format String template using `printf()` style
|
|
||||||
///
|
|
||||||
/// \returns Number of characters in result.
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline int sprintf(_Out_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_ const _Elem *format, ...)
|
inline int sprintf(_Out_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_ const _Elem *format, ...)
|
||||||
{
|
{
|
||||||
@ -277,11 +360,6 @@ inline int sprintf(_Out_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Pr
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Formats a message string.
|
|
||||||
///
|
|
||||||
/// \sa [FormatMessage function](https://msdn.microsoft.com/en-us/library/windows/desktop/ms679351.aspx)
|
|
||||||
///
|
|
||||||
template<class _Traits, class _Ax>
|
template<class _Traits, class _Ax>
|
||||||
inline DWORD FormatMessage(_In_ DWORD dwFlags, _In_opt_ LPCVOID lpSource, _In_ DWORD dwMessageId, _In_ DWORD dwLanguageId, _Out_ std::basic_string<char, _Traits, _Ax> &str, _In_opt_ va_list *Arguments)
|
inline DWORD FormatMessage(_In_ DWORD dwFlags, _In_opt_ LPCVOID lpSource, _In_ DWORD dwMessageId, _In_ DWORD dwLanguageId, _Out_ std::basic_string<char, _Traits, _Ax> &str, _In_opt_ va_list *Arguments)
|
||||||
{
|
{
|
||||||
@ -293,11 +371,6 @@ inline DWORD FormatMessage(_In_ DWORD dwFlags, _In_opt_ LPCVOID lpSource, _In_ D
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Formats a message string.
|
|
||||||
///
|
|
||||||
/// \sa [FormatMessage function](https://msdn.microsoft.com/en-us/library/windows/desktop/ms679351.aspx)
|
|
||||||
///
|
|
||||||
template<class _Traits, class _Ax>
|
template<class _Traits, class _Ax>
|
||||||
inline DWORD FormatMessage(_In_ DWORD dwFlags, _In_opt_ LPCVOID lpSource, _In_ DWORD dwMessageId, _In_ DWORD dwLanguageId, _Out_ std::basic_string<wchar_t, _Traits, _Ax> &str, _In_opt_ va_list *Arguments)
|
inline DWORD FormatMessage(_In_ DWORD dwFlags, _In_opt_ LPCVOID lpSource, _In_ DWORD dwMessageId, _In_ DWORD dwLanguageId, _Out_ std::basic_string<wchar_t, _Traits, _Ax> &str, _In_opt_ va_list *Arguments)
|
||||||
{
|
{
|
||||||
@ -311,9 +384,6 @@ inline DWORD FormatMessage(_In_ DWORD dwFlags, _In_opt_ LPCVOID lpSource, _In_ D
|
|||||||
|
|
||||||
namespace winstd
|
namespace winstd
|
||||||
{
|
{
|
||||||
///
|
|
||||||
/// Deleter for unique_ptr using LocalFree
|
|
||||||
///
|
|
||||||
template <class _Ty> struct LocalFree_delete
|
template <class _Ty> struct LocalFree_delete
|
||||||
{
|
{
|
||||||
typedef LocalFree_delete<_Ty> _Myt; ///< This type
|
typedef LocalFree_delete<_Ty> _Myt; ///< This type
|
||||||
@ -338,9 +408,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Deleter for unique_ptr to array of unknown size using LocalFree
|
|
||||||
///
|
|
||||||
template <class _Ty> struct LocalFree_delete<_Ty[]>
|
template <class _Ty> struct LocalFree_delete<_Ty[]>
|
||||||
{
|
{
|
||||||
typedef LocalFree_delete<_Ty> _Myt; ///< This type
|
typedef LocalFree_delete<_Ty> _Myt; ///< This type
|
||||||
@ -369,17 +436,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// \defgroup WinStdSysHandles System Handles
|
|
||||||
/// Simplifies work with object handles of various type
|
|
||||||
///
|
|
||||||
/// @{
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Base abstract template class to support generic object handle keeping
|
|
||||||
///
|
|
||||||
/// It provides basic operators and methods common to all descendands of this class establishing a base to ease the replacement of native object handle type with classes in object-oriented approach.
|
|
||||||
///
|
|
||||||
template <class T>
|
template <class T>
|
||||||
class handle
|
class handle
|
||||||
{
|
{
|
||||||
@ -622,9 +678,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Base abstract template class to support object handle keeping for objects that support handle duplication
|
|
||||||
///
|
|
||||||
template <class T>
|
template <class T>
|
||||||
class dplhandle : public handle<T>
|
class dplhandle : public handle<T>
|
||||||
{
|
{
|
||||||
@ -710,9 +763,6 @@ namespace winstd
|
|||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Helper class to allow limited size FIFO queues implemented as vector of elements
|
|
||||||
///
|
|
||||||
template <class T>
|
template <class T>
|
||||||
class vector_queue
|
class vector_queue
|
||||||
{
|
{
|
||||||
@ -1104,15 +1154,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// \defgroup WinStdExceptions Exceptions
|
|
||||||
/// Additional exceptions
|
|
||||||
///
|
|
||||||
/// @{
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Numerical runtime error
|
|
||||||
///
|
|
||||||
template <typename _Tn>
|
template <typename _Tn>
|
||||||
class num_runtime_error : public std::runtime_error
|
class num_runtime_error : public std::runtime_error
|
||||||
{
|
{
|
||||||
@ -1187,9 +1228,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Windows runtime error
|
|
||||||
///
|
|
||||||
class WINSTD_API win_runtime_error : public num_runtime_error<DWORD>
|
class WINSTD_API win_runtime_error : public num_runtime_error<DWORD>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -1246,24 +1284,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/// @}
|
|
||||||
|
|
||||||
///
|
|
||||||
/// \defgroup WinStdStrFormat String Formatting
|
|
||||||
/// Formatted string generation
|
|
||||||
///
|
|
||||||
/// \par Example
|
|
||||||
/// \code
|
|
||||||
/// // Please note the PCSTR typecasting invokes an operator to return
|
|
||||||
/// // pointer to formatted buffer rather than class reference itself.
|
|
||||||
/// cout << (PCSTR)(winstd::string_printf("%i is less than %i.\n", 1, 5));
|
|
||||||
/// \endcode
|
|
||||||
///
|
|
||||||
/// @{
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Base template class to support string formatting using `printf()` style templates
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
class basic_string_printf : public std::basic_string<_Elem, _Traits, _Ax>
|
class basic_string_printf : public std::basic_string<_Elem, _Traits, _Ax>
|
||||||
{
|
{
|
||||||
@ -1328,9 +1348,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Base template class to support string formatting using `FormatMessage()` style templates
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
class basic_string_msg : public std::basic_string<_Elem, _Traits, _Ax>
|
class basic_string_msg : public std::basic_string<_Elem, _Traits, _Ax>
|
||||||
{
|
{
|
||||||
@ -1438,9 +1455,7 @@ namespace winstd
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
///
|
|
||||||
/// Base template class to support converting GUID to string
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
class basic_string_guid : public std::basic_string<_Elem, _Traits, _Ax>
|
class basic_string_guid : public std::basic_string<_Elem, _Traits, _Ax>
|
||||||
{
|
{
|
||||||
@ -1467,9 +1482,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Single-byte character implementation of a class to support converting GUID to string
|
|
||||||
///
|
|
||||||
class WINSTD_API string_guid : public basic_string_guid<char, std::char_traits<char>, std::allocator<char> >
|
class WINSTD_API string_guid : public basic_string_guid<char, std::char_traits<char>, std::allocator<char> >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -1490,9 +1502,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Wide character implementation of a class to support converting GUID to string
|
|
||||||
///
|
|
||||||
class WINSTD_API wstring_guid : public basic_string_guid<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >
|
class WINSTD_API wstring_guid : public basic_string_guid<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -1512,24 +1521,11 @@ namespace winstd
|
|||||||
/// @}
|
/// @}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// @}
|
|
||||||
|
|
||||||
/// \defgroup WinStdMemSanitize Auto-sanitize Memory Management
|
|
||||||
/// Sanitizes memory before dismissed
|
|
||||||
///
|
|
||||||
/// @{
|
|
||||||
|
|
||||||
// winstd::sanitizing_allocator::destroy() member generates _Ptr parameter not used warning for primitive datatypes _Ty.
|
// winstd::sanitizing_allocator::destroy() member generates _Ptr parameter not used warning for primitive datatypes _Ty.
|
||||||
#pragma warning(push)
|
#pragma warning(push)
|
||||||
#pragma warning(disable: 4100)
|
#pragma warning(disable: 4100)
|
||||||
|
|
||||||
///
|
|
||||||
/// An allocator template that sanitizes each memory block before it is destroyed or reallocated
|
|
||||||
///
|
|
||||||
/// \note
|
|
||||||
/// `sanitizing_allocator` introduces a performance penalty. However, it provides an additional level of security.
|
|
||||||
/// Use for security sensitive data memory storage only.
|
|
||||||
///
|
|
||||||
template<class _Ty>
|
template<class _Ty>
|
||||||
class sanitizing_allocator : public std::allocator<_Ty>
|
class sanitizing_allocator : public std::allocator<_Ty>
|
||||||
{
|
{
|
||||||
@ -1583,6 +1579,4 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
#pragma warning(pop)
|
#pragma warning(pop)
|
||||||
|
|
||||||
/// @}
|
|
||||||
}
|
}
|
||||||
|
@ -26,27 +26,71 @@
|
|||||||
|
|
||||||
namespace winstd
|
namespace winstd
|
||||||
{
|
{
|
||||||
|
///
|
||||||
|
/// \defgroup WinStdCryptoAPI Cryptography API
|
||||||
|
/// Integrates WinStd classes with Microsoft Cryptography API
|
||||||
|
///
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Deleter for unique_ptr using CredFree
|
||||||
|
///
|
||||||
template <class _Ty> struct CredFree_delete;
|
template <class _Ty> struct CredFree_delete;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Deleter for unique_ptr to array of unknown size using CredFree
|
||||||
|
///
|
||||||
template <class _Ty> struct CredFree_delete<_Ty[]>;
|
template <class _Ty> struct CredFree_delete<_Ty[]>;
|
||||||
|
|
||||||
|
/// @}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// \addtogroup WinStdCryptoAPI
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Enumerates the credentials from the user's credential set. The credential set used is the one associated with the logon session of the current token. The token must not have the user's SID disabled.
|
||||||
|
///
|
||||||
|
/// \sa [CredEnumerate function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa374794.aspx)
|
||||||
|
///
|
||||||
inline BOOL CredEnumerate(_In_ LPCTSTR Filter, _In_ DWORD Flags, _Out_ DWORD *Count, _Out_ std::unique_ptr<PCREDENTIAL[], winstd::CredFree_delete<PCREDENTIAL[]> > &cCredentials);
|
inline BOOL CredEnumerate(_In_ LPCTSTR Filter, _In_ DWORD Flags, _Out_ DWORD *Count, _Out_ std::unique_ptr<PCREDENTIAL[], winstd::CredFree_delete<PCREDENTIAL[]> > &cCredentials);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Encrypts the specified credentials so that only the current security context can decrypt them.
|
||||||
|
///
|
||||||
|
/// \sa [CredProtect function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa374803.aspx)
|
||||||
|
///
|
||||||
template<class _Elem, class _Traits, class _Ax> inline BOOL CredProtectA(_In_ BOOL fAsSelf, _In_ LPCSTR pszCredentials, _In_ DWORD cchCredentials, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sProtectedCredentials, _Out_ CRED_PROTECTION_TYPE *ProtectionType);
|
template<class _Elem, class _Traits, class _Ax> inline BOOL CredProtectA(_In_ BOOL fAsSelf, _In_ LPCSTR pszCredentials, _In_ DWORD cchCredentials, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sProtectedCredentials, _Out_ CRED_PROTECTION_TYPE *ProtectionType);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Encrypts the specified credentials so that only the current security context can decrypt them.
|
||||||
|
///
|
||||||
|
/// \sa [CredProtect function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa374803.aspx)
|
||||||
|
///
|
||||||
template<class _Elem, class _Traits, class _Ax> inline BOOL CredProtectW(_In_ BOOL fAsSelf, _In_ LPCWSTR pszCredentials, _In_ DWORD cchCredentials, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sProtectedCredentials, _Out_ CRED_PROTECTION_TYPE *ProtectionType);
|
template<class _Elem, class _Traits, class _Ax> inline BOOL CredProtectW(_In_ BOOL fAsSelf, _In_ LPCWSTR pszCredentials, _In_ DWORD cchCredentials, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sProtectedCredentials, _Out_ CRED_PROTECTION_TYPE *ProtectionType);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Decrypts credentials that were previously encrypted by using the CredProtect function.
|
||||||
|
///
|
||||||
|
/// \sa [CredUnprotect function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa375186.aspx)
|
||||||
|
///
|
||||||
template<class _Elem, class _Traits, class _Ax> inline BOOL CredUnprotectA(_In_ BOOL fAsSelf, _In_ LPCSTR pszProtectedCredentials, _In_ DWORD cchCredentials, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sCredentials);
|
template<class _Elem, class _Traits, class _Ax> inline BOOL CredUnprotectA(_In_ BOOL fAsSelf, _In_ LPCSTR pszProtectedCredentials, _In_ DWORD cchCredentials, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sCredentials);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Decrypts credentials that were previously encrypted by using the CredProtect function.
|
||||||
|
///
|
||||||
|
/// \sa [CredUnprotect function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa375186.aspx)
|
||||||
|
///
|
||||||
template<class _Elem, class _Traits, class _Ax> inline BOOL CredUnprotectW(_In_ BOOL fAsSelf, _In_ LPCWSTR pszProtectedCredentials, _In_ DWORD cchCredentials, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sCredentials);
|
template<class _Elem, class _Traits, class _Ax> inline BOOL CredUnprotectW(_In_ BOOL fAsSelf, _In_ LPCWSTR pszProtectedCredentials, _In_ DWORD cchCredentials, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sCredentials);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
namespace winstd
|
namespace winstd
|
||||||
{
|
{
|
||||||
/// \addtogroup WinStdCryptoAPI
|
|
||||||
/// @{
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Deleter for unique_ptr using CredFree
|
|
||||||
///
|
|
||||||
template <class _Ty> struct CredFree_delete
|
template <class _Ty> struct CredFree_delete
|
||||||
{
|
{
|
||||||
typedef CredFree_delete<_Ty> _Myt; ///< This type
|
typedef CredFree_delete<_Ty> _Myt; ///< This type
|
||||||
@ -71,9 +115,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Deleter for unique_ptr to array of unknown size using CredFree
|
|
||||||
///
|
|
||||||
template <class _Ty> struct CredFree_delete<_Ty[]>
|
template <class _Ty> struct CredFree_delete<_Ty[]>
|
||||||
{
|
{
|
||||||
typedef CredFree_delete<_Ty> _Myt; ///< This type
|
typedef CredFree_delete<_Ty> _Myt; ///< This type
|
||||||
@ -100,22 +141,9 @@ namespace winstd
|
|||||||
CredFree(_Ptr);
|
CredFree(_Ptr);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// @}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// \defgroup WinStdCryptoAPI Cryptography API
|
|
||||||
/// Integrates WinStd classes with Microsoft Cryptography API
|
|
||||||
///
|
|
||||||
/// @{
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Enumerates the credentials from the user's credential set. The credential set used is the one associated with the logon session of the current token. The token must not have the user's SID disabled.
|
|
||||||
///
|
|
||||||
/// \sa [CredEnumerate function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa374794.aspx)
|
|
||||||
///
|
|
||||||
inline BOOL CredEnumerate(_In_ LPCTSTR Filter, _In_ DWORD Flags, _Out_ DWORD *Count, _Out_ std::unique_ptr<PCREDENTIAL[], winstd::CredFree_delete<PCREDENTIAL[]> > &cCredentials)
|
inline BOOL CredEnumerate(_In_ LPCTSTR Filter, _In_ DWORD Flags, _Out_ DWORD *Count, _Out_ std::unique_ptr<PCREDENTIAL[], winstd::CredFree_delete<PCREDENTIAL[]> > &cCredentials)
|
||||||
{
|
{
|
||||||
PCREDENTIAL *pCredentials;
|
PCREDENTIAL *pCredentials;
|
||||||
@ -127,11 +155,6 @@ inline BOOL CredEnumerate(_In_ LPCTSTR Filter, _In_ DWORD Flags, _Out_ DWORD *Co
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Encrypts the specified credentials so that only the current security context can decrypt them.
|
|
||||||
///
|
|
||||||
/// \sa [CredProtect function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa374803.aspx)
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline BOOL CredProtectA(_In_ BOOL fAsSelf, _In_ LPCSTR pszCredentials, _In_ DWORD cchCredentials, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sProtectedCredentials, _Out_ CRED_PROTECTION_TYPE *ProtectionType)
|
inline BOOL CredProtectA(_In_ BOOL fAsSelf, _In_ LPCSTR pszCredentials, _In_ DWORD cchCredentials, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sProtectedCredentials, _Out_ CRED_PROTECTION_TYPE *ProtectionType)
|
||||||
{
|
{
|
||||||
@ -156,11 +179,6 @@ inline BOOL CredProtectA(_In_ BOOL fAsSelf, _In_ LPCSTR pszCredentials, _In_ DWO
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Encrypts the specified credentials so that only the current security context can decrypt them.
|
|
||||||
///
|
|
||||||
/// \sa [CredProtect function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa374803.aspx)
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline BOOL CredProtectW(_In_ BOOL fAsSelf, _In_ LPCWSTR pszCredentials, _In_ DWORD cchCredentials, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sProtectedCredentials, _Out_ CRED_PROTECTION_TYPE *ProtectionType)
|
inline BOOL CredProtectW(_In_ BOOL fAsSelf, _In_ LPCWSTR pszCredentials, _In_ DWORD cchCredentials, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sProtectedCredentials, _Out_ CRED_PROTECTION_TYPE *ProtectionType)
|
||||||
{
|
{
|
||||||
@ -185,11 +203,6 @@ inline BOOL CredProtectW(_In_ BOOL fAsSelf, _In_ LPCWSTR pszCredentials, _In_ DW
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Decrypts credentials that were previously encrypted by using the CredProtect function.
|
|
||||||
///
|
|
||||||
/// \sa [CredUnprotect function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa375186.aspx)
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline BOOL CredUnprotectA(_In_ BOOL fAsSelf, _In_ LPCSTR pszProtectedCredentials, _In_ DWORD cchCredentials, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sCredentials)
|
inline BOOL CredUnprotectA(_In_ BOOL fAsSelf, _In_ LPCSTR pszProtectedCredentials, _In_ DWORD cchCredentials, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sCredentials)
|
||||||
{
|
{
|
||||||
@ -214,11 +227,6 @@ inline BOOL CredUnprotectA(_In_ BOOL fAsSelf, _In_ LPCSTR pszProtectedCredential
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Decrypts credentials that were previously encrypted by using the CredProtect function.
|
|
||||||
///
|
|
||||||
/// \sa [CredUnprotect function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa375186.aspx)
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline BOOL CredUnprotectW(_In_ BOOL fAsSelf, _In_ LPCWSTR pszProtectedCredentials, _In_ DWORD cchCredentials, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sCredentials)
|
inline BOOL CredUnprotectW(_In_ BOOL fAsSelf, _In_ LPCWSTR pszProtectedCredentials, _In_ DWORD cchCredentials, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sCredentials)
|
||||||
{
|
{
|
||||||
@ -241,5 +249,3 @@ inline BOOL CredUnprotectW(_In_ BOOL fAsSelf, _In_ LPCWSTR pszProtectedCredentia
|
|||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @}
|
|
||||||
|
@ -25,31 +25,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
template<class _Elem, class _Traits, class _Ax> inline DWORD CertGetNameStringA(_In_ PCCERT_CONTEXT pCertContext, _In_ DWORD dwType, _In_ DWORD dwFlags, _In_ void *pvTypePara, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sNameString);
|
|
||||||
template<class _Elem, class _Traits, class _Ax> inline DWORD CertGetNameStringW(_In_ PCCERT_CONTEXT pCertContext, _In_ DWORD dwType, _In_ DWORD dwFlags, _In_ void *pvTypePara, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sNameString);
|
|
||||||
template<class _Ty, class _Ax> inline BOOL WINAPI CertGetCertificateContextProperty(_In_ PCCERT_CONTEXT pCertContext, _In_ DWORD dwPropId, _Out_ std::vector<_Ty, _Ax> &aData);
|
|
||||||
template<class _Ty, class _Ax> inline BOOL CryptGetHashParam(_In_ HCRYPTHASH hHash, _In_ DWORD dwParam, _Out_ std::vector<_Ty, _Ax> &aData, _In_ DWORD dwFlags);
|
|
||||||
template<class _Ty, class _Ax> inline BOOL CryptGetKeyParam(_In_ HCRYPTKEY hKey, _In_ DWORD dwParam, _Out_ std::vector<_Ty, _Ax> &aData, _In_ DWORD dwFlags);
|
|
||||||
template<class T> inline BOOL CryptGetKeyParam(_In_ HCRYPTKEY hKey, _In_ DWORD dwParam, _Out_ T &data, _In_ DWORD dwFlags);
|
|
||||||
template<class _Ty, class _Ax> inline BOOL CryptExportKey(_In_ HCRYPTKEY hKey, _In_ HCRYPTKEY hExpKey, _In_ DWORD dwBlobType, _In_ DWORD dwFlags, _Out_ std::vector<_Ty, _Ax> &aData);
|
|
||||||
template<class _Ty, class _Ax> inline BOOL CryptEncrypt(_In_ HCRYPTKEY hKey, _In_opt_ HCRYPTHASH hHash, _In_ BOOL Final, _In_ DWORD dwFlags, _Inout_ std::vector<_Ty, _Ax> &aData);
|
|
||||||
template<class _Ty, class _Ax> inline BOOL CryptDecrypt(_In_ HCRYPTKEY hKey, _In_opt_ HCRYPTHASH hHash, _In_ BOOL Final, _In_ DWORD dwFlags, _Inout_ std::vector<_Ty, _Ax> &aData);
|
|
||||||
namespace winstd
|
|
||||||
{
|
|
||||||
class WINSTD_API cert_context;
|
|
||||||
class WINSTD_API cert_chain_context;
|
|
||||||
class WINSTD_API cert_store;
|
|
||||||
class WINSTD_API crypt_prov;
|
|
||||||
class WINSTD_API crypt_hash;
|
|
||||||
class WINSTD_API crypt_key;
|
|
||||||
class WINSTD_API data_blob;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// \defgroup WinStdCryptoAPI Cryptography API
|
/// \defgroup WinStdCryptoAPI Cryptography API
|
||||||
/// Integrates WinStd classes with Microsoft Cryptography API
|
/// Integrates WinStd classes with Microsoft Cryptography API
|
||||||
@ -61,6 +36,114 @@ namespace winstd
|
|||||||
///
|
///
|
||||||
/// \sa [CertGetNameString function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa376086.aspx)
|
/// \sa [CertGetNameString function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa376086.aspx)
|
||||||
///
|
///
|
||||||
|
template<class _Elem, class _Traits, class _Ax> inline DWORD CertGetNameStringA(_In_ PCCERT_CONTEXT pCertContext, _In_ DWORD dwType, _In_ DWORD dwFlags, _In_ void *pvTypePara, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sNameString);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Obtains the subject or issuer name from a certificate [CERT_CONTEXT](https://msdn.microsoft.com/en-us/library/windows/desktop/aa377189.aspx) structure and stores it in a std::wstring string.
|
||||||
|
///
|
||||||
|
/// \sa [CertGetNameString function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa376086.aspx)
|
||||||
|
///
|
||||||
|
template<class _Elem, class _Traits, class _Ax> inline DWORD CertGetNameStringW(_In_ PCCERT_CONTEXT pCertContext, _In_ DWORD dwType, _In_ DWORD dwFlags, _In_ void *pvTypePara, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sNameString);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Retrieves the information contained in an extended property of a certificate context.
|
||||||
|
///
|
||||||
|
/// \sa [CertGetCertificateContextProperty function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa376079.aspx)
|
||||||
|
///
|
||||||
|
template<class _Ty, class _Ax> inline BOOL WINAPI CertGetCertificateContextProperty(_In_ PCCERT_CONTEXT pCertContext, _In_ DWORD dwPropId, _Out_ std::vector<_Ty, _Ax> &aData);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Retrieves data that governs the operations of a hash object. The actual hash value can be retrieved by using this function.
|
||||||
|
///
|
||||||
|
/// \sa [CryptGetHashParam function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa379947.aspx)
|
||||||
|
///
|
||||||
|
template<class _Ty, class _Ax> inline BOOL CryptGetHashParam(_In_ HCRYPTHASH hHash, _In_ DWORD dwParam, _Out_ std::vector<_Ty, _Ax> &aData, _In_ DWORD dwFlags);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Retrieves data that governs the operations of a key.
|
||||||
|
///
|
||||||
|
/// \sa [CryptGetKeyParam function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa379949.aspx)
|
||||||
|
///
|
||||||
|
template<class _Ty, class _Ax> inline BOOL CryptGetKeyParam(_In_ HCRYPTKEY hKey, _In_ DWORD dwParam, _Out_ std::vector<_Ty, _Ax> &aData, _In_ DWORD dwFlags);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Retrieves data that governs the operations of a key.
|
||||||
|
///
|
||||||
|
/// \sa [CryptGetKeyParam function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa379949.aspx)
|
||||||
|
///
|
||||||
|
template<class T> inline BOOL CryptGetKeyParam(_In_ HCRYPTKEY hKey, _In_ DWORD dwParam, _Out_ T &data, _In_ DWORD dwFlags);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Exports a cryptographic key or a key pair from a cryptographic service provider (CSP) in a secure manner.
|
||||||
|
///
|
||||||
|
/// \sa [CryptExportKey function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa379931.aspx)
|
||||||
|
///
|
||||||
|
template<class _Ty, class _Ax> inline BOOL CryptExportKey(_In_ HCRYPTKEY hKey, _In_ HCRYPTKEY hExpKey, _In_ DWORD dwBlobType, _In_ DWORD dwFlags, _Out_ std::vector<_Ty, _Ax> &aData);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Encrypts data.
|
||||||
|
///
|
||||||
|
/// \sa [CryptEncrypt function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa379924.aspx)
|
||||||
|
///
|
||||||
|
template<class _Ty, class _Ax> inline BOOL CryptEncrypt(_In_ HCRYPTKEY hKey, _In_opt_ HCRYPTHASH hHash, _In_ BOOL Final, _In_ DWORD dwFlags, _Inout_ std::vector<_Ty, _Ax> &aData);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Decrypts data previously encrypted by using the CryptEncrypt function.
|
||||||
|
///
|
||||||
|
/// \sa [CryptDecrypt function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa379913.aspx)
|
||||||
|
///
|
||||||
|
template<class _Ty, class _Ax> inline BOOL CryptDecrypt(_In_ HCRYPTKEY hKey, _In_opt_ HCRYPTHASH hHash, _In_ BOOL Final, _In_ DWORD dwFlags, _Inout_ std::vector<_Ty, _Ax> &aData);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
namespace winstd
|
||||||
|
{
|
||||||
|
/// \addtogroup WinStdCryptoAPI
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// PCCERT_CONTEXT wrapper class
|
||||||
|
///
|
||||||
|
class WINSTD_API cert_context;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// PCCERT_CHAIN_CONTEXT wrapper class
|
||||||
|
///
|
||||||
|
class WINSTD_API cert_chain_context;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// HCERTSTORE wrapper class
|
||||||
|
///
|
||||||
|
class WINSTD_API cert_store;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// HCRYPTPROV wrapper class
|
||||||
|
///
|
||||||
|
class WINSTD_API crypt_prov;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// HCRYPTHASH wrapper class
|
||||||
|
///
|
||||||
|
class WINSTD_API crypt_hash;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// HCRYPTKEY wrapper class
|
||||||
|
///
|
||||||
|
class WINSTD_API crypt_key;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// DATA_BLOB wrapper class
|
||||||
|
///
|
||||||
|
class WINSTD_API data_blob;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline DWORD CertGetNameStringA(_In_ PCCERT_CONTEXT pCertContext, _In_ DWORD dwType, _In_ DWORD dwFlags, _In_ void *pvTypePara, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sNameString)
|
inline DWORD CertGetNameStringA(_In_ PCCERT_CONTEXT pCertContext, _In_ DWORD dwType, _In_ DWORD dwFlags, _In_ void *pvTypePara, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sNameString)
|
||||||
{
|
{
|
||||||
@ -75,11 +158,6 @@ inline DWORD CertGetNameStringA(_In_ PCCERT_CONTEXT pCertContext, _In_ DWORD dwT
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Obtains the subject or issuer name from a certificate [CERT_CONTEXT](https://msdn.microsoft.com/en-us/library/windows/desktop/aa377189.aspx) structure and stores it in a std::wstring string.
|
|
||||||
///
|
|
||||||
/// \sa [CertGetNameString function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa376086.aspx)
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline DWORD CertGetNameStringW(_In_ PCCERT_CONTEXT pCertContext, _In_ DWORD dwType, _In_ DWORD dwFlags, _In_ void *pvTypePara, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sNameString)
|
inline DWORD CertGetNameStringW(_In_ PCCERT_CONTEXT pCertContext, _In_ DWORD dwType, _In_ DWORD dwFlags, _In_ void *pvTypePara, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sNameString)
|
||||||
{
|
{
|
||||||
@ -94,11 +172,6 @@ inline DWORD CertGetNameStringW(_In_ PCCERT_CONTEXT pCertContext, _In_ DWORD dwT
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Retrieves the information contained in an extended property of a certificate context.
|
|
||||||
///
|
|
||||||
/// \sa [CertGetCertificateContextProperty function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa376079.aspx)
|
|
||||||
///
|
|
||||||
template<class _Ty, class _Ax>
|
template<class _Ty, class _Ax>
|
||||||
inline BOOL WINAPI CertGetCertificateContextProperty(_In_ PCCERT_CONTEXT pCertContext, _In_ DWORD dwPropId, _Out_ std::vector<_Ty, _Ax> &aData)
|
inline BOOL WINAPI CertGetCertificateContextProperty(_In_ PCCERT_CONTEXT pCertContext, _In_ DWORD dwPropId, _Out_ std::vector<_Ty, _Ax> &aData)
|
||||||
{
|
{
|
||||||
@ -121,11 +194,6 @@ inline BOOL WINAPI CertGetCertificateContextProperty(_In_ PCCERT_CONTEXT pCertCo
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Retrieves data that governs the operations of a hash object. The actual hash value can be retrieved by using this function.
|
|
||||||
///
|
|
||||||
/// \sa [CryptGetHashParam function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa379947.aspx)
|
|
||||||
///
|
|
||||||
template<class _Ty, class _Ax>
|
template<class _Ty, class _Ax>
|
||||||
inline BOOL CryptGetHashParam(_In_ HCRYPTHASH hHash, _In_ DWORD dwParam, _Out_ std::vector<_Ty, _Ax> &aData, _In_ DWORD dwFlags)
|
inline BOOL CryptGetHashParam(_In_ HCRYPTHASH hHash, _In_ DWORD dwParam, _Out_ std::vector<_Ty, _Ax> &aData, _In_ DWORD dwFlags)
|
||||||
{
|
{
|
||||||
@ -148,11 +216,6 @@ inline BOOL CryptGetHashParam(_In_ HCRYPTHASH hHash, _In_ DWORD dwParam, _Out_ s
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Retrieves data that governs the operations of a hash object. The actual hash value can be retrieved by using this function.
|
|
||||||
///
|
|
||||||
/// \sa [CryptGetHashParam function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa379947.aspx)
|
|
||||||
///
|
|
||||||
template<class T>
|
template<class T>
|
||||||
inline BOOL CryptGetHashParam(_In_ HCRYPTHASH hHash, _In_ DWORD dwParam, _Out_ T &data, _In_ DWORD dwFlags)
|
inline BOOL CryptGetHashParam(_In_ HCRYPTHASH hHash, _In_ DWORD dwParam, _Out_ T &data, _In_ DWORD dwFlags)
|
||||||
{
|
{
|
||||||
@ -161,11 +224,6 @@ inline BOOL CryptGetHashParam(_In_ HCRYPTHASH hHash, _In_ DWORD dwParam, _Out_ T
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Retrieves data that governs the operations of a key.
|
|
||||||
///
|
|
||||||
/// \sa [CryptGetKeyParam function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa379949.aspx)
|
|
||||||
///
|
|
||||||
template<class _Ty, class _Ax>
|
template<class _Ty, class _Ax>
|
||||||
inline BOOL CryptGetKeyParam(_In_ HCRYPTKEY hKey, _In_ DWORD dwParam, _Out_ std::vector<_Ty, _Ax> &aData, _In_ DWORD dwFlags)
|
inline BOOL CryptGetKeyParam(_In_ HCRYPTKEY hKey, _In_ DWORD dwParam, _Out_ std::vector<_Ty, _Ax> &aData, _In_ DWORD dwFlags)
|
||||||
{
|
{
|
||||||
@ -188,11 +246,6 @@ inline BOOL CryptGetKeyParam(_In_ HCRYPTKEY hKey, _In_ DWORD dwParam, _Out_ std:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Retrieves data that governs the operations of a key.
|
|
||||||
///
|
|
||||||
/// \sa [CryptGetKeyParam function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa379949.aspx)
|
|
||||||
///
|
|
||||||
template<class T>
|
template<class T>
|
||||||
inline BOOL CryptGetKeyParam(_In_ HCRYPTKEY hKey, _In_ DWORD dwParam, _Out_ T &data, _In_ DWORD dwFlags)
|
inline BOOL CryptGetKeyParam(_In_ HCRYPTKEY hKey, _In_ DWORD dwParam, _Out_ T &data, _In_ DWORD dwFlags)
|
||||||
{
|
{
|
||||||
@ -201,11 +254,6 @@ inline BOOL CryptGetKeyParam(_In_ HCRYPTKEY hKey, _In_ DWORD dwParam, _Out_ T &d
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Exports a cryptographic key or a key pair from a cryptographic service provider (CSP) in a secure manner.
|
|
||||||
///
|
|
||||||
/// \sa [CryptExportKey function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa379931.aspx)
|
|
||||||
///
|
|
||||||
template<class _Ty, class _Ax>
|
template<class _Ty, class _Ax>
|
||||||
inline BOOL CryptExportKey(_In_ HCRYPTKEY hKey, _In_ HCRYPTKEY hExpKey, _In_ DWORD dwBlobType, _In_ DWORD dwFlags, _Out_ std::vector<_Ty, _Ax> &aData)
|
inline BOOL CryptExportKey(_In_ HCRYPTKEY hKey, _In_ HCRYPTKEY hExpKey, _In_ DWORD dwBlobType, _In_ DWORD dwFlags, _Out_ std::vector<_Ty, _Ax> &aData)
|
||||||
{
|
{
|
||||||
@ -222,11 +270,6 @@ inline BOOL CryptExportKey(_In_ HCRYPTKEY hKey, _In_ HCRYPTKEY hExpKey, _In_ DWO
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Encrypts data.
|
|
||||||
///
|
|
||||||
/// \sa [CryptEncrypt function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa379924.aspx)
|
|
||||||
///
|
|
||||||
template<class _Ty, class _Ax>
|
template<class _Ty, class _Ax>
|
||||||
inline BOOL CryptEncrypt(_In_ HCRYPTKEY hKey, _In_opt_ HCRYPTHASH hHash, _In_ BOOL Final, _In_ DWORD dwFlags, _Inout_ std::vector<_Ty, _Ax> &aData)
|
inline BOOL CryptEncrypt(_In_ HCRYPTKEY hKey, _In_opt_ HCRYPTHASH hHash, _In_ BOOL Final, _In_ DWORD dwFlags, _Inout_ std::vector<_Ty, _Ax> &aData)
|
||||||
{
|
{
|
||||||
@ -273,11 +316,6 @@ inline BOOL CryptEncrypt(_In_ HCRYPTKEY hKey, _In_opt_ HCRYPTHASH hHash, _In_ BO
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Decrypts data previously encrypted by using the CryptEncrypt function.
|
|
||||||
///
|
|
||||||
/// \sa [CryptDecrypt function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa379913.aspx)
|
|
||||||
///
|
|
||||||
template<class _Ty, class _Ax>
|
template<class _Ty, class _Ax>
|
||||||
inline BOOL CryptDecrypt(_In_ HCRYPTKEY hKey, _In_opt_ HCRYPTHASH hHash, _In_ BOOL Final, _In_ DWORD dwFlags, _Inout_ std::vector<_Ty, _Ax> &aData)
|
inline BOOL CryptDecrypt(_In_ HCRYPTKEY hKey, _In_opt_ HCRYPTHASH hHash, _In_ BOOL Final, _In_ DWORD dwFlags, _Inout_ std::vector<_Ty, _Ax> &aData)
|
||||||
{
|
{
|
||||||
@ -292,17 +330,9 @@ inline BOOL CryptDecrypt(_In_ HCRYPTKEY hKey, _In_opt_ HCRYPTHASH hHash, _In_ BO
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @}
|
|
||||||
|
|
||||||
|
|
||||||
namespace winstd
|
namespace winstd
|
||||||
{
|
{
|
||||||
/// \addtogroup WinStdCryptoAPI
|
|
||||||
/// @{
|
|
||||||
|
|
||||||
///
|
|
||||||
/// PCCERT_CONTEXT wrapper class
|
|
||||||
///
|
|
||||||
class WINSTD_API cert_context : public dplhandle<PCCERT_CONTEXT>
|
class WINSTD_API cert_context : public dplhandle<PCCERT_CONTEXT>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -462,9 +492,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// PCCERT_CHAIN_CONTEXT wrapper class
|
|
||||||
///
|
|
||||||
class WINSTD_API cert_chain_context : public dplhandle<PCCERT_CHAIN_CONTEXT>
|
class WINSTD_API cert_chain_context : public dplhandle<PCCERT_CHAIN_CONTEXT>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -542,9 +569,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// HCERTSTORE wrapper class
|
|
||||||
///
|
|
||||||
class WINSTD_API cert_store : public handle<HCERTSTORE>
|
class WINSTD_API cert_store : public handle<HCERTSTORE>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -639,9 +663,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// HCRYPTPROV wrapper class
|
|
||||||
///
|
|
||||||
class WINSTD_API crypt_prov : public handle<HCRYPTPROV>
|
class WINSTD_API crypt_prov : public handle<HCRYPTPROV>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -717,9 +738,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// HCRYPTHASH wrapper class
|
|
||||||
///
|
|
||||||
class WINSTD_API crypt_hash : public dplhandle<HCRYPTHASH>
|
class WINSTD_API crypt_hash : public dplhandle<HCRYPTHASH>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -797,9 +815,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// HCRYPTKEY wrapper class
|
|
||||||
///
|
|
||||||
class WINSTD_API crypt_key : public dplhandle<HCRYPTKEY>
|
class WINSTD_API crypt_key : public dplhandle<HCRYPTKEY>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -928,9 +943,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// DATA_BLOB wrapper class
|
|
||||||
///
|
|
||||||
class WINSTD_API data_blob : public DATA_BLOB
|
class WINSTD_API data_blob : public DATA_BLOB
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -1043,6 +1055,4 @@ namespace winstd
|
|||||||
return pbData;
|
return pbData;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// @}
|
|
||||||
}
|
}
|
||||||
|
@ -23,20 +23,6 @@
|
|||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
#include <eaptypes.h> // Must include after <Windows.h>
|
#include <eaptypes.h> // Must include after <Windows.h>
|
||||||
|
|
||||||
namespace winstd
|
|
||||||
{
|
|
||||||
enum eap_type_t;
|
|
||||||
|
|
||||||
class WINSTD_API eap_attr;
|
|
||||||
class WINSTD_API eap_method_prop;
|
|
||||||
class WINSTD_API eap_packet;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <eapmethodtypes.h>
|
|
||||||
|
|
||||||
|
|
||||||
namespace winstd
|
namespace winstd
|
||||||
{
|
{
|
||||||
///
|
///
|
||||||
@ -50,6 +36,33 @@ namespace winstd
|
|||||||
///
|
///
|
||||||
/// \sa [Extensible Authentication Protocol (EAP) Registry (Chapter: Method Types)](https://www.iana.org/assignments/eap-numbers/eap-numbers.xhtml#eap-numbers-4)
|
/// \sa [Extensible Authentication Protocol (EAP) Registry (Chapter: Method Types)](https://www.iana.org/assignments/eap-numbers/eap-numbers.xhtml#eap-numbers-4)
|
||||||
///
|
///
|
||||||
|
enum eap_type_t;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// EAP_ATTRIBUTE wrapper class
|
||||||
|
///
|
||||||
|
class WINSTD_API eap_attr;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// EAP_METHOD_PROPERTY wrapper class
|
||||||
|
///
|
||||||
|
class WINSTD_API eap_method_prop;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// EapPacket wrapper class
|
||||||
|
///
|
||||||
|
class WINSTD_API eap_packet;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <eapmethodtypes.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace winstd
|
||||||
|
{
|
||||||
#pragma warning(suppress: 4480)
|
#pragma warning(suppress: 4480)
|
||||||
enum eap_type_t : unsigned char {
|
enum eap_type_t : unsigned char {
|
||||||
eap_type_undefined = 0, ///< Undefined EAP type
|
eap_type_undefined = 0, ///< Undefined EAP type
|
||||||
@ -61,9 +74,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// EAP_ATTRIBUTE wrapper class
|
|
||||||
///
|
|
||||||
class WINSTD_API __declspec(novtable) eap_attr : public EAP_ATTRIBUTE
|
class WINSTD_API __declspec(novtable) eap_attr : public EAP_ATTRIBUTE
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -169,9 +179,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// EAP_METHOD_PROPERTY wrapper class
|
|
||||||
///
|
|
||||||
class WINSTD_API __declspec(novtable) eap_method_prop : public EAP_METHOD_PROPERTY
|
class WINSTD_API __declspec(novtable) eap_method_prop : public EAP_METHOD_PROPERTY
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -221,9 +228,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// EapPacket wrapper class
|
|
||||||
///
|
|
||||||
class WINSTD_API eap_packet : public dplhandle<EapPacket*>
|
class WINSTD_API eap_packet : public dplhandle<EapPacket*>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -304,6 +308,4 @@ namespace winstd
|
|||||||
///
|
///
|
||||||
virtual handle_type duplicate_internal(_In_ handle_type h) const;
|
virtual handle_type duplicate_internal(_In_ handle_type h) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// @}
|
|
||||||
}
|
}
|
||||||
|
@ -30,102 +30,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
inline ULONG TdhGetEventInformation(_In_ PEVENT_RECORD pEvent, _In_ ULONG TdhContextCount, _In_ PTDH_CONTEXT pTdhContext, _Out_ std::unique_ptr<TRACE_EVENT_INFO> &info);
|
|
||||||
inline ULONG TdhGetEventMapInformation(_In_ PEVENT_RECORD pEvent, _In_ LPWSTR pMapName, _Out_ std::unique_ptr<EVENT_MAP_INFO> &info);
|
|
||||||
template<class _Ty, class _Ax> inline ULONG TdhGetProperty(_In_ PEVENT_RECORD pEvent, _In_ ULONG TdhContextCount, _In_ PTDH_CONTEXT pTdhContext, _In_ ULONG PropertyDataCount, _In_ PPROPERTY_DATA_DESCRIPTOR pPropertyData, _Out_ std::vector<_Ty, _Ax> &aData);
|
|
||||||
|
|
||||||
namespace winstd
|
|
||||||
{
|
|
||||||
class WINSTD_API event_data;
|
|
||||||
class WINSTD_API event_rec;
|
|
||||||
class WINSTD_API event_provider;
|
|
||||||
class WINSTD_API event_session;
|
|
||||||
class WINSTD_API event_trace;
|
|
||||||
class WINSTD_API event_trace_enabler;
|
|
||||||
|
|
||||||
class event_fn_auto;
|
|
||||||
template<class T> class event_fn_auto_ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Retrieves metadata about an event.
|
|
||||||
///
|
|
||||||
/// \sa [TdhGetEventInformation function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa964840.aspx)
|
|
||||||
///
|
|
||||||
inline ULONG TdhGetEventInformation(_In_ PEVENT_RECORD pEvent, _In_ ULONG TdhContextCount, _In_ PTDH_CONTEXT pTdhContext, _Out_ std::unique_ptr<TRACE_EVENT_INFO> &info)
|
|
||||||
{
|
|
||||||
BYTE szBuffer[WINSTD_STACK_BUFFER_BYTES];
|
|
||||||
ULONG ulSize = sizeof(szBuffer), ulResult;
|
|
||||||
|
|
||||||
// Try with stack buffer first.
|
|
||||||
ulResult = TdhGetEventInformation(pEvent, TdhContextCount, pTdhContext, (PTRACE_EVENT_INFO)szBuffer, &ulSize);
|
|
||||||
if (ulResult == ERROR_SUCCESS) {
|
|
||||||
// Copy from stack.
|
|
||||||
info.reset((PTRACE_EVENT_INFO)new char[ulSize]);
|
|
||||||
memcpy(info.get(), szBuffer, ulSize);
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
} else if (ulResult == ERROR_INSUFFICIENT_BUFFER) {
|
|
||||||
// Create buffer on heap and retry.
|
|
||||||
info.reset((PTRACE_EVENT_INFO)new char[ulSize]);
|
|
||||||
return TdhGetEventInformation(pEvent, TdhContextCount, pTdhContext, info.get(), &ulSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ulResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Retrieves information about the event map contained in the event.
|
|
||||||
///
|
|
||||||
/// \sa [TdhGetEventMapInformation function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa964841.aspx)
|
|
||||||
///
|
|
||||||
inline ULONG TdhGetEventMapInformation(_In_ PEVENT_RECORD pEvent, _In_ LPWSTR pMapName, _Out_ std::unique_ptr<EVENT_MAP_INFO> &info)
|
|
||||||
{
|
|
||||||
BYTE szBuffer[WINSTD_STACK_BUFFER_BYTES];
|
|
||||||
ULONG ulSize = sizeof(szBuffer), ulResult;
|
|
||||||
|
|
||||||
// Try with stack buffer first.
|
|
||||||
ulResult = TdhGetEventMapInformation(pEvent, pMapName, (PEVENT_MAP_INFO)szBuffer, &ulSize);
|
|
||||||
if (ulResult == ERROR_SUCCESS) {
|
|
||||||
// Copy from stack.
|
|
||||||
info.reset((PEVENT_MAP_INFO)new char[ulSize]);
|
|
||||||
memcpy(info.get(), szBuffer, ulSize);
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
} else if (ulResult == ERROR_INSUFFICIENT_BUFFER) {
|
|
||||||
// Create buffer on heap and retry.
|
|
||||||
info.reset((PEVENT_MAP_INFO)new char[ulSize]);
|
|
||||||
return TdhGetEventMapInformation(pEvent, pMapName, info.get(), &ulSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ulResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Retrieves a property value from the event data.
|
|
||||||
///
|
|
||||||
/// \sa [TdhGetProperty function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa964843.aspx)
|
|
||||||
///
|
|
||||||
template<class _Ty, class _Ax>
|
|
||||||
inline ULONG TdhGetProperty(_In_ PEVENT_RECORD pEvent, _In_ ULONG TdhContextCount, _In_ PTDH_CONTEXT pTdhContext, _In_ ULONG PropertyDataCount, _In_ PPROPERTY_DATA_DESCRIPTOR pPropertyData, _Out_ std::vector<_Ty, _Ax> &aData)
|
|
||||||
{
|
|
||||||
ULONG ulSize, ulResult;
|
|
||||||
|
|
||||||
// Query property size.
|
|
||||||
ulResult = TdhGetPropertySize(pEvent, TdhContextCount, pTdhContext, PropertyDataCount, pPropertyData, &ulSize);
|
|
||||||
if (ulResult == ERROR_SUCCESS) {
|
|
||||||
// Query property value.
|
|
||||||
aData.resize((ulSize + sizeof(_Ty) - 1) / sizeof(_Ty));
|
|
||||||
ulResult = TdhGetProperty(pEvent, TdhContextCount, pTdhContext, PropertyDataCount, pPropertyData, ulSize, (LPBYTE)aData.data());
|
|
||||||
}
|
|
||||||
|
|
||||||
return ulResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
namespace winstd
|
namespace winstd
|
||||||
{
|
{
|
||||||
///
|
///
|
||||||
@ -134,10 +38,84 @@ namespace winstd
|
|||||||
///
|
///
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// EVENT_DATA_DESCRIPTOR wrapper
|
/// EVENT_DATA_DESCRIPTOR wrapper
|
||||||
///
|
///
|
||||||
|
class WINSTD_API event_data;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// EVENT_RECORD wrapper
|
||||||
|
///
|
||||||
|
class WINSTD_API event_rec;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// ETW event provider
|
||||||
|
///
|
||||||
|
class WINSTD_API event_provider;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// ETW session
|
||||||
|
///
|
||||||
|
class WINSTD_API event_session;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// ETW trace
|
||||||
|
///
|
||||||
|
class WINSTD_API event_trace;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Helper class to enable event provider in constructor and disables it in destructor
|
||||||
|
///
|
||||||
|
class WINSTD_API event_trace_enabler;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Helper class to write an event on entry/exit of scope.
|
||||||
|
///
|
||||||
|
/// It writes one string event at creation and another at destruction.
|
||||||
|
///
|
||||||
|
class event_fn_auto;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Helper template to write an event on entry/exit of scope with one parameter (typically result).
|
||||||
|
///
|
||||||
|
/// It writes one string event at creation and another at destruction, with allowing one sprintf type parameter for string event at destruction.
|
||||||
|
///
|
||||||
|
template<class T> class event_fn_auto_ret;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// \addtogroup WinStdCryptoAPI
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Retrieves metadata about an event.
|
||||||
|
///
|
||||||
|
/// \sa [TdhGetEventInformation function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa964840.aspx)
|
||||||
|
///
|
||||||
|
inline ULONG TdhGetEventInformation(_In_ PEVENT_RECORD pEvent, _In_ ULONG TdhContextCount, _In_ PTDH_CONTEXT pTdhContext, _Out_ std::unique_ptr<TRACE_EVENT_INFO> &info);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Retrieves information about the event map contained in the event.
|
||||||
|
///
|
||||||
|
/// \sa [TdhGetEventMapInformation function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa964841.aspx)
|
||||||
|
///
|
||||||
|
inline ULONG TdhGetEventMapInformation(_In_ PEVENT_RECORD pEvent, _In_ LPWSTR pMapName, _Out_ std::unique_ptr<EVENT_MAP_INFO> &info);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Retrieves a property value from the event data.
|
||||||
|
///
|
||||||
|
/// \sa [TdhGetProperty function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa964843.aspx)
|
||||||
|
///
|
||||||
|
template<class _Ty, class _Ax> inline ULONG TdhGetProperty(_In_ PEVENT_RECORD pEvent, _In_ ULONG TdhContextCount, _In_ PTDH_CONTEXT pTdhContext, _In_ ULONG PropertyDataCount, _In_ PPROPERTY_DATA_DESCRIPTOR pPropertyData, _Out_ std::vector<_Ty, _Ax> &aData);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
namespace winstd
|
||||||
|
{
|
||||||
class WINSTD_API event_data : public EVENT_DATA_DESCRIPTOR
|
class WINSTD_API event_data : public EVENT_DATA_DESCRIPTOR
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -250,9 +228,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// EVENT_RECORD wrapper
|
|
||||||
///
|
|
||||||
class WINSTD_API event_rec : public EVENT_RECORD
|
class WINSTD_API event_rec : public EVENT_RECORD
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -392,9 +367,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// ETW event provider
|
|
||||||
///
|
|
||||||
class WINSTD_API event_provider : public handle<REGHANDLE>
|
class WINSTD_API event_provider : public handle<REGHANDLE>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -571,9 +543,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// ETW session
|
|
||||||
///
|
|
||||||
class WINSTD_API event_session : public handle<TRACEHANDLE>
|
class WINSTD_API event_session : public handle<TRACEHANDLE>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -754,9 +723,46 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
class WINSTD_API event_trace : public handle<TRACEHANDLE>
|
||||||
/// Helper class to enable event provider in constructor and disables it in destructor
|
{
|
||||||
///
|
public:
|
||||||
|
///
|
||||||
|
/// Closes the trace.
|
||||||
|
///
|
||||||
|
/// \sa [CloseTrace function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363686.aspx)
|
||||||
|
///
|
||||||
|
virtual ~event_trace();
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Opens a real-time trace session or log file for consuming.
|
||||||
|
///
|
||||||
|
/// \return
|
||||||
|
/// - `ERROR_SUCCESS` when creation succeeds;
|
||||||
|
/// - error code otherwise.
|
||||||
|
///
|
||||||
|
/// \sa [OpenTrace function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa364089.aspx)
|
||||||
|
///
|
||||||
|
inline bool create(_Inout_ PEVENT_TRACE_LOGFILE Logfile)
|
||||||
|
{
|
||||||
|
handle_type h = OpenTrace(Logfile);
|
||||||
|
if (h != (TRACEHANDLE)INVALID_HANDLE_VALUE) {
|
||||||
|
attach(h);
|
||||||
|
return true;
|
||||||
|
} else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
///
|
||||||
|
/// Closes the trace.
|
||||||
|
///
|
||||||
|
/// \sa [CloseTrace function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363686.aspx)
|
||||||
|
///
|
||||||
|
virtual void free_internal();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class WINSTD_API event_trace_enabler
|
class WINSTD_API event_trace_enabler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -862,54 +868,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// ETW trace
|
|
||||||
///
|
|
||||||
class WINSTD_API event_trace : public handle<TRACEHANDLE>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
///
|
|
||||||
/// Closes the trace.
|
|
||||||
///
|
|
||||||
/// \sa [CloseTrace function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363686.aspx)
|
|
||||||
///
|
|
||||||
virtual ~event_trace();
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Opens a real-time trace session or log file for consuming.
|
|
||||||
///
|
|
||||||
/// \return
|
|
||||||
/// - `ERROR_SUCCESS` when creation succeeds;
|
|
||||||
/// - error code otherwise.
|
|
||||||
///
|
|
||||||
/// \sa [OpenTrace function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa364089.aspx)
|
|
||||||
///
|
|
||||||
inline bool create(_Inout_ PEVENT_TRACE_LOGFILE Logfile)
|
|
||||||
{
|
|
||||||
handle_type h = OpenTrace(Logfile);
|
|
||||||
if (h != (TRACEHANDLE)INVALID_HANDLE_VALUE) {
|
|
||||||
attach(h);
|
|
||||||
return true;
|
|
||||||
} else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
///
|
|
||||||
/// Closes the trace.
|
|
||||||
///
|
|
||||||
/// \sa [CloseTrace function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363686.aspx)
|
|
||||||
///
|
|
||||||
virtual void free_internal();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Helper class to write an event on entry/exit of scope.
|
|
||||||
///
|
|
||||||
/// It writes one string event at creation and another at destruction.
|
|
||||||
///
|
|
||||||
class event_fn_auto
|
class event_fn_auto
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -996,11 +954,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Helper template to write an event on entry/exit of scope with one parameter (typically result).
|
|
||||||
///
|
|
||||||
/// It writes one string event at creation and another at destruction, with allowing one sprintf type parameter for string event at destruction.
|
|
||||||
///
|
|
||||||
template<class T>
|
template<class T>
|
||||||
class event_fn_auto_ret
|
class event_fn_auto_ret
|
||||||
{
|
{
|
||||||
@ -1094,6 +1047,65 @@ namespace winstd
|
|||||||
EVENT_DATA_DESCRIPTOR m_desc[2]; ///< Function name and return value
|
EVENT_DATA_DESCRIPTOR m_desc[2]; ///< Function name and return value
|
||||||
T &m_result; ///< Function result
|
T &m_result; ///< Function result
|
||||||
};
|
};
|
||||||
|
}
|
||||||
/// @}
|
|
||||||
|
|
||||||
|
inline ULONG TdhGetEventInformation(_In_ PEVENT_RECORD pEvent, _In_ ULONG TdhContextCount, _In_ PTDH_CONTEXT pTdhContext, _Out_ std::unique_ptr<TRACE_EVENT_INFO> &info)
|
||||||
|
{
|
||||||
|
BYTE szBuffer[WINSTD_STACK_BUFFER_BYTES];
|
||||||
|
ULONG ulSize = sizeof(szBuffer), ulResult;
|
||||||
|
|
||||||
|
// Try with stack buffer first.
|
||||||
|
ulResult = TdhGetEventInformation(pEvent, TdhContextCount, pTdhContext, (PTRACE_EVENT_INFO)szBuffer, &ulSize);
|
||||||
|
if (ulResult == ERROR_SUCCESS) {
|
||||||
|
// Copy from stack.
|
||||||
|
info.reset((PTRACE_EVENT_INFO)new char[ulSize]);
|
||||||
|
memcpy(info.get(), szBuffer, ulSize);
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
} else if (ulResult == ERROR_INSUFFICIENT_BUFFER) {
|
||||||
|
// Create buffer on heap and retry.
|
||||||
|
info.reset((PTRACE_EVENT_INFO)new char[ulSize]);
|
||||||
|
return TdhGetEventInformation(pEvent, TdhContextCount, pTdhContext, info.get(), &ulSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ulResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline ULONG TdhGetEventMapInformation(_In_ PEVENT_RECORD pEvent, _In_ LPWSTR pMapName, _Out_ std::unique_ptr<EVENT_MAP_INFO> &info)
|
||||||
|
{
|
||||||
|
BYTE szBuffer[WINSTD_STACK_BUFFER_BYTES];
|
||||||
|
ULONG ulSize = sizeof(szBuffer), ulResult;
|
||||||
|
|
||||||
|
// Try with stack buffer first.
|
||||||
|
ulResult = TdhGetEventMapInformation(pEvent, pMapName, (PEVENT_MAP_INFO)szBuffer, &ulSize);
|
||||||
|
if (ulResult == ERROR_SUCCESS) {
|
||||||
|
// Copy from stack.
|
||||||
|
info.reset((PEVENT_MAP_INFO)new char[ulSize]);
|
||||||
|
memcpy(info.get(), szBuffer, ulSize);
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
} else if (ulResult == ERROR_INSUFFICIENT_BUFFER) {
|
||||||
|
// Create buffer on heap and retry.
|
||||||
|
info.reset((PEVENT_MAP_INFO)new char[ulSize]);
|
||||||
|
return TdhGetEventMapInformation(pEvent, pMapName, info.get(), &ulSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ulResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class _Ty, class _Ax>
|
||||||
|
inline ULONG TdhGetProperty(_In_ PEVENT_RECORD pEvent, _In_ ULONG TdhContextCount, _In_ PTDH_CONTEXT pTdhContext, _In_ ULONG PropertyDataCount, _In_ PPROPERTY_DATA_DESCRIPTOR pPropertyData, _Out_ std::vector<_Ty, _Ax> &aData)
|
||||||
|
{
|
||||||
|
ULONG ulSize, ulResult;
|
||||||
|
|
||||||
|
// Query property size.
|
||||||
|
ulResult = TdhGetPropertySize(pEvent, TdhContextCount, pTdhContext, PropertyDataCount, pPropertyData, &ulSize);
|
||||||
|
if (ulResult == ERROR_SUCCESS) {
|
||||||
|
// Query property value.
|
||||||
|
aData.resize((ulSize + sizeof(_Ty) - 1) / sizeof(_Ty));
|
||||||
|
ulResult = TdhGetProperty(pEvent, TdhContextCount, pTdhContext, PropertyDataCount, pPropertyData, ulSize, (LPBYTE)aData.data());
|
||||||
|
}
|
||||||
|
|
||||||
|
return ulResult;
|
||||||
}
|
}
|
||||||
|
@ -23,15 +23,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace winstd
|
|
||||||
{
|
|
||||||
class WINSTD_API hex_enc;
|
|
||||||
class WINSTD_API hex_dec;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
|
|
||||||
namespace winstd
|
namespace winstd
|
||||||
{
|
{
|
||||||
///
|
///
|
||||||
@ -43,6 +34,21 @@ namespace winstd
|
|||||||
///
|
///
|
||||||
/// Hexadecimal encoding session
|
/// Hexadecimal encoding session
|
||||||
///
|
///
|
||||||
|
class WINSTD_API hex_enc;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Hexadecimal decoding session
|
||||||
|
///
|
||||||
|
class WINSTD_API hex_dec;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
namespace winstd
|
||||||
|
{
|
||||||
class WINSTD_API hex_enc
|
class WINSTD_API hex_enc
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -96,9 +102,6 @@ namespace winstd
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Hexadecimal decoding session
|
|
||||||
///
|
|
||||||
class WINSTD_API hex_dec
|
class WINSTD_API hex_dec
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -183,6 +186,4 @@ namespace winstd
|
|||||||
unsigned char buf; ///< Internal buffer
|
unsigned char buf; ///< Internal buffer
|
||||||
size_t num; ///< Number of nibbles used in `buf`
|
size_t num; ///< Number of nibbles used in `buf`
|
||||||
};
|
};
|
||||||
|
|
||||||
/// @}
|
|
||||||
}
|
}
|
||||||
|
@ -25,21 +25,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
template<class _Elem, class _Traits, class _Ax> inline UINT MsiGetPropertyA(_In_ MSIHANDLE hInstall, _In_ LPCSTR szName, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
|
||||||
template<class _Elem, class _Traits, class _Ax> inline UINT MsiGetPropertyW(_In_ MSIHANDLE hInstall, _In_ LPCWSTR szName, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
|
||||||
template<class _Elem, class _Traits, class _Ax> inline UINT MsiRecordGetStringA(_In_ MSIHANDLE hRecord, _In_ unsigned int iField, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
|
||||||
template<class _Elem, class _Traits, class _Ax> inline UINT MsiRecordGetStringW(_In_ MSIHANDLE hRecord, _In_ unsigned int iField, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
|
||||||
template<class _Elem, class _Traits, class _Ax> inline UINT MsiFormatRecordA(MSIHANDLE hInstall, MSIHANDLE hRecord, std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
|
||||||
template<class _Elem, class _Traits, class _Ax> inline UINT MsiFormatRecordW(MSIHANDLE hInstall, MSIHANDLE hRecord, std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
|
||||||
template<class _Ty, class _Ax> inline UINT MsiRecordReadStream(_In_ MSIHANDLE hRecord, _In_ unsigned int iField, _Out_ std::vector<_Ty, _Ax> &binData);
|
|
||||||
template<class _Elem, class _Traits, class _Ax> inline UINT MsiGetTargetPathA(_In_ MSIHANDLE hInstall, _In_ LPCSTR szFolder, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
|
||||||
template<class _Elem, class _Traits, class _Ax> inline UINT MsiGetTargetPathW(_In_ MSIHANDLE hInstall, _In_ LPCWSTR szFolder, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
|
||||||
template<class _Elem, class _Traits, class _Ax> inline INSTALLSTATE MsiGetComponentPathA(_In_ LPCSTR szProduct, _In_ LPCSTR szComponent, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
|
||||||
template<class _Elem, class _Traits, class _Ax> inline INSTALLSTATE MsiGetComponentPathW(_In_ LPCWSTR szProduct, _In_ LPCWSTR szComponent, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// \defgroup WinStdMSIAPI Microsoft Installer API
|
/// \defgroup WinStdMSIAPI Microsoft Installer API
|
||||||
/// Integrates WinStd classes with Microsoft Installer API
|
/// Integrates WinStd classes with Microsoft Installer API
|
||||||
@ -51,6 +36,83 @@ template<class _Elem, class _Traits, class _Ax> inline INSTALLSTATE MsiGetCompon
|
|||||||
///
|
///
|
||||||
/// \sa [MsiGetProperty function](https://msdn.microsoft.com/en-us/library/aa370134.aspx)
|
/// \sa [MsiGetProperty function](https://msdn.microsoft.com/en-us/library/aa370134.aspx)
|
||||||
///
|
///
|
||||||
|
template<class _Elem, class _Traits, class _Ax> inline UINT MsiGetPropertyA(_In_ MSIHANDLE hInstall, _In_ LPCSTR szName, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Gets the value for an installer property and stores it in a std::wstring string.
|
||||||
|
///
|
||||||
|
/// \sa [MsiGetProperty function](https://msdn.microsoft.com/en-us/library/aa370134.aspx)
|
||||||
|
///
|
||||||
|
template<class _Elem, class _Traits, class _Ax> inline UINT MsiGetPropertyW(_In_ MSIHANDLE hInstall, _In_ LPCWSTR szName, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns the string value of a record field and stores it in a std::string string.
|
||||||
|
///
|
||||||
|
/// \sa [MsiRecordGetString function](https://msdn.microsoft.com/en-us/library/aa370368.aspx)
|
||||||
|
///
|
||||||
|
template<class _Elem, class _Traits, class _Ax> inline UINT MsiRecordGetStringA(_In_ MSIHANDLE hRecord, _In_ unsigned int iField, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns the string value of a record field and stores it in a std::wstring string.
|
||||||
|
///
|
||||||
|
/// \sa [MsiRecordGetString function](https://msdn.microsoft.com/en-us/library/aa370368.aspx)
|
||||||
|
///
|
||||||
|
template<class _Elem, class _Traits, class _Ax> inline UINT MsiRecordGetStringW(_In_ MSIHANDLE hRecord, _In_ unsigned int iField, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Formats record field data and properties using a format string and stores it in a std::string string.
|
||||||
|
///
|
||||||
|
/// \sa [MsiFormatRecord function](https://msdn.microsoft.com/en-us/library/aa370109.aspx)
|
||||||
|
///
|
||||||
|
template<class _Elem, class _Traits, class _Ax> inline UINT MsiFormatRecordA(MSIHANDLE hInstall, MSIHANDLE hRecord, std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Formats record field data and properties using a format string and stores it in a std::wstring string.
|
||||||
|
///
|
||||||
|
/// \sa [MsiFormatRecord function](https://msdn.microsoft.com/en-us/library/aa370109.aspx)
|
||||||
|
///
|
||||||
|
template<class _Elem, class _Traits, class _Ax> inline UINT MsiFormatRecordW(MSIHANDLE hInstall, MSIHANDLE hRecord, std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Reads bytes from a record stream field into a std::vector buffer.
|
||||||
|
///
|
||||||
|
/// \sa [MsiRecordReadStream function](https://msdn.microsoft.com/en-us/library/aa370370.aspx)
|
||||||
|
///
|
||||||
|
template<class _Ty, class _Ax> inline UINT MsiRecordReadStream(_In_ MSIHANDLE hRecord, _In_ unsigned int iField, _Out_ std::vector<_Ty, _Ax> &binData);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns the full target path for a folder in the Directory table and stores it in a std::string string.
|
||||||
|
///
|
||||||
|
/// \sa [MsiGetTargetPath function](https://msdn.microsoft.com/en-us/library/aa370303.aspx)
|
||||||
|
///
|
||||||
|
template<class _Elem, class _Traits, class _Ax> inline UINT MsiGetTargetPathA(_In_ MSIHANDLE hInstall, _In_ LPCSTR szFolder, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns the full target path for a folder in the Directory table and stores it in a std::wstring string.
|
||||||
|
///
|
||||||
|
/// \sa [MsiGetTargetPath function](https://msdn.microsoft.com/en-us/library/aa370303.aspx)
|
||||||
|
///
|
||||||
|
template<class _Elem, class _Traits, class _Ax> inline UINT MsiGetTargetPathW(_In_ MSIHANDLE hInstall, _In_ LPCWSTR szFolder, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns the full path to an installed component. If the key path for the component is a registry key then the registry key is returned.
|
||||||
|
///
|
||||||
|
/// \sa [MsiGetComponentPath function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa370112.aspx)
|
||||||
|
///
|
||||||
|
template<class _Elem, class _Traits, class _Ax> inline INSTALLSTATE MsiGetComponentPathA(_In_ LPCSTR szProduct, _In_ LPCSTR szComponent, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns the full path to an installed component. If the key path for the component is a registry key then the registry key is returned.
|
||||||
|
///
|
||||||
|
/// \sa [MsiGetComponentPath function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa370112.aspx)
|
||||||
|
///
|
||||||
|
template<class _Elem, class _Traits, class _Ax> inline INSTALLSTATE MsiGetComponentPathW(_In_ LPCWSTR szProduct, _In_ LPCWSTR szComponent, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline UINT MsiGetPropertyA(_In_ MSIHANDLE hInstall, _In_ LPCSTR szName, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue)
|
inline UINT MsiGetPropertyA(_In_ MSIHANDLE hInstall, _In_ LPCSTR szName, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue)
|
||||||
{
|
{
|
||||||
@ -79,11 +141,6 @@ inline UINT MsiGetPropertyA(_In_ MSIHANDLE hInstall, _In_ LPCSTR szName, _Out_ s
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Gets the value for an installer property and stores it in a std::wstring string.
|
|
||||||
///
|
|
||||||
/// \sa [MsiGetProperty function](https://msdn.microsoft.com/en-us/library/aa370134.aspx)
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline UINT MsiGetPropertyW(_In_ MSIHANDLE hInstall, _In_ LPCWSTR szName, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue)
|
inline UINT MsiGetPropertyW(_In_ MSIHANDLE hInstall, _In_ LPCWSTR szName, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue)
|
||||||
{
|
{
|
||||||
@ -112,11 +169,6 @@ inline UINT MsiGetPropertyW(_In_ MSIHANDLE hInstall, _In_ LPCWSTR szName, _Out_
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Returns the string value of a record field and stores it in a std::string string.
|
|
||||||
///
|
|
||||||
/// \sa [MsiRecordGetString function](https://msdn.microsoft.com/en-us/library/aa370368.aspx)
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline UINT MsiRecordGetStringA(_In_ MSIHANDLE hRecord, _In_ unsigned int iField, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue)
|
inline UINT MsiRecordGetStringA(_In_ MSIHANDLE hRecord, _In_ unsigned int iField, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue)
|
||||||
{
|
{
|
||||||
@ -145,11 +197,6 @@ inline UINT MsiRecordGetStringA(_In_ MSIHANDLE hRecord, _In_ unsigned int iField
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Returns the string value of a record field and stores it in a std::wstring string.
|
|
||||||
///
|
|
||||||
/// \sa [MsiRecordGetString function](https://msdn.microsoft.com/en-us/library/aa370368.aspx)
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline UINT MsiRecordGetStringW(_In_ MSIHANDLE hRecord, _In_ unsigned int iField, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue)
|
inline UINT MsiRecordGetStringW(_In_ MSIHANDLE hRecord, _In_ unsigned int iField, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue)
|
||||||
{
|
{
|
||||||
@ -178,11 +225,6 @@ inline UINT MsiRecordGetStringW(_In_ MSIHANDLE hRecord, _In_ unsigned int iField
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Formats record field data and properties using a format string and stores it in a std::string string.
|
|
||||||
///
|
|
||||||
/// \sa [MsiFormatRecord function](https://msdn.microsoft.com/en-us/library/aa370109.aspx)
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline UINT MsiFormatRecordA(MSIHANDLE hInstall, MSIHANDLE hRecord, std::basic_string<_Elem, _Traits, _Ax> &sValue)
|
inline UINT MsiFormatRecordA(MSIHANDLE hInstall, MSIHANDLE hRecord, std::basic_string<_Elem, _Traits, _Ax> &sValue)
|
||||||
{
|
{
|
||||||
@ -211,11 +253,6 @@ inline UINT MsiFormatRecordA(MSIHANDLE hInstall, MSIHANDLE hRecord, std::basic_s
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Formats record field data and properties using a format string and stores it in a std::wstring string.
|
|
||||||
///
|
|
||||||
/// \sa [MsiFormatRecord function](https://msdn.microsoft.com/en-us/library/aa370109.aspx)
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline UINT MsiFormatRecordW(MSIHANDLE hInstall, MSIHANDLE hRecord, std::basic_string<_Elem, _Traits, _Ax> &sValue)
|
inline UINT MsiFormatRecordW(MSIHANDLE hInstall, MSIHANDLE hRecord, std::basic_string<_Elem, _Traits, _Ax> &sValue)
|
||||||
{
|
{
|
||||||
@ -244,11 +281,6 @@ inline UINT MsiFormatRecordW(MSIHANDLE hInstall, MSIHANDLE hRecord, std::basic_s
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Reads bytes from a record stream field into a std::vector buffer.
|
|
||||||
///
|
|
||||||
/// \sa [MsiRecordReadStream function](https://msdn.microsoft.com/en-us/library/aa370370.aspx)
|
|
||||||
///
|
|
||||||
template<class _Ty, class _Ax>
|
template<class _Ty, class _Ax>
|
||||||
inline UINT MsiRecordReadStream(_In_ MSIHANDLE hRecord, _In_ unsigned int iField, _Out_ std::vector<_Ty, _Ax> &binData)
|
inline UINT MsiRecordReadStream(_In_ MSIHANDLE hRecord, _In_ unsigned int iField, _Out_ std::vector<_Ty, _Ax> &binData)
|
||||||
{
|
{
|
||||||
@ -269,11 +301,6 @@ inline UINT MsiRecordReadStream(_In_ MSIHANDLE hRecord, _In_ unsigned int iField
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Returns the full target path for a folder in the Directory table and stores it in a std::string string.
|
|
||||||
///
|
|
||||||
/// \sa [MsiGetTargetPath function](https://msdn.microsoft.com/en-us/library/aa370303.aspx)
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline UINT MsiGetTargetPathA(_In_ MSIHANDLE hInstall, _In_ LPCSTR szFolder, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue)
|
inline UINT MsiGetTargetPathA(_In_ MSIHANDLE hInstall, _In_ LPCSTR szFolder, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue)
|
||||||
{
|
{
|
||||||
@ -302,11 +329,6 @@ inline UINT MsiGetTargetPathA(_In_ MSIHANDLE hInstall, _In_ LPCSTR szFolder, _Ou
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Returns the full target path for a folder in the Directory table and stores it in a std::wstring string.
|
|
||||||
///
|
|
||||||
/// \sa [MsiGetTargetPath function](https://msdn.microsoft.com/en-us/library/aa370303.aspx)
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline UINT MsiGetTargetPathW(_In_ MSIHANDLE hInstall, _In_ LPCWSTR szFolder, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue)
|
inline UINT MsiGetTargetPathW(_In_ MSIHANDLE hInstall, _In_ LPCWSTR szFolder, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue)
|
||||||
{
|
{
|
||||||
@ -335,11 +357,6 @@ inline UINT MsiGetTargetPathW(_In_ MSIHANDLE hInstall, _In_ LPCWSTR szFolder, _O
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Returns the full path to an installed component. If the key path for the component is a registry key then the registry key is returned.
|
|
||||||
///
|
|
||||||
/// \sa [MsiGetComponentPath function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa370112.aspx)
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline INSTALLSTATE MsiGetComponentPathA(_In_ LPCSTR szProduct, _In_ LPCSTR szComponent, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue)
|
inline INSTALLSTATE MsiGetComponentPathA(_In_ LPCSTR szProduct, _In_ LPCSTR szComponent, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue)
|
||||||
{
|
{
|
||||||
@ -366,11 +383,6 @@ inline INSTALLSTATE MsiGetComponentPathA(_In_ LPCSTR szProduct, _In_ LPCSTR szCo
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Returns the full path to an installed component. If the key path for the component is a registry key then the registry key is returned.
|
|
||||||
///
|
|
||||||
/// \sa [MsiGetComponentPath function](https://msdn.microsoft.com/en-us/library/windows/desktop/aa370112.aspx)
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline INSTALLSTATE MsiGetComponentPathW(_In_ LPCWSTR szProduct, _In_ LPCWSTR szComponent, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue)
|
inline INSTALLSTATE MsiGetComponentPathW(_In_ LPCWSTR szProduct, _In_ LPCWSTR szComponent, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue)
|
||||||
{
|
{
|
||||||
@ -395,5 +407,3 @@ inline INSTALLSTATE MsiGetComponentPathW(_In_ LPCWSTR szProduct, _In_ LPCWSTR sz
|
|||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @}
|
|
||||||
|
@ -24,23 +24,48 @@
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
template<class _Elem, class _Traits, class _Ax> BOOLEAN GetUserNameExA(_In_ EXTENDED_NAME_FORMAT NameFormat, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sName);
|
|
||||||
template<class _Elem, class _Traits, class _Ax> BOOLEAN GetUserNameExW(_In_ EXTENDED_NAME_FORMAT NameFormat, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sName);
|
|
||||||
namespace winstd
|
namespace winstd
|
||||||
{
|
{
|
||||||
|
///
|
||||||
|
/// \defgroup WinStdSecurityAPI Security API
|
||||||
|
/// Integrates WinStd classes with Microsoft Security API
|
||||||
|
///
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// PCredHandle wrapper class
|
||||||
|
///
|
||||||
class WINSTD_API sec_credentials;
|
class WINSTD_API sec_credentials;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// PCtxtHandle wrapper class
|
||||||
|
///
|
||||||
class WINSTD_API sec_context;
|
class WINSTD_API sec_context;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// SecBufferDesc wrapper class
|
||||||
|
///
|
||||||
class WINSTD_API sec_buffer_desc;
|
class WINSTD_API sec_buffer_desc;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// \defgroup WinStdExceptions Exceptions
|
||||||
|
/// Additional exceptions
|
||||||
|
///
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Security runtime error
|
||||||
|
///
|
||||||
|
/// \note Must be defined as derived class from num_runtime_error<> to allow correct type info for dynamic typecasting and prevent folding with other derivates of num_runtime_error<>.
|
||||||
|
///
|
||||||
class WINSTD_API sec_runtime_error;
|
class WINSTD_API sec_runtime_error;
|
||||||
|
|
||||||
|
/// @}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma once
|
/// \addtogroup WinStdSecurityAPI
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// \defgroup WinStdSecurityAPI Security API
|
|
||||||
/// Integrates WinStd classes with Microsoft Security API
|
|
||||||
///
|
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -48,76 +73,22 @@ namespace winstd
|
|||||||
///
|
///
|
||||||
/// \sa [GetUserNameEx function](https://msdn.microsoft.com/en-us/library/windows/desktop/ms724435.aspx)
|
/// \sa [GetUserNameEx function](https://msdn.microsoft.com/en-us/library/windows/desktop/ms724435.aspx)
|
||||||
///
|
///
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax> BOOLEAN GetUserNameExA(_In_ EXTENDED_NAME_FORMAT NameFormat, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sName);
|
||||||
BOOLEAN GetUserNameExA(_In_ EXTENDED_NAME_FORMAT NameFormat, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sName)
|
|
||||||
{
|
|
||||||
assert(0); // TODO: Test this code.
|
|
||||||
|
|
||||||
_Elem szStackBuffer[WINSTD_STACK_BUFFER_BYTES/sizeof(_Elem)];
|
|
||||||
ULONG ulSize = _countof(szStackBuffer);
|
|
||||||
|
|
||||||
// Try with stack buffer first.
|
|
||||||
if (::GetUserNameExA(NameFormat, szStackBuffer, &ulSize)) {
|
|
||||||
// Copy from stack.
|
|
||||||
sName.assign(szStackBuffer, ulSize);
|
|
||||||
return TRUE;
|
|
||||||
} else {
|
|
||||||
if (::GetLastError() == ERROR_MORE_DATA) {
|
|
||||||
// Allocate buffer on heap and retry.
|
|
||||||
auto szBuffer = std::unique_ptr<_Elem[]>(new _Elem[ulSize]);
|
|
||||||
if (::GetUserNameExA(NameFormat, szBuffer.get(), &ulSize)) {
|
|
||||||
sName.assign(szBuffer.get(), ulSize);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sName.clear();
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Retrieves the name of the user or other security principal associated with the calling thread and stores it in a std::wstring string.
|
/// Retrieves the name of the user or other security principal associated with the calling thread and stores it in a std::wstring string.
|
||||||
///
|
///
|
||||||
/// \sa [GetUserNameEx function](https://msdn.microsoft.com/en-us/library/windows/desktop/ms724435.aspx)
|
/// \sa [GetUserNameEx function](https://msdn.microsoft.com/en-us/library/windows/desktop/ms724435.aspx)
|
||||||
///
|
///
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax> BOOLEAN GetUserNameExW(_In_ EXTENDED_NAME_FORMAT NameFormat, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sName);
|
||||||
BOOLEAN GetUserNameExW(_In_ EXTENDED_NAME_FORMAT NameFormat, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sName)
|
|
||||||
{
|
|
||||||
assert(0); // TODO: Test this code.
|
|
||||||
|
|
||||||
_Elem szStackBuffer[WINSTD_STACK_BUFFER_BYTES/sizeof(_Elem)];
|
|
||||||
ULONG ulSize = _countof(szStackBuffer);
|
|
||||||
|
|
||||||
// Try with stack buffer first.
|
|
||||||
if (::GetUserNameExW(NameFormat, szStackBuffer, &ulSize)) {
|
|
||||||
// Copy from stack.
|
|
||||||
sName.assign(szStackBuffer, ulSize);
|
|
||||||
return TRUE;
|
|
||||||
} else {
|
|
||||||
if (::GetLastError() == ERROR_MORE_DATA) {
|
|
||||||
// Allocate buffer on heap and retry.
|
|
||||||
auto szBuffer = std::unique_ptr<_Elem[]>(new _Elem[ulSize]);
|
|
||||||
if (::GetUserNameExW(NameFormat, szBuffer.get(), &ulSize)) {
|
|
||||||
sName.assign(szBuffer.get(), ulSize);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sName.clear();
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
namespace winstd
|
namespace winstd
|
||||||
{
|
{
|
||||||
/// \addtogroup WinStdSecurityAPI
|
|
||||||
/// @{
|
|
||||||
|
|
||||||
class WINSTD_API sec_credentials : public handle<PCredHandle>
|
class WINSTD_API sec_credentials : public handle<PCredHandle>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -345,20 +316,7 @@ namespace winstd
|
|||||||
virtual ~sec_buffer_desc();
|
virtual ~sec_buffer_desc();
|
||||||
};
|
};
|
||||||
|
|
||||||
/// @}
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// \defgroup WinStdExceptions Exceptions
|
|
||||||
/// Additional exceptions
|
|
||||||
///
|
|
||||||
/// @{
|
|
||||||
|
|
||||||
///
|
|
||||||
/// COM runtime error
|
|
||||||
///
|
|
||||||
/// \note Must be defined as derived class from num_runtime_error<> to allow correct type info for dynamic typecasting and prevent folding with other derivates of num_runtime_error<>.
|
|
||||||
///
|
|
||||||
class WINSTD_API sec_runtime_error : public num_runtime_error<SECURITY_STATUS>
|
class WINSTD_API sec_runtime_error : public num_runtime_error<SECURITY_STATUS>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -393,6 +351,62 @@ namespace winstd
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
}
|
||||||
/// @}
|
|
||||||
|
|
||||||
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
|
BOOLEAN GetUserNameExA(_In_ EXTENDED_NAME_FORMAT NameFormat, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sName)
|
||||||
|
{
|
||||||
|
assert(0); // TODO: Test this code.
|
||||||
|
|
||||||
|
_Elem szStackBuffer[WINSTD_STACK_BUFFER_BYTES/sizeof(_Elem)];
|
||||||
|
ULONG ulSize = _countof(szStackBuffer);
|
||||||
|
|
||||||
|
// Try with stack buffer first.
|
||||||
|
if (::GetUserNameExA(NameFormat, szStackBuffer, &ulSize)) {
|
||||||
|
// Copy from stack.
|
||||||
|
sName.assign(szStackBuffer, ulSize);
|
||||||
|
return TRUE;
|
||||||
|
} else {
|
||||||
|
if (::GetLastError() == ERROR_MORE_DATA) {
|
||||||
|
// Allocate buffer on heap and retry.
|
||||||
|
auto szBuffer = std::unique_ptr<_Elem[]>(new _Elem[ulSize]);
|
||||||
|
if (::GetUserNameExA(NameFormat, szBuffer.get(), &ulSize)) {
|
||||||
|
sName.assign(szBuffer.get(), ulSize);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sName.clear();
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
|
BOOLEAN GetUserNameExW(_In_ EXTENDED_NAME_FORMAT NameFormat, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sName)
|
||||||
|
{
|
||||||
|
assert(0); // TODO: Test this code.
|
||||||
|
|
||||||
|
_Elem szStackBuffer[WINSTD_STACK_BUFFER_BYTES/sizeof(_Elem)];
|
||||||
|
ULONG ulSize = _countof(szStackBuffer);
|
||||||
|
|
||||||
|
// Try with stack buffer first.
|
||||||
|
if (::GetUserNameExW(NameFormat, szStackBuffer, &ulSize)) {
|
||||||
|
// Copy from stack.
|
||||||
|
sName.assign(szStackBuffer, ulSize);
|
||||||
|
return TRUE;
|
||||||
|
} else {
|
||||||
|
if (::GetLastError() == ERROR_MORE_DATA) {
|
||||||
|
// Allocate buffer on heap and retry.
|
||||||
|
auto szBuffer = std::unique_ptr<_Elem[]>(new _Elem[ulSize]);
|
||||||
|
if (::GetUserNameExW(NameFormat, szBuffer.get(), &ulSize)) {
|
||||||
|
sName.assign(szBuffer.get(), ulSize);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sName.clear();
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -24,12 +24,6 @@
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
template<class _Elem, class _Traits, class _Ax> inline BOOL PathCanonicalizeA(__out std::basic_string<_Elem, _Traits, _Ax> &sValue, __in LPCSTR pszPath);
|
|
||||||
template<class _Elem, class _Traits, class _Ax> inline BOOL PathCanonicalizeW(__out std::basic_string<_Elem, _Traits, _Ax> &sValue, __in LPCWSTR pszPath);
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// \defgroup WinStdShellWAPI Shell API
|
/// \defgroup WinStdShellWAPI Shell API
|
||||||
/// Integrates WinStd classes with Microsoft Shell API
|
/// Integrates WinStd classes with Microsoft Shell API
|
||||||
@ -41,6 +35,20 @@ template<class _Elem, class _Traits, class _Ax> inline BOOL PathCanonicalizeW(__
|
|||||||
///
|
///
|
||||||
/// \sa [PathCanonicalize function](https://msdn.microsoft.com/en-us/library/windows/desktop/bb773569.aspx)
|
/// \sa [PathCanonicalize function](https://msdn.microsoft.com/en-us/library/windows/desktop/bb773569.aspx)
|
||||||
///
|
///
|
||||||
|
template<class _Elem, class _Traits, class _Ax> inline BOOL PathCanonicalizeA(__out std::basic_string<_Elem, _Traits, _Ax> &sValue, __in LPCSTR pszPath);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Simplifies a path by removing navigation elements such as "." and ".." to produce a direct, well-formed path, and stores it in a std::wstring string.
|
||||||
|
///
|
||||||
|
/// \sa [PathCanonicalize function](https://msdn.microsoft.com/en-us/library/windows/desktop/bb773569.aspx)
|
||||||
|
///
|
||||||
|
template<class _Elem, class _Traits, class _Ax> inline BOOL PathCanonicalizeW(__out std::basic_string<_Elem, _Traits, _Ax> &sValue, __in LPCWSTR pszPath);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline BOOL PathCanonicalizeA(__out std::basic_string<_Elem, _Traits, _Ax> &sValue, __in LPCSTR pszPath)
|
inline BOOL PathCanonicalizeA(__out std::basic_string<_Elem, _Traits, _Ax> &sValue, __in LPCSTR pszPath)
|
||||||
{
|
{
|
||||||
@ -54,11 +62,6 @@ inline BOOL PathCanonicalizeA(__out std::basic_string<_Elem, _Traits, _Ax> &sVal
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Simplifies a path by removing navigation elements such as "." and ".." to produce a direct, well-formed path, and stores it in a std::wstring string.
|
|
||||||
///
|
|
||||||
/// \sa [PathCanonicalize function](https://msdn.microsoft.com/en-us/library/windows/desktop/bb773569.aspx)
|
|
||||||
///
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline BOOL PathCanonicalizeW(__out std::basic_string<_Elem, _Traits, _Ax> &sValue, __in LPCWSTR pszPath)
|
inline BOOL PathCanonicalizeW(__out std::basic_string<_Elem, _Traits, _Ax> &sValue, __in LPCWSTR pszPath)
|
||||||
{
|
{
|
||||||
@ -69,5 +72,3 @@ inline BOOL PathCanonicalizeW(__out std::basic_string<_Elem, _Traits, _Ax> &sVal
|
|||||||
sValue.assign(szBuffer, bResult ? MAX_PATH : 0);
|
sValue.assign(szBuffer, bResult ? MAX_PATH : 0);
|
||||||
return bResult;
|
return bResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @}
|
|
||||||
|
@ -28,11 +28,6 @@
|
|||||||
// without a WLAN interface.
|
// without a WLAN interface.
|
||||||
extern DWORD (WINAPI *pfnWlanReasonCodeToString)(__in DWORD dwReasonCode, __in DWORD dwBufferSize, __in_ecount(dwBufferSize) PWCHAR pStringBuffer, __reserved PVOID pReserved);
|
extern DWORD (WINAPI *pfnWlanReasonCodeToString)(__in DWORD dwReasonCode, __in DWORD dwBufferSize, __in_ecount(dwBufferSize) PWCHAR pStringBuffer, __reserved PVOID pReserved);
|
||||||
|
|
||||||
template<class _Elem, class _Traits, class _Ax> inline DWORD WlanReasonCodeToString(_In_ DWORD dwReasonCode, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue, __reserved PVOID pReserved);
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// \defgroup WinStdWLANAPI WLAN API
|
/// \defgroup WinStdWLANAPI WLAN API
|
||||||
/// Integrates WinStd classes with Microsoft WLAN API
|
/// Integrates WinStd classes with Microsoft WLAN API
|
||||||
@ -48,6 +43,13 @@ template<class _Elem, class _Traits, class _Ax> inline DWORD WlanReasonCodeToStr
|
|||||||
/// Since Wlanapi.dll is not always present, the \c pfnWlanReasonCodeToString pointer to \c WlanReasonCodeToString
|
/// Since Wlanapi.dll is not always present, the \c pfnWlanReasonCodeToString pointer to \c WlanReasonCodeToString
|
||||||
/// function must be loaded dynamically.
|
/// function must be loaded dynamically.
|
||||||
///
|
///
|
||||||
|
template<class _Elem, class _Traits, class _Ax> inline DWORD WlanReasonCodeToString(_In_ DWORD dwReasonCode, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue, __reserved PVOID pReserved);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
template<class _Elem, class _Traits, class _Ax>
|
template<class _Elem, class _Traits, class _Ax>
|
||||||
inline DWORD WlanReasonCodeToString(_In_ DWORD dwReasonCode, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue, __reserved PVOID pReserved)
|
inline DWORD WlanReasonCodeToString(_In_ DWORD dwReasonCode, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue, __reserved PVOID pReserved)
|
||||||
{
|
{
|
||||||
@ -77,5 +79,3 @@ inline DWORD WlanReasonCodeToString(_In_ DWORD dwReasonCode, _Out_ std::basic_st
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @}
|
|
||||||
|
1488
include/WinStd/Win.h
1488
include/WinStd/Win.h
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user