11364750dSJames Henderson# DExTer : Debugging Experience Tester 21364750dSJames Henderson# ~~~~~~ ~ ~~ ~ ~~ 31364750dSJames Henderson# 41364750dSJames Henderson# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 51364750dSJames Henderson# See https://llvm.org/LICENSE.txt for license information. 61364750dSJames Henderson# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 71364750dSJames Henderson 81364750dSJames Hendersonfrom ctypes import * 91364750dSJames Henderson 101364750dSJames Henderson# Error codes are negative when received by python, but are typically 111364750dSJames Henderson# represented by unsigned hex elsewhere. Subtract 2^32 from the unsigned 121364750dSJames Henderson# hex to produce negative error codes. 131364750dSJames HendersonE_NOINTERFACE = 0x80004002 - 0x100000000 141364750dSJames HendersonE_FAIL = 0x80004005 - 0x100000000 151364750dSJames HendersonE_EINVAL = 0x80070057 - 0x100000000 161364750dSJames HendersonE_INTERNALEXCEPTION = 0x80040205 - 0x100000000 171364750dSJames HendersonS_FALSE = 1 181364750dSJames Henderson 191364750dSJames Henderson# This doesn't fit into any convenient category 201364750dSJames HendersonDEBUG_ANY_ID = 0xFFFFFFFF 211364750dSJames Henderson 22*f98ee40fSTobias Hieta 231364750dSJames Hendersonclass WinError(Exception): 241364750dSJames Henderson def __init__(self, msg, hstatus): 251364750dSJames Henderson self.hstatus = hstatus 261364750dSJames Henderson super(WinError, self).__init__(msg) 271364750dSJames Henderson 28*f98ee40fSTobias Hieta 291364750dSJames Hendersondef aborter(res, msg, ignore=[]): 301364750dSJames Henderson if res != 0 and res not in ignore: 311364750dSJames Henderson # Convert a negative error code to a positive unsigned one, which is 321364750dSJames Henderson # now NTSTATUSes appear in documentation. 331364750dSJames Henderson if res < 0: 341364750dSJames Henderson res += 0x100000000 35*f98ee40fSTobias Hieta msg = "{:08X} : {}".format(res, msg) 361364750dSJames Henderson raise WinError(msg, res) 371364750dSJames Henderson 38*f98ee40fSTobias Hieta 391364750dSJames HendersonIID_Data4_Type = c_ubyte * 8 401364750dSJames Henderson 41*f98ee40fSTobias Hieta 421364750dSJames Hendersonclass IID(Structure): 431364750dSJames Henderson _fields_ = [ 441364750dSJames Henderson ("Data1", c_uint), 451364750dSJames Henderson ("Data2", c_ushort), 461364750dSJames Henderson ("Data3", c_ushort), 47*f98ee40fSTobias Hieta ("Data4", IID_Data4_Type), 481364750dSJames Henderson ] 491364750dSJames Henderson 50*f98ee40fSTobias Hieta 511364750dSJames Hendersonc_ulong_p = POINTER(c_ulong) 521364750dSJames Hendersonc_ulong64_p = POINTER(c_ulonglong) 53