1+ #include " Utils.h"
2+
3+ #pragma comment (lib, "ntdll.lib")
4+
5+ #define CONSOLE_COLOR_GREEN 0xA
6+ #define CONSOLE_COLOR_YELLOW 0xE
7+ #define CONSOLE_COLOR_RED 0xC
8+ #define CONSOLE_COLOR_WHITE 0x7
9+
10+ HANDLE hConsole = NULL ;
11+ CHAR ErrorMsg[MAX_PATH] = { 0 };
12+
13+ BOOL printf_success (LPCSTR _Format, ...)
14+ {
15+ if (!hConsole) hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
16+ va_list ArgList = NULL ;
17+ va_start (ArgList, _Format);
18+ SetConsoleTextAttribute (hConsole, CONSOLE_COLOR_GREEN);
19+ printf (" [+] " );
20+ vprintf (_Format, ArgList);
21+ SetConsoleTextAttribute (hConsole, CONSOLE_COLOR_WHITE);
22+ va_end (ArgList);
23+ return TRUE ;
24+ };
25+
26+ BOOL printf_info (LPCSTR _Format, ...)
27+ {
28+ if (!hConsole) hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
29+ va_list ArgList = NULL ;
30+ va_start (ArgList, _Format);
31+ SetConsoleTextAttribute (hConsole, CONSOLE_COLOR_YELLOW);
32+ printf (" [!] " );
33+ vprintf (_Format, ArgList);
34+ SetConsoleTextAttribute (hConsole, CONSOLE_COLOR_WHITE);
35+ va_end (ArgList);
36+ return TRUE ;
37+ };
38+
39+ BOOL printf_error (LPCSTR _Format, ...)
40+ {
41+ if (!hConsole) hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
42+ va_list ArgList = NULL ;
43+ va_start (ArgList, _Format);
44+ SetConsoleTextAttribute (hConsole, CONSOLE_COLOR_RED);
45+ printf (" [-] " );
46+ vprintf (_Format, ArgList);
47+ SetConsoleTextAttribute (hConsole, CONSOLE_COLOR_WHITE);
48+ va_end (ArgList);
49+ return TRUE ;
50+ };
51+
52+ LPCSTR GetLastErrorFormat (ULONG dwErrorCode)
53+ {
54+ if (dwErrorCode == -1 ) dwErrorCode = GetLastError ();
55+ if (!FormatMessageA (
56+ FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
57+ NULL ,
58+ dwErrorCode,
59+ MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
60+ ErrorMsg,
61+ sizeof (ErrorMsg),
62+ NULL ))
63+ {
64+ printf_error (" Error at getting the last error format of code 0x%lx\n " , dwErrorCode);
65+ sprintf_s (ErrorMsg, " 0x%lx" , dwErrorCode);
66+ };
67+ return ErrorMsg;
68+ };
69+
70+ LPCSTR GetNtStatusFormat (NTSTATUS ntCode)
71+ {
72+ ULONG dwErrorCode = RtlNtStatusToDosError (ntCode);
73+ if (dwErrorCode == ERROR_MR_MID_NOT_FOUND)
74+ {
75+ printf_error (" Error at getting the error code of ntstatus 0x%lx\n " , ntCode);
76+ sprintf_s (ErrorMsg, " 0x%lx" , dwErrorCode);
77+ return ErrorMsg;
78+ };
79+ return GetLastErrorFormat (dwErrorCode);
80+ };
81+
82+ BOOL ReportBadPE (LPCSTR lpErrorStr)
83+ {
84+ printf_error (" Invalid or unsupported PE file, %s\n " , lpErrorStr);
85+ return TRUE ;
86+ };
87+
88+ BOOL ReportApiError (LPCSTR szApiName, LPCSTR szMsg)
89+ {
90+ printf_error (" Error at %s, %s, error code/msg = %s\n " , szApiName, szMsg, GetLastErrorFormat (GetLastError ()));
91+ return TRUE ;
92+ };
93+
94+ BOOL ReportNtStastus (LPCSTR szApiName, NTSTATUS NtCode, LPCSTR szMsg)
95+ {
96+ printf_error (" Error at %s, %s, status code/msg = %s\n " , szApiName, szMsg, GetNtStatusFormat (NtCode));
97+ return TRUE ;
98+ };
0 commit comments