| 
22 | 22 | 
 
  | 
23 | 23 | #include "service.h"  | 
24 | 24 | #include "validate.h"  | 
 | 25 | +#include "eventmsg.h"  | 
25 | 26 | 
 
  | 
26 | 27 | LPCWSTR service_instance = L"";  | 
27 | 28 | static wchar_t win_sys_path[MAX_PATH];  | 
@@ -203,25 +204,29 @@ GetLastErrorText(void)  | 
203 | 204 |     LPWSTR tmp = NULL;  | 
204 | 205 | 
 
  | 
205 | 206 |     error = GetLastError();  | 
206 |  | -    len = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM  | 
207 |  | -                            | FORMAT_MESSAGE_ARGUMENT_ARRAY,  | 
208 |  | -                        NULL, error, LANG_NEUTRAL, tmp, 0, NULL);  | 
 | 207 | +    len = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM  | 
 | 208 | +                             | FORMAT_MESSAGE_IGNORE_INSERTS,  | 
 | 209 | +                         NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&tmp, 0, NULL);  | 
209 | 210 | 
 
  | 
210 |  | -    if (len == 0 || (long)_countof(buf) < (long)len + 14)  | 
 | 211 | +    if (!len || !tmp)  | 
211 | 212 |     {  | 
212 |  | -        buf[0] = L'\0';  | 
213 |  | -    }  | 
214 |  | -    else  | 
215 |  | -    {  | 
216 |  | -        tmp[wcslen(tmp) - 2] = L'\0'; /* remove CR/LF characters */  | 
217 |  | -        swprintf(buf, _countof(buf), L"%ls (0x%x)", tmp, error);  | 
 | 213 | +        swprintf(buf, _countof(buf), L"Unknown error (0x%lx)", error);  | 
 | 214 | +        if (tmp)  | 
 | 215 | +        {  | 
 | 216 | +            LocalFree(tmp);  | 
 | 217 | +        }  | 
 | 218 | +        return buf;  | 
218 | 219 |     }  | 
219 | 220 | 
 
  | 
220 |  | -    if (tmp)  | 
 | 221 | +    /* trim trailing CR / LF / spaces safely */  | 
 | 222 | +    while (len && (tmp[len - 1] == L'\r' || tmp[len - 1] == L'\n' || tmp[len - 1] == L' '))  | 
221 | 223 |     {  | 
222 |  | -        LocalFree(tmp);  | 
 | 224 | +        tmp[--len] = L'\0';  | 
223 | 225 |     }  | 
224 | 226 | 
 
  | 
 | 227 | +    swprintf(buf, _countof(buf), L"%ls (0x%lx)", tmp, error);  | 
 | 228 | + | 
 | 229 | +    LocalFree(tmp);  | 
225 | 230 |     return buf;  | 
226 | 231 | }  | 
227 | 232 | 
 
  | 
@@ -253,8 +258,14 @@ MsgToEventLog(DWORD flags, LPCWSTR format, ...)  | 
253 | 258 | 
 
  | 
254 | 259 |         const WCHAR *mesg[] = { msg[0], msg[1] };  | 
255 | 260 |         ReportEvent(hEventSource,  | 
256 |  | -                    flags & MSG_FLAGS_ERROR ? EVENTLOG_ERROR_TYPE : EVENTLOG_INFORMATION_TYPE, 0, 0,  | 
257 |  | -                    NULL, 2, 0, mesg, NULL);  | 
 | 261 | +                    flags & MSG_FLAGS_ERROR ? EVENTLOG_ERROR_TYPE : EVENTLOG_INFORMATION_TYPE,  | 
 | 262 | +                    0,  | 
 | 263 | +                    EVT_TEXT_2,  | 
 | 264 | +                    NULL,  | 
 | 265 | +                    2,  | 
 | 266 | +                    0,  | 
 | 267 | +                    mesg,  | 
 | 268 | +                    NULL);  | 
258 | 269 |         DeregisterEventSource(hEventSource);  | 
259 | 270 |     }  | 
260 | 271 | 
 
  | 
 | 
0 commit comments