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;
}
Beispiel #2
-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;
}