winevt_c 0.9.0 → 0.9.1
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_query.c +72 -5
- data/ext/winevt/winevt_subscribe.c +85 -6
- 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: d691ef9954d626041b79d1d63a4258537ded33c0f9c07c9551fd40b6aa211f12
|
4
|
+
data.tar.gz: fbe964ae721b310ca9c9adcf092b0f5ab4f0207e154c41287c17b2a6275932db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90059826d6c9ab0efdce70b7d4c5c4490c69e522fbcaef284e3616aa043b4de63731fe3805c9c4b8837842e44da04f376d8a813b750f926c3ab474c88c332b8c
|
7
|
+
data.tar.gz: 4c75263c161461089b754d512c5d7eaaa9aec9d8e7debeff1d9e0c98c73639f4157f332b5c32ad805b6e3df08e8a330e2e5d76fa85902dc70f133c4e4180ea87
|
data/ext/winevt/winevt_query.c
CHANGED
@@ -32,19 +32,31 @@ static const rb_data_type_t rb_winevt_query_type = { "winevt/query",
|
|
32
32
|
RUBY_TYPED_FREE_IMMEDIATELY };
|
33
33
|
|
34
34
|
static void
|
35
|
-
|
35
|
+
close_handles(struct WinevtQuery* winevtQuery)
|
36
36
|
{
|
37
|
-
|
38
|
-
if (winevtQuery->query)
|
37
|
+
if (winevtQuery->query) {
|
39
38
|
EvtClose(winevtQuery->query);
|
39
|
+
winevtQuery->query = NULL;
|
40
|
+
}
|
40
41
|
|
41
42
|
for (int i = 0; i < winevtQuery->count; i++) {
|
42
|
-
if (winevtQuery->hEvents[i])
|
43
|
+
if (winevtQuery->hEvents[i]) {
|
43
44
|
EvtClose(winevtQuery->hEvents[i]);
|
45
|
+
winevtQuery->hEvents[i] = NULL;
|
46
|
+
}
|
44
47
|
}
|
45
48
|
|
46
|
-
if (winevtQuery->remoteHandle)
|
49
|
+
if (winevtQuery->remoteHandle) {
|
47
50
|
EvtClose(winevtQuery->remoteHandle);
|
51
|
+
winevtQuery->remoteHandle = NULL;
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
static void
|
56
|
+
query_free(void* ptr)
|
57
|
+
{
|
58
|
+
struct WinevtQuery* winevtQuery = (struct WinevtQuery*)ptr;
|
59
|
+
close_handles(winevtQuery);
|
48
60
|
|
49
61
|
xfree(ptr);
|
50
62
|
}
|
@@ -219,6 +231,9 @@ rb_winevt_query_next(VALUE self)
|
|
219
231
|
|
220
232
|
if (!EvtNext(winevtQuery->query, QUERY_ARRAY_SIZE, hEvents, INFINITE, 0, &count)) {
|
221
233
|
status = GetLastError();
|
234
|
+
if (ERROR_CANCELLED == status) {
|
235
|
+
return Qfalse;
|
236
|
+
}
|
222
237
|
if (ERROR_NO_MORE_ITEMS != status) {
|
223
238
|
return Qfalse;
|
224
239
|
}
|
@@ -507,6 +522,50 @@ rb_winevt_query_get_locale(VALUE self)
|
|
507
522
|
}
|
508
523
|
}
|
509
524
|
|
525
|
+
/*
|
526
|
+
* This method cancels channel query.
|
527
|
+
*
|
528
|
+
* @return [Boolean]
|
529
|
+
* @since 0.9.1
|
530
|
+
*/
|
531
|
+
static VALUE
|
532
|
+
rb_winevt_query_cancel(VALUE self)
|
533
|
+
{
|
534
|
+
struct WinevtQuery* winevtQuery;
|
535
|
+
BOOL result = FALSE;
|
536
|
+
|
537
|
+
TypedData_Get_Struct(
|
538
|
+
self, struct WinevtQuery, &rb_winevt_query_type, winevtQuery);
|
539
|
+
|
540
|
+
if (winevtQuery->query) {
|
541
|
+
result = EvtCancel(winevtQuery->query);
|
542
|
+
}
|
543
|
+
|
544
|
+
if (result) {
|
545
|
+
return Qtrue;
|
546
|
+
} else {
|
547
|
+
return Qfalse;
|
548
|
+
}
|
549
|
+
}
|
550
|
+
|
551
|
+
/*
|
552
|
+
* This method closes channel handles forcibly.
|
553
|
+
*
|
554
|
+
* @since 0.9.1
|
555
|
+
*/
|
556
|
+
static VALUE
|
557
|
+
rb_winevt_query_close(VALUE self)
|
558
|
+
{
|
559
|
+
struct WinevtQuery* winevtQuery;
|
560
|
+
|
561
|
+
TypedData_Get_Struct(
|
562
|
+
self, struct WinevtQuery, &rb_winevt_query_type, winevtQuery);
|
563
|
+
|
564
|
+
close_handles(winevtQuery);
|
565
|
+
|
566
|
+
return Qnil;
|
567
|
+
}
|
568
|
+
|
510
569
|
void
|
511
570
|
Init_winevt_query(VALUE rb_cEventLog)
|
512
571
|
{
|
@@ -580,4 +639,12 @@ Init_winevt_query(VALUE rb_cEventLog)
|
|
580
639
|
* @since 0.8.0
|
581
640
|
*/
|
582
641
|
rb_define_method(rb_cQuery, "locale=", rb_winevt_query_set_locale, 1);
|
642
|
+
/*
|
643
|
+
* @since 0.9.1
|
644
|
+
*/
|
645
|
+
rb_define_method(rb_cQuery, "cancel", rb_winevt_query_cancel, 0);
|
646
|
+
/*
|
647
|
+
* @since 0.9.1
|
648
|
+
*/
|
649
|
+
rb_define_method(rb_cQuery, "close", rb_winevt_query_close, 0);
|
583
650
|
}
|
@@ -39,26 +39,42 @@ static const rb_data_type_t rb_winevt_subscribe_type = { "winevt/subscribe",
|
|
39
39
|
RUBY_TYPED_FREE_IMMEDIATELY };
|
40
40
|
|
41
41
|
static void
|
42
|
-
|
42
|
+
close_handles(struct WinevtSubscribe* winevtSubscribe)
|
43
43
|
{
|
44
|
-
|
45
|
-
if (winevtSubscribe->signalEvent)
|
44
|
+
if (winevtSubscribe->signalEvent) {
|
46
45
|
CloseHandle(winevtSubscribe->signalEvent);
|
46
|
+
winevtSubscribe->signalEvent = NULL;
|
47
|
+
}
|
47
48
|
|
48
|
-
if (winevtSubscribe->subscription)
|
49
|
+
if (winevtSubscribe->subscription) {
|
49
50
|
EvtClose(winevtSubscribe->subscription);
|
51
|
+
winevtSubscribe->subscription = NULL;
|
52
|
+
}
|
50
53
|
|
51
|
-
if (winevtSubscribe->bookmark)
|
54
|
+
if (winevtSubscribe->bookmark) {
|
52
55
|
EvtClose(winevtSubscribe->bookmark);
|
56
|
+
winevtSubscribe->bookmark = NULL;
|
57
|
+
}
|
53
58
|
|
54
59
|
for (int i = 0; i < winevtSubscribe->count; i++) {
|
55
60
|
if (winevtSubscribe->hEvents[i]) {
|
56
61
|
EvtClose(winevtSubscribe->hEvents[i]);
|
62
|
+
winevtSubscribe->hEvents[i] = NULL;
|
57
63
|
}
|
58
64
|
}
|
65
|
+
winevtSubscribe->count = 0;
|
59
66
|
|
60
|
-
if (winevtSubscribe->remoteHandle)
|
67
|
+
if (winevtSubscribe->remoteHandle) {
|
61
68
|
EvtClose(winevtSubscribe->remoteHandle);
|
69
|
+
winevtSubscribe->remoteHandle = NULL;
|
70
|
+
}
|
71
|
+
}
|
72
|
+
|
73
|
+
static void
|
74
|
+
subscribe_free(void* ptr)
|
75
|
+
{
|
76
|
+
struct WinevtSubscribe* winevtSubscribe = (struct WinevtSubscribe*)ptr;
|
77
|
+
close_handles(winevtSubscribe);
|
62
78
|
|
63
79
|
xfree(ptr);
|
64
80
|
}
|
@@ -328,6 +344,11 @@ rb_winevt_subscribe_next(VALUE self)
|
|
328
344
|
return Qfalse;
|
329
345
|
}
|
330
346
|
|
347
|
+
/* If subscription handle is NULL, it should return false. */
|
348
|
+
if (!winevtSubscribe->subscription) {
|
349
|
+
return Qfalse;
|
350
|
+
}
|
351
|
+
|
331
352
|
if (!EvtNext(winevtSubscribe->subscription,
|
332
353
|
SUBSCRIBE_ARRAY_SIZE,
|
333
354
|
hEvents,
|
@@ -335,6 +356,9 @@ rb_winevt_subscribe_next(VALUE self)
|
|
335
356
|
0,
|
336
357
|
&count)) {
|
337
358
|
status = GetLastError();
|
359
|
+
if (ERROR_CANCELLED == status) {
|
360
|
+
return Qfalse;
|
361
|
+
}
|
338
362
|
if (ERROR_NO_MORE_ITEMS != status) {
|
339
363
|
return Qfalse;
|
340
364
|
}
|
@@ -623,6 +647,51 @@ rb_winevt_subscribe_get_locale(VALUE self)
|
|
623
647
|
}
|
624
648
|
}
|
625
649
|
|
650
|
+
/*
|
651
|
+
* This method cancels channel subscription.
|
652
|
+
*
|
653
|
+
* @return [Boolean]
|
654
|
+
* @since 0.9.1
|
655
|
+
*/
|
656
|
+
static VALUE
|
657
|
+
rb_winevt_subscribe_cancel(VALUE self)
|
658
|
+
{
|
659
|
+
struct WinevtSubscribe* winevtSubscribe;
|
660
|
+
BOOL result = FALSE;
|
661
|
+
|
662
|
+
TypedData_Get_Struct(
|
663
|
+
self, struct WinevtSubscribe, &rb_winevt_subscribe_type, winevtSubscribe);
|
664
|
+
|
665
|
+
if (winevtSubscribe->subscription) {
|
666
|
+
result = EvtCancel(winevtSubscribe->subscription);
|
667
|
+
}
|
668
|
+
|
669
|
+
if (result) {
|
670
|
+
return Qtrue;
|
671
|
+
} else {
|
672
|
+
return Qfalse;
|
673
|
+
}
|
674
|
+
}
|
675
|
+
|
676
|
+
/*
|
677
|
+
* This method closes channel handles forcibly.
|
678
|
+
*
|
679
|
+
* @since 0.9.1
|
680
|
+
*/
|
681
|
+
static VALUE
|
682
|
+
rb_winevt_subscribe_close(VALUE self)
|
683
|
+
{
|
684
|
+
struct WinevtSubscribe* winevtSubscribe;
|
685
|
+
|
686
|
+
TypedData_Get_Struct(
|
687
|
+
self, struct WinevtSubscribe, &rb_winevt_subscribe_type, winevtSubscribe);
|
688
|
+
|
689
|
+
close_handles(winevtSubscribe);
|
690
|
+
|
691
|
+
return Qnil;
|
692
|
+
}
|
693
|
+
|
694
|
+
|
626
695
|
void
|
627
696
|
Init_winevt_subscribe(VALUE rb_cEventLog)
|
628
697
|
{
|
@@ -675,4 +744,14 @@ Init_winevt_subscribe(VALUE rb_cEventLog)
|
|
675
744
|
*/
|
676
745
|
rb_define_method(
|
677
746
|
rb_cSubscribe, "locale=", rb_winevt_subscribe_set_locale, 1);
|
747
|
+
/*
|
748
|
+
* @since 0.9.1
|
749
|
+
*/
|
750
|
+
rb_define_method(
|
751
|
+
rb_cSubscribe, "cancel", rb_winevt_subscribe_cancel, 0);
|
752
|
+
/*
|
753
|
+
* @since 0.9.1
|
754
|
+
*/
|
755
|
+
rb_define_method(
|
756
|
+
rb_cSubscribe, "close", rb_winevt_subscribe_close, 0);
|
678
757
|
}
|
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.9.
|
4
|
+
version: 0.9.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hiroshi Hatake
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-09-
|
11
|
+
date: 2020-09-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|