1
0
mirror of https://github.com/rbmm/SC synced 2026-06-08 17:03:41 +00:00
Files
rbmm bc7e3e123d ++
2025-02-08 16:01:22 +02:00

64 lines
1.2 KiB
C++

#include "stdafx.h"
#include "print.h"
void PrintUTF8(PCSTR pcsz, ULONG len)
{
HANDLE hFile = GetStdHandle(STD_OUTPUT_HANDLE);
switch ((ULONG_PTR)hFile)
{
case 0:
case (ULONG_PTR)INVALID_HANDLE_VALUE:
return;
}
WriteFile(hFile, pcsz, len, &len, 0);
}
void PrintUTF8_v(PCSTR format, ...)
{
va_list ap;
va_start(ap, format);
PSTR buf = 0;
int len = 0;
while (0 < (len = _vsnprintf(buf, len, format, ap)))
{
if (buf)
{
PrintUTF8(buf, len);
break;
}
buf = (PSTR)alloca(++len);
}
}
HRESULT PrintError(HRESULT dwError)
{
LPCVOID lpSource = 0;
ULONG dwFlags = FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS;
if ((dwError & FACILITY_NT_BIT) || (0 > dwError && HRESULT_FACILITY(dwError) == FACILITY_NULL))
{
dwError &= ~FACILITY_NT_BIT;
__nt:
dwFlags = FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS;
lpSource = GetModuleHandle(L"ntdll");
}
PSTR lpText;
if (ULONG cch = FormatMessageA(dwFlags, lpSource, dwError, 0, (PSTR)&lpText, 0, 0))
{
PrintUTF8(lpText, cch);
LocalFree(lpText);
}
else if (dwFlags & FORMAT_MESSAGE_FROM_SYSTEM)
{
goto __nt;
}
DbgPrint("0x%x (%d)\r\n", dwError, dwError);
return dwError;
}