[python-win32] Issue with win32evtlog.ReportEvent

Mark Hammond skippy.hammond at gmail.com
Thu Apr 14 06:55:38 CEST 2011


On 13/04/2011 2:14 AM, Chris Frantz wrote:
> Hello,
>
> I'm having a bit of trouble with ReportEvent: When I use a large value
> for eventID, I get an OverflowError.
>
>  >>> import win32evtlogutil
>  >>> win32evtlogutil.ReportEvent('FooBar', 0xc0004652)
> Traceback (most recent call last):
>    File "<stdin>", line 1, in <module>
>    File "c:\python26\lib\site-packages\win32\lib\win32evtlogutil.py",
> line 80, in ReportEvent
>      data)
> OverflowError: long int too large to convert to int

Yeah - this is a bug in the general DWORD handling in SWIG generated 
files.  I'm not sure how to tell SWIG to use a different format char, 
but I have managed to work around it in other ways which is good for the 
general case.

However, in this case specifically, it doesn't seem to work as intended. 
  After fixing it, the Event Viewer shows the event ID is actually 18002 
- which is 0xc0004652 with the 2 most significant bits reset to zero. 
Digging deeper, the docs at 
http://msdn.microsoft.com/en-us/library/aa363651%28v=vs.85%29.aspx imply 
those 2 bits are used to record the severity of the message.  It appears 
the function will mask out those bits according to the other params 
passed to ReportEvent, meaning you can't wind up with such an event ID 
in the event viewer anyway...

But this consideration is specific to ReportEvent - so the next pywin32 
build will allow DWORD params in SWIG wrappers to pass such integers 
without error - but it seems that wont actually help your problem.

Cheers,

Mark


More information about the python-win32 mailing list