# DExTer : Debugging Experience Tester # ~~~~~~ ~ ~~ ~ ~~ # # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception from ctypes import * # Error codes are negative when received by python, but are typically # represented by unsigned hex elsewhere. Subtract 2^32 from the unsigned # hex to produce negative error codes. E_NOINTERFACE = 0x80004002 - 0x100000000 E_FAIL = 0x80004005 - 0x100000000 E_EINVAL = 0x80070057 - 0x100000000 E_INTERNALEXCEPTION = 0x80040205 - 0x100000000 S_FALSE = 1 # This doesn't fit into any convenient category DEBUG_ANY_ID = 0xFFFFFFFF class WinError(Exception): def __init__(self, msg, hstatus): self.hstatus = hstatus super(WinError, self).__init__(msg) def aborter(res, msg, ignore=[]): if res != 0 and res not in ignore: # Convert a negative error code to a positive unsigned one, which is # now NTSTATUSes appear in documentation. if res < 0: res += 0x100000000 msg = '{:08X} : {}'.format(res, msg) raise WinError(msg, res) IID_Data4_Type = c_ubyte * 8 class IID(Structure): _fields_ = [ ("Data1", c_uint), ("Data2", c_ushort), ("Data3", c_ushort), ("Data4", IID_Data4_Type) ] c_ulong_p = POINTER(c_ulong) c_ulong64_p = POINTER(c_ulonglong)