zelos.handles.base_handles module

class zelos.handles.base_handles.Handle(name, parent_thread, access=0)

Bases: object

close() → None

Closes an instance of this handle, maintaining the number of references to the underlying object.

cleanup() → None

Override this if there is an action that needs to be taken when there are no more references to the underlying object.

category() → str
Returns

The type of object this handle represents.

class zelos.handles.base_handles.FileHandle(name, file_system, parent_thread, access=0, is_dir=False, file=None)

Bases: zelos.handles.base_handles.Handle

truncate(size) → None
size() → int
tell() → int
seek(offset: int, whence: int = 0) → None
write(data: bytes) → int
read(size: int) → bytes
cleanup() → None

Override this if there is an action that needs to be taken when there are no more references to the underlying object.

class zelos.handles.base_handles.SocketHandle(name, parent_thread, socket, access=0)

Bases: zelos.handles.base_handles.Handle

cleanup() → None

Override this if there is an action that needs to be taken when there are no more references to the underlying object.

class zelos.handles.base_handles.RegistryKeyHandle(name, parent_thread, access=0, attributes=None)

Bases: zelos.handles.base_handles.Handle

class zelos.handles.base_handles.SectionHandle(name, parent_thread, access=0, attributes=None)

Bases: zelos.handles.base_handles.Handle

class zelos.handles.base_handles.SymbolicLinkObjectHandle(name, parent_thread, access=0, attributes=None)

Bases: zelos.handles.base_handles.Handle

class zelos.handles.base_handles.WorkerFactoryHandle(name, parent_thread, access=0, attributes=None)

Bases: zelos.handles.base_handles.Handle

class zelos.handles.base_handles.ObjectHandle(name, parent_thread, access=0, attributes=None)

Bases: zelos.handles.base_handles.Handle

class zelos.handles.base_handles.KeyedEventHandle(name, parent_thread, access=0, attributes=None)

Bases: zelos.handles.base_handles.Handle

class zelos.handles.base_handles.ProcessHandle(name, parent_thread, pid, access=0, attributes=None, flags=None)

Bases: zelos.handles.base_handles.Handle

class zelos.handles.base_handles.ThreadHandle(name, parent_thread, pid, tid, access=0, attributes=None, flags=None)

Bases: zelos.handles.base_handles.Handle

class zelos.handles.base_handles.PipeInHandle(name, pipe, parent_thread=None, access=0)

Bases: zelos.handles.base_handles.Handle

write(data: bytes) → int
cleanup() → None

Override this if there is an action that needs to be taken when there are no more references to the underlying object.

class zelos.handles.base_handles.PipeOutHandle(name, pipe, parent_thread=None, access=0)

Bases: zelos.handles.base_handles.Handle

read(size: int) → bytes
cleanup() → None

Override this if there is an action that needs to be taken when there are no more references to the underlying object.

class zelos.handles.base_handles.StreamHandle(name, parent_thread, access=0)

Bases: zelos.handles.base_handles.Handle

class zelos.handles.base_handles.StdIn(parent_thread='unknown')

Bases: zelos.handles.base_handles.StreamHandle

read(size: int) → bytes
class zelos.handles.base_handles.StdOut(parent_thread='unknown')

Bases: zelos.handles.base_handles.StreamHandle

write(data)
class zelos.handles.base_handles.StdErr(parent_thread='unknown')

Bases: zelos.handles.base_handles.StreamHandle

write(data)
class zelos.handles.base_handles.Handles(processes, hook_manager, file_system)

Bases: object

add_handle(handle, handle_num=None, pid=None) → int

Returns the handle id for the handle

get(handle_num: int, pid: Optional[int] = None) → Optional[zelos.handles.base_handles.Handle]

Return the handle object with the given index, or None if it does not exist

exists(handle_num: int, pid: Optional[int] = None) → bool

Returns true if the given handle_num already exists for the pid

new(T, name, access=0, handle_num=None)

Used to create handles that are not one we already support

new_file(name, access=0, handle_num=None, is_dir=False, file=None)
new_socket(name, socket, access=0, handle_num=None)
new_regkey(name, access=0, attributes=None, handle_num=None)
new_process(name, pid, attributes, parent_thread='unknown', access=0, handle_num=None, flags=None)
new_thread(name, pid, tid, attributes, parent_thread='unknown', access=0, handle_num=None, flags=None)
new_pipe(name, access=0)
get_by_name(name: str) → Optional[int]

Gets the numeric identifier for the first handle that has the specified name.

Parameters

name – The name of the handle to retrieve.

Returns

The handle number corresponding to the specified name if one exists. If no such handle exists, returns None.

get_by_type(class_type: type) → List[zelos.handles.base_handles.Handle]

Returns all handles of the given type.

Parameters

class_type – Specifies the type that all returned handles should be an instance of.

Returns

All handles that are an instance of the specified type.

get_by_parent_thread(parent_thread_name: str) → List[Tuple[int, zelos.handles.base_handles.Handle]]

Gets all handles created by the specified thread

Parameters

parent_thread_name – Restricts the handles given back to those created by the thread with this name.

Returns

A list of tuples containing the handle num and handle of all the handles created by the parent thread.

close(handle_num: int, pid: Optional[int] = None) → None

Close this handle. If there are more references to the underlying object, it will remain open and only decrement the reference count.

Parameters
  • handle_num – The handle_id of the handle you want to close

  • pid – The process you want to edit the handles of. Defaults to the current process.

close_all(pid: Optional[int] = None) → None

Closes all handles present in the specified process.

Parameters

pid – The pid of the process to close all handles of. Defaults to all handles in all processes.