atomicshop 2.11.47__py3-none-any.whl → 3.10.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- atomicshop/__init__.py +1 -1
- atomicshop/{addons/mains → a_mains}/FACT/update_extract.py +3 -2
- atomicshop/a_mains/addons/process_list/compile.cmd +7 -0
- atomicshop/a_mains/addons/process_list/compiled/Win10x64/process_list.dll +0 -0
- atomicshop/a_mains/addons/process_list/compiled/Win10x64/process_list.exp +0 -0
- atomicshop/a_mains/addons/process_list/compiled/Win10x64/process_list.lib +0 -0
- atomicshop/{addons → a_mains/addons}/process_list/process_list.cpp +8 -1
- atomicshop/a_mains/dns_gateway_setting.py +11 -0
- atomicshop/a_mains/get_local_tcp_ports.py +85 -0
- atomicshop/a_mains/github_wrapper.py +11 -0
- atomicshop/a_mains/install_ca_certificate.py +172 -0
- atomicshop/{addons/mains → a_mains}/msi_unpacker.py +3 -1
- atomicshop/a_mains/process_from_port.py +119 -0
- atomicshop/a_mains/set_default_dns_gateway.py +90 -0
- atomicshop/a_mains/update_config_toml.py +38 -0
- atomicshop/appointment_management.py +5 -3
- atomicshop/basics/ansi_escape_codes.py +3 -1
- atomicshop/basics/argparse_template.py +2 -0
- atomicshop/basics/booleans.py +27 -30
- atomicshop/basics/bytes_arrays.py +43 -0
- atomicshop/basics/classes.py +149 -1
- atomicshop/basics/dicts.py +12 -0
- atomicshop/basics/enums.py +2 -2
- atomicshop/basics/exceptions.py +5 -1
- atomicshop/basics/list_of_classes.py +29 -0
- atomicshop/basics/list_of_dicts.py +69 -5
- atomicshop/basics/lists.py +14 -0
- atomicshop/basics/multiprocesses.py +374 -50
- atomicshop/basics/package_module.py +10 -0
- atomicshop/basics/strings.py +160 -7
- atomicshop/basics/threads.py +14 -0
- atomicshop/basics/tracebacks.py +13 -4
- atomicshop/certificates.py +153 -52
- atomicshop/config_init.py +12 -7
- atomicshop/console_user_response.py +7 -14
- atomicshop/consoles.py +9 -0
- atomicshop/datetimes.py +98 -0
- atomicshop/diff_check.py +340 -40
- atomicshop/dns.py +128 -12
- atomicshop/etws/_pywintrace_fix.py +17 -0
- atomicshop/etws/const.py +38 -0
- atomicshop/etws/providers.py +21 -0
- atomicshop/etws/sessions.py +43 -0
- atomicshop/etws/trace.py +168 -0
- atomicshop/etws/traces/trace_dns.py +162 -0
- atomicshop/etws/traces/trace_sysmon_process_creation.py +126 -0
- atomicshop/etws/traces/trace_tcp.py +130 -0
- atomicshop/file_io/csvs.py +222 -24
- atomicshop/file_io/docxs.py +35 -18
- atomicshop/file_io/file_io.py +35 -19
- atomicshop/file_io/jsons.py +49 -0
- atomicshop/file_io/tomls.py +139 -0
- atomicshop/filesystem.py +864 -293
- atomicshop/get_process_list.py +133 -0
- atomicshop/{process_name_cmd.py → get_process_name_cmd_dll.py} +52 -19
- atomicshop/http_parse.py +149 -93
- atomicshop/ip_addresses.py +6 -1
- atomicshop/mitm/centered_settings.py +132 -0
- atomicshop/mitm/config_static.py +207 -0
- atomicshop/mitm/config_toml_editor.py +55 -0
- atomicshop/mitm/connection_thread_worker.py +875 -357
- atomicshop/mitm/engines/__parent/parser___parent.py +4 -17
- atomicshop/mitm/engines/__parent/recorder___parent.py +108 -51
- atomicshop/mitm/engines/__parent/requester___parent.py +116 -0
- atomicshop/mitm/engines/__parent/responder___parent.py +75 -114
- atomicshop/mitm/engines/__reference_general/parser___reference_general.py +10 -7
- atomicshop/mitm/engines/__reference_general/recorder___reference_general.py +5 -5
- atomicshop/mitm/engines/__reference_general/requester___reference_general.py +47 -0
- atomicshop/mitm/engines/__reference_general/responder___reference_general.py +95 -13
- atomicshop/mitm/engines/create_module_template.py +58 -14
- atomicshop/mitm/import_config.py +359 -139
- atomicshop/mitm/initialize_engines.py +160 -74
- atomicshop/mitm/message.py +64 -23
- atomicshop/mitm/mitm_main.py +892 -0
- atomicshop/mitm/recs_files.py +183 -0
- atomicshop/mitm/shared_functions.py +4 -10
- atomicshop/mitm/ssh_tester.py +82 -0
- atomicshop/mitm/statistic_analyzer.py +257 -166
- atomicshop/mitm/statistic_analyzer_helper/analyzer_helper.py +136 -0
- atomicshop/mitm/statistic_analyzer_helper/moving_average_helper.py +525 -0
- atomicshop/monitor/change_monitor.py +96 -120
- atomicshop/monitor/checks/dns.py +139 -70
- atomicshop/monitor/checks/file.py +77 -0
- atomicshop/monitor/checks/network.py +81 -77
- atomicshop/monitor/checks/process_running.py +33 -34
- atomicshop/monitor/checks/url.py +94 -0
- atomicshop/networks.py +671 -0
- atomicshop/on_exit.py +205 -0
- atomicshop/package_mains_processor.py +84 -0
- atomicshop/permissions/permissions.py +22 -0
- atomicshop/permissions/ubuntu_permissions.py +239 -0
- atomicshop/permissions/win_permissions.py +33 -0
- atomicshop/print_api.py +24 -41
- atomicshop/process.py +63 -17
- atomicshop/process_poller/__init__.py +0 -0
- atomicshop/process_poller/pollers/__init__.py +0 -0
- atomicshop/process_poller/pollers/psutil_pywin32wmi_dll.py +95 -0
- atomicshop/process_poller/process_pool.py +207 -0
- atomicshop/process_poller/simple_process_pool.py +311 -0
- atomicshop/process_poller/tracer_base.py +45 -0
- atomicshop/process_poller/tracers/__init__.py +0 -0
- atomicshop/process_poller/tracers/event_log.py +46 -0
- atomicshop/process_poller/tracers/sysmon_etw.py +68 -0
- atomicshop/python_file_patcher.py +1 -1
- atomicshop/python_functions.py +27 -75
- atomicshop/question_answer_engine.py +2 -2
- atomicshop/scheduling.py +24 -5
- atomicshop/sound.py +4 -2
- atomicshop/speech_recognize.py +8 -0
- atomicshop/ssh_remote.py +158 -172
- atomicshop/startup/__init__.py +0 -0
- atomicshop/startup/win/__init__.py +0 -0
- atomicshop/startup/win/startup_folder.py +53 -0
- atomicshop/startup/win/task_scheduler.py +119 -0
- atomicshop/system_resource_monitor.py +61 -46
- atomicshop/system_resources.py +8 -8
- atomicshop/tempfiles.py +1 -2
- atomicshop/timer.py +30 -11
- atomicshop/urls.py +41 -0
- atomicshop/venvs.py +28 -0
- atomicshop/versioning.py +27 -0
- atomicshop/web.py +110 -25
- atomicshop/web_apis/__init__.py +0 -0
- atomicshop/web_apis/google_custom_search.py +44 -0
- atomicshop/web_apis/google_llm.py +188 -0
- atomicshop/websocket_parse.py +450 -0
- atomicshop/wrappers/certauthw/certauth.py +1 -0
- atomicshop/wrappers/cryptographyw.py +29 -8
- atomicshop/wrappers/ctyping/etw_winapi/__init__.py +0 -0
- atomicshop/wrappers/ctyping/etw_winapi/const.py +335 -0
- atomicshop/wrappers/ctyping/etw_winapi/etw_functions.py +393 -0
- atomicshop/wrappers/ctyping/file_details_winapi.py +67 -0
- atomicshop/wrappers/ctyping/msi_windows_installer/cabs.py +2 -1
- atomicshop/wrappers/ctyping/msi_windows_installer/extract_msi_main.py +13 -9
- atomicshop/wrappers/ctyping/msi_windows_installer/tables.py +35 -0
- atomicshop/wrappers/ctyping/setup_device.py +466 -0
- atomicshop/wrappers/ctyping/win_console.py +39 -0
- atomicshop/wrappers/dockerw/dockerw.py +113 -2
- atomicshop/wrappers/elasticsearchw/config_basic.py +0 -12
- atomicshop/wrappers/elasticsearchw/elastic_infra.py +75 -0
- atomicshop/wrappers/elasticsearchw/elasticsearchw.py +2 -20
- atomicshop/wrappers/factw/get_file_data.py +12 -5
- atomicshop/wrappers/factw/install/install_after_restart.py +89 -5
- atomicshop/wrappers/factw/install/pre_install_and_install_before_restart.py +20 -14
- atomicshop/wrappers/factw/postgresql/firmware.py +4 -6
- atomicshop/wrappers/githubw.py +583 -51
- atomicshop/wrappers/loggingw/consts.py +49 -0
- atomicshop/wrappers/loggingw/filters.py +102 -0
- atomicshop/wrappers/loggingw/formatters.py +58 -71
- atomicshop/wrappers/loggingw/handlers.py +459 -40
- atomicshop/wrappers/loggingw/loggers.py +19 -0
- atomicshop/wrappers/loggingw/loggingw.py +1010 -178
- atomicshop/wrappers/loggingw/reading.py +344 -19
- atomicshop/wrappers/mongodbw/__init__.py +0 -0
- atomicshop/wrappers/mongodbw/mongo_infra.py +31 -0
- atomicshop/wrappers/mongodbw/mongodbw.py +1432 -0
- atomicshop/wrappers/netshw.py +271 -0
- atomicshop/wrappers/playwrightw/engine.py +34 -19
- atomicshop/wrappers/playwrightw/infra.py +5 -0
- atomicshop/wrappers/playwrightw/javascript.py +7 -3
- atomicshop/wrappers/playwrightw/keyboard.py +14 -0
- atomicshop/wrappers/playwrightw/scenarios.py +172 -5
- atomicshop/wrappers/playwrightw/waits.py +9 -7
- atomicshop/wrappers/powershell_networking.py +80 -0
- atomicshop/wrappers/psutilw/processes.py +81 -0
- atomicshop/wrappers/psutilw/psutil_networks.py +85 -0
- atomicshop/wrappers/psutilw/psutilw.py +9 -0
- atomicshop/wrappers/pyopensslw.py +9 -2
- atomicshop/wrappers/pywin32w/__init__.py +0 -0
- atomicshop/wrappers/pywin32w/cert_store.py +116 -0
- atomicshop/wrappers/pywin32w/console.py +34 -0
- atomicshop/wrappers/pywin32w/win_event_log/__init__.py +0 -0
- atomicshop/wrappers/pywin32w/win_event_log/fetch.py +174 -0
- atomicshop/wrappers/pywin32w/win_event_log/subscribe.py +212 -0
- atomicshop/wrappers/pywin32w/win_event_log/subscribes/__init__.py +0 -0
- atomicshop/wrappers/pywin32w/win_event_log/subscribes/process_create.py +57 -0
- atomicshop/wrappers/pywin32w/win_event_log/subscribes/process_terminate.py +49 -0
- atomicshop/wrappers/pywin32w/win_event_log/subscribes/schannel_logging.py +97 -0
- atomicshop/wrappers/pywin32w/winshell.py +19 -0
- atomicshop/wrappers/pywin32w/wmis/__init__.py +0 -0
- atomicshop/wrappers/pywin32w/wmis/msft_netipaddress.py +113 -0
- atomicshop/wrappers/pywin32w/wmis/win32_networkadapterconfiguration.py +259 -0
- atomicshop/wrappers/pywin32w/wmis/win32networkadapter.py +112 -0
- atomicshop/wrappers/pywin32w/wmis/wmi_helpers.py +236 -0
- atomicshop/wrappers/socketw/accepter.py +21 -7
- atomicshop/wrappers/socketw/certificator.py +216 -150
- atomicshop/wrappers/socketw/creator.py +190 -50
- atomicshop/wrappers/socketw/dns_server.py +500 -173
- atomicshop/wrappers/socketw/exception_wrapper.py +45 -52
- atomicshop/wrappers/socketw/process_getter.py +86 -0
- atomicshop/wrappers/socketw/receiver.py +144 -102
- atomicshop/wrappers/socketw/sender.py +65 -35
- atomicshop/wrappers/socketw/sni.py +334 -165
- atomicshop/wrappers/socketw/socket_base.py +134 -0
- atomicshop/wrappers/socketw/socket_client.py +137 -95
- atomicshop/wrappers/socketw/socket_server_tester.py +14 -9
- atomicshop/wrappers/socketw/socket_wrapper.py +717 -116
- atomicshop/wrappers/socketw/ssl_base.py +15 -14
- atomicshop/wrappers/socketw/statistics_csv.py +148 -17
- atomicshop/wrappers/sysmonw.py +157 -0
- atomicshop/wrappers/ubuntu_terminal.py +65 -26
- atomicshop/wrappers/win_auditw.py +189 -0
- atomicshop/wrappers/winregw/__init__.py +0 -0
- atomicshop/wrappers/winregw/winreg_installed_software.py +58 -0
- atomicshop/wrappers/winregw/winreg_network.py +232 -0
- {atomicshop-2.11.47.dist-info → atomicshop-3.10.5.dist-info}/METADATA +31 -49
- atomicshop-3.10.5.dist-info/RECORD +306 -0
- {atomicshop-2.11.47.dist-info → atomicshop-3.10.5.dist-info}/WHEEL +1 -1
- atomicshop/_basics_temp.py +0 -101
- atomicshop/addons/a_setup_scripts/install_psycopg2_ubuntu.sh +0 -3
- atomicshop/addons/a_setup_scripts/install_pywintrace_0.3.cmd +0 -2
- atomicshop/addons/mains/install_docker_rootless_ubuntu.py +0 -11
- atomicshop/addons/mains/install_docker_ubuntu_main_sudo.py +0 -11
- atomicshop/addons/mains/install_elastic_search_and_kibana_ubuntu.py +0 -10
- atomicshop/addons/mains/install_wsl_ubuntu_lts_admin.py +0 -9
- atomicshop/addons/package_setup/CreateWheel.cmd +0 -7
- atomicshop/addons/package_setup/Setup in Edit mode.cmd +0 -6
- atomicshop/addons/package_setup/Setup.cmd +0 -7
- atomicshop/addons/process_list/compile.cmd +0 -2
- atomicshop/addons/process_list/compiled/Win10x64/process_list.dll +0 -0
- atomicshop/addons/process_list/compiled/Win10x64/process_list.exp +0 -0
- atomicshop/addons/process_list/compiled/Win10x64/process_list.lib +0 -0
- atomicshop/archiver/_search_in_zip.py +0 -189
- atomicshop/archiver/archiver.py +0 -34
- atomicshop/archiver/search_in_archive.py +0 -250
- atomicshop/archiver/sevenz_app_w.py +0 -86
- atomicshop/archiver/sevenzs.py +0 -44
- atomicshop/archiver/zips.py +0 -293
- atomicshop/etw/dns_trace.py +0 -118
- atomicshop/etw/etw.py +0 -61
- atomicshop/file_types.py +0 -24
- atomicshop/mitm/engines/create_module_template_example.py +0 -13
- atomicshop/mitm/initialize_mitm_server.py +0 -240
- atomicshop/monitor/checks/hash.py +0 -44
- atomicshop/monitor/checks/hash_checks/file.py +0 -55
- atomicshop/monitor/checks/hash_checks/url.py +0 -62
- atomicshop/pbtkmultifile_argparse.py +0 -88
- atomicshop/permissions.py +0 -110
- atomicshop/process_poller.py +0 -237
- atomicshop/script_as_string_processor.py +0 -38
- atomicshop/ssh_scripts/process_from_ipv4.py +0 -37
- atomicshop/ssh_scripts/process_from_port.py +0 -27
- atomicshop/wrappers/_process_wrapper_curl.py +0 -27
- atomicshop/wrappers/_process_wrapper_tar.py +0 -21
- atomicshop/wrappers/dockerw/install_docker.py +0 -209
- atomicshop/wrappers/elasticsearchw/infrastructure.py +0 -265
- atomicshop/wrappers/elasticsearchw/install_elastic.py +0 -232
- atomicshop/wrappers/ffmpegw.py +0 -125
- atomicshop/wrappers/loggingw/checks.py +0 -20
- atomicshop/wrappers/nodejsw/install_nodejs.py +0 -139
- atomicshop/wrappers/process_wrapper_pbtk.py +0 -16
- atomicshop/wrappers/socketw/base.py +0 -59
- atomicshop/wrappers/socketw/get_process.py +0 -107
- atomicshop/wrappers/wslw.py +0 -191
- atomicshop-2.11.47.dist-info/RECORD +0 -251
- /atomicshop/{addons/mains → a_mains}/FACT/factw_fact_extractor_docker_image_main_sudo.py +0 -0
- /atomicshop/{addons → a_mains/addons}/PlayWrightCodegen.cmd +0 -0
- /atomicshop/{addons → a_mains/addons}/ScriptExecution.cmd +0 -0
- /atomicshop/{addons/mains → a_mains/addons}/inits/init_to_import_all_modules.py +0 -0
- /atomicshop/{addons → a_mains/addons}/process_list/ReadMe.txt +0 -0
- /atomicshop/{addons/mains → a_mains}/search_for_hyperlinks_in_docx.py +0 -0
- /atomicshop/{archiver → etws}/__init__.py +0 -0
- /atomicshop/{etw → etws/traces}/__init__.py +0 -0
- /atomicshop/{monitor/checks/hash_checks → mitm/statistic_analyzer_helper}/__init__.py +0 -0
- /atomicshop/{wrappers/nodejsw → permissions}/__init__.py +0 -0
- /atomicshop/wrappers/pywin32w/{wmi_win32process.py → wmis/win32process.py} +0 -0
- {atomicshop-2.11.47.dist-info → atomicshop-3.10.5.dist-info/licenses}/LICENSE.txt +0 -0
- {atomicshop-2.11.47.dist-info → atomicshop-3.10.5.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
import ctypes
|
|
2
|
+
from ctypes import wintypes
|
|
3
|
+
from ctypes.wintypes import ULONG
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
# Constants
|
|
7
|
+
EVENT_TRACE_CONTROL_STOP = 1
|
|
8
|
+
WNODE_FLAG_TRACED_GUID = 0x00020000
|
|
9
|
+
EVENT_TRACE_REAL_TIME_MODE = 0x00000100
|
|
10
|
+
EVENT_CONTROL_CODE_ENABLE_PROVIDER = 1
|
|
11
|
+
|
|
12
|
+
MAXIMUM_LOGGERS = 64
|
|
13
|
+
ULONG64 = ctypes.c_uint64
|
|
14
|
+
UCHAR = ctypes.c_ubyte
|
|
15
|
+
|
|
16
|
+
INVALID_HANDLE_VALUE = ctypes.c_void_p(-1).value
|
|
17
|
+
TRACEHANDLE = ULONG64
|
|
18
|
+
|
|
19
|
+
PROCESS_TRACE_MODE_EVENT_RECORD = 0x10000000 # new event-record callback
|
|
20
|
+
PROCESS_TRACE_MODE_REAL_TIME = 0x00000100
|
|
21
|
+
INVALID_PROCESSTRACE_HANDLE = 0xFFFFFFFFFFFFFFFF # Often -1 in 64-bit
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
"""
|
|
25
|
+
wintypes.DWORD = wintypes.ULONG = ctypes.c_ulong: 32-bit unsigned integer
|
|
26
|
+
wintypes.WORD = wintypes.USHORT = ctypes.c_ushort: 16-bit unsigned integer
|
|
27
|
+
wintypes.BYTE = ctypes.c_ubyte: 8-bit unsigned integer
|
|
28
|
+
wintypes.LARGE_INTEGER is a structure (or union in C terms), can represent both signed and unsigned
|
|
29
|
+
64-bit values depending on context.
|
|
30
|
+
ctypes.c_ulonglong is a simple data type representing an unsigned 64-bit integer.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
# Define GUID structure
|
|
35
|
+
class GUID(ctypes.Structure):
|
|
36
|
+
_fields_ = [
|
|
37
|
+
("Data1", wintypes.DWORD),
|
|
38
|
+
("Data2", wintypes.WORD),
|
|
39
|
+
("Data3", wintypes.WORD),
|
|
40
|
+
("Data4", wintypes.BYTE * 8)
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
# Define WNODE_HEADER
|
|
45
|
+
class WNODE_HEADER(ctypes.Structure):
|
|
46
|
+
_fields_ = [
|
|
47
|
+
("BufferSize", wintypes.ULONG),
|
|
48
|
+
("ProviderId", wintypes.ULONG),
|
|
49
|
+
("HistoricalContext", wintypes.LARGE_INTEGER),
|
|
50
|
+
("TimeStamp", wintypes.LARGE_INTEGER),
|
|
51
|
+
("Guid", GUID),
|
|
52
|
+
("ClientContext", wintypes.ULONG),
|
|
53
|
+
("Flags", wintypes.ULONG)
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class EVENT_TRACE_PROPERTIES(ctypes.Structure):
|
|
58
|
+
_fields_ = [
|
|
59
|
+
("Wnode", WNODE_HEADER),
|
|
60
|
+
("BufferSize", wintypes.ULONG),
|
|
61
|
+
("MinimumBuffers", wintypes.ULONG),
|
|
62
|
+
("MaximumBuffers", wintypes.ULONG),
|
|
63
|
+
("MaximumFileSize", wintypes.ULONG),
|
|
64
|
+
("LogFileMode", wintypes.ULONG),
|
|
65
|
+
("FlushTimer", wintypes.ULONG),
|
|
66
|
+
("EnableFlags", wintypes.ULONG),
|
|
67
|
+
("AgeLimit", wintypes.LONG),
|
|
68
|
+
("NumberOfBuffers", wintypes.ULONG),
|
|
69
|
+
("FreeBuffers", wintypes.ULONG),
|
|
70
|
+
("EventsLost", wintypes.ULONG),
|
|
71
|
+
("BuffersWritten", wintypes.ULONG),
|
|
72
|
+
("LogBuffersLost", wintypes.ULONG),
|
|
73
|
+
("RealTimeBuffersLost", wintypes.ULONG),
|
|
74
|
+
("LoggerThreadId", wintypes.HANDLE),
|
|
75
|
+
("LogFileNameOffset", wintypes.ULONG),
|
|
76
|
+
("LoggerNameOffset", wintypes.ULONG)
|
|
77
|
+
]
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class TRACE_LOGFILE_HEADER(ctypes.Structure):
|
|
81
|
+
_fields_ = [
|
|
82
|
+
("BufferSize", wintypes.ULONG),
|
|
83
|
+
("Version", wintypes.ULONG),
|
|
84
|
+
("ProviderVersion", wintypes.ULONG),
|
|
85
|
+
("NumberOfProcessors", wintypes.ULONG),
|
|
86
|
+
("EndTime", wintypes.LARGE_INTEGER),
|
|
87
|
+
("TimerResolution", wintypes.ULONG),
|
|
88
|
+
("MaximumFileSize", wintypes.ULONG),
|
|
89
|
+
("LogFileMode", wintypes.ULONG),
|
|
90
|
+
("BuffersWritten", wintypes.ULONG),
|
|
91
|
+
("StartBuffers", wintypes.ULONG),
|
|
92
|
+
("PointerSize", wintypes.ULONG),
|
|
93
|
+
("EventsLost", wintypes.ULONG),
|
|
94
|
+
("CpuSpeedInMHz", wintypes.ULONG),
|
|
95
|
+
("LoggerName", wintypes.WCHAR * 256),
|
|
96
|
+
("LogFileName", wintypes.WCHAR * 256),
|
|
97
|
+
("TimeZone", wintypes.LPVOID),
|
|
98
|
+
("BootTime", wintypes.LARGE_INTEGER),
|
|
99
|
+
("PerfFreq", wintypes.LARGE_INTEGER),
|
|
100
|
+
("StartTime", wintypes.LARGE_INTEGER),
|
|
101
|
+
("ReservedFlags", wintypes.ULONG),
|
|
102
|
+
("BuffersLost", wintypes.ULONG)
|
|
103
|
+
]
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
class EVENT_TRACE_HEADER(ctypes.Structure):
|
|
107
|
+
_fields_ = [
|
|
108
|
+
("Size", wintypes.USHORT),
|
|
109
|
+
("FieldTypeFlags", wintypes.USHORT),
|
|
110
|
+
("Version", wintypes.USHORT),
|
|
111
|
+
("Class", wintypes.USHORT), # EVENT_TRACE_CLASS
|
|
112
|
+
("Type", ctypes.c_ubyte),
|
|
113
|
+
("Level", ctypes.c_ubyte),
|
|
114
|
+
("Channel", ctypes.c_ubyte),
|
|
115
|
+
("Flags", ctypes.c_ubyte),
|
|
116
|
+
("InstanceId", wintypes.USHORT),
|
|
117
|
+
("ParentInstanceId", wintypes.USHORT),
|
|
118
|
+
("ParentGuid", GUID),
|
|
119
|
+
("Timestamp", wintypes.LARGE_INTEGER),
|
|
120
|
+
("Guid", GUID),
|
|
121
|
+
("ProcessorTime", wintypes.ULONG),
|
|
122
|
+
("ThreadId", wintypes.ULONG),
|
|
123
|
+
("ProcessId", wintypes.ULONG),
|
|
124
|
+
("KernelTime", wintypes.ULONG),
|
|
125
|
+
("UserTime", wintypes.ULONG),
|
|
126
|
+
]
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
class EVENT_TRACE(ctypes.Structure):
|
|
130
|
+
_fields_ = [
|
|
131
|
+
("Header", EVENT_TRACE_HEADER),
|
|
132
|
+
("InstanceId", wintypes.DWORD),
|
|
133
|
+
("ParentInstanceId", wintypes.DWORD),
|
|
134
|
+
("ParentGuid", GUID),
|
|
135
|
+
("MofData", ctypes.c_void_p),
|
|
136
|
+
("MofLength", wintypes.ULONG),
|
|
137
|
+
("ClientContext", wintypes.ULONG)
|
|
138
|
+
]
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
class EVENT_TRACE_LOGFILEW(ctypes.Structure):
|
|
142
|
+
_fields_ = [
|
|
143
|
+
("LogFileName", ctypes.c_wchar_p),
|
|
144
|
+
("LoggerName", ctypes.c_wchar_p),
|
|
145
|
+
("CurrentTime", wintypes.LARGE_INTEGER),
|
|
146
|
+
("BuffersRead", wintypes.ULONG),
|
|
147
|
+
("ProcessTraceMode", wintypes.ULONG),
|
|
148
|
+
("CurrentEvent", EVENT_TRACE),
|
|
149
|
+
("LogfileHeader", TRACE_LOGFILE_HEADER),
|
|
150
|
+
("BufferCallback", ctypes.c_void_p), # Placeholder for buffer callback
|
|
151
|
+
("BufferSize", wintypes.ULONG),
|
|
152
|
+
("Filled", wintypes.ULONG),
|
|
153
|
+
("EventsLost", wintypes.ULONG),
|
|
154
|
+
("EventCallback", ctypes.CFUNCTYPE(None, ctypes.POINTER(EVENT_TRACE))),
|
|
155
|
+
("Context", ULONG64)
|
|
156
|
+
]
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
class EVENT_DESCRIPTOR(ctypes.Structure):
|
|
160
|
+
_fields_ = [
|
|
161
|
+
("Id", wintypes.USHORT),
|
|
162
|
+
("Version", wintypes.BYTE),
|
|
163
|
+
("Channel", wintypes.BYTE),
|
|
164
|
+
("Level", wintypes.BYTE),
|
|
165
|
+
("Opcode", wintypes.BYTE),
|
|
166
|
+
("Task", wintypes.USHORT),
|
|
167
|
+
("Keyword", ULONG64),
|
|
168
|
+
]
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
class EVENT_HEADER(ctypes.Structure):
|
|
172
|
+
_fields_ = [
|
|
173
|
+
("Size", wintypes.USHORT),
|
|
174
|
+
("HeaderType", wintypes.USHORT),
|
|
175
|
+
("Flags", wintypes.USHORT),
|
|
176
|
+
("EventProperty", wintypes.USHORT),
|
|
177
|
+
("ThreadId", wintypes.ULONG),
|
|
178
|
+
("ProcessId", wintypes.ULONG),
|
|
179
|
+
("TimeStamp", wintypes.LARGE_INTEGER),
|
|
180
|
+
("ProviderId", GUID),
|
|
181
|
+
("EventDescriptor", EVENT_DESCRIPTOR),
|
|
182
|
+
("ProcessorTime", ULONG64),
|
|
183
|
+
("ActivityId", GUID),
|
|
184
|
+
("RelatedActivityId", GUID),
|
|
185
|
+
]
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
class ETW_BUFFER_CONTEXT(ctypes.Structure):
|
|
189
|
+
_fields_ = [('ProcessorNumber', ctypes.c_ubyte),
|
|
190
|
+
('Alignment', ctypes.c_ubyte),
|
|
191
|
+
('LoggerId', ctypes.c_ushort)]
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
class EVENT_HEADER_EXTENDED_DATA_ITEM(ctypes.Structure):
|
|
195
|
+
_fields_ = [
|
|
196
|
+
('Reserved1', ctypes.c_ushort),
|
|
197
|
+
('ExtType', ctypes.c_ushort),
|
|
198
|
+
('Linkage', ctypes.c_ushort), # struct{USHORT :1, USHORT :15}
|
|
199
|
+
('DataSize', ctypes.c_ushort),
|
|
200
|
+
('DataPtr', ctypes.c_ulonglong)
|
|
201
|
+
]
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
class EVENT_RECORD(ctypes.Structure):
|
|
205
|
+
_fields_ = [
|
|
206
|
+
('EventHeader', EVENT_HEADER),
|
|
207
|
+
('BufferContext', ETW_BUFFER_CONTEXT),
|
|
208
|
+
('ExtendedDataCount', ctypes.c_ushort),
|
|
209
|
+
('UserDataLength', ctypes.c_ushort),
|
|
210
|
+
('ExtendedData', ctypes.POINTER(EVENT_HEADER_EXTENDED_DATA_ITEM)),
|
|
211
|
+
('UserData', ctypes.c_void_p),
|
|
212
|
+
('UserContext', ctypes.c_void_p)
|
|
213
|
+
]
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
class EVENT_TRACE_LOGFILE(ctypes.Structure):
|
|
217
|
+
pass
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
EVENT_RECORD_CALLBACK = ctypes.WINFUNCTYPE(None, ctypes.POINTER(EVENT_RECORD))
|
|
221
|
+
EVENT_TRACE_BUFFER_CALLBACK = ctypes.WINFUNCTYPE(ctypes.c_ulong, ctypes.POINTER(EVENT_TRACE_LOGFILE))
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
class EVENT_TRACE_LOGFILE(ctypes.Structure):
|
|
225
|
+
_fields_ = [
|
|
226
|
+
('LogFileName', ctypes.c_wchar_p),
|
|
227
|
+
('LoggerName', ctypes.c_wchar_p),
|
|
228
|
+
('CurrentTime', ctypes.c_longlong),
|
|
229
|
+
('BuffersRead', ctypes.c_ulong),
|
|
230
|
+
('ProcessTraceMode', ctypes.c_ulong),
|
|
231
|
+
('CurrentEvent', EVENT_TRACE),
|
|
232
|
+
('LogfileHeader', TRACE_LOGFILE_HEADER),
|
|
233
|
+
('BufferCallback', EVENT_TRACE_BUFFER_CALLBACK),
|
|
234
|
+
('BufferSize', ctypes.c_ulong),
|
|
235
|
+
('Filled', ctypes.c_ulong),
|
|
236
|
+
('EventsLost', ctypes.c_ulong),
|
|
237
|
+
('EventRecordCallback', EVENT_RECORD_CALLBACK),
|
|
238
|
+
('IsKernelTrace', ctypes.c_ulong),
|
|
239
|
+
('Context', ctypes.c_void_p)
|
|
240
|
+
]
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
# Define the callback type for processing events
|
|
244
|
+
EVENT_CALLBACK_TYPE = ctypes.WINFUNCTYPE(None, ctypes.POINTER(EVENT_RECORD))
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
class PROVIDER_ENUMERATION_INFO(ctypes.Structure):
|
|
248
|
+
_fields_ = [
|
|
249
|
+
("NumberOfProviders", ULONG),
|
|
250
|
+
("Reserved", ULONG),
|
|
251
|
+
]
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
class PROVIDER_INFORMATION(ctypes.Structure):
|
|
255
|
+
_fields_ = [
|
|
256
|
+
("ProviderId", ctypes.c_byte * 16),
|
|
257
|
+
("SchemaSource", ULONG),
|
|
258
|
+
("ProviderNameOffset", ULONG),
|
|
259
|
+
]
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
# Load the necessary library
|
|
263
|
+
advapi32 = ctypes.WinDLL("advapi32", use_last_error=True)
|
|
264
|
+
tdh = ctypes.windll.tdh
|
|
265
|
+
|
|
266
|
+
# Define necessary TDH functions
|
|
267
|
+
tdh.TdhEnumerateProviders.argtypes = [ctypes.POINTER(PROVIDER_ENUMERATION_INFO), ctypes.POINTER(ULONG)]
|
|
268
|
+
tdh.TdhEnumerateProviders.restype = ULONG
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
# Make sure StartTraceW has proper argtypes (if not set in consts)
|
|
272
|
+
StartTrace = advapi32.StartTraceW
|
|
273
|
+
StartTrace.argtypes = [
|
|
274
|
+
ctypes.POINTER(TRACEHANDLE),
|
|
275
|
+
wintypes.LPCWSTR,
|
|
276
|
+
ctypes.POINTER(EVENT_TRACE_PROPERTIES)
|
|
277
|
+
]
|
|
278
|
+
StartTrace.restype = wintypes.ULONG
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
class EVENT_FILTER_DESCRIPTOR(ctypes.Structure):
|
|
282
|
+
_fields_ = [('Ptr', ctypes.c_ulonglong),
|
|
283
|
+
('Size', ctypes.c_ulong),
|
|
284
|
+
('Type', ctypes.c_ulong)]
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
class ENABLE_TRACE_PARAMETERS(ctypes.Structure):
|
|
288
|
+
_fields_ = [
|
|
289
|
+
('Version', ctypes.c_ulong),
|
|
290
|
+
('EnableProperty', ctypes.c_ulong),
|
|
291
|
+
('ControlFlags', ctypes.c_ulong),
|
|
292
|
+
('SourceId', GUID),
|
|
293
|
+
('EnableFilterDesc', ctypes.POINTER(EVENT_FILTER_DESCRIPTOR)),
|
|
294
|
+
('FilterDescCount', ctypes.c_ulong)
|
|
295
|
+
]
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
EnableTraceEx2 = advapi32.EnableTraceEx2
|
|
299
|
+
EnableTraceEx2.argtypes = [
|
|
300
|
+
TRACEHANDLE, # TraceHandle (c_uint64)
|
|
301
|
+
ctypes.POINTER(GUID), # ProviderId
|
|
302
|
+
ctypes.c_ulong, # ControlCode
|
|
303
|
+
ctypes.c_char, # Level
|
|
304
|
+
ctypes.c_ulonglong, # MatchAnyKeyword
|
|
305
|
+
ctypes.c_ulonglong, # MatchAllKeyword
|
|
306
|
+
ctypes.c_ulong, # Timeout
|
|
307
|
+
ctypes.POINTER(ENABLE_TRACE_PARAMETERS)] # PENABLE_TRACE_PARAMETERS (optional) -> None or pointer
|
|
308
|
+
EnableTraceEx2.restype = ctypes.c_ulong
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
# Define the function prototype
|
|
312
|
+
QueryAllTraces = advapi32.QueryAllTracesW
|
|
313
|
+
QueryAllTraces.argtypes = [
|
|
314
|
+
ctypes.POINTER(ctypes.POINTER(EVENT_TRACE_PROPERTIES)),
|
|
315
|
+
wintypes.ULONG,
|
|
316
|
+
ctypes.POINTER(wintypes.ULONG)
|
|
317
|
+
]
|
|
318
|
+
QueryAllTraces.restype = wintypes.ULONG
|
|
319
|
+
|
|
320
|
+
OpenTrace = advapi32.OpenTraceW
|
|
321
|
+
OpenTrace.argtypes = [ctypes.POINTER(EVENT_TRACE_LOGFILE)]
|
|
322
|
+
OpenTrace.restype = wintypes.ULONG
|
|
323
|
+
|
|
324
|
+
ProcessTrace = advapi32.ProcessTrace
|
|
325
|
+
ProcessTrace.argtypes = [
|
|
326
|
+
ctypes.POINTER(ctypes.c_uint64), # pointer to array of 64-bit handles
|
|
327
|
+
wintypes.ULONG, # handle count
|
|
328
|
+
ctypes.c_void_p, # LPFILETIME (start)
|
|
329
|
+
ctypes.c_void_p # LPFILETIME (end)
|
|
330
|
+
]
|
|
331
|
+
ProcessTrace.restype = wintypes.ULONG
|
|
332
|
+
|
|
333
|
+
CloseTrace = advapi32.CloseTrace
|
|
334
|
+
CloseTrace.argtypes = [wintypes.ULONG]
|
|
335
|
+
CloseTrace.restype = wintypes.ULONG
|