103x_msg_va(
const unsigned int flags,
const char *format, va_list arglist)
106 DWORD dwResult = (flags &
M_ERRNO) != 0 ? GetLastError() : ERROR_SUCCESS;
117 MSIHANDLE hRecordProg = MsiCreateRecord(4);
121 char szBufStack[128];
122 int iResultLen = vsnprintf(szBufStack, _countof(szBufStack), format, arglist);
123 if (iResultLen < _countof(szBufStack))
126 MsiRecordSetStringA(hRecordProg, 2, szBufStack);
131 char *szMessage = (
char *)malloc(++iResultLen *
sizeof(
char));
132 if (szMessage != NULL)
134 vsnprintf(szMessage, iResultLen, format, arglist);
135 MsiRecordSetStringA(hRecordProg, 2, szMessage);
141 szBufStack[_countof(szBufStack) - 1] = 0;
142 MsiRecordSetStringA(hRecordProg, 2, szBufStack);
158 MsiRecordSetInteger(hRecordProg, 3, dwResult);
161 LPWSTR szErrMessage = NULL;
162 if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER
163 | FORMAT_MESSAGE_IGNORE_INSERTS,
164 0, dwResult, 0, (LPWSTR)&szErrMessage, 0, NULL)
169 for (
size_t i = 0, i_last = 0;;
i++)
173 if (!iswspace(szErrMessage[
i]))
180 szErrMessage[i_last] = 0;
184 MsiRecordSetString(hRecordProg, 4, szErrMessage);
185 LocalFree(szErrMessage);
189 MsiProcessMessage(s->
hInstall, (flags &
M_WARN) ? INSTALLMESSAGE_INFO : INSTALLMESSAGE_ERROR,
191 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.