Class: Winevt::EventLog::Query
- Inherits:
-
Object
- Object
- Winevt::EventLog::Query
- Defined in:
- lib/winevt/query.rb,
ext/winevt/winevt.c
Defined Under Namespace
Classes: Error
Instance Method Summary collapse
- #each ⇒ Object
- #initialize(channel, xpath) ⇒ Object constructor
- #next ⇒ Object
- #offset(offset) ⇒ Object
- #offset=(offset) ⇒ Object
- #render ⇒ Object
- #seek(bookmark_or_flag) ⇒ Object
- #timeout(timeout) ⇒ Object
- #timeout=(timeout) ⇒ Object
Constructor Details
#initialize(channel, xpath) ⇒ Object
466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 |
# File 'ext/winevt/winevt.c', line 466
static VALUE
rb_winevt_query_initialize(VALUE self, VALUE channel, VALUE xpath)
{
PWSTR evtChannel, evtXPath;
struct WinevtQuery *winevtQuery;
DWORD len;
VALUE wchannelBuf, wpathBuf;
Check_Type(channel, T_STRING);
Check_Type(xpath, T_STRING);
// channel : To wide char
len = MultiByteToWideChar(CP_UTF8, 0, RSTRING_PTR(channel), RSTRING_LEN(channel), NULL, 0);
evtChannel = ALLOCV_N(WCHAR, wchannelBuf, len+1);
MultiByteToWideChar(CP_UTF8, 0, RSTRING_PTR(channel), RSTRING_LEN(channel), evtChannel, len);
evtChannel[len] = L'\0';
// xpath : To wide char
len = MultiByteToWideChar(CP_UTF8, 0, RSTRING_PTR(xpath), RSTRING_LEN(xpath), NULL, 0);
evtXPath = ALLOCV_N(WCHAR, wpathBuf, len+1);
MultiByteToWideChar(CP_UTF8, 0, RSTRING_PTR(xpath), RSTRING_LEN(xpath), evtXPath, len);
evtXPath[len] = L'\0';
TypedData_Get_Struct(self, struct WinevtQuery, &rb_winevt_query_type, winevtQuery);
winevtQuery->query = EvtQuery(NULL, evtChannel, evtXPath,
EvtQueryChannelPath | EvtQueryTolerateQueryErrors);
winevtQuery->offset = 0L;
winevtQuery->timeout = 0L;
ALLOCV_END(wchannelBuf);
ALLOCV_END(wpathBuf);
return Qnil;
}
|
Instance Method Details
#each ⇒ Object
688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 |
# File 'ext/winevt/winevt.c', line 688
static VALUE
rb_winevt_query_each(VALUE self)
{
struct WinevtQuery *winevtQuery;
RETURN_ENUMERATOR(self, 0, 0);
TypedData_Get_Struct(self, struct WinevtQuery, &rb_winevt_query_type, winevtQuery);
while (rb_winevt_query_next(self)) {
rb_yield(rb_winevt_query_render(self));
}
return Qnil;
}
|
#next ⇒ Object
546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 |
# File 'ext/winevt/winevt.c', line 546
static VALUE
rb_winevt_query_next(VALUE self)
{
EVT_HANDLE event;
ULONG count;
struct WinevtQuery *winevtQuery;
TypedData_Get_Struct(self, struct WinevtQuery, &rb_winevt_query_type, winevtQuery);
if (EvtNext(winevtQuery->query, 1, &event, INFINITE, 0, &count) != FALSE) {
winevtQuery->event = event;
winevtQuery->count = count;
return Qtrue;
}
return Qfalse;
}
|
#offset(offset) ⇒ Object
502 503 504 505 506 507 508 509 510 |
# File 'ext/winevt/winevt.c', line 502
static VALUE
rb_winevt_query_get_offset(VALUE self, VALUE offset)
{
struct WinevtQuery *winevtQuery;
TypedData_Get_Struct(self, struct WinevtQuery, &rb_winevt_query_type, winevtQuery);
return LONG2NUM(winevtQuery->offset);
}
|
#offset=(offset) ⇒ Object
512 513 514 515 516 517 518 519 520 521 522 |
# File 'ext/winevt/winevt.c', line 512
static VALUE
rb_winevt_query_set_offset(VALUE self, VALUE offset)
{
struct WinevtQuery *winevtQuery;
TypedData_Get_Struct(self, struct WinevtQuery, &rb_winevt_query_type, winevtQuery);
winevtQuery->offset = NUM2LONG(offset);
return Qnil;
}
|
#render ⇒ Object
624 625 626 627 628 629 630 631 632 633 634 |
# File 'ext/winevt/winevt.c', line 624
static VALUE
rb_winevt_query_render(VALUE self)
{
char* result;
struct WinevtQuery *winevtQuery;
TypedData_Get_Struct(self, struct WinevtQuery, &rb_winevt_query_type, winevtQuery);
result = render_event(winevtQuery->event, EvtRenderEventXml);
return rb_str_new2(result);
}
|
#seek(bookmark_or_flag) ⇒ Object
653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 |
# File 'ext/winevt/winevt.c', line 653
static VALUE
rb_winevt_query_seek(VALUE self, VALUE bookmark_or_flag)
{
struct WinevtQuery *winevtQuery;
struct WinevtBookmark *winevtBookmark = NULL;
DWORD status;
DWORD flag;
switch (TYPE(bookmark_or_flag)) {
case T_SYMBOL:
flag = get_evt_seek_flag_from_cstr(RSTRING_PTR(rb_sym2str(bookmark_or_flag)));
break;
case T_STRING:
flag = get_evt_seek_flag_from_cstr(StringValueCStr(bookmark_or_flag));
break;
default:
if (!rb_obj_is_kind_of(bookmark_or_flag, rb_cBookmark))
rb_raise(rb_eArgError, "Expected a String or a Symbol or a Bookmark instance");
winevtBookmark = EventBookMark(bookmark_or_flag);
}
if (winevtBookmark) {
TypedData_Get_Struct(self, struct WinevtQuery, &rb_winevt_query_type, winevtQuery);
if (EvtSeek(winevtQuery->query, winevtQuery->offset, winevtBookmark->bookmark, winevtQuery->timeout, EvtSeekRelativeToBookmark))
return Qtrue;
} else {
TypedData_Get_Struct(self, struct WinevtQuery, &rb_winevt_query_type, winevtQuery);
if (EvtSeek(winevtQuery->query, winevtQuery->offset, NULL, winevtQuery->timeout, flag))
return Qtrue;
}
return Qfalse;
}
|
#timeout(timeout) ⇒ Object
524 525 526 527 528 529 530 531 532 |
# File 'ext/winevt/winevt.c', line 524
static VALUE
rb_winevt_query_get_timeout(VALUE self, VALUE timeout)
{
struct WinevtQuery *winevtQuery;
TypedData_Get_Struct(self, struct WinevtQuery, &rb_winevt_query_type, winevtQuery);
return LONG2NUM(winevtQuery->timeout);
}
|
#timeout=(timeout) ⇒ Object
534 535 536 537 538 539 540 541 542 543 544 |
# File 'ext/winevt/winevt.c', line 534
static VALUE
rb_winevt_query_set_timeout(VALUE self, VALUE timeout)
{
struct WinevtQuery *winevtQuery;
TypedData_Get_Struct(self, struct WinevtQuery, &rb_winevt_query_type, winevtQuery);
winevtQuery->timeout = NUM2LONG(timeout);
return Qnil;
}
|