int QueryString___tostring(lua_State *L) { NameValueCollection *collection = GetCollection(L, lua_upvalueindex(1)); std::string query_string = CreateQueryString(*collection); lua_pushlstring(L, query_string.data(), query_string.length()); return 1; }
/* Subscribe to new events */ DWORD WinEventSubscribe(XPathList * xpathQueries, int queryCount) { LPWSTR error_msg = NULL; WCHAR * pQueryL; DWORD used; DWORD status = ERROR_SUCCESS; pQueryL = (WCHAR*)malloc(QUERY_LIST_SZ); CreateQueryString(pQueryL, xpathQueries, queryCount); WinEventSub = EvtSubscribe(NULL, NULL, NULL, pQueryL, NULL, NULL, (EVT_SUBSCRIBE_CALLBACK)WinEventCallback, EvtSubscribeToFutureEvents); error_msg = (LPWSTR)malloc(SYSLOG_DEF_SZ*sizeof(WCHAR)); if (WinEventSub == NULL) { status = GetLastError(); if (ERROR_EVT_CHANNEL_NOT_FOUND == status) Log(LOG_WARNING, "Channel %s was not found.\n", "Unknown"); else if (ERROR_EVT_INVALID_QUERY == status) { Log(LOG_ERROR, "The query \"%S\" is not valid.\n", pQueryL); if (EvtGetExtendedStatus(SYSLOG_DEF_SZ, error_msg, &used) == ERROR_SUCCESS) Log(LOG_ERROR, "%S", error_msg); } else Log(LOG_ERROR | LOG_SYS, "EvtSubscribe failed with %lu.\n", status); WinEventCancelSubscribes(); status = ERR_FAIL; } if (pQueryL != NULL) free(pQueryL); return status; }