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.
Files changed (268) hide show
  1. atomicshop/__init__.py +1 -1
  2. atomicshop/{addons/mains → a_mains}/FACT/update_extract.py +3 -2
  3. atomicshop/a_mains/addons/process_list/compile.cmd +7 -0
  4. atomicshop/a_mains/addons/process_list/compiled/Win10x64/process_list.dll +0 -0
  5. atomicshop/a_mains/addons/process_list/compiled/Win10x64/process_list.exp +0 -0
  6. atomicshop/a_mains/addons/process_list/compiled/Win10x64/process_list.lib +0 -0
  7. atomicshop/{addons → a_mains/addons}/process_list/process_list.cpp +8 -1
  8. atomicshop/a_mains/dns_gateway_setting.py +11 -0
  9. atomicshop/a_mains/get_local_tcp_ports.py +85 -0
  10. atomicshop/a_mains/github_wrapper.py +11 -0
  11. atomicshop/a_mains/install_ca_certificate.py +172 -0
  12. atomicshop/{addons/mains → a_mains}/msi_unpacker.py +3 -1
  13. atomicshop/a_mains/process_from_port.py +119 -0
  14. atomicshop/a_mains/set_default_dns_gateway.py +90 -0
  15. atomicshop/a_mains/update_config_toml.py +38 -0
  16. atomicshop/appointment_management.py +5 -3
  17. atomicshop/basics/ansi_escape_codes.py +3 -1
  18. atomicshop/basics/argparse_template.py +2 -0
  19. atomicshop/basics/booleans.py +27 -30
  20. atomicshop/basics/bytes_arrays.py +43 -0
  21. atomicshop/basics/classes.py +149 -1
  22. atomicshop/basics/dicts.py +12 -0
  23. atomicshop/basics/enums.py +2 -2
  24. atomicshop/basics/exceptions.py +5 -1
  25. atomicshop/basics/list_of_classes.py +29 -0
  26. atomicshop/basics/list_of_dicts.py +69 -5
  27. atomicshop/basics/lists.py +14 -0
  28. atomicshop/basics/multiprocesses.py +374 -50
  29. atomicshop/basics/package_module.py +10 -0
  30. atomicshop/basics/strings.py +160 -7
  31. atomicshop/basics/threads.py +14 -0
  32. atomicshop/basics/tracebacks.py +13 -4
  33. atomicshop/certificates.py +153 -52
  34. atomicshop/config_init.py +12 -7
  35. atomicshop/console_user_response.py +7 -14
  36. atomicshop/consoles.py +9 -0
  37. atomicshop/datetimes.py +98 -0
  38. atomicshop/diff_check.py +340 -40
  39. atomicshop/dns.py +128 -12
  40. atomicshop/etws/_pywintrace_fix.py +17 -0
  41. atomicshop/etws/const.py +38 -0
  42. atomicshop/etws/providers.py +21 -0
  43. atomicshop/etws/sessions.py +43 -0
  44. atomicshop/etws/trace.py +168 -0
  45. atomicshop/etws/traces/trace_dns.py +162 -0
  46. atomicshop/etws/traces/trace_sysmon_process_creation.py +126 -0
  47. atomicshop/etws/traces/trace_tcp.py +130 -0
  48. atomicshop/file_io/csvs.py +222 -24
  49. atomicshop/file_io/docxs.py +35 -18
  50. atomicshop/file_io/file_io.py +35 -19
  51. atomicshop/file_io/jsons.py +49 -0
  52. atomicshop/file_io/tomls.py +139 -0
  53. atomicshop/filesystem.py +864 -293
  54. atomicshop/get_process_list.py +133 -0
  55. atomicshop/{process_name_cmd.py → get_process_name_cmd_dll.py} +52 -19
  56. atomicshop/http_parse.py +149 -93
  57. atomicshop/ip_addresses.py +6 -1
  58. atomicshop/mitm/centered_settings.py +132 -0
  59. atomicshop/mitm/config_static.py +207 -0
  60. atomicshop/mitm/config_toml_editor.py +55 -0
  61. atomicshop/mitm/connection_thread_worker.py +875 -357
  62. atomicshop/mitm/engines/__parent/parser___parent.py +4 -17
  63. atomicshop/mitm/engines/__parent/recorder___parent.py +108 -51
  64. atomicshop/mitm/engines/__parent/requester___parent.py +116 -0
  65. atomicshop/mitm/engines/__parent/responder___parent.py +75 -114
  66. atomicshop/mitm/engines/__reference_general/parser___reference_general.py +10 -7
  67. atomicshop/mitm/engines/__reference_general/recorder___reference_general.py +5 -5
  68. atomicshop/mitm/engines/__reference_general/requester___reference_general.py +47 -0
  69. atomicshop/mitm/engines/__reference_general/responder___reference_general.py +95 -13
  70. atomicshop/mitm/engines/create_module_template.py +58 -14
  71. atomicshop/mitm/import_config.py +359 -139
  72. atomicshop/mitm/initialize_engines.py +160 -74
  73. atomicshop/mitm/message.py +64 -23
  74. atomicshop/mitm/mitm_main.py +892 -0
  75. atomicshop/mitm/recs_files.py +183 -0
  76. atomicshop/mitm/shared_functions.py +4 -10
  77. atomicshop/mitm/ssh_tester.py +82 -0
  78. atomicshop/mitm/statistic_analyzer.py +257 -166
  79. atomicshop/mitm/statistic_analyzer_helper/analyzer_helper.py +136 -0
  80. atomicshop/mitm/statistic_analyzer_helper/moving_average_helper.py +525 -0
  81. atomicshop/monitor/change_monitor.py +96 -120
  82. atomicshop/monitor/checks/dns.py +139 -70
  83. atomicshop/monitor/checks/file.py +77 -0
  84. atomicshop/monitor/checks/network.py +81 -77
  85. atomicshop/monitor/checks/process_running.py +33 -34
  86. atomicshop/monitor/checks/url.py +94 -0
  87. atomicshop/networks.py +671 -0
  88. atomicshop/on_exit.py +205 -0
  89. atomicshop/package_mains_processor.py +84 -0
  90. atomicshop/permissions/permissions.py +22 -0
  91. atomicshop/permissions/ubuntu_permissions.py +239 -0
  92. atomicshop/permissions/win_permissions.py +33 -0
  93. atomicshop/print_api.py +24 -41
  94. atomicshop/process.py +63 -17
  95. atomicshop/process_poller/__init__.py +0 -0
  96. atomicshop/process_poller/pollers/__init__.py +0 -0
  97. atomicshop/process_poller/pollers/psutil_pywin32wmi_dll.py +95 -0
  98. atomicshop/process_poller/process_pool.py +207 -0
  99. atomicshop/process_poller/simple_process_pool.py +311 -0
  100. atomicshop/process_poller/tracer_base.py +45 -0
  101. atomicshop/process_poller/tracers/__init__.py +0 -0
  102. atomicshop/process_poller/tracers/event_log.py +46 -0
  103. atomicshop/process_poller/tracers/sysmon_etw.py +68 -0
  104. atomicshop/python_file_patcher.py +1 -1
  105. atomicshop/python_functions.py +27 -75
  106. atomicshop/question_answer_engine.py +2 -2
  107. atomicshop/scheduling.py +24 -5
  108. atomicshop/sound.py +4 -2
  109. atomicshop/speech_recognize.py +8 -0
  110. atomicshop/ssh_remote.py +158 -172
  111. atomicshop/startup/__init__.py +0 -0
  112. atomicshop/startup/win/__init__.py +0 -0
  113. atomicshop/startup/win/startup_folder.py +53 -0
  114. atomicshop/startup/win/task_scheduler.py +119 -0
  115. atomicshop/system_resource_monitor.py +61 -46
  116. atomicshop/system_resources.py +8 -8
  117. atomicshop/tempfiles.py +1 -2
  118. atomicshop/timer.py +30 -11
  119. atomicshop/urls.py +41 -0
  120. atomicshop/venvs.py +28 -0
  121. atomicshop/versioning.py +27 -0
  122. atomicshop/web.py +110 -25
  123. atomicshop/web_apis/__init__.py +0 -0
  124. atomicshop/web_apis/google_custom_search.py +44 -0
  125. atomicshop/web_apis/google_llm.py +188 -0
  126. atomicshop/websocket_parse.py +450 -0
  127. atomicshop/wrappers/certauthw/certauth.py +1 -0
  128. atomicshop/wrappers/cryptographyw.py +29 -8
  129. atomicshop/wrappers/ctyping/etw_winapi/__init__.py +0 -0
  130. atomicshop/wrappers/ctyping/etw_winapi/const.py +335 -0
  131. atomicshop/wrappers/ctyping/etw_winapi/etw_functions.py +393 -0
  132. atomicshop/wrappers/ctyping/file_details_winapi.py +67 -0
  133. atomicshop/wrappers/ctyping/msi_windows_installer/cabs.py +2 -1
  134. atomicshop/wrappers/ctyping/msi_windows_installer/extract_msi_main.py +13 -9
  135. atomicshop/wrappers/ctyping/msi_windows_installer/tables.py +35 -0
  136. atomicshop/wrappers/ctyping/setup_device.py +466 -0
  137. atomicshop/wrappers/ctyping/win_console.py +39 -0
  138. atomicshop/wrappers/dockerw/dockerw.py +113 -2
  139. atomicshop/wrappers/elasticsearchw/config_basic.py +0 -12
  140. atomicshop/wrappers/elasticsearchw/elastic_infra.py +75 -0
  141. atomicshop/wrappers/elasticsearchw/elasticsearchw.py +2 -20
  142. atomicshop/wrappers/factw/get_file_data.py +12 -5
  143. atomicshop/wrappers/factw/install/install_after_restart.py +89 -5
  144. atomicshop/wrappers/factw/install/pre_install_and_install_before_restart.py +20 -14
  145. atomicshop/wrappers/factw/postgresql/firmware.py +4 -6
  146. atomicshop/wrappers/githubw.py +583 -51
  147. atomicshop/wrappers/loggingw/consts.py +49 -0
  148. atomicshop/wrappers/loggingw/filters.py +102 -0
  149. atomicshop/wrappers/loggingw/formatters.py +58 -71
  150. atomicshop/wrappers/loggingw/handlers.py +459 -40
  151. atomicshop/wrappers/loggingw/loggers.py +19 -0
  152. atomicshop/wrappers/loggingw/loggingw.py +1010 -178
  153. atomicshop/wrappers/loggingw/reading.py +344 -19
  154. atomicshop/wrappers/mongodbw/__init__.py +0 -0
  155. atomicshop/wrappers/mongodbw/mongo_infra.py +31 -0
  156. atomicshop/wrappers/mongodbw/mongodbw.py +1432 -0
  157. atomicshop/wrappers/netshw.py +271 -0
  158. atomicshop/wrappers/playwrightw/engine.py +34 -19
  159. atomicshop/wrappers/playwrightw/infra.py +5 -0
  160. atomicshop/wrappers/playwrightw/javascript.py +7 -3
  161. atomicshop/wrappers/playwrightw/keyboard.py +14 -0
  162. atomicshop/wrappers/playwrightw/scenarios.py +172 -5
  163. atomicshop/wrappers/playwrightw/waits.py +9 -7
  164. atomicshop/wrappers/powershell_networking.py +80 -0
  165. atomicshop/wrappers/psutilw/processes.py +81 -0
  166. atomicshop/wrappers/psutilw/psutil_networks.py +85 -0
  167. atomicshop/wrappers/psutilw/psutilw.py +9 -0
  168. atomicshop/wrappers/pyopensslw.py +9 -2
  169. atomicshop/wrappers/pywin32w/__init__.py +0 -0
  170. atomicshop/wrappers/pywin32w/cert_store.py +116 -0
  171. atomicshop/wrappers/pywin32w/console.py +34 -0
  172. atomicshop/wrappers/pywin32w/win_event_log/__init__.py +0 -0
  173. atomicshop/wrappers/pywin32w/win_event_log/fetch.py +174 -0
  174. atomicshop/wrappers/pywin32w/win_event_log/subscribe.py +212 -0
  175. atomicshop/wrappers/pywin32w/win_event_log/subscribes/__init__.py +0 -0
  176. atomicshop/wrappers/pywin32w/win_event_log/subscribes/process_create.py +57 -0
  177. atomicshop/wrappers/pywin32w/win_event_log/subscribes/process_terminate.py +49 -0
  178. atomicshop/wrappers/pywin32w/win_event_log/subscribes/schannel_logging.py +97 -0
  179. atomicshop/wrappers/pywin32w/winshell.py +19 -0
  180. atomicshop/wrappers/pywin32w/wmis/__init__.py +0 -0
  181. atomicshop/wrappers/pywin32w/wmis/msft_netipaddress.py +113 -0
  182. atomicshop/wrappers/pywin32w/wmis/win32_networkadapterconfiguration.py +259 -0
  183. atomicshop/wrappers/pywin32w/wmis/win32networkadapter.py +112 -0
  184. atomicshop/wrappers/pywin32w/wmis/wmi_helpers.py +236 -0
  185. atomicshop/wrappers/socketw/accepter.py +21 -7
  186. atomicshop/wrappers/socketw/certificator.py +216 -150
  187. atomicshop/wrappers/socketw/creator.py +190 -50
  188. atomicshop/wrappers/socketw/dns_server.py +500 -173
  189. atomicshop/wrappers/socketw/exception_wrapper.py +45 -52
  190. atomicshop/wrappers/socketw/process_getter.py +86 -0
  191. atomicshop/wrappers/socketw/receiver.py +144 -102
  192. atomicshop/wrappers/socketw/sender.py +65 -35
  193. atomicshop/wrappers/socketw/sni.py +334 -165
  194. atomicshop/wrappers/socketw/socket_base.py +134 -0
  195. atomicshop/wrappers/socketw/socket_client.py +137 -95
  196. atomicshop/wrappers/socketw/socket_server_tester.py +14 -9
  197. atomicshop/wrappers/socketw/socket_wrapper.py +717 -116
  198. atomicshop/wrappers/socketw/ssl_base.py +15 -14
  199. atomicshop/wrappers/socketw/statistics_csv.py +148 -17
  200. atomicshop/wrappers/sysmonw.py +157 -0
  201. atomicshop/wrappers/ubuntu_terminal.py +65 -26
  202. atomicshop/wrappers/win_auditw.py +189 -0
  203. atomicshop/wrappers/winregw/__init__.py +0 -0
  204. atomicshop/wrappers/winregw/winreg_installed_software.py +58 -0
  205. atomicshop/wrappers/winregw/winreg_network.py +232 -0
  206. {atomicshop-2.11.47.dist-info → atomicshop-3.10.5.dist-info}/METADATA +31 -49
  207. atomicshop-3.10.5.dist-info/RECORD +306 -0
  208. {atomicshop-2.11.47.dist-info → atomicshop-3.10.5.dist-info}/WHEEL +1 -1
  209. atomicshop/_basics_temp.py +0 -101
  210. atomicshop/addons/a_setup_scripts/install_psycopg2_ubuntu.sh +0 -3
  211. atomicshop/addons/a_setup_scripts/install_pywintrace_0.3.cmd +0 -2
  212. atomicshop/addons/mains/install_docker_rootless_ubuntu.py +0 -11
  213. atomicshop/addons/mains/install_docker_ubuntu_main_sudo.py +0 -11
  214. atomicshop/addons/mains/install_elastic_search_and_kibana_ubuntu.py +0 -10
  215. atomicshop/addons/mains/install_wsl_ubuntu_lts_admin.py +0 -9
  216. atomicshop/addons/package_setup/CreateWheel.cmd +0 -7
  217. atomicshop/addons/package_setup/Setup in Edit mode.cmd +0 -6
  218. atomicshop/addons/package_setup/Setup.cmd +0 -7
  219. atomicshop/addons/process_list/compile.cmd +0 -2
  220. atomicshop/addons/process_list/compiled/Win10x64/process_list.dll +0 -0
  221. atomicshop/addons/process_list/compiled/Win10x64/process_list.exp +0 -0
  222. atomicshop/addons/process_list/compiled/Win10x64/process_list.lib +0 -0
  223. atomicshop/archiver/_search_in_zip.py +0 -189
  224. atomicshop/archiver/archiver.py +0 -34
  225. atomicshop/archiver/search_in_archive.py +0 -250
  226. atomicshop/archiver/sevenz_app_w.py +0 -86
  227. atomicshop/archiver/sevenzs.py +0 -44
  228. atomicshop/archiver/zips.py +0 -293
  229. atomicshop/etw/dns_trace.py +0 -118
  230. atomicshop/etw/etw.py +0 -61
  231. atomicshop/file_types.py +0 -24
  232. atomicshop/mitm/engines/create_module_template_example.py +0 -13
  233. atomicshop/mitm/initialize_mitm_server.py +0 -240
  234. atomicshop/monitor/checks/hash.py +0 -44
  235. atomicshop/monitor/checks/hash_checks/file.py +0 -55
  236. atomicshop/monitor/checks/hash_checks/url.py +0 -62
  237. atomicshop/pbtkmultifile_argparse.py +0 -88
  238. atomicshop/permissions.py +0 -110
  239. atomicshop/process_poller.py +0 -237
  240. atomicshop/script_as_string_processor.py +0 -38
  241. atomicshop/ssh_scripts/process_from_ipv4.py +0 -37
  242. atomicshop/ssh_scripts/process_from_port.py +0 -27
  243. atomicshop/wrappers/_process_wrapper_curl.py +0 -27
  244. atomicshop/wrappers/_process_wrapper_tar.py +0 -21
  245. atomicshop/wrappers/dockerw/install_docker.py +0 -209
  246. atomicshop/wrappers/elasticsearchw/infrastructure.py +0 -265
  247. atomicshop/wrappers/elasticsearchw/install_elastic.py +0 -232
  248. atomicshop/wrappers/ffmpegw.py +0 -125
  249. atomicshop/wrappers/loggingw/checks.py +0 -20
  250. atomicshop/wrappers/nodejsw/install_nodejs.py +0 -139
  251. atomicshop/wrappers/process_wrapper_pbtk.py +0 -16
  252. atomicshop/wrappers/socketw/base.py +0 -59
  253. atomicshop/wrappers/socketw/get_process.py +0 -107
  254. atomicshop/wrappers/wslw.py +0 -191
  255. atomicshop-2.11.47.dist-info/RECORD +0 -251
  256. /atomicshop/{addons/mains → a_mains}/FACT/factw_fact_extractor_docker_image_main_sudo.py +0 -0
  257. /atomicshop/{addons → a_mains/addons}/PlayWrightCodegen.cmd +0 -0
  258. /atomicshop/{addons → a_mains/addons}/ScriptExecution.cmd +0 -0
  259. /atomicshop/{addons/mains → a_mains/addons}/inits/init_to_import_all_modules.py +0 -0
  260. /atomicshop/{addons → a_mains/addons}/process_list/ReadMe.txt +0 -0
  261. /atomicshop/{addons/mains → a_mains}/search_for_hyperlinks_in_docx.py +0 -0
  262. /atomicshop/{archiver → etws}/__init__.py +0 -0
  263. /atomicshop/{etw → etws/traces}/__init__.py +0 -0
  264. /atomicshop/{monitor/checks/hash_checks → mitm/statistic_analyzer_helper}/__init__.py +0 -0
  265. /atomicshop/{wrappers/nodejsw → permissions}/__init__.py +0 -0
  266. /atomicshop/wrappers/pywin32w/{wmi_win32process.py → wmis/win32process.py} +0 -0
  267. {atomicshop-2.11.47.dist-info → atomicshop-3.10.5.dist-info/licenses}/LICENSE.txt +0 -0
  268. {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