20template<
class _Traits,
class _Ax>
21static BOOL CredProtectA(_In_ BOOL fAsSelf, _In_count_(cchCredentials) LPCSTR pszCredentials, _In_ DWORD cchCredentials, _Inout_ std::basic_string<char, _Traits, _Ax> &sProtectedCredentials, _Out_ CRED_PROTECTION_TYPE *ProtectionType)
24 DWORD dwSize = _countof(buf);
27 if (CredProtectA(fAsSelf,
const_cast<LPSTR
>(pszCredentials), cchCredentials, buf, &dwSize, ProtectionType)) {
29 sProtectedCredentials.assign(buf, dwSize - 1);
31 }
else if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
33 std::unique_ptr<char[]> buf(
new char[dwSize]);
34 if (CredProtectA(fAsSelf,
const_cast<LPSTR
>(pszCredentials), cchCredentials, buf.get(), &dwSize, ProtectionType)) {
35 sProtectedCredentials.assign(buf.get(), dwSize - 1);
48template<
class _Traits,
class _Ax>
49static BOOL CredProtectW(_In_ BOOL fAsSelf, _In_count_(cchCredentials) LPCWSTR pszCredentials, _In_ DWORD cchCredentials, _Inout_ std::basic_string<wchar_t, _Traits, _Ax> &sProtectedCredentials, _Out_ CRED_PROTECTION_TYPE *ProtectionType)
52 DWORD dwSize = _countof(buf);
55 if (CredProtectW(fAsSelf,
const_cast<LPWSTR
>(pszCredentials), cchCredentials, buf, &dwSize, ProtectionType)) {
57 sProtectedCredentials.assign(buf, dwSize - 1);
59 }
else if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
61 std::unique_ptr<wchar_t[]> buf(
new wchar_t[dwSize]);
62 if (CredProtectW(fAsSelf,
const_cast<LPWSTR
>(pszCredentials), cchCredentials, buf.get(), &dwSize, ProtectionType)) {
63 sProtectedCredentials.assign(buf.get(), dwSize - 1);
72template<
class _Traits,
class _Ax>
73static BOOL CredUnprotectA(_In_ BOOL fAsSelf, _In_count_(cchCredentials) LPCSTR pszProtectedCredentials, _In_ DWORD cchCredentials, _Inout_ std::basic_string<char, _Traits, _Ax> &sCredentials)
76 DWORD dwSize = _countof(buf);
79 if (CredUnprotectA(fAsSelf,
const_cast<LPSTR
>(pszProtectedCredentials), cchCredentials, buf, &dwSize)) {
81 sCredentials.assign(buf, dwSize);
83 }
else if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
85 std::unique_ptr<char[]> buf(
new char[dwSize]);
86 if (CredUnprotectA(fAsSelf,
const_cast<LPSTR
>(pszProtectedCredentials), cchCredentials, buf.get(), &dwSize)) {
87 sCredentials.assign(buf.get(), dwSize);
100template<
class _Traits,
class _Ax>
101static BOOL CredUnprotectW(_In_ BOOL fAsSelf, _In_count_(cchCredentials) LPCWSTR pszProtectedCredentials, _In_ DWORD cchCredentials, _Inout_ std::basic_string<wchar_t, _Traits, _Ax> &sCredentials)
104 DWORD dwSize = _countof(buf);
107 if (CredUnprotectW(fAsSelf,
const_cast<LPWSTR
>(pszProtectedCredentials), cchCredentials, buf, &dwSize)) {
109 sCredentials.assign(buf, dwSize);
111 }
else if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
113 std::unique_ptr<wchar_t[]> buf(
new wchar_t[dwSize]);
114 if (CredUnprotectW(fAsSelf,
const_cast<LPWSTR
>(pszProtectedCredentials), cchCredentials, buf.get(), &dwSize)) {
115 sCredentials.assign(buf.get(), dwSize);
185 template<
class _Other>
203#pragma warning(suppress: 4505)
204static BOOL CredEnumerate(_In_z_ LPCTSTR Filter, _Reserved_ DWORD Flags, _Out_ DWORD *Count, _Inout_ std::unique_ptr<PCREDENTIAL[],
winstd::CredFree_delete<PCREDENTIAL[]> > &cCredentials)
noexcept
206 PCREDENTIAL *pCredentials;
207 if (CredEnumerate(Filter, Flags, Count, &pCredentials)) {
208 cCredentials.reset(pCredentials);
#define WINSTD_STACK_BUFFER_BYTES
Size of the stack buffer in bytes used for initial system function call.
Definition: Common.h:79
CredFree_delete< _Ty > _Myt
This type.
Definition: Cred.h:163
CredFree_delete()
Default construct.
Definition: Cred.h:168
void operator()(_Other *) const
Delete a pointer of another type.
Definition: Cred.h:186
void operator()(_Ty *_Ptr) const noexcept
Delete a pointer.
Definition: Cred.h:175
Deleter for unique_ptr using CredFree.
Definition: Cred.h:134
void operator()(_Ty *_Ptr) const
Delete a pointer.
Definition: Cred.h:152
CredFree_delete()
Default construct.
Definition: Cred.h:140
CredFree_delete< _Ty > _Myt
This type.
Definition: Cred.h:135
CredFree_delete(const CredFree_delete< _Ty2 > &)
Construct from another CredFree_delete.
Definition: Cred.h:145