Skip to content

Commit e401de0

Browse files
authored
event/exception methods (#30)
1 parent 59f66b6 commit e401de0

File tree

1 file changed

+54
-15
lines changed

1 file changed

+54
-15
lines changed

pybag/dbgeng/idebugcontrol.py

Lines changed: 54 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -431,37 +431,76 @@ def GetWindbgExtensionApis64(self):
431431
raise exception.E_NOTIMPL_Error
432432

433433
def GetNumberEventFilters(self):
434-
raise exception.E_NOTIMPL_Error
434+
n_events = c_ulong()
435+
n_spec_exc = c_ulong()
436+
n_arb_exc = c_ulong()
437+
hr = dbg._base._control._ctrl.GetNumberEventFilters(byref(n_events), byref(n_spec_exc), byref(n_arb_exc))
438+
exception.check_err(hr)
439+
return (n_events.value, n_spec_exc.value, n_arb_exc.value)
435440

436-
def GetEventFilterText(self):
437-
raise exception.E_NOTIMPL_Error
441+
def GetEventFilterText(self, index, sz):
442+
if sz == 0:
443+
return None
444+
len = c_ulong()
445+
val = create_string_buffer(sz)
446+
hr = dbg._base._control._ctrl.GetEventFilterText(index, val, sz, byref(len))
447+
exception.check_err(hr)
448+
return val.value[:len.value].decode()
438449

439-
def GetEventFilterCommand(self):
440-
raise exception.E_NOTIMPL_Error
450+
def GetEventFilterCommand(self, index, sz):
451+
if sz == 0:
452+
return None
453+
len = c_ulong()
454+
val = create_string_buffer(sz)
455+
hr = dbg._base._control._ctrl.GetEventFilterCommand(index, val, sz, byref(len))
456+
exception.check_err(hr)
457+
return val.value[:len.value].decode()
441458

442459
def SetEventFilterCommand(self):
443460
raise exception.E_NOTIMPL_Error
444461

445-
def GetSpecificFilterParameters(self):
446-
raise exception.E_NOTIMPL_Error
462+
def GetSpecificFilterParameters(self, start, count):
463+
params = (DbgEng._DEBUG_SPECIFIC_FILTER_PARAMETERS * count)()
464+
parray = cast(params, POINTER(DbgEng._DEBUG_SPECIFIC_FILTER_PARAMETERS))
465+
hr = dbg._base._control._ctrl.GetSpecificFilterParameters(start, count, parray)
466+
exception.check_err(hr)
467+
return parray
447468

448-
def SetSpecificFilterParameters(self):
449-
raise exception.E_NOTIMPL_Error
469+
def SetSpecificFilterParameters(self, start, count, parray):
470+
hr = dbg._base._control._ctrl.SetSpecificFilterParameters(start, count, parray)
471+
exception.check_err(hr)
450472

451-
def GetSpecificFilterArgument(self):
452-
raise exception.E_NOTIMPL_Error
473+
def GetSpecificFilterArgument(self, index, sz):
474+
if sz == 0:
475+
return None
476+
len = c_ulong()
477+
val = create_string_buffer(sz)
478+
hr = dbg._base._control._ctrl.GetSpecificFilterArgument(index, val, sz, byref(len))
479+
exception.check_err(hr)
480+
return val.value[:len.value].decode()
453481

454482
def SetSpecificFilterArgument(self):
455483
raise exception.E_NOTIMPL_Error
456484

457485
def GetExceptionFilterParameters(self):
458-
raise exception.E_NOTIMPL_Error
486+
params = (DbgEng._DEBUG_EXCEPTION_FILTER_PARAMETERS * count)()
487+
parray = cast(params, POINTER(DbgEng._DEBUG_EXCEPTION_FILTER_PARAMETERS))
488+
hr = dbg._base._control._ctrl.GetExceptionFilterParameters(count, codes, start, parray)
489+
exception.check_err(hr)
490+
return parray
459491

460492
def SetExceptionFilterParameters(self):
461-
raise exception.E_NOTIMPL_Error
493+
hr = dbg._base._control._ctrl.SetExceptionFilterParameters(count, parray)
494+
exception.check_err(hr)
462495

463-
def GetExceptionFilterSecondCommand(self):
464-
raise exception.E_NOTIMPL_Error
496+
def GetExceptionFilterSecondCommand(self, index, sz):
497+
if sz == 0:
498+
return None
499+
len = c_ulong()
500+
val = create_string_buffer(sz)
501+
hr = dbg._base._control._ctrl.GetExceptionFilterSecondCommand(index, val, sz, byref(len))
502+
exception.check_err(hr)
503+
return val.value[:len.value].decode()
465504

466505
def SetExceptionFilterSecondCommand(self):
467506
raise exception.E_NOTIMPL_Error

0 commit comments

Comments
 (0)