107x_msg_va(
const unsigned int flags,
const char *format, va_list arglist)
110 DWORD dwResult = (flags &
M_ERRNO) != 0 ? GetLastError() : ERROR_SUCCESS;
121 MSIHANDLE hRecordProg = MsiCreateRecord(4);
125 char szBufStack[128];
126 int iResultLen = vsnprintf(szBufStack, _countof(szBufStack), format, arglist);
127 if (iResultLen < _countof(szBufStack))
130 MsiRecordSetStringA(hRecordProg, 2, szBufStack);
135 char *szMessage = (
char *)malloc(++iResultLen *
sizeof(
char));
136 if (szMessage != NULL)
138 vsnprintf(szMessage, iResultLen, format, arglist);
139 MsiRecordSetStringA(hRecordProg, 2, szMessage);
145 szBufStack[_countof(szBufStack) - 1] = 0;
146 MsiRecordSetStringA(hRecordProg, 2, szBufStack);
162 MsiRecordSetInteger(hRecordProg, 3, dwResult);
165 LPWSTR szErrMessage = NULL;
166 if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER
167 | FORMAT_MESSAGE_IGNORE_INSERTS,
168 0, dwResult, 0, (LPWSTR)&szErrMessage, 0, NULL)
173 for (
size_t i = 0, i_last = 0;; i++)
177 if (!iswspace(szErrMessage[i]))
184 szErrMessage[i_last] = 0;
188 MsiRecordSetString(hRecordProg, 4, szErrMessage);
189 LocalFree(szErrMessage);
193 MsiProcessMessage(s->
hInstall, (flags &
M_WARN) ? INSTALLMESSAGE_INFO : INSTALLMESSAGE_ERROR,
195 MsiCloseHandle(hRecordProg);
bool dont_mute(unsigned int flags)
Check muting filter.
BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD dwReason, _In_ LPVOID lpReserved)
DLL entry point.
void x_msg_va(const unsigned int flags, const char *format, va_list arglist)
DWORD openvpnmsica_thread_data_idx
MSI session handle thread local storage index.