Files
YY-Thunks/src/YY-Thunks.UnitTest/credui.UnitTest.cpp
T
mingkuang 7cf78f9dba Fea #138, 添加credui相关接口
- 添加 CredUIPromptForWindowsCredentialsW(A)
  - 添加 CredPackAuthenticationBufferW(A)
  - 添加 CredUnPackAuthenticationBufferW(A)
2026-05-11 14:30:34 +08:00

171 lines
5.8 KiB
C++

#include "pch.h"
#include "Thunks/credui.hpp"
namespace Credui
{
TEST_CLASS(CredPackAuthenticationBufferW)
{
AwaysNullGuard Guard;
public:
CredPackAuthenticationBufferW()
{
Guard |= YY::Thunks::aways_null_try_get_CredPackAuthenticationBufferW;
Guard |= YY::Thunks::aways_null_try_get_CredUnPackAuthenticationBufferW;
}
TEST_METHOD(打包并解包)
{
WCHAR _szUser[] = L"Domain\\User";
WCHAR _szPassword[] = L"P@ssw0rd";
DWORD _cbPacked = 0;
Assert::IsTrue(::CredPackAuthenticationBufferW(0, _szUser, _szPassword, nullptr, &_cbPacked));
Assert::IsTrue(_cbPacked > 0);
std::vector<BYTE> _Packed(_cbPacked);
Assert::IsTrue(::CredPackAuthenticationBufferW(0, _szUser, _szPassword, _Packed.data(), &_cbPacked));
WCHAR _szUnpackUser[CREDUI_MAX_USERNAME_LENGTH + 1] = {};
WCHAR _szUnpackDomain[CREDUI_MAX_DOMAIN_TARGET_LENGTH + 1] = {};
WCHAR _szUnpackPassword[CREDUI_MAX_PASSWORD_LENGTH + 1] = {};
DWORD _cchUser = _countof(_szUnpackUser);
DWORD _cchDomain = _countof(_szUnpackDomain);
DWORD _cchPassword = _countof(_szUnpackPassword);
Assert::IsTrue(::CredUnPackAuthenticationBufferW(
0,
_Packed.data(),
_cbPacked,
_szUnpackUser,
&_cchUser,
_szUnpackDomain,
&_cchDomain,
_szUnpackPassword,
&_cchPassword));
Assert::IsTrue(wcscmp(_szUnpackUser, _szUser) == 0);
Assert::IsTrue(wcscmp(_szUnpackDomain, L"Domain") == 0);
Assert::IsTrue(wcscmp(_szUnpackPassword, _szPassword) == 0);
}
TEST_METHOD(缓冲区不足)
{
WCHAR _szUser[] = L"A";
WCHAR _szPassword[] = L"B";
BYTE _Packed[8] = {};
DWORD _cbPacked = _countof(_Packed);
Assert::IsFalse(::CredPackAuthenticationBufferW(0, _szUser, _szPassword, _Packed, &_cbPacked));
Assert::AreEqual(DWORD(ERROR_INSUFFICIENT_BUFFER), GetLastError());
Assert::IsTrue(_cbPacked > _countof(_Packed));
}
};
TEST_CLASS(CredPackAuthenticationBufferA)
{
AwaysNullGuard Guard;
public:
CredPackAuthenticationBufferA()
{
Guard |= YY::Thunks::aways_null_try_get_CredPackAuthenticationBufferA;
Guard |= YY::Thunks::aways_null_try_get_CredUnPackAuthenticationBufferA;
}
TEST_METHOD(打包并解包)
{
CHAR _szUser[] = "Domain\\User";
CHAR _szPassword[] = "P@ssw0rd";
DWORD _cbPacked = 0;
Assert::IsTrue(::CredPackAuthenticationBufferA(0, _szUser, _szPassword, nullptr, &_cbPacked));
Assert::IsTrue(_cbPacked > 0);
std::vector<BYTE> _Packed(_cbPacked);
Assert::IsTrue(::CredPackAuthenticationBufferA(0, _szUser, _szPassword, _Packed.data(), &_cbPacked));
CHAR _szUnpackUser[CREDUI_MAX_USERNAME_LENGTH + 1] = {};
CHAR _szUnpackDomain[CREDUI_MAX_DOMAIN_TARGET_LENGTH + 1] = {};
CHAR _szUnpackPassword[CREDUI_MAX_PASSWORD_LENGTH + 1] = {};
DWORD _cchUser = _countof(_szUnpackUser);
DWORD _cchDomain = _countof(_szUnpackDomain);
DWORD _cchPassword = _countof(_szUnpackPassword);
Assert::IsTrue(::CredUnPackAuthenticationBufferA(
0,
_Packed.data(),
_cbPacked,
_szUnpackUser,
&_cchUser,
_szUnpackDomain,
&_cchDomain,
_szUnpackPassword,
&_cchPassword));
Assert::IsTrue(strcmp(_szUnpackUser, _szUser) == 0);
Assert::IsTrue(strcmp(_szUnpackDomain, "Domain") == 0);
Assert::IsTrue(strcmp(_szUnpackPassword, _szPassword) == 0);
}
TEST_METHOD(缓冲区不足)
{
CHAR _szUser[] = "A";
CHAR _szPassword[] = "B";
BYTE _Packed[8] = {};
DWORD _cbPacked = _countof(_Packed);
Assert::IsFalse(::CredPackAuthenticationBufferA(0, _szUser, _szPassword, _Packed, &_cbPacked));
Assert::AreEqual(DWORD(ERROR_INSUFFICIENT_BUFFER), GetLastError());
Assert::IsTrue(_cbPacked > _countof(_Packed));
}
};
TEST_CLASS(CredUIPromptForWindowsCredentialsW)
{
AwaysNullGuard Guard;
public:
CredUIPromptForWindowsCredentialsW()
{
Guard |= YY::Thunks::aways_null_try_get_CredUIPromptForWindowsCredentialsW;
}
TEST_METHOD(参数校验)
{
ULONG _uAuthPackage = 0;
ULONG _cbOutAuthBuffer = 0;
BOOL _bSave = FALSE;
LPVOID _pOutAuthBuffer = reinterpret_cast<LPVOID>(1);
auto _uResult = ::CredUIPromptForWindowsCredentialsW(
nullptr,
0,
&_uAuthPackage,
nullptr,
0,
nullptr,
&_cbOutAuthBuffer,
&_bSave,
CREDUIWIN_GENERIC);
Assert::AreEqual(DWORD(ERROR_INVALID_PARAMETER), _uResult);
_uResult = ::CredUIPromptForWindowsCredentialsW(
nullptr,
0,
&_uAuthPackage,
nullptr,
0,
&_pOutAuthBuffer,
nullptr,
&_bSave,
CREDUIWIN_GENERIC);
Assert::AreEqual(DWORD(ERROR_INVALID_PARAMETER), _uResult);
}
};
}