Python ctypes.Structure() Examples
The following are 30
code examples of ctypes.Structure().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
ctypes
, or try the search function
.
Example #1
Source File: gen.py From multibootusb with GNU General Public License v2.0 | 12 votes |
def windowsRam(self): """ Uses Windows API to check RAM """ kernel32 = ctypes.windll.kernel32 c_ulong = ctypes.c_ulong class MEMORYSTATUS(ctypes.Structure): _fields_ = [ ("dwLength", c_ulong), ("dwMemoryLoad", c_ulong), ("dwTotalPhys", c_ulong), ("dwAvailPhys", c_ulong), ("dwTotalPageFile", c_ulong), ("dwAvailPageFile", c_ulong), ("dwTotalVirtual", c_ulong), ("dwAvailVirtual", c_ulong) ] memoryStatus = MEMORYSTATUS() memoryStatus.dwLength = ctypes.sizeof(MEMORYSTATUS) kernel32.GlobalMemoryStatus(ctypes.byref(memoryStatus)) return int(memoryStatus.dwTotalPhys / 1024 ** 2)
Example #2
Source File: test_dtype.py From recruit with Apache License 2.0 | 8 votes |
def test_union_with_struct_packed(self): class Struct(ctypes.Structure): _pack_ = 1 _fields_ = [ ('one', ctypes.c_uint8), ('two', ctypes.c_uint32) ] class Union(ctypes.Union): _fields_ = [ ('a', ctypes.c_uint8), ('b', ctypes.c_uint16), ('c', ctypes.c_uint32), ('d', Struct), ] expected = np.dtype(dict( names=['a', 'b', 'c', 'd'], formats=['u1', np.uint16, np.uint32, [('one', 'u1'), ('two', np.uint32)]], offsets=[0, 0, 0, 0], itemsize=ctypes.sizeof(Union) )) self.check(Union, expected)
Example #3
Source File: support.py From deepWordBug with Apache License 2.0 | 6 votes |
def _is_gui_available(): UOI_FLAGS = 1 WSF_VISIBLE = 0x0001 class USEROBJECTFLAGS(ctypes.Structure): _fields_ = [("fInherit", ctypes.wintypes.BOOL), ("fReserved", ctypes.wintypes.BOOL), ("dwFlags", ctypes.wintypes.DWORD)] dll = ctypes.windll.user32 h = dll.GetProcessWindowStation() if not h: raise ctypes.WinError() uof = USEROBJECTFLAGS() needed = ctypes.wintypes.DWORD() res = dll.GetUserObjectInformationW(h, UOI_FLAGS, ctypes.byref(uof), ctypes.sizeof(uof), ctypes.byref(needed)) if not res: raise ctypes.WinError() return bool(uof.dwFlags & WSF_VISIBLE)
Example #4
Source File: backend_ctypes.py From kotori with GNU Affero General Public License v3.0 | 6 votes |
def __init__(self, **kwargs): """ Ctypes.Structure with integrated default values. https://stackoverflow.com/questions/7946519/default-values-in-a-ctypes-structure/25892189#25892189 :param kwargs: values different to defaults :type kwargs: dict """ # sanity checks defaults = type(self)._defaults_ assert type(defaults) is types.DictionaryType # use defaults, but override with keyword arguments, if any values = defaults.copy() for (key, val) in kwargs.items(): values[key] = val # appropriately initialize ctypes.Structure #super().__init__(**values) # Python 3 syntax return Structure.__init__(self, **values) # Python 2 syntax # http://stackoverflow.com/questions/1825715/how-to-pack-and-unpack-using-ctypes-structure-str/1827666#1827666 # https://wiki.python.org/moin/ctypes
Example #5
Source File: test_dtype.py From Mastering-Elasticsearch-7.0 with MIT License | 6 votes |
def test_union_with_struct_packed(self): class Struct(ctypes.Structure): _pack_ = 1 _fields_ = [ ('one', ctypes.c_uint8), ('two', ctypes.c_uint32) ] class Union(ctypes.Union): _fields_ = [ ('a', ctypes.c_uint8), ('b', ctypes.c_uint16), ('c', ctypes.c_uint32), ('d', Struct), ] expected = np.dtype(dict( names=['a', 'b', 'c', 'd'], formats=['u1', np.uint16, np.uint32, [('one', 'u1'), ('two', np.uint32)]], offsets=[0, 0, 0, 0], itemsize=ctypes.sizeof(Union) )) self.check(Union, expected)
Example #6
Source File: test_dtype.py From Mastering-Elasticsearch-7.0 with MIT License | 6 votes |
def test_union_packed(self): class Struct(ctypes.Structure): _fields_ = [ ('one', ctypes.c_uint8), ('two', ctypes.c_uint32) ] _pack_ = 1 class Union(ctypes.Union): _pack_ = 1 _fields_ = [ ('a', ctypes.c_uint8), ('b', ctypes.c_uint16), ('c', ctypes.c_uint32), ('d', Struct), ] expected = np.dtype(dict( names=['a', 'b', 'c', 'd'], formats=['u1', np.uint16, np.uint32, [('one', 'u1'), ('two', np.uint32)]], offsets=[0, 0, 0, 0], itemsize=ctypes.sizeof(Union) )) self.check(Union, expected)
Example #7
Source File: artnet_message.py From BiblioPixel with MIT License | 6 votes |
def MessageClass(length=DMX_LENGTH): assert 0 <= length <= DMX_LENGTH assert length % 2 == 0, 'artnet only takes messages of even length' Char, Int8, Int16 = ctypes.c_char, ctypes.c_ubyte, ctypes.c_ushort class DMXMessage(ctypes.Structure): # http://artisticlicence.com/WebSiteMaster/User%20Guides/art-net.pdf p47 _fields_ = [ ('id', Char * 8), ('opCode', Int16), ('protVerHi', Int8), ('protVerLo', Int8), ('sequence', Int8), ('physical', Int8), ('subUni', Int8), ('net', Int8), ('lengthHi', Int8), ('length', Int8), ('data', Int8 * length), # At position 18 ] return DMXMessage
Example #8
Source File: test_dtype.py From recruit with Apache License 2.0 | 6 votes |
def test_union_packed(self): class Struct(ctypes.Structure): _fields_ = [ ('one', ctypes.c_uint8), ('two', ctypes.c_uint32) ] _pack_ = 1 class Union(ctypes.Union): _pack_ = 1 _fields_ = [ ('a', ctypes.c_uint8), ('b', ctypes.c_uint16), ('c', ctypes.c_uint32), ('d', Struct), ] expected = np.dtype(dict( names=['a', 'b', 'c', 'd'], formats=['u1', np.uint16, np.uint32, [('one', 'u1'), ('two', np.uint32)]], offsets=[0, 0, 0, 0], itemsize=ctypes.sizeof(Union) )) self.check(Union, expected)
Example #9
Source File: remotectypes.py From LKD with BSD 3-Clause "New" or "Revised" License | 6 votes |
def create_remote_array(subtype, len): class RemoteArray(_ctypes.Array): _length_ = len _type_ = subtype def __init__(self, addr, target): self._base_addr = addr self.target = target def __getitem__(self, slice): if not isinstance(slice, (int, long)): raise NotImplementedError("RemoteArray slice __getitem__") if slice >= len: raise IndexError("Access to {0} for a RemoteArray of size {1}".format(slice, len)) item_addr = self._base_addr + (ctypes.sizeof(subtype) * slice) # TODO: do better ? class TST(ctypes.Structure): _fields_ = [("TST", subtype)] return RemoteStructure.from_structure(TST)(item_addr, target=self.target).TST return RemoteArray # 64bits pointers
Example #10
Source File: remotectypes.py From LKD with BSD 3-Clause "New" or "Revised" License | 6 votes |
def _handle_field_getattr(self, ftype, fosset, fsize): s = self._target.read_memory(self._base_addr + fosset, fsize) if ftype in self._field_type_to_remote_type: return self._field_type_to_remote_type[ftype].from_buffer_with_target(bytearray(s), target=self._target).value if issubclass(ftype, _ctypes._Pointer): # Pointer return RemoteStructurePointer.from_buffer_with_target_and_ptr_type(bytearray(s), target=self._target, ptr_type=ftype) if issubclass(ftype, RemotePtr64): # Pointer to remote64 bits process return RemoteStructurePointer64.from_buffer_with_target_and_ptr_type(bytearray(s), target=self._target, ptr_type=ftype) if issubclass(ftype, RemoteStructureUnion): # Structure|Union already transfomed in remote return ftype(self._base_addr + fosset, self._target) if issubclass(ftype, ctypes.Structure): # Structure that must be transfomed return RemoteStructure.from_structure(ftype)(self._base_addr + fosset, self._target) if issubclass(ftype, ctypes.Union): # Union that must be transfomed return RemoteUnion.from_structure(ftype)(self._base_addr + fosset, self._target) if issubclass(ftype, _ctypes.Array): # Arrays return create_remote_array(ftype._type_, ftype._length_)(self._base_addr + fosset, self._target) # Normal types # Follow the ctypes usage: if it's not directly inherited from _SimpleCData # We do not apply the .value # Seems weird but it's mandatory AND useful :D (in pe_parse) if _SimpleCData not in ftype.__bases__: return ftype.from_buffer(bytearray(s)) return ftype.from_buffer(bytearray(s)).value
Example #11
Source File: dbginterface.py From LKD with BSD 3-Clause "New" or "Revised" License | 6 votes |
def write_physical_memory(self, addr, data): """Write data to a given physical address :param addr: The Symbol to write to :type addr: Symbol :param size: The Data to write :type size: str or ctypes.Structure :returns: the size written -- :class:`int` """ try: # ctypes structure size = ctypes.sizeof(data) buffer = ctypes.byref(data) except TypeError: # buffer size = len(data) buffer = data written = ULONG(0) self.DebugDataSpaces.WritePhysical(c_uint64(addr), buffer, size, byref(written)) return written.value
Example #12
Source File: simple_com.py From LKD with BSD 3-Clause "New" or "Revised" License | 6 votes |
def create_vtable(cls, **implem_overwrite): vtables_names = [x[0] for x in cls._funcs_] non_expected_args = [func_name for func_name in implem_overwrite if func_name not in vtables_names] if non_expected_args: raise ValueError("Non expected function : {0}".format(non_expected_args)) implems = [] for name, types, func_implem in cls._funcs_: func_implem = implem_overwrite.get(name, func_implem) if func_implem is None: raise ValueError("Missing implementation for function <{0}>".format(name)) implems.append(create_c_callable(func_implem, types)) class Vtable(ctypes.Structure): _fields_ = [(name, ctypes.c_void_p) for name in vtables_names] return Vtable(*implems)
Example #13
Source File: support.py From jawfish with MIT License | 6 votes |
def _is_gui_available(): UOI_FLAGS = 1 WSF_VISIBLE = 0x0001 class USEROBJECTFLAGS(ctypes.Structure): _fields_ = [("fInherit", ctypes.wintypes.BOOL), ("fReserved", ctypes.wintypes.BOOL), ("dwFlags", ctypes.wintypes.DWORD)] dll = ctypes.windll.user32 h = dll.GetProcessWindowStation() if not h: raise ctypes.WinError() uof = USEROBJECTFLAGS() needed = ctypes.wintypes.DWORD() res = dll.GetUserObjectInformationW(h, UOI_FLAGS, ctypes.byref(uof), ctypes.sizeof(uof), ctypes.byref(needed)) if not res: raise ctypes.WinError() return bool(uof.dwFlags & WSF_VISIBLE)
Example #14
Source File: support.py From verge3d-blender-addon with GNU General Public License v3.0 | 6 votes |
def _is_gui_available(): UOI_FLAGS = 1 WSF_VISIBLE = 0x0001 class USEROBJECTFLAGS(ctypes.Structure): _fields_ = [("fInherit", ctypes.wintypes.BOOL), ("fReserved", ctypes.wintypes.BOOL), ("dwFlags", ctypes.wintypes.DWORD)] dll = ctypes.windll.user32 h = dll.GetProcessWindowStation() if not h: raise ctypes.WinError() uof = USEROBJECTFLAGS() needed = ctypes.wintypes.DWORD() res = dll.GetUserObjectInformationW(h, UOI_FLAGS, ctypes.byref(uof), ctypes.sizeof(uof), ctypes.byref(needed)) if not res: raise ctypes.WinError() return bool(uof.dwFlags & WSF_VISIBLE)
Example #15
Source File: dbginterface.py From LKD with BSD 3-Clause "New" or "Revised" License | 6 votes |
def write_virtual_memory(self, addr, data): """Write data to a given virtual address :param addr: The Symbol to write to :type addr: Symbol :param size: The Data to write :type size: str or ctypes.Structure :returns: the size written -- :class:`int` """ try: # ctypes structure size = ctypes.sizeof(data) buffer = ctypes.byref(data) except TypeError: # buffer size = len(data) buffer = data written = ULONG(0) addr = self.resolve_symbol(addr) self.DebugDataSpaces.WriteVirtual(c_uint64(addr), buffer, size, byref(written)) return written.value
Example #16
Source File: cstruct.py From dissect.cstruct with MIT License | 6 votes |
def compile(self, structure): source = self.gen_struct_class(structure) c = compile(source, '<compiled>', 'exec') env = { 'OrderedDict': OrderedDict, 'Structure': Structure, 'Instance': Instance, 'Expression': Expression, 'EnumInstance': EnumInstance, 'PointerInstance': PointerInstance, 'BytesInteger': BytesInteger, 'BitBuffer': BitBuffer, 'struct': struct, 'xrange': xrange, } exec(c, env) sc = env[structure.name](self.cstruct, structure, source) return sc
Example #17
Source File: ctypeslib.py From Mastering-Elasticsearch-7.0 with MIT License | 5 votes |
def as_ctypes_type(dtype): r""" Convert a dtype into a ctypes type. Parameters ---------- dtype : dtype The dtype to convert Returns ------- ctype A ctype scalar, union, array, or struct Raises ------ NotImplementedError If the conversion is not possible Notes ----- This function does not losslessly round-trip in either direction. ``np.dtype(as_ctypes_type(dt))`` will: - insert padding fields - reorder fields to be sorted by offset - discard field titles ``as_ctypes_type(np.dtype(ctype))`` will: - discard the class names of `ctypes.Structure`\ s and `ctypes.Union`\ s - convert single-element `ctypes.Union`\ s into single-element `ctypes.Structure`\ s - insert padding fields """ return _ctype_from_dtype(_dtype(dtype))
Example #18
Source File: cstruct.py From dissect.cstruct with MIT License | 5 votes |
def __init__(self, cstruct, name, fields=None): self.name = name self.size = None self.lookup = OrderedDict() self.fields = fields if fields else [] for f in self.fields: self.lookup[f.name] = f self._calc_offsets() super(Structure, self).__init__(cstruct)
Example #19
Source File: cstruct.py From dissect.cstruct with MIT License | 5 votes |
def _structs(self, data): compiler = Compiler(self.cstruct) r = re.finditer( r'(#(?P<flags>(?:compile))\s+)?((?P<typedef>typedef)\s+)?(?P<type>[^\s]+)\s+(?P<name>[^\s]+)?(?P<fields>\s*\{[^}]+\}(?P<defs>\s+[^;\n]+)?)?\s*;', data, ) for t in r: d = t.groupdict() if d['name']: name = d['name'] elif d['defs']: name = d['defs'].strip().split(',')[0].strip() else: raise ParserError("No name for struct") if d['type'] == 'struct': data = self._parse_fields(d['fields'][1:-1].strip()) st = Structure(self.cstruct, name, data) if d['flags'] == 'compile' or self.compiled: st = compiler.compile(st) elif d['typedef'] == 'typedef': st = d['type'] else: continue if d['name']: self.cstruct.addtype(d['name'], st) if d['defs']: for td in d['defs'].strip().split(','): td = td.strip() self.cstruct.addtype(td, st)
Example #20
Source File: utilities.py From mayhem with BSD 3-Clause "New" or "Revised" License | 5 votes |
def struct_unpack(structure, raw_data): """ Convert *raw_data* to an instance of *structure*. :param structure: The structure that describes *raw_data*. :type structure: :py:class:`ctypes.Structure` :param bytes raw_data: The binary string which contains the structures data. :return: A new instance of *structure*. :rtype: :py:class:`ctypes.Structure` """ if not isinstance(structure, ctypes.Structure): structure = structure() ctypes.memmove(ctypes.byref(structure), raw_data, ctypes.sizeof(structure)) return structure
Example #21
Source File: test_ctypeslib.py From Mastering-Elasticsearch-7.0 with MIT License | 5 votes |
def test_structure_aligned(self): dt = np.dtype([ ('a', np.uint16), ('b', np.uint32), ], align=True) ct = np.ctypeslib.as_ctypes_type(dt) assert_(issubclass(ct, ctypes.Structure)) assert_equal(ctypes.sizeof(ct), dt.itemsize) assert_equal(ct._fields_, [ ('a', ctypes.c_uint16), ('', ctypes.c_char * 2), # padding ('b', ctypes.c_uint32), ])
Example #22
Source File: test_ctypeslib.py From Mastering-Elasticsearch-7.0 with MIT License | 5 votes |
def test_structure(self): dt = np.dtype([ ('a', np.uint16), ('b', np.uint32), ]) ct = np.ctypeslib.as_ctypes_type(dt) assert_(issubclass(ct, ctypes.Structure)) assert_equal(ctypes.sizeof(ct), dt.itemsize) assert_equal(ct._fields_, [ ('a', ctypes.c_uint16), ('b', ctypes.c_uint32), ])
Example #23
Source File: test_ctypeslib.py From Mastering-Elasticsearch-7.0 with MIT License | 5 votes |
def test_struct_array_pointer(self): from ctypes import c_int16, Structure, pointer class Struct(Structure): _fields_ = [('a', c_int16)] Struct3 = 3 * Struct c_array = (2 * Struct3)( Struct3(Struct(a=1), Struct(a=2), Struct(a=3)), Struct3(Struct(a=4), Struct(a=5), Struct(a=6)) ) expected = np.array([ [(1,), (2,), (3,)], [(4,), (5,), (6,)], ], dtype=[('a', np.int16)]) def check(x): assert_equal(x.dtype, expected.dtype) assert_equal(x, expected) # all of these should be equivalent check(as_array(c_array)) check(as_array(pointer(c_array), shape=())) check(as_array(pointer(c_array[0]), shape=(2,))) check(as_array(pointer(c_array[0][0]), shape=(2, 3)))
Example #24
Source File: breakpoint.py From PyDev.Debugger with Eclipse Public License 1.0 | 5 votes |
def _calc_signature(self, signature): self._cast_signature_pointers_to_void(signature) class Arguments (ctypes.Structure): _fields_ = [ ("arg_%s" % i, signature[i]) \ for i in compat.xrange(len(signature) - 1, -1, -1) ] return Arguments
Example #25
Source File: pydevd_api.py From PyDev.Debugger with Eclipse Public License 1.0 | 5 votes |
def _list_ppid_and_pid(): _TH32CS_SNAPPROCESS = 0x00000002 class PROCESSENTRY32(ctypes.Structure): _fields_ = [("dwSize", ctypes.c_uint32), ("cntUsage", ctypes.c_uint32), ("th32ProcessID", ctypes.c_uint32), ("th32DefaultHeapID", ctypes.c_size_t), ("th32ModuleID", ctypes.c_uint32), ("cntThreads", ctypes.c_uint32), ("th32ParentProcessID", ctypes.c_uint32), ("pcPriClassBase", ctypes.c_long), ("dwFlags", ctypes.c_uint32), ("szExeFile", ctypes.c_char * 260)] kernel32 = ctypes.windll.kernel32 snapshot = kernel32.CreateToolhelp32Snapshot(_TH32CS_SNAPPROCESS, 0) ppid_and_pids = [] try: process_entry = PROCESSENTRY32() process_entry.dwSize = ctypes.sizeof(PROCESSENTRY32) if not kernel32.Process32First(snapshot, ctypes.byref(process_entry)): pydev_log.critical('Process32First failed (getting process from CreateToolhelp32Snapshot).') else: while True: ppid_and_pids.append((process_entry.th32ParentProcessID, process_entry.th32ProcessID)) if not kernel32.Process32Next(snapshot, ctypes.byref(process_entry)): break finally: kernel32.CloseHandle(snapshot) return ppid_and_pids
Example #26
Source File: test_ctypes.py From oss-ftp with MIT License | 5 votes |
def leak_inner(): class POINT(Structure): _fields_ = [("x", c_int)] class RECT(Structure): _fields_ = [("a", POINTER(POINT))]
Example #27
Source File: backend_ctypes.py From bioforum with MIT License | 5 votes |
def new_struct_type(self, name): return self._new_struct_or_union('struct', name, ctypes.Structure)
Example #28
Source File: runtktests.py From BinderFilter with MIT License | 5 votes |
def check_tk_availability(): """Check that Tk is installed and available.""" global _tk_unavailable if _tk_unavailable is None: _tk_unavailable = False if sys.platform == 'darwin': # The Aqua Tk implementations on OS X can abort the process if # being called in an environment where a window server connection # cannot be made, for instance when invoked by a buildbot or ssh # process not running under the same user id as the current console # user. To avoid that, raise an exception if the window manager # connection is not available. from ctypes import cdll, c_int, pointer, Structure from ctypes.util import find_library app_services = cdll.LoadLibrary(find_library("ApplicationServices")) if app_services.CGMainDisplayID() == 0: _tk_unavailable = "cannot run without OS X window manager" else: class ProcessSerialNumber(Structure): _fields_ = [("highLongOfPSN", c_int), ("lowLongOfPSN", c_int)] psn = ProcessSerialNumber() psn_p = pointer(psn) if ( (app_services.GetCurrentProcess(psn_p) < 0) or (app_services.SetFrontProcess(psn_p) < 0) ): _tk_unavailable = "cannot run without OS X gui process" else: # not OS X import Tkinter try: Tkinter.Button() except Tkinter.TclError as msg: # assuming tk is not available _tk_unavailable = "tk not available: %s" % msg if _tk_unavailable: raise unittest.SkipTest(_tk_unavailable) return
Example #29
Source File: parentpoller.py From Computable with MIT License | 5 votes |
def create_interrupt_event(): """ Create an interrupt event handle. The parent process should use this static method for creating the interrupt event that is passed to the child process. It should store this handle and use it with ``send_interrupt`` to interrupt the child process. """ # Create a security attributes struct that permits inheritance of the # handle by new processes. # FIXME: We can clean up this mess by requiring pywin32 for IPython. class SECURITY_ATTRIBUTES(ctypes.Structure): _fields_ = [ ("nLength", ctypes.c_int), ("lpSecurityDescriptor", ctypes.c_void_p), ("bInheritHandle", ctypes.c_int) ] sa = SECURITY_ATTRIBUTES() sa_p = ctypes.pointer(sa) sa.nLength = ctypes.sizeof(SECURITY_ATTRIBUTES) sa.lpSecurityDescriptor = 0 sa.bInheritHandle = 1 return ctypes.windll.kernel32.CreateEventA( sa_p, # lpEventAttributes False, # bManualReset False, # bInitialState '') # lpName
Example #30
Source File: backend_ctypes.py From oss-ftp with MIT License | 5 votes |
def new_struct_type(self, name): return self._new_struct_or_union('struct', name, ctypes.Structure)