winevt_c 0.3.8-x64-mingw32 → 0.4.0-x64-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/ext/winevt/winevt_bookmark.c +7 -2
 - data/ext/winevt/winevt_c.h +3 -2
 - data/ext/winevt/winevt_channel.c +5 -1
 - data/ext/winevt/winevt_query.c +16 -4
 - data/ext/winevt/winevt_subscribe.c +24 -6
 - data/ext/winevt/winevt_utils.c +108 -69
 - data/lib/winevt/2.4/winevt.so +0 -0
 - data/lib/winevt/2.5/winevt.so +0 -0
 - data/lib/winevt/2.6/winevt.so +0 -0
 - data/lib/winevt/version.rb +1 -1
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: c3db8c9996ea38b08c444720be709a582bba72bba3c3e0bfe40afcc59868c6a3
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 5b811af403f50472d36b4ed027f2fd2d7b800b00b9255541fcb7ef18bfde9a06
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: d9479f6e2a60ff18e0f4fa6ad5e295b5584231c11829b7b2804f082c321e02df62cd60ffda2d0017b45639f43c7eb57b49ed37bed899e82d0835c0046a91b95b
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: edd45eb310d5461633072d7296f2f64aa545c749e708fd0c04e234ce7b5c9d64b4f299f0a51a377c68db17fad953b540bd90d0974d76ff4e5ac6134a8a63577a
         
     | 
| 
         @@ -79,14 +79,19 @@ rb_winevt_bookmark_update(VALUE self, VALUE event) 
     | 
|
| 
       79 
79 
     | 
    
         
             
            static VALUE
         
     | 
| 
       80 
80 
     | 
    
         
             
            rb_winevt_bookmark_render(VALUE self)
         
     | 
| 
       81 
81 
     | 
    
         
             
            {
         
     | 
| 
      
 82 
     | 
    
         
            +
              WCHAR* wResult;
         
     | 
| 
       82 
83 
     | 
    
         
             
              char* result;
         
     | 
| 
       83 
84 
     | 
    
         
             
              struct WinevtBookmark *winevtBookmark;
         
     | 
| 
      
 85 
     | 
    
         
            +
              VALUE utf8str;
         
     | 
| 
       84 
86 
     | 
    
         | 
| 
       85 
87 
     | 
    
         
             
              TypedData_Get_Struct(self, struct WinevtBookmark, &rb_winevt_bookmark_type, winevtBookmark);
         
     | 
| 
      
 88 
     | 
    
         
            +
              wResult = render_event(winevtBookmark->bookmark, EvtRenderBookmark);
         
     | 
| 
      
 89 
     | 
    
         
            +
              result = wstr_to_mbstr(CP_UTF8, wResult, -1);
         
     | 
| 
       86 
90 
     | 
    
         | 
| 
       87 
     | 
    
         
            -
               
     | 
| 
      
 91 
     | 
    
         
            +
              utf8str = rb_utf8_str_new_cstr(result);
         
     | 
| 
      
 92 
     | 
    
         
            +
              free_allocated_mbstr(result);
         
     | 
| 
       88 
93 
     | 
    
         | 
| 
       89 
     | 
    
         
            -
              return  
     | 
| 
      
 94 
     | 
    
         
            +
              return utf8str;
         
     | 
| 
       90 
95 
     | 
    
         
             
            }
         
     | 
| 
       91 
96 
     | 
    
         | 
| 
       92 
97 
     | 
    
         
             
            void Init_winevt_bookmark(VALUE rb_cEventLog)
         
     | 
    
        data/ext/winevt/winevt_c.h
    CHANGED
    
    | 
         @@ -22,8 +22,9 @@ 
     | 
|
| 
       22 
22 
     | 
    
         
             
            #define EventChannel(object) ((struct WinevtChannel *)DATA_PTR(object))
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
24 
     | 
    
         
             
            char* wstr_to_mbstr(UINT cp, const WCHAR *wstr, int clen);
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
      
 25 
     | 
    
         
            +
            void free_allocated_mbstr(const char* str);
         
     | 
| 
      
 26 
     | 
    
         
            +
            WCHAR* render_event(EVT_HANDLE handle, DWORD flags);
         
     | 
| 
      
 27 
     | 
    
         
            +
            WCHAR* get_description(EVT_HANDLE handle);
         
     | 
| 
       27 
28 
     | 
    
         
             
            VALUE get_values(EVT_HANDLE handle);
         
     | 
| 
       28 
29 
     | 
    
         | 
| 
       29 
30 
     | 
    
         
             
            VALUE rb_cQuery;
         
     | 
    
        data/ext/winevt/winevt_channel.c
    CHANGED
    
    | 
         @@ -49,6 +49,7 @@ rb_winevt_channel_each(VALUE self) 
     | 
|
| 
       49 
49 
     | 
    
         
             
              DWORD bufferSize = 0;
         
     | 
| 
       50 
50 
     | 
    
         
             
              DWORD bufferUsed = 0;
         
     | 
| 
       51 
51 
     | 
    
         
             
              DWORD status = ERROR_SUCCESS;
         
     | 
| 
      
 52 
     | 
    
         
            +
              VALUE utf8str;
         
     | 
| 
       52 
53 
     | 
    
         | 
| 
       53 
54 
     | 
    
         
             
              RETURN_ENUMERATOR(self, 0, 0);
         
     | 
| 
       54 
55 
     | 
    
         | 
| 
         @@ -88,7 +89,10 @@ rb_winevt_channel_each(VALUE self) 
     | 
|
| 
       88 
89 
     | 
    
         | 
| 
       89 
90 
     | 
    
         
             
                result = wstr_to_mbstr(CP_UTF8, buffer, -1);
         
     | 
| 
       90 
91 
     | 
    
         | 
| 
       91 
     | 
    
         
            -
                 
     | 
| 
      
 92 
     | 
    
         
            +
                utf8str = rb_utf8_str_new_cstr(result);
         
     | 
| 
      
 93 
     | 
    
         
            +
                free_allocated_mbstr(result);
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                rb_yield(utf8str);
         
     | 
| 
       92 
96 
     | 
    
         
             
              }
         
     | 
| 
       93 
97 
     | 
    
         | 
| 
       94 
98 
     | 
    
         
             
              return Qnil;
         
     | 
    
        data/ext/winevt/winevt_query.c
    CHANGED
    
    | 
         @@ -137,25 +137,37 @@ rb_winevt_query_next(VALUE self) 
     | 
|
| 
       137 
137 
     | 
    
         
             
            static VALUE
         
     | 
| 
       138 
138 
     | 
    
         
             
            rb_winevt_query_render(VALUE self)
         
     | 
| 
       139 
139 
     | 
    
         
             
            {
         
     | 
| 
      
 140 
     | 
    
         
            +
              WCHAR* wResult;
         
     | 
| 
       140 
141 
     | 
    
         
             
              char* result;
         
     | 
| 
       141 
142 
     | 
    
         
             
              struct WinevtQuery *winevtQuery;
         
     | 
| 
      
 143 
     | 
    
         
            +
              VALUE utf8str;
         
     | 
| 
       142 
144 
     | 
    
         | 
| 
       143 
145 
     | 
    
         
             
              TypedData_Get_Struct(self, struct WinevtQuery, &rb_winevt_query_type, winevtQuery);
         
     | 
| 
       144 
     | 
    
         
            -
               
     | 
| 
      
 146 
     | 
    
         
            +
              wResult = render_event(winevtQuery->event, EvtRenderEventXml);
         
     | 
| 
      
 147 
     | 
    
         
            +
              result = wstr_to_mbstr(CP_UTF8, wResult, -1);
         
     | 
| 
       145 
148 
     | 
    
         | 
| 
       146 
     | 
    
         
            -
               
     | 
| 
      
 149 
     | 
    
         
            +
              utf8str = rb_utf8_str_new_cstr(result);
         
     | 
| 
      
 150 
     | 
    
         
            +
              free_allocated_mbstr(result);
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
      
 152 
     | 
    
         
            +
              return utf8str;
         
     | 
| 
       147 
153 
     | 
    
         
             
            }
         
     | 
| 
       148 
154 
     | 
    
         | 
| 
       149 
155 
     | 
    
         
             
            static VALUE
         
     | 
| 
       150 
156 
     | 
    
         
             
            rb_winevt_query_message(VALUE self)
         
     | 
| 
       151 
157 
     | 
    
         
             
            {
         
     | 
| 
      
 158 
     | 
    
         
            +
              WCHAR* wResult;
         
     | 
| 
       152 
159 
     | 
    
         
             
              char* result;
         
     | 
| 
       153 
160 
     | 
    
         
             
              struct WinevtQuery *winevtQuery;
         
     | 
| 
      
 161 
     | 
    
         
            +
              VALUE utf8str;
         
     | 
| 
       154 
162 
     | 
    
         | 
| 
       155 
163 
     | 
    
         
             
              TypedData_Get_Struct(self, struct WinevtQuery, &rb_winevt_query_type, winevtQuery);
         
     | 
| 
       156 
     | 
    
         
            -
               
     | 
| 
      
 164 
     | 
    
         
            +
              wResult = get_description(winevtQuery->event);
         
     | 
| 
      
 165 
     | 
    
         
            +
              result = wstr_to_mbstr(CP_UTF8, wResult, -1);
         
     | 
| 
      
 166 
     | 
    
         
            +
             
     | 
| 
      
 167 
     | 
    
         
            +
              utf8str = rb_utf8_str_new_cstr(result);
         
     | 
| 
      
 168 
     | 
    
         
            +
              free_allocated_mbstr(result);
         
     | 
| 
       157 
169 
     | 
    
         | 
| 
       158 
     | 
    
         
            -
              return  
     | 
| 
      
 170 
     | 
    
         
            +
              return utf8str;
         
     | 
| 
       159 
171 
     | 
    
         
             
            }
         
     | 
| 
       160 
172 
     | 
    
         | 
| 
       161 
173 
     | 
    
         
             
            static VALUE
         
     | 
| 
         @@ -153,25 +153,37 @@ rb_winevt_subscribe_next(VALUE self) 
     | 
|
| 
       153 
153 
     | 
    
         
             
            static VALUE
         
     | 
| 
       154 
154 
     | 
    
         
             
            rb_winevt_subscribe_render(VALUE self)
         
     | 
| 
       155 
155 
     | 
    
         
             
            {
         
     | 
| 
      
 156 
     | 
    
         
            +
              WCHAR* wResult;
         
     | 
| 
       156 
157 
     | 
    
         
             
              char* result;
         
     | 
| 
       157 
158 
     | 
    
         
             
              struct WinevtSubscribe *winevtSubscribe;
         
     | 
| 
      
 159 
     | 
    
         
            +
              VALUE utf8str;
         
     | 
| 
       158 
160 
     | 
    
         | 
| 
       159 
161 
     | 
    
         
             
              TypedData_Get_Struct(self, struct WinevtSubscribe, &rb_winevt_subscribe_type, winevtSubscribe);
         
     | 
| 
       160 
     | 
    
         
            -
               
     | 
| 
      
 162 
     | 
    
         
            +
              wResult = render_event(winevtSubscribe->event, EvtRenderEventXml);
         
     | 
| 
      
 163 
     | 
    
         
            +
              result = wstr_to_mbstr(CP_UTF8, wResult, -1);
         
     | 
| 
       161 
164 
     | 
    
         | 
| 
       162 
     | 
    
         
            -
               
     | 
| 
      
 165 
     | 
    
         
            +
              utf8str = rb_utf8_str_new_cstr(result);
         
     | 
| 
      
 166 
     | 
    
         
            +
              free_allocated_mbstr(result);
         
     | 
| 
      
 167 
     | 
    
         
            +
             
     | 
| 
      
 168 
     | 
    
         
            +
              return utf8str;
         
     | 
| 
       163 
169 
     | 
    
         
             
            }
         
     | 
| 
       164 
170 
     | 
    
         | 
| 
       165 
171 
     | 
    
         
             
            static VALUE
         
     | 
| 
       166 
172 
     | 
    
         
             
            rb_winevt_subscribe_message(VALUE self)
         
     | 
| 
       167 
173 
     | 
    
         
             
            {
         
     | 
| 
      
 174 
     | 
    
         
            +
              WCHAR* wResult;
         
     | 
| 
       168 
175 
     | 
    
         
             
              char* result;
         
     | 
| 
       169 
176 
     | 
    
         
             
              struct WinevtSubscribe *winevtSubscribe;
         
     | 
| 
      
 177 
     | 
    
         
            +
              VALUE utf8str;
         
     | 
| 
       170 
178 
     | 
    
         | 
| 
       171 
179 
     | 
    
         
             
              TypedData_Get_Struct(self, struct WinevtSubscribe, &rb_winevt_subscribe_type, winevtSubscribe);
         
     | 
| 
       172 
     | 
    
         
            -
               
     | 
| 
      
 180 
     | 
    
         
            +
              wResult = get_description(winevtSubscribe->event);
         
     | 
| 
      
 181 
     | 
    
         
            +
              result = wstr_to_mbstr(CP_UTF8, wResult, -1);
         
     | 
| 
      
 182 
     | 
    
         
            +
             
     | 
| 
      
 183 
     | 
    
         
            +
              utf8str = rb_utf8_str_new_cstr(result);
         
     | 
| 
      
 184 
     | 
    
         
            +
              free_allocated_mbstr(result);
         
     | 
| 
       173 
185 
     | 
    
         | 
| 
       174 
     | 
    
         
            -
              return  
     | 
| 
      
 186 
     | 
    
         
            +
              return utf8str;
         
     | 
| 
       175 
187 
     | 
    
         
             
            }
         
     | 
| 
       176 
188 
     | 
    
         | 
| 
       177 
189 
     | 
    
         
             
            static VALUE
         
     | 
| 
         @@ -205,14 +217,20 @@ rb_winevt_subscribe_each(VALUE self) 
     | 
|
| 
       205 
217 
     | 
    
         
             
            static VALUE
         
     | 
| 
       206 
218 
     | 
    
         
             
            rb_winevt_subscribe_get_bookmark(VALUE self)
         
     | 
| 
       207 
219 
     | 
    
         
             
            {
         
     | 
| 
      
 220 
     | 
    
         
            +
              WCHAR* wResult;
         
     | 
| 
       208 
221 
     | 
    
         
             
              char* result;
         
     | 
| 
       209 
222 
     | 
    
         
             
              struct WinevtSubscribe *winevtSubscribe;
         
     | 
| 
      
 223 
     | 
    
         
            +
              VALUE utf8str;
         
     | 
| 
       210 
224 
     | 
    
         | 
| 
       211 
225 
     | 
    
         
             
              TypedData_Get_Struct(self, struct WinevtSubscribe, &rb_winevt_subscribe_type, winevtSubscribe);
         
     | 
| 
       212 
226 
     | 
    
         | 
| 
       213 
     | 
    
         
            -
               
     | 
| 
      
 227 
     | 
    
         
            +
              wResult = render_event(winevtSubscribe->bookmark, EvtRenderBookmark);
         
     | 
| 
      
 228 
     | 
    
         
            +
              result = wstr_to_mbstr(CP_UTF8, wResult, -1);
         
     | 
| 
      
 229 
     | 
    
         
            +
             
     | 
| 
      
 230 
     | 
    
         
            +
              utf8str = rb_utf8_str_new_cstr(result);
         
     | 
| 
      
 231 
     | 
    
         
            +
              free_allocated_mbstr(result);
         
     | 
| 
       214 
232 
     | 
    
         | 
| 
       215 
     | 
    
         
            -
              return  
     | 
| 
      
 233 
     | 
    
         
            +
              return utf8str;
         
     | 
| 
       216 
234 
     | 
    
         
             
            }
         
     | 
| 
       217 
235 
     | 
    
         | 
| 
       218 
236 
     | 
    
         
             
            void Init_winevt_subscribe(VALUE rb_cEventLog)
         
     | 
    
        data/ext/winevt/winevt_utils.c
    CHANGED
    
    | 
         @@ -13,20 +13,26 @@ wstr_to_mbstr(UINT cp, const WCHAR *wstr, int clen) 
     | 
|
| 
       13 
13 
     | 
    
         
             
                return ptr;
         
     | 
| 
       14 
14 
     | 
    
         
             
            }
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
      
 16 
     | 
    
         
            +
            void free_allocated_mbstr(const char* str)
         
     | 
| 
      
 17 
     | 
    
         
            +
            {
         
     | 
| 
      
 18 
     | 
    
         
            +
              if (str)
         
     | 
| 
      
 19 
     | 
    
         
            +
                xfree((char *)str);
         
     | 
| 
      
 20 
     | 
    
         
            +
            }
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            WCHAR* render_event(EVT_HANDLE handle, DWORD flags)
         
     | 
| 
       17 
23 
     | 
    
         
             
            {
         
     | 
| 
       18 
24 
     | 
    
         
             
              PWSTR      buffer = NULL;
         
     | 
| 
       19 
25 
     | 
    
         
             
              ULONG      bufferSize = 0;
         
     | 
| 
       20 
26 
     | 
    
         
             
              ULONG      bufferSizeNeeded = 0;
         
     | 
| 
       21 
27 
     | 
    
         
             
              ULONG      status, count;
         
     | 
| 
       22 
     | 
    
         
            -
               
     | 
| 
      
 28 
     | 
    
         
            +
              static WCHAR* result = L"";
         
     | 
| 
       23 
29 
     | 
    
         
             
              LPTSTR     msgBuf;
         
     | 
| 
       24 
30 
     | 
    
         | 
| 
       25 
31 
     | 
    
         
             
              do {
         
     | 
| 
       26 
32 
     | 
    
         
             
                if (bufferSizeNeeded > bufferSize) {
         
     | 
| 
       27 
33 
     | 
    
         
             
                  free(buffer);
         
     | 
| 
       28 
34 
     | 
    
         
             
                  bufferSize = bufferSizeNeeded;
         
     | 
| 
       29 
     | 
    
         
            -
                  buffer =  
     | 
| 
      
 35 
     | 
    
         
            +
                  buffer = xmalloc(bufferSize);
         
     | 
| 
       30 
36 
     | 
    
         
             
                  if (buffer == NULL) {
         
     | 
| 
       31 
37 
     | 
    
         
             
                    status = ERROR_OUTOFMEMORY;
         
     | 
| 
       32 
38 
     | 
    
         
             
                    bufferSize = 0;
         
     | 
| 
         @@ -63,10 +69,10 @@ char* render_event(EVT_HANDLE handle, DWORD flags) 
     | 
|
| 
       63 
69 
     | 
    
         
             
                rb_raise(rb_eWinevtQueryError, "ErrorCode: %d\nError: %s\n", status, RSTRING_PTR(errmsg));
         
     | 
| 
       64 
70 
     | 
    
         
             
              }
         
     | 
| 
       65 
71 
     | 
    
         | 
| 
       66 
     | 
    
         
            -
              result =  
     | 
| 
      
 72 
     | 
    
         
            +
              result = buffer;
         
     | 
| 
       67 
73 
     | 
    
         | 
| 
       68 
74 
     | 
    
         
             
              if (buffer)
         
     | 
| 
       69 
     | 
    
         
            -
                 
     | 
| 
      
 75 
     | 
    
         
            +
                xfree(buffer);
         
     | 
| 
       70 
76 
     | 
    
         | 
| 
       71 
77 
     | 
    
         
             
              return result;
         
     | 
| 
       72 
78 
     | 
    
         
             
            }
         
     | 
| 
         @@ -92,7 +98,7 @@ VALUE get_values(EVT_HANDLE handle) 
     | 
|
| 
       92 
98 
     | 
    
         
             
                if (bufferSizeNeeded > bufferSize) {
         
     | 
| 
       93 
99 
     | 
    
         
             
                  free(buffer);
         
     | 
| 
       94 
100 
     | 
    
         
             
                  bufferSize = bufferSizeNeeded;
         
     | 
| 
       95 
     | 
    
         
            -
                  buffer =  
     | 
| 
      
 101 
     | 
    
         
            +
                  buffer = xmalloc(bufferSize);
         
     | 
| 
       96 
102 
     | 
    
         
             
                  if (buffer == NULL) {
         
     | 
| 
       97 
103 
     | 
    
         
             
                    status = ERROR_OUTOFMEMORY;
         
     | 
| 
       98 
104 
     | 
    
         
             
                    bufferSize = 0;
         
     | 
| 
         @@ -147,6 +153,7 @@ VALUE get_values(EVT_HANDLE handle) 
     | 
|
| 
       147 
153 
     | 
    
         
             
                  } else {
         
     | 
| 
       148 
154 
     | 
    
         
             
                    result = wstr_to_mbstr(CP_UTF8, pRenderedValues[i].StringVal, -1);
         
     | 
| 
       149 
155 
     | 
    
         
             
                    rb_ary_push(userValues, rb_utf8_str_new_cstr(result));
         
     | 
| 
      
 156 
     | 
    
         
            +
                    free_allocated_mbstr(result);
         
     | 
| 
       150 
157 
     | 
    
         
             
                  }
         
     | 
| 
       151 
158 
     | 
    
         
             
                  break;
         
     | 
| 
       152 
159 
     | 
    
         
             
                case EvtVarTypeAnsiString:
         
     | 
| 
         @@ -191,6 +198,7 @@ VALUE get_values(EVT_HANDLE handle) 
     | 
|
| 
       191 
198 
     | 
    
         
             
                case EvtVarTypeSingle:
         
     | 
| 
       192 
199 
     | 
    
         
             
                  sprintf(result, "%f", pRenderedValues[i].SingleVal);
         
     | 
| 
       193 
200 
     | 
    
         
             
                  rb_ary_push(userValues, rb_utf8_str_new_cstr(result));
         
     | 
| 
      
 201 
     | 
    
         
            +
                  free_allocated_mbstr(result);
         
     | 
| 
       194 
202 
     | 
    
         
             
                  break;
         
     | 
| 
       195 
203 
     | 
    
         
             
                case EvtVarTypeDouble:
         
     | 
| 
       196 
204 
     | 
    
         
             
                  sprintf(result, "%lf", pRenderedValues[i].DoubleVal);
         
     | 
| 
         @@ -205,6 +213,7 @@ VALUE get_values(EVT_HANDLE handle) 
     | 
|
| 
       205 
213 
     | 
    
         
             
                    StringFromCLSID(pRenderedValues[i].GuidVal, &tmpWChar);
         
     | 
| 
       206 
214 
     | 
    
         
             
                    result = wstr_to_mbstr(CP_UTF8, tmpWChar, -1);
         
     | 
| 
       207 
215 
     | 
    
         
             
                    rb_ary_push(userValues, rb_utf8_str_new_cstr(result));
         
     | 
| 
      
 216 
     | 
    
         
            +
                    free_allocated_mbstr(result);
         
     | 
| 
       208 
217 
     | 
    
         
             
                  } else {
         
     | 
| 
       209 
218 
     | 
    
         
             
                    rb_ary_push(userValues, rb_utf8_str_new_cstr("?"));
         
     | 
| 
       210 
219 
     | 
    
         
             
                  }
         
     | 
| 
         @@ -243,6 +252,7 @@ VALUE get_values(EVT_HANDLE handle) 
     | 
|
| 
       243 
252 
     | 
    
         
             
                  if (ConvertSidToStringSidW(pRenderedValues[i].SidVal, &tmpWChar)) {
         
     | 
| 
       244 
253 
     | 
    
         
             
                    result = wstr_to_mbstr(CP_UTF8, tmpWChar, -1);
         
     | 
| 
       245 
254 
     | 
    
         
             
                    rb_ary_push(userValues, rb_utf8_str_new_cstr(result));
         
     | 
| 
      
 255 
     | 
    
         
            +
                    free_allocated_mbstr(result);
         
     | 
| 
       246 
256 
     | 
    
         
             
                  } else {
         
     | 
| 
       247 
257 
     | 
    
         
             
                    rb_ary_push(userValues, rb_utf8_str_new_cstr("?"));
         
     | 
| 
       248 
258 
     | 
    
         
             
                  }
         
     | 
| 
         @@ -263,6 +273,7 @@ VALUE get_values(EVT_HANDLE handle) 
     | 
|
| 
       263 
273 
     | 
    
         
             
                  } else {
         
     | 
| 
       264 
274 
     | 
    
         
             
                    result = wstr_to_mbstr(CP_UTF8, pRenderedValues[i].XmlVal, -1);
         
     | 
| 
       265 
275 
     | 
    
         
             
                    rb_ary_push(userValues, rb_utf8_str_new_cstr(result));
         
     | 
| 
      
 276 
     | 
    
         
            +
                    free_allocated_mbstr(result);
         
     | 
| 
       266 
277 
     | 
    
         
             
                  }
         
     | 
| 
       267 
278 
     | 
    
         
             
                  break;
         
     | 
| 
       268 
279 
     | 
    
         
             
                default:
         
     | 
| 
         @@ -272,70 +283,26 @@ VALUE get_values(EVT_HANDLE handle) 
     | 
|
| 
       272 
283 
     | 
    
         
             
              }
         
     | 
| 
       273 
284 
     | 
    
         | 
| 
       274 
285 
     | 
    
         
             
              if (buffer)
         
     | 
| 
       275 
     | 
    
         
            -
                 
     | 
| 
      
 286 
     | 
    
         
            +
                xfree(buffer);
         
     | 
| 
      
 287 
     | 
    
         
            +
             
     | 
| 
      
 288 
     | 
    
         
            +
              if (renderContext)
         
     | 
| 
      
 289 
     | 
    
         
            +
                EvtClose(renderContext);
         
     | 
| 
       276 
290 
     | 
    
         | 
| 
       277 
291 
     | 
    
         
             
              return userValues;
         
     | 
| 
       278 
292 
     | 
    
         
             
            }
         
     | 
| 
       279 
293 
     | 
    
         | 
| 
       280 
     | 
    
         
            -
             
     | 
| 
      
 294 
     | 
    
         
            +
            static WCHAR* get_message(EVT_HANDLE hMetadata, EVT_HANDLE handle)
         
     | 
| 
       281 
295 
     | 
    
         
             
            {
         
     | 
| 
       282 
     | 
    
         
            -
            #define  
     | 
| 
       283 
     | 
    
         
            -
              WCHAR 
     | 
| 
       284 
     | 
    
         
            -
               
     | 
| 
       285 
     | 
    
         
            -
              ULONG 
     | 
| 
       286 
     | 
    
         
            -
              ULONG      bufferSizeNeeded = 0;
         
     | 
| 
       287 
     | 
    
         
            -
              ULONG      status, count;
         
     | 
| 
       288 
     | 
    
         
            -
              char*      result = "";
         
     | 
| 
       289 
     | 
    
         
            -
              LPTSTR     msgBuf = "";
         
     | 
| 
       290 
     | 
    
         
            -
              EVT_HANDLE hMetadata = NULL;
         
     | 
| 
       291 
     | 
    
         
            -
              PEVT_VARIANT values = NULL;
         
     | 
| 
      
 296 
     | 
    
         
            +
            #define BUFSIZE 4096
         
     | 
| 
      
 297 
     | 
    
         
            +
              static WCHAR* result = L"";
         
     | 
| 
      
 298 
     | 
    
         
            +
              ULONG  status;
         
     | 
| 
      
 299 
     | 
    
         
            +
              ULONG bufferSizeNeeded = 0;
         
     | 
| 
       292 
300 
     | 
    
         
             
              LPVOID lpMsgBuf;
         
     | 
| 
      
 301 
     | 
    
         
            +
              WCHAR*     prevBuffer;
         
     | 
| 
      
 302 
     | 
    
         
            +
              WCHAR     *message;
         
     | 
| 
       293 
303 
     | 
    
         | 
| 
       294 
     | 
    
         
            -
               
     | 
| 
       295 
     | 
    
         
            -
               
     | 
| 
       296 
     | 
    
         
            -
              if (renderContext == NULL) {
         
     | 
| 
       297 
     | 
    
         
            -
                rb_raise(rb_eWinevtQueryError, "Failed to create renderContext");
         
     | 
| 
       298 
     | 
    
         
            -
              }
         
     | 
| 
       299 
     | 
    
         
            -
             
     | 
| 
       300 
     | 
    
         
            -
              if (EvtRender(renderContext,
         
     | 
| 
       301 
     | 
    
         
            -
                            handle,
         
     | 
| 
       302 
     | 
    
         
            -
                            EvtRenderEventValues,
         
     | 
| 
       303 
     | 
    
         
            -
                            _countof(buffer),
         
     | 
| 
       304 
     | 
    
         
            -
                            buffer,
         
     | 
| 
       305 
     | 
    
         
            -
                            &bufferSizeNeeded,
         
     | 
| 
       306 
     | 
    
         
            -
                            &count) != FALSE) {
         
     | 
| 
       307 
     | 
    
         
            -
                status = ERROR_SUCCESS;
         
     | 
| 
       308 
     | 
    
         
            -
              } else {
         
     | 
| 
       309 
     | 
    
         
            -
                status = GetLastError();
         
     | 
| 
       310 
     | 
    
         
            -
              }
         
     | 
| 
       311 
     | 
    
         
            -
             
     | 
| 
       312 
     | 
    
         
            -
              if (status != ERROR_SUCCESS) {
         
     | 
| 
       313 
     | 
    
         
            -
                FormatMessage(
         
     | 
| 
       314 
     | 
    
         
            -
                    FORMAT_MESSAGE_ALLOCATE_BUFFER |
         
     | 
| 
       315 
     | 
    
         
            -
                    FORMAT_MESSAGE_FROM_SYSTEM |
         
     | 
| 
       316 
     | 
    
         
            -
                    FORMAT_MESSAGE_IGNORE_INSERTS,
         
     | 
| 
       317 
     | 
    
         
            -
                    NULL, status,
         
     | 
| 
       318 
     | 
    
         
            -
                    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
         
     | 
| 
       319 
     | 
    
         
            -
                    msgBuf, 0, NULL);
         
     | 
| 
       320 
     | 
    
         
            -
             
     | 
| 
       321 
     | 
    
         
            -
                VALUE errmsg = rb_str_new2(msgBuf);
         
     | 
| 
       322 
     | 
    
         
            -
                LocalFree(msgBuf);
         
     | 
| 
       323 
     | 
    
         
            -
             
     | 
| 
       324 
     | 
    
         
            -
                rb_raise(rb_eWinevtQueryError, "ErrorCode: %d\nError: %s\n", status, RSTRING_PTR(errmsg));
         
     | 
| 
       325 
     | 
    
         
            -
              }
         
     | 
| 
       326 
     | 
    
         
            -
             
     | 
| 
       327 
     | 
    
         
            -
              // Obtain buffer as EVT_VARIANT pointer. To avoid ErrorCide 87 in EvtRender.
         
     | 
| 
       328 
     | 
    
         
            -
              values = (PEVT_VARIANT)buffer;
         
     | 
| 
       329 
     | 
    
         
            -
             
     | 
| 
       330 
     | 
    
         
            -
              // Open publisher metadata
         
     | 
| 
       331 
     | 
    
         
            -
              hMetadata = EvtOpenPublisherMetadata(NULL, values[0].StringVal, NULL, MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), SORT_DEFAULT), 0);
         
     | 
| 
       332 
     | 
    
         
            -
              if (hMetadata == NULL) {
         
     | 
| 
       333 
     | 
    
         
            -
                // When winevt_c cannot open metadata, then give up to obtain
         
     | 
| 
       334 
     | 
    
         
            -
                // message file and clean up immediately.
         
     | 
| 
       335 
     | 
    
         
            -
                goto cleanup;
         
     | 
| 
       336 
     | 
    
         
            -
              }
         
     | 
| 
       337 
     | 
    
         
            -
             
     | 
| 
       338 
     | 
    
         
            -
              if (!EvtFormatMessage(hMetadata, handle, 0xffffffff, 0, NULL, EvtFormatMessageEvent, 4096, buffer, &bufferSizeNeeded)) {
         
     | 
| 
      
 304 
     | 
    
         
            +
              message = (WCHAR *)xmalloc(sizeof(WCHAR) * BUFSIZE);
         
     | 
| 
      
 305 
     | 
    
         
            +
              if (!EvtFormatMessage(hMetadata, handle, 0xffffffff, 0, NULL, EvtFormatMessageEvent, BUFSIZE, message, &bufferSizeNeeded)) {
         
     | 
| 
       339 
306 
     | 
    
         
             
                status = GetLastError();
         
     | 
| 
       340 
307 
     | 
    
         | 
| 
       341 
308 
     | 
    
         
             
                if (status != ERROR_EVT_UNRESOLVED_VALUE_INSERT) {
         
     | 
| 
         @@ -361,7 +328,8 @@ char* get_description(EVT_HANDLE handle) 
     | 
|
| 
       361 
328 
     | 
    
         
             
                                     MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
         
     | 
| 
       362 
329 
     | 
    
         
             
                                     (WCHAR *) &lpMsgBuf, 0, NULL);
         
     | 
| 
       363 
330 
     | 
    
         | 
| 
       364 
     | 
    
         
            -
                    result =  
     | 
| 
      
 331 
     | 
    
         
            +
                    result = (WCHAR *)lpMsgBuf;
         
     | 
| 
      
 332 
     | 
    
         
            +
                    LocalFree(lpMsgBuf);
         
     | 
| 
       365 
333 
     | 
    
         | 
| 
       366 
334 
     | 
    
         
             
                    goto cleanup;
         
     | 
| 
       367 
335 
     | 
    
         
             
                  }
         
     | 
| 
         @@ -373,9 +341,10 @@ char* get_description(EVT_HANDLE handle) 
     | 
|
| 
       373 
341 
     | 
    
         
             
                }
         
     | 
| 
       374 
342 
     | 
    
         | 
| 
       375 
343 
     | 
    
         
             
                if (status == ERROR_INSUFFICIENT_BUFFER) {
         
     | 
| 
       376 
     | 
    
         
            -
                   
     | 
| 
      
 344 
     | 
    
         
            +
                  prevBuffer = message;
         
     | 
| 
      
 345 
     | 
    
         
            +
                  message = (WCHAR *)realloc(prevBuffer, sizeof(WCHAR) * bufferSizeNeeded);
         
     | 
| 
       377 
346 
     | 
    
         | 
| 
       378 
     | 
    
         
            -
                  if(!EvtFormatMessage(hMetadata, handle, 0xffffffff, 0, NULL, EvtFormatMessageEvent, bufferSizeNeeded,  
     | 
| 
      
 347 
     | 
    
         
            +
                  if(!EvtFormatMessage(hMetadata, handle, 0xffffffff, 0, NULL, EvtFormatMessageEvent, bufferSizeNeeded, message, &bufferSizeNeeded)) {
         
     | 
| 
       379 
348 
     | 
    
         
             
                    status = GetLastError();
         
     | 
| 
       380 
349 
     | 
    
         | 
| 
       381 
350 
     | 
    
         
             
                    if (status != ERROR_EVT_UNRESOLVED_VALUE_INSERT) {
         
     | 
| 
         @@ -401,7 +370,8 @@ char* get_description(EVT_HANDLE handle) 
     | 
|
| 
       401 
370 
     | 
    
         
             
                                         MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
         
     | 
| 
       402 
371 
     | 
    
         
             
                                         (WCHAR *) &lpMsgBuf, 0, NULL);
         
     | 
| 
       403 
372 
     | 
    
         | 
| 
       404 
     | 
    
         
            -
                        result =  
     | 
| 
      
 373 
     | 
    
         
            +
                        result = (WCHAR *)lpMsgBuf;
         
     | 
| 
      
 374 
     | 
    
         
            +
                        LocalFree(lpMsgBuf);
         
     | 
| 
       405 
375 
     | 
    
         | 
| 
       406 
376 
     | 
    
         
             
                        goto cleanup;
         
     | 
| 
       407 
377 
     | 
    
         
             
                      }
         
     | 
| 
         @@ -411,9 +381,78 @@ char* get_description(EVT_HANDLE handle) 
     | 
|
| 
       411 
381 
     | 
    
         
             
                  }
         
     | 
| 
       412 
382 
     | 
    
         
             
                }
         
     | 
| 
       413 
383 
     | 
    
         
             
              }
         
     | 
| 
       414 
     | 
    
         
            -
              result = wstr_to_mbstr(CP_UTF8, msg, -1);
         
     | 
| 
       415 
384 
     | 
    
         | 
| 
       416 
     | 
    
         
            -
             
     | 
| 
      
 385 
     | 
    
         
            +
              result = message;
         
     | 
| 
      
 386 
     | 
    
         
            +
             
     | 
| 
      
 387 
     | 
    
         
            +
            cleanup:
         
     | 
| 
      
 388 
     | 
    
         
            +
             
     | 
| 
      
 389 
     | 
    
         
            +
              if (message)
         
     | 
| 
      
 390 
     | 
    
         
            +
                xfree(message);
         
     | 
| 
      
 391 
     | 
    
         
            +
             
     | 
| 
      
 392 
     | 
    
         
            +
              return result;
         
     | 
| 
      
 393 
     | 
    
         
            +
             
     | 
| 
      
 394 
     | 
    
         
            +
            #undef BUFSIZE
         
     | 
| 
      
 395 
     | 
    
         
            +
            }
         
     | 
| 
      
 396 
     | 
    
         
            +
             
     | 
| 
      
 397 
     | 
    
         
            +
            WCHAR* get_description(EVT_HANDLE handle)
         
     | 
| 
      
 398 
     | 
    
         
            +
            {
         
     | 
| 
      
 399 
     | 
    
         
            +
            #define BUFSIZE 4096
         
     | 
| 
      
 400 
     | 
    
         
            +
              WCHAR      buffer[BUFSIZE];
         
     | 
| 
      
 401 
     | 
    
         
            +
              ULONG      bufferSize = 0;
         
     | 
| 
      
 402 
     | 
    
         
            +
              ULONG      bufferSizeNeeded = 0;
         
     | 
| 
      
 403 
     | 
    
         
            +
              ULONG      status, count;
         
     | 
| 
      
 404 
     | 
    
         
            +
              static WCHAR *result = L"";
         
     | 
| 
      
 405 
     | 
    
         
            +
              LPTSTR     msgBuf = "";
         
     | 
| 
      
 406 
     | 
    
         
            +
              EVT_HANDLE hMetadata = NULL;
         
     | 
| 
      
 407 
     | 
    
         
            +
              PEVT_VARIANT values = NULL;
         
     | 
| 
      
 408 
     | 
    
         
            +
             
     | 
| 
      
 409 
     | 
    
         
            +
              static PCWSTR eventProperties[] = {L"Event/System/Provider/@Name"};
         
     | 
| 
      
 410 
     | 
    
         
            +
              EVT_HANDLE renderContext = EvtCreateRenderContext(1, eventProperties, EvtRenderContextValues);
         
     | 
| 
      
 411 
     | 
    
         
            +
              if (renderContext == NULL) {
         
     | 
| 
      
 412 
     | 
    
         
            +
                rb_raise(rb_eWinevtQueryError, "Failed to create renderContext");
         
     | 
| 
      
 413 
     | 
    
         
            +
              }
         
     | 
| 
      
 414 
     | 
    
         
            +
             
     | 
| 
      
 415 
     | 
    
         
            +
              if (EvtRender(renderContext,
         
     | 
| 
      
 416 
     | 
    
         
            +
                            handle,
         
     | 
| 
      
 417 
     | 
    
         
            +
                            EvtRenderEventValues,
         
     | 
| 
      
 418 
     | 
    
         
            +
                            _countof(buffer),
         
     | 
| 
      
 419 
     | 
    
         
            +
                            buffer,
         
     | 
| 
      
 420 
     | 
    
         
            +
                            &bufferSizeNeeded,
         
     | 
| 
      
 421 
     | 
    
         
            +
                            &count) != FALSE) {
         
     | 
| 
      
 422 
     | 
    
         
            +
                status = ERROR_SUCCESS;
         
     | 
| 
      
 423 
     | 
    
         
            +
              } else {
         
     | 
| 
      
 424 
     | 
    
         
            +
                status = GetLastError();
         
     | 
| 
      
 425 
     | 
    
         
            +
              }
         
     | 
| 
      
 426 
     | 
    
         
            +
             
     | 
| 
      
 427 
     | 
    
         
            +
              if (status != ERROR_SUCCESS) {
         
     | 
| 
      
 428 
     | 
    
         
            +
                FormatMessage(
         
     | 
| 
      
 429 
     | 
    
         
            +
                    FORMAT_MESSAGE_ALLOCATE_BUFFER |
         
     | 
| 
      
 430 
     | 
    
         
            +
                    FORMAT_MESSAGE_FROM_SYSTEM |
         
     | 
| 
      
 431 
     | 
    
         
            +
                    FORMAT_MESSAGE_IGNORE_INSERTS,
         
     | 
| 
      
 432 
     | 
    
         
            +
                    NULL, status,
         
     | 
| 
      
 433 
     | 
    
         
            +
                    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
         
     | 
| 
      
 434 
     | 
    
         
            +
                    msgBuf, 0, NULL);
         
     | 
| 
      
 435 
     | 
    
         
            +
             
     | 
| 
      
 436 
     | 
    
         
            +
                VALUE errmsg = rb_str_new2(msgBuf);
         
     | 
| 
      
 437 
     | 
    
         
            +
                LocalFree(msgBuf);
         
     | 
| 
      
 438 
     | 
    
         
            +
             
     | 
| 
      
 439 
     | 
    
         
            +
                rb_raise(rb_eWinevtQueryError, "ErrorCode: %d\nError: %s\n", status, RSTRING_PTR(errmsg));
         
     | 
| 
      
 440 
     | 
    
         
            +
              }
         
     | 
| 
      
 441 
     | 
    
         
            +
             
     | 
| 
      
 442 
     | 
    
         
            +
              // Obtain buffer as EVT_VARIANT pointer. To avoid ErrorCide 87 in EvtRender.
         
     | 
| 
      
 443 
     | 
    
         
            +
              values = (PEVT_VARIANT)buffer;
         
     | 
| 
      
 444 
     | 
    
         
            +
             
     | 
| 
      
 445 
     | 
    
         
            +
              // Open publisher metadata
         
     | 
| 
      
 446 
     | 
    
         
            +
              hMetadata = EvtOpenPublisherMetadata(NULL, values[0].StringVal, NULL, MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), SORT_DEFAULT), 0);
         
     | 
| 
      
 447 
     | 
    
         
            +
              if (hMetadata == NULL) {
         
     | 
| 
      
 448 
     | 
    
         
            +
                // When winevt_c cannot open metadata, then give up to obtain
         
     | 
| 
      
 449 
     | 
    
         
            +
                // message file and clean up immediately.
         
     | 
| 
      
 450 
     | 
    
         
            +
                goto cleanup;
         
     | 
| 
      
 451 
     | 
    
         
            +
              }
         
     | 
| 
      
 452 
     | 
    
         
            +
             
     | 
| 
      
 453 
     | 
    
         
            +
              result = get_message(hMetadata, handle);
         
     | 
| 
      
 454 
     | 
    
         
            +
             
     | 
| 
      
 455 
     | 
    
         
            +
            #undef BUFSIZE
         
     | 
| 
       417 
456 
     | 
    
         | 
| 
       418 
457 
     | 
    
         
             
            cleanup:
         
     | 
| 
       419 
458 
     | 
    
         | 
    
        data/lib/winevt/2.4/winevt.so
    CHANGED
    
    | 
         Binary file 
     | 
    
        data/lib/winevt/2.5/winevt.so
    CHANGED
    
    | 
         Binary file 
     | 
    
        data/lib/winevt/2.6/winevt.so
    CHANGED
    
    | 
         Binary file 
     | 
    
        data/lib/winevt/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: winevt_c
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.4.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: x64-mingw32
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Hiroshi Hatake
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2019-06- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2019-06-28 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     |