mirror of
https://github.com/hakril/PythonForWindows
synced 2026-06-08 14:31:45 +00:00
676 lines
84 KiB
HTML
676 lines
84 KiB
HTML
<!DOCTYPE html>
|
|
|
|
<html lang="en" data-content_root="../../../">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>windows.winobject.system — PythonForWindows 1.0.3 documentation</title>
|
|
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=fa44fd50" />
|
|
<link rel="stylesheet" type="text/css" href="../../../_static/classic.css?v=def86cc0" />
|
|
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css?v=957880af" />
|
|
|
|
<script src="../../../_static/documentation_options.js?v=baaebd52"></script>
|
|
<script src="../../../_static/doctools.js?v=9a2dae69"></script>
|
|
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
|
|
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
|
<link rel="search" title="Search" href="../../../search.html" />
|
|
</head><body>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../../genindex.html" title="General Index"
|
|
accesskey="I">index</a></li>
|
|
<li class="right" >
|
|
<a href="../../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.3 documentation</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">windows.winobject.system</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="document">
|
|
<div class="documentwrapper">
|
|
<div class="bodywrapper">
|
|
<div class="body" role="main">
|
|
|
|
<h1>Source code for windows.winobject.system</h1><div class="highlight"><pre>
|
|
<span></span><span class="kn">import</span> <span class="nn">os</span>
|
|
<span class="kn">import</span> <span class="nn">ctypes</span>
|
|
<span class="kn">import</span> <span class="nn">copy</span>
|
|
<span class="kn">import</span> <span class="nn">struct</span>
|
|
|
|
<span class="kn">import</span> <span class="nn">windows</span>
|
|
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</span>
|
|
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">utils</span>
|
|
|
|
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
|
|
|
|
|
|
|
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">process</span>
|
|
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">network</span>
|
|
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">registry</span>
|
|
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">exception</span>
|
|
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">service</span>
|
|
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">volume</span>
|
|
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">wmi</span>
|
|
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">object_manager</span>
|
|
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">device_manager</span>
|
|
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">handle</span>
|
|
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">event_log</span>
|
|
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">event_trace</span>
|
|
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">task_scheduler</span>
|
|
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">system_module</span>
|
|
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">bits</span>
|
|
|
|
<span class="kn">from</span> <span class="nn">windows.dbgprint</span> <span class="kn">import</span> <span class="n">dbgprint</span>
|
|
|
|
|
|
<span class="k">class</span> <span class="nc">UnicodeEnvironment</span><span class="p">(</span><span class="nb">dict</span><span class="p">):</span>
|
|
<span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
|
|
<span class="n">key</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">UnicodeEnvironment</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__delitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
|
|
<span class="n">key</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
|
|
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">SetEnvironmentVariableW</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">UnicodeEnvironment</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__delitem__</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__contains__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
|
|
<span class="n">key</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">UnicodeEnvironment</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__contains__</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__setitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="c1"># SetEnvironmentVariableW</span>
|
|
<span class="c1"># If this parameter is NULL, the variable is deleted from the current process's environment.</span>
|
|
<span class="k">del</span> <span class="bp">self</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
|
|
<span class="k">return</span>
|
|
<span class="n">key</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
|
|
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">SetEnvironmentVariableW</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">UnicodeEnvironment</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__setitem__</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">dict</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
<span class="bp">self</span><span class="p">[</span><span class="n">k</span><span class="o">.</span><span class="n">upper</span><span class="p">()]</span> <span class="o">=</span> <span class="n">v</span>
|
|
|
|
<span class="c1"># Setitem -> SetEnvironmement variable</span>
|
|
|
|
<div class="viewcode-block" id="System">
|
|
<a class="viewcode-back" href="../../../windows.html#windows.winobject.system.System">[docs]</a>
|
|
<span class="k">class</span> <span class="nc">System</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""The state of the current ``Windows`` system ``Python`` is running on"""</span>
|
|
|
|
<span class="c1"># Setup these in a fixedproperty ?</span>
|
|
<span class="n">network</span> <span class="o">=</span> <span class="n">network</span><span class="o">.</span><span class="n">Network</span><span class="p">()</span>
|
|
<span class="w"> </span><span class="sd">"""Object of class :class:`windows.winobject.network.Network`"""</span>
|
|
<span class="n">registry</span> <span class="o">=</span> <span class="n">registry</span><span class="o">.</span><span class="n">Registry</span><span class="p">()</span>
|
|
<span class="w"> </span><span class="sd">"""Object of class :class:`windows.winobject.registry.Registry`"""</span>
|
|
|
|
<span class="nd">@property</span>
|
|
<span class="k">def</span> <span class="nf">processes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""The list of running processes</span>
|
|
|
|
<span class="sd"> :type: [:class:`~windows.winobject.process.WinProcess`] -- A list of Process</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">enumerate_processes</span><span class="p">()</span>
|
|
|
|
<span class="nd">@property</span>
|
|
<span class="k">def</span> <span class="nf">threads</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""The list of running threads</span>
|
|
|
|
<span class="sd"> :type: [:class:`~windows.winobject.process.WinThread`] -- A list of Thread</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">enumerate_threads_setup_owners</span><span class="p">()</span>
|
|
|
|
<span class="nd">@property</span>
|
|
<span class="k">def</span> <span class="nf">logicaldrives</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""List of logical drives [C:\, ...]</span>
|
|
|
|
<span class="sd"> :type: [:class:`~windows.winobject.volume.LogicalDrive`] -- A list of LogicalDrive</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">volume</span><span class="o">.</span><span class="n">enum_logical_drive</span><span class="p">()</span>
|
|
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
|
<span class="k">def</span> <span class="nf">services</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""An object to query, list and explore services</span>
|
|
|
|
<span class="sd"> :type: :class:`~windows.winobject.service.ServiceManager`</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">service</span><span class="o">.</span><span class="n">ServiceManager</span><span class="p">()</span>
|
|
|
|
<span class="nd">@property</span>
|
|
<span class="k">def</span> <span class="nf">handles</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""The list of system handles</span>
|
|
|
|
<span class="sd"> :type: [:class:`~windows.winobject.handle.Handle`] -- A list of Hanlde"""</span>
|
|
<span class="k">return</span> <span class="n">handle</span><span class="o">.</span><span class="n">enumerate_handles</span><span class="p">()</span>
|
|
|
|
<span class="nd">@property</span>
|
|
<span class="k">def</span> <span class="nf">modules</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""The list of system modules</span>
|
|
|
|
<span class="sd"> :type: [:class:`~windows.winobject.system_module.SystemModule`] -- A list of :class:`~windows.winobject.system_module.SystemModule` or :class:`~windows.winobject.system_module.SystemModuleWow64`</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">system_module</span><span class="o">.</span><span class="n">enumerate_kernel_modules</span><span class="p">()</span>
|
|
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
|
<span class="k">def</span> <span class="nf">bitness</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""The bitness of the system</span>
|
|
|
|
<span class="sd"> :type: :class:`int` -- 32 or 64</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s2">"PROCESSOR_ARCHITECTURE"</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">!=</span> <span class="s2">"x86"</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="mi">64</span>
|
|
<span class="k">if</span> <span class="s2">"PROCESSOR_ARCHITEW6432"</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="mi">64</span>
|
|
<span class="k">return</span> <span class="mi">32</span>
|
|
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
|
<span class="k">def</span> <span class="nf">environ</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""A unicode version of os.environ</span>
|
|
<span class="sd"> Same as os.environ on py3</span>
|
|
<span class="sd"> Custom dict built on GetEnvironmentStringsW() on py2</span>
|
|
|
|
<span class="sd"> :type: :class:`dict` -- {:class:`unicode`: :class:`unicode`}</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">is_py3</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span> <span class="c1"># Py3 environ is already unicode</span>
|
|
<span class="c1"># Create a unicode wrapper environment</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_unicode_environ_dict</span><span class="p">()</span>
|
|
|
|
<span class="k">def</span> <span class="nf">_create_unicode_environ_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="n">rawdictenv</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="n">curenv</span> <span class="o">=</span> <span class="n">envptr</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">GetEnvironmentStringsW</span><span class="p">()</span>
|
|
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
|
|
<span class="n">envstr</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_wchar_p</span><span class="p">(</span><span class="n">curenv</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">envstr</span><span class="p">:</span>
|
|
<span class="k">break</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="o">=</span> <span class="n">envstr</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"="</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> <span class="c1"># No =</span>
|
|
<span class="k">pass</span>
|
|
<span class="n">rawdictenv</span><span class="p">[</span><span class="n">key</span><span class="o">.</span><span class="n">upper</span><span class="p">()]</span> <span class="o">=</span> <span class="n">value</span>
|
|
<span class="n">curenv</span> <span class="o">+=</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">envstr</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="mi">2</span>
|
|
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">FreeEnvironmentStringsW</span><span class="p">(</span><span class="n">envptr</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">UnicodeEnvironment</span><span class="p">(</span><span class="n">rawdictenv</span><span class="p">)</span>
|
|
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
|
<span class="k">def</span> <span class="nf">wmi</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sa">r</span><span class="sd">"""An object to perform wmi requests to various namespaces</span>
|
|
|
|
<span class="sd"> :type: :class:`~windows.winobject.wmi.WmiManager`"""</span>
|
|
<span class="k">return</span> <span class="n">wmi</span><span class="o">.</span><span class="n">WmiManager</span><span class="p">()</span>
|
|
|
|
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
|
<span class="k">def</span> <span class="nf">event_log</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""An object to open Event channel/publisher and evtx file</span>
|
|
|
|
<span class="sd"> :type: :class:`~windows.winobject.event_log.EvtlogManager`</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">event_log</span><span class="o">.</span><span class="n">EvtlogManager</span><span class="p">()</span>
|
|
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
|
<span class="k">def</span> <span class="nf">etw</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""An object to interact with ETW (Event Tracing for Windows)</span>
|
|
|
|
<span class="sd"> :type: :class:`~windows.winobject.event_trace.EtwManager`</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">event_trace</span><span class="o">.</span><span class="n">EtwManager</span><span class="p">()</span>
|
|
|
|
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
|
<span class="k">def</span> <span class="nf">task_scheduler</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""An object able to manage scheduled tasks on the local system</span>
|
|
|
|
<span class="sd"> :type: :class:`~windows.winobject.task_scheduler.TaskService`</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">windows</span><span class="o">.</span><span class="n">com</span><span class="o">.</span><span class="n">init</span><span class="p">()</span>
|
|
<span class="n">clsid_task_scheduler</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IID</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="s2">"0f87369f-a4e5-4cfc-bd3e-73e6154572dd"</span><span class="p">)</span>
|
|
<span class="n">task_service</span> <span class="o">=</span> <span class="n">task_scheduler</span><span class="o">.</span><span class="n">TaskService</span><span class="p">()</span>
|
|
<span class="c1"># What is non-implemented (WinXP)</span>
|
|
<span class="c1"># Raise (NotImplementedError?) ? Return NotImplemented ?</span>
|
|
<span class="n">windows</span><span class="o">.</span><span class="n">com</span><span class="o">.</span><span class="n">create_instance</span><span class="p">(</span><span class="n">clsid_task_scheduler</span><span class="p">,</span> <span class="n">task_service</span><span class="p">)</span>
|
|
<span class="n">task_service</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="n">task_service</span>
|
|
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
|
<span class="k">def</span> <span class="nf">object_manager</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""An object to query the objects in the kernel object manager.</span>
|
|
|
|
<span class="sd"> :type: :class:`~windows.winobject.object_manager.ObjectManager`</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winobject</span><span class="o">.</span><span class="n">object_manager</span><span class="o">.</span><span class="n">ObjectManager</span><span class="p">()</span>
|
|
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
|
<span class="k">def</span> <span class="nf">device_manager</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""An object to query the device&driver configured on the computer.</span>
|
|
|
|
<span class="sd"> :type: :class:`~windows.winobject.device_manager.DeviceManager`</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winobject</span><span class="o">.</span><span class="n">device_manager</span><span class="o">.</span><span class="n">DeviceManager</span><span class="p">()</span>
|
|
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
|
<span class="k">def</span> <span class="nf">bits</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="n">bits</span><span class="o">.</span><span class="n">create_manager</span><span class="p">()</span>
|
|
|
|
<span class="c1">#TODO: use GetComputerNameExA ? and recover other names ?</span>
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
|
<span class="k">def</span> <span class="nf">computer_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""The name of the computer</span>
|
|
|
|
<span class="sd"> :type: :class:`str`</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">size</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">(</span><span class="mh">0x1000</span><span class="p">)</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_unicode_buffer</span><span class="p">(</span><span class="n">size</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="n">winproxy</span><span class="o">.</span><span class="n">GetComputerNameW</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">size</span><span class="p">))</span>
|
|
<span class="k">return</span> <span class="n">buf</span><span class="p">[:</span><span class="n">size</span><span class="o">.</span><span class="n">value</span><span class="p">]</span>
|
|
|
|
<span class="k">def</span> <span class="nf">_computer_name_ex</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nametype</span><span class="p">):</span>
|
|
<span class="n">size</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">winproxy</span><span class="o">.</span><span class="n">GetComputerNameExW</span><span class="p">(</span><span class="n">nametype</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">size</span><span class="p">))</span>
|
|
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">!=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_MORE_DATA</span><span class="p">:</span>
|
|
<span class="k">raise</span>
|
|
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_unicode_buffer</span><span class="p">(</span><span class="n">size</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="n">winproxy</span><span class="o">.</span><span class="n">GetComputerNameExW</span><span class="p">(</span><span class="n">nametype</span><span class="p">,</span> <span class="n">buf</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">size</span><span class="p">))</span>
|
|
<span class="k">return</span> <span class="n">buf</span><span class="p">[:</span><span class="n">size</span><span class="o">.</span><span class="n">value</span><span class="p">]</span>
|
|
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedproperty</span>
|
|
<span class="k">def</span> <span class="nf">domain</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="c1"># [WIP] name of the domain joined by the computer, None is no domain joined</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_computer_name_ex</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ComputerNameDnsDomain</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">None</span>
|
|
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
|
<span class="k">def</span> <span class="nf">version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""The version of the system</span>
|
|
|
|
<span class="sd"> :type: (:class:`int`, :class:`int`) -- (Major, Minor)</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_version</span><span class="p">()</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">dwMajorVersion</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">dwMinorVersion</span>
|
|
<span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="p">(</span><span class="mi">6</span><span class="p">,</span><span class="mi">2</span><span class="p">):</span>
|
|
<span class="n">result_str</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_file_version</span><span class="p">(</span><span class="s2">"kernel32"</span><span class="p">)</span>
|
|
<span class="n">result_tup</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">result_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"."</span><span class="p">)]</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">result_tup</span><span class="p">[:</span><span class="mi">2</span><span class="p">])</span>
|
|
<span class="k">return</span> <span class="n">result</span>
|
|
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
|
<span class="k">def</span> <span class="nf">version_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""The name of the system version, values are:</span>
|
|
|
|
<span class="sd"> * Windows Server 2016</span>
|
|
<span class="sd"> * Windows 10</span>
|
|
<span class="sd"> * Windows Server 2012 R2</span>
|
|
<span class="sd"> * Windows 8.1</span>
|
|
<span class="sd"> * Windows Server 2012</span>
|
|
<span class="sd"> * Windows 8</span>
|
|
<span class="sd"> * Windows Server 2008</span>
|
|
<span class="sd"> * Windows 7</span>
|
|
<span class="sd"> * Windows Server 2008</span>
|
|
<span class="sd"> * Windows Vista</span>
|
|
<span class="sd"> * Windows XP Professional x64 Edition</span>
|
|
<span class="sd"> * TODO: version (5.2) + is_workstation + bitness == 32 (don't even know if possible..)</span>
|
|
<span class="sd"> * Windows Server 2003 R2</span>
|
|
<span class="sd"> * Windows Server 2003</span>
|
|
<span class="sd"> * Windows XP</span>
|
|
<span class="sd"> * Windows 2000</span>
|
|
<span class="sd"> * "Unknow Windows <version={0} | is_workstation={1}>".format(version, is_workstation)</span>
|
|
|
|
<span class="sd"> :type: :class:`str`</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">version</span>
|
|
<span class="n">is_workstation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">product_type</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">VER_NT_WORKSTATION</span>
|
|
<span class="k">if</span> <span class="n">version</span> <span class="o">==</span> <span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">0</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="sa">u</span><span class="s2">"Windows Server 2016"</span><span class="p">,</span> <span class="sa">u</span><span class="s2">"Windows 10"</span><span class="p">][</span><span class="n">is_workstation</span><span class="p">]</span>
|
|
<span class="k">elif</span> <span class="n">version</span> <span class="o">==</span> <span class="p">(</span><span class="mi">6</span><span class="p">,</span> <span class="mi">3</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="sa">u</span><span class="s2">"Windows Server 2012 R2"</span><span class="p">,</span> <span class="sa">u</span><span class="s2">"Windows 8.1"</span><span class="p">][</span><span class="n">is_workstation</span><span class="p">]</span>
|
|
<span class="k">elif</span> <span class="n">version</span> <span class="o">==</span> <span class="p">(</span><span class="mi">6</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="sa">u</span><span class="s2">"Windows Server 2012"</span><span class="p">,</span> <span class="sa">u</span><span class="s2">"Windows 8"</span><span class="p">][</span><span class="n">is_workstation</span><span class="p">]</span>
|
|
<span class="k">elif</span> <span class="n">version</span> <span class="o">==</span> <span class="p">(</span><span class="mi">6</span><span class="p">,</span> <span class="mi">1</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="sa">u</span><span class="s2">"Windows Server 2008 R2"</span><span class="p">,</span> <span class="sa">u</span><span class="s2">"Windows 7"</span><span class="p">][</span><span class="n">is_workstation</span><span class="p">]</span>
|
|
<span class="k">elif</span> <span class="n">version</span> <span class="o">==</span> <span class="p">(</span><span class="mi">6</span><span class="p">,</span> <span class="mi">0</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="sa">u</span><span class="s2">"Windows Server 2008"</span><span class="p">,</span> <span class="sa">u</span><span class="s2">"Windows Vista"</span><span class="p">][</span><span class="n">is_workstation</span><span class="p">]</span>
|
|
<span class="k">elif</span> <span class="n">version</span> <span class="o">==</span> <span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span>
|
|
<span class="n">metric</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetSystemMetrics</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SM_SERVERR2</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">is_workstation</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">64</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="sa">u</span><span class="s2">"Windows XP Professional x64 Edition"</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="sa">u</span><span class="s2">"TODO: version (5.2) + is_workstation + bitness == 32"</span>
|
|
<span class="k">elif</span> <span class="n">metric</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="sa">u</span><span class="s2">"Windows Server 2003 R2"</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="sa">u</span><span class="s2">"Windows Server 2003"</span>
|
|
<span class="k">elif</span> <span class="n">version</span> <span class="o">==</span> <span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">1</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="sa">u</span><span class="s2">"Windows XP"</span>
|
|
<span class="k">elif</span> <span class="n">version</span> <span class="o">==</span> <span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">0</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="sa">u</span><span class="s2">"Windows 2000"</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="sa">u</span><span class="s2">"Unknow Windows <version=</span><span class="si">{0}</span><span class="s2"> | is_workstation=</span><span class="si">{1}</span><span class="s2">>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">version</span><span class="p">,</span> <span class="n">is_workstation</span><span class="p">)</span>
|
|
|
|
<span class="n">VERSION_MAPPER</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">VER_NT_WORKSTATION</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">VER_NT_DOMAIN_CONTROLLER</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">VER_NT_SERVER</span><span class="p">)</span>
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
|
<span class="k">def</span> <span class="nf">product_type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""The product type, value might be:</span>
|
|
|
|
<span class="sd"> * VER_NT_WORKSTATION(0x1L)</span>
|
|
<span class="sd"> * VER_NT_DOMAIN_CONTROLLER(0x2L)</span>
|
|
<span class="sd"> * VER_NT_SERVER(0x3L)</span>
|
|
|
|
<span class="sd"> :type: :class:`long` or :class:`int` (or subclass)</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_version</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">VERSION_MAPPER</span><span class="p">[</span><span class="n">version</span><span class="o">.</span><span class="n">wProductType</span><span class="p">]</span>
|
|
|
|
|
|
<span class="n">EDITION_MAPPER</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_UNDEFINED</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ULTIMATE</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_HOME_BASIC</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_HOME_PREMIUM</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ENTERPRISE</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_HOME_BASIC_N</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_BUSINESS</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STANDARD_SERVER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_DATACENTER_SERVER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SMALLBUSINESS_SERVER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ENTERPRISE_SERVER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STARTER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_DATACENTER_SERVER_CORE</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STANDARD_SERVER_CORE</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ENTERPRISE_SERVER_CORE</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ENTERPRISE_SERVER_IA64</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_BUSINESS_N</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_WEB_SERVER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_CLUSTER_SERVER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_HOME_SERVER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STORAGE_EXPRESS_SERVER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STORAGE_STANDARD_SERVER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STORAGE_WORKGROUP_SERVER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STORAGE_ENTERPRISE_SERVER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SERVER_FOR_SMALLBUSINESS</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SMALLBUSINESS_SERVER_PREMIUM</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_HOME_PREMIUM_N</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ENTERPRISE_N</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ULTIMATE_N</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_WEB_SERVER_CORE</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SERVER_FOUNDATION</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_HOME_PREMIUM_SERVER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SERVER_FOR_SMALLBUSINESS_V</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STANDARD_SERVER_V</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_DATACENTER_SERVER_V</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ENTERPRISE_SERVER_V</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_DATACENTER_SERVER_CORE_V</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STANDARD_SERVER_CORE_V</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ENTERPRISE_SERVER_CORE_V</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_HYPERV</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STORAGE_EXPRESS_SERVER_CORE</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STORAGE_STANDARD_SERVER_CORE</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STORAGE_WORKGROUP_SERVER_CORE</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STARTER_N</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_PROFESSIONAL</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_PROFESSIONAL_N</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SB_SOLUTION_SERVER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SERVER_FOR_SB_SOLUTIONS</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STANDARD_SERVER_SOLUTIONS</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SB_SOLUTION_SERVER_EM</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SOLUTION_EMBEDDEDSERVER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_CLUSTER_SERVER_V</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_EMBEDDED</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STARTER_E</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_HOME_BASIC_E</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_HOME_PREMIUM_E</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_PROFESSIONAL_E</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ENTERPRISE_E</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ULTIMATE_E</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ENTERPRISE_EVALUATION</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_MULTIPOINT_STANDARD_SERVER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_MULTIPOINT_PREMIUM_SERVER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STANDARD_EVALUATION_SERVER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_DATACENTER_EVALUATION_SERVER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ENTERPRISE_N_EVALUATION</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_CORE_ARM</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_CORE_N</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_CORE_COUNTRYSPECIFIC</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_CORE_LANGUAGESPECIFIC</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_CORE</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_PROFESSIONAL_WMC</span><span class="p">,</span>
|
|
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_UNLICENSED</span><span class="p">)</span>
|
|
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
|
<span class="k">def</span> <span class="nf">edition</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># Find a better name ?</span>
|
|
<span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_version</span><span class="p">()</span>
|
|
<span class="n">edition</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">winproxy</span><span class="o">.</span><span class="n">GetProductInfo</span><span class="p">(</span><span class="n">version</span><span class="o">.</span><span class="n">dwMajorVersion</span><span class="p">,</span>
|
|
<span class="n">version</span><span class="o">.</span><span class="n">dwMinorVersion</span><span class="p">,</span>
|
|
<span class="n">version</span><span class="o">.</span><span class="n">wServicePackMajor</span><span class="p">,</span>
|
|
<span class="n">version</span><span class="o">.</span><span class="n">wServicePackMinor</span><span class="p">,</span>
|
|
<span class="n">edition</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">ExportNotFound</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
<span class="c1"># Windows XP does not implem GetProductInfo</span>
|
|
<span class="k">assert</span> <span class="n">version</span><span class="o">.</span><span class="n">dwMajorVersion</span><span class="p">,</span> <span class="n">version</span><span class="o">.</span><span class="n">dwMinorVersion</span> <span class="o">==</span> <span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_edition_windows_xp</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">EDITION_MAPPER</span><span class="p">[</span><span class="n">edition</span><span class="o">.</span><span class="n">value</span><span class="p">]</span>
|
|
|
|
<span class="k">def</span> <span class="nf">_edition_windows_xp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="c1"># Emulate standard response from IsOS(gdef.OS_PROFESSIONAL)</span>
|
|
<span class="k">if</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">IsOS</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">OS_PROFESSIONAL</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_PROFESSIONAL</span>
|
|
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_HOME_BASIC</span>
|
|
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
|
<span class="k">def</span> <span class="nf">windir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="n">buffer</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_unicode_buffer</span><span class="p">(</span><span class="mh">0x100</span><span class="p">)</span>
|
|
<span class="n">reslen</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetWindowsDirectoryW</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">buffer</span><span class="p">[:</span><span class="n">reslen</span><span class="p">]</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="n">data</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">OSVERSIONINFOEXW</span><span class="p">()</span>
|
|
<span class="n">data</span><span class="o">.</span><span class="n">dwOSVersionInfoSize</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
|
<span class="n">winproxy</span><span class="o">.</span><span class="n">GetVersionExW</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">pointer</span><span class="p">(</span><span class="n">data</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">OSVERSIONINFOW</span><span class="p">)))</span>
|
|
<span class="k">return</span> <span class="n">data</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_file_version</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="n">size</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetFileVersionInfoSizeW</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="n">buf</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_unicode_buffer</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
|
|
<span class="n">winproxy</span><span class="o">.</span><span class="n">GetFileVersionInfoW</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">buf</span><span class="p">)</span>
|
|
<span class="n">bufptr</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PVOID</span><span class="p">()</span>
|
|
<span class="n">bufsize</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">UINT</span><span class="p">()</span>
|
|
<span class="c1"># Return binary data : the W is only or the input string in this case</span>
|
|
<span class="n">winproxy</span><span class="o">.</span><span class="n">VerQueryValueW</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="sa">u</span><span class="s2">"</span><span class="se">\\</span><span class="s2">VarFileInfo</span><span class="se">\\</span><span class="s2">Translation"</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">bufptr</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">bufsize</span><span class="p">))</span>
|
|
<span class="n">tup</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">BUFFER</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">USHORT</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="n">bufptr</span><span class="o">.</span><span class="n">value</span><span class="p">)[:]</span>
|
|
<span class="n">req</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{0:04x}{1:04x}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">*</span><span class="n">tup</span><span class="p">)</span>
|
|
<span class="k">del</span> <span class="n">tup</span>
|
|
<span class="n">winproxy</span><span class="o">.</span><span class="n">VerQueryValueW</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="sa">u</span><span class="s2">"</span><span class="se">\\</span><span class="s2">StringFileInfo</span><span class="se">\\</span><span class="si">{0}</span><span class="se">\\</span><span class="s2">ProductVersion"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">req</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">bufptr</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">bufsize</span><span class="p">))</span>
|
|
<span class="n">bufstr</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">bufptr</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">LPWSTR</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">bufstr</span><span class="o">.</span><span class="n">value</span>
|
|
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedproperty</span>
|
|
<span class="k">def</span> <span class="nf">build_number</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Return the `CurrentBuildNumber`"""</span>
|
|
<span class="c1"># Will only work on Windows 10 ?</span>
|
|
<span class="n">build</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">kuser_shared_data</span><span class="o">.</span><span class="n">NtBuildNumber</span>
|
|
<span class="k">if</span> <span class="n">build</span><span class="p">:</span> <span class="c1"># 0 before windows 10</span>
|
|
<span class="k">return</span> <span class="n">build</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">registry</span><span class="p">(</span><span class="sa">r</span><span class="s2">"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion"</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">key</span><span class="p">[</span><span class="s2">"CurrentBuildNumber"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedproperty</span>
|
|
<span class="k">def</span> <span class="nf">display_version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Return the `DisplayVersion` (22H2, 23H2, ...) is it exists, else None"""</span>
|
|
<span class="n">key</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">registry</span><span class="p">(</span><span class="sa">r</span><span class="s2">"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion"</span><span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">key</span><span class="p">[</span><span class="s2">"DisplayVersion"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
|
|
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_FILE_NOT_FOUND</span><span class="p">:</span>
|
|
<span class="k">raise</span>
|
|
<span class="k">return</span> <span class="kc">None</span>
|
|
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedproperty</span>
|
|
<span class="k">def</span> <span class="nf">versionstr</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="c1"># Best effort. use get_file_version if registry code fails</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="c1"># Does not works on Win7..</span>
|
|
<span class="c1"># Missing CurrentMajorVersionNumber/CurrentMinorVersionNumber/UBR</span>
|
|
<span class="c1"># We have CurrentVersion instead</span>
|
|
<span class="c1"># Use this code and get_file_version as a backup ?</span>
|
|
<span class="n">curver_key</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">registry</span><span class="p">(</span><span class="sa">r</span><span class="s2">"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion"</span><span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">major</span> <span class="o">=</span> <span class="n">curver_key</span><span class="p">[</span><span class="s2">"CurrentMajorVersionNumber"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
|
|
<span class="n">minor</span> <span class="o">=</span> <span class="n">curver_key</span><span class="p">[</span><span class="s2">"CurrentMinorVersionNumber"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
|
|
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
<span class="n">version</span> <span class="o">=</span> <span class="n">curver_key</span><span class="p">[</span><span class="s2">"CurrentVersion"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
|
|
<span class="c1"># May raise ValueError if no "."</span>
|
|
<span class="n">major</span><span class="p">,</span> <span class="n">minor</span> <span class="o">=</span> <span class="n">version</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"."</span><span class="p">)</span>
|
|
<span class="n">build</span> <span class="o">=</span> <span class="n">curver_key</span><span class="p">[</span><span class="s2">"CurrentBuildNumber"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
|
|
<span class="c1"># Update Build Revision</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">ubr</span> <span class="o">=</span> <span class="n">curver_key</span><span class="p">[</span><span class="s2">"UBR"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
|
|
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
<span class="n">ubr</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># Not present on Win7</span>
|
|
<span class="k">return</span> <span class="sa">u</span><span class="s2">"</span><span class="si">{0}</span><span class="s2">.</span><span class="si">{1}</span><span class="s2">.</span><span class="si">{2}</span><span class="s2">.</span><span class="si">{3}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">major</span><span class="p">,</span> <span class="n">minor</span><span class="p">,</span> <span class="n">build</span><span class="p">,</span> <span class="n">ubr</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="p">(</span><span class="ne">WindowsError</span><span class="p">,</span> <span class="ne">ValueError</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_file_version</span><span class="p">(</span><span class="s2">"ntdll"</span><span class="p">)</span>
|
|
|
|
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
|
<span class="k">def</span> <span class="nf">kuser_shared_data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="c1"># For now we only returns a "common-group" KUSER which only contains the</span>
|
|
<span class="c1"># 0x300 first bytes.</span>
|
|
<span class="c1"># These are the part that do not move much between XP & Win10</span>
|
|
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PFW_MINIMAL_KUSER_SHARED_DATA</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">MM_SHARED_USER_DATA_VA</span><span class="p">)</span>
|
|
|
|
|
|
<span class="nd">@staticmethod</span>
|
|
<span class="k">def</span> <span class="nf">enumerate_processes</span><span class="p">():</span>
|
|
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Enumerating processes with CreateToolhelp32Snapshot"</span><span class="p">,</span> <span class="s2">"SLOW"</span><span class="p">)</span>
|
|
<span class="n">process_entry</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PROCESSENTRY32W</span><span class="p">()</span>
|
|
<span class="n">process_entry</span><span class="o">.</span><span class="n">dwSize</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">process_entry</span><span class="p">)</span>
|
|
<span class="n">snap</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CreateToolhelp32Snapshot</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">TH32CS_SNAPPROCESS</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
|
<span class="n">winproxy</span><span class="o">.</span><span class="n">Process32FirstW</span><span class="p">(</span><span class="n">snap</span><span class="p">,</span> <span class="n">process_entry</span><span class="p">)</span>
|
|
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">process</span><span class="o">.</span><span class="n">WinProcess</span><span class="o">.</span><span class="n">_from_PROCESSENTRY32W</span><span class="p">(</span><span class="n">process_entry</span><span class="p">))</span>
|
|
<span class="k">while</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">Process32NextW</span><span class="p">(</span><span class="n">snap</span><span class="p">,</span> <span class="n">process_entry</span><span class="p">):</span>
|
|
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">process</span><span class="o">.</span><span class="n">WinProcess</span><span class="o">.</span><span class="n">_from_PROCESSENTRY32W</span><span class="p">(</span><span class="n">process_entry</span><span class="p">))</span>
|
|
<span class="n">winproxy</span><span class="o">.</span><span class="n">CloseHandle</span><span class="p">(</span><span class="n">snap</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">res</span>
|
|
|
|
<span class="nd">@staticmethod</span>
|
|
<span class="k">def</span> <span class="nf">enumerate_threads_generator</span><span class="p">():</span>
|
|
<span class="c1"># Ptet dangereux, parce que on yield la meme THREADENTRY32 a chaque fois</span>
|
|
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Enumerating threads with CreateToolhelp32Snapshot <generator>"</span><span class="p">,</span> <span class="s2">"SLOW"</span><span class="p">)</span>
|
|
<span class="n">thread_entry</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">THREADENTRY32</span><span class="p">()</span>
|
|
<span class="n">thread_entry</span><span class="o">.</span><span class="n">dwSize</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">thread_entry</span><span class="p">)</span>
|
|
<span class="n">snap</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CreateToolhelp32Snapshot</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">TH32CS_SNAPTHREAD</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
|
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"New handle CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD) <generator> | </span><span class="si">{0:#x}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">snap</span><span class="p">),</span> <span class="s2">"HANDLE"</span><span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">winproxy</span><span class="o">.</span><span class="n">Thread32First</span><span class="p">(</span><span class="n">snap</span><span class="p">,</span> <span class="n">thread_entry</span><span class="p">)</span>
|
|
<span class="k">yield</span> <span class="n">thread_entry</span>
|
|
<span class="k">while</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">Thread32Next</span><span class="p">(</span><span class="n">snap</span><span class="p">,</span> <span class="n">thread_entry</span><span class="p">):</span>
|
|
<span class="k">yield</span> <span class="n">thread_entry</span>
|
|
<span class="k">finally</span><span class="p">:</span>
|
|
<span class="n">winproxy</span><span class="o">.</span><span class="n">CloseHandle</span><span class="p">(</span><span class="n">snap</span><span class="p">)</span>
|
|
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"CLOSE CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD) <generator> | </span><span class="si">{0:#x}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">snap</span><span class="p">),</span> <span class="s2">"HANDLE"</span><span class="p">)</span>
|
|
|
|
|
|
<span class="nd">@staticmethod</span>
|
|
<span class="k">def</span> <span class="nf">enumerate_threads</span><span class="p">():</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="n">WinThread</span><span class="o">.</span><span class="n">_from_THREADENTRY32</span><span class="p">(</span><span class="n">th</span><span class="p">)</span> <span class="k">for</span> <span class="n">th</span> <span class="ow">in</span> <span class="n">System</span><span class="o">.</span><span class="n">enumerate_threads_generator</span><span class="p">()]</span>
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">enumerate_threads_setup_owners</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="c1"># Enumerating threads is a special operation concerning the owner process.</span>
|
|
<span class="c1"># We may not be able to retrieve the name of the owning process by normal way</span>
|
|
<span class="c1"># (as we need to get a handle on the process)</span>
|
|
<span class="c1"># So, this implementation of enumerate_thread also setup the owner with the result of enumerate_processes</span>
|
|
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Enumerating threads with CreateToolhelp32Snapshot and setup owner"</span><span class="p">,</span> <span class="s2">"SLOW"</span><span class="p">)</span>
|
|
|
|
<span class="c1"># One snap for both enum to be prevent race</span>
|
|
<span class="n">snap</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CreateToolhelp32Snapshot</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">TH32CS_SNAPTHREAD</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">TH32CS_SNAPPROCESS</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
|
|
|
<span class="n">process_entry</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PROCESSENTRY32W</span><span class="p">()</span>
|
|
<span class="n">process_entry</span><span class="o">.</span><span class="n">dwSize</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">process_entry</span><span class="p">)</span>
|
|
<span class="n">winproxy</span><span class="o">.</span><span class="n">Process32FirstW</span><span class="p">(</span><span class="n">snap</span><span class="p">,</span> <span class="n">process_entry</span><span class="p">)</span>
|
|
<span class="n">processes</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">processes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">process</span><span class="o">.</span><span class="n">WinProcess</span><span class="o">.</span><span class="n">_from_PROCESSENTRY32W</span><span class="p">(</span><span class="n">process_entry</span><span class="p">))</span>
|
|
<span class="k">while</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">Process32NextW</span><span class="p">(</span><span class="n">snap</span><span class="p">,</span> <span class="n">process_entry</span><span class="p">):</span>
|
|
<span class="n">processes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">process</span><span class="o">.</span><span class="n">WinProcess</span><span class="o">.</span><span class="n">_from_PROCESSENTRY32W</span><span class="p">(</span><span class="n">process_entry</span><span class="p">))</span>
|
|
|
|
<span class="c1"># Forge a dict pid -> process</span>
|
|
<span class="n">proc_dict</span> <span class="o">=</span> <span class="p">{</span><span class="n">proc</span><span class="o">.</span><span class="n">pid</span><span class="p">:</span> <span class="n">proc</span> <span class="k">for</span> <span class="n">proc</span> <span class="ow">in</span> <span class="n">processes</span><span class="p">}</span>
|
|
|
|
<span class="n">thread_entry</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">THREADENTRY32</span><span class="p">()</span>
|
|
<span class="n">thread_entry</span><span class="o">.</span><span class="n">dwSize</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">thread_entry</span><span class="p">)</span>
|
|
<span class="n">threads</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">winproxy</span><span class="o">.</span><span class="n">Thread32First</span><span class="p">(</span><span class="n">snap</span><span class="p">,</span> <span class="n">thread_entry</span><span class="p">)</span>
|
|
<span class="n">parent</span> <span class="o">=</span> <span class="n">proc_dict</span><span class="p">[</span><span class="n">thread_entry</span><span class="o">.</span><span class="n">th32OwnerProcessID</span><span class="p">]</span>
|
|
<span class="n">threads</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">process</span><span class="o">.</span><span class="n">WinThread</span><span class="o">.</span><span class="n">_from_THREADENTRY32</span><span class="p">(</span><span class="n">thread_entry</span><span class="p">,</span> <span class="n">owner</span><span class="o">=</span><span class="n">parent</span><span class="p">))</span>
|
|
<span class="k">while</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">Thread32Next</span><span class="p">(</span><span class="n">snap</span><span class="p">,</span> <span class="n">thread_entry</span><span class="p">):</span>
|
|
<span class="n">parent</span> <span class="o">=</span> <span class="n">proc_dict</span><span class="p">[</span><span class="n">thread_entry</span><span class="o">.</span><span class="n">th32OwnerProcessID</span><span class="p">]</span>
|
|
<span class="n">threads</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">process</span><span class="o">.</span><span class="n">WinThread</span><span class="o">.</span><span class="n">_from_THREADENTRY32</span><span class="p">(</span><span class="n">thread_entry</span><span class="p">,</span> <span class="n">owner</span><span class="o">=</span><span class="n">parent</span><span class="p">))</span>
|
|
<span class="n">winproxy</span><span class="o">.</span><span class="n">CloseHandle</span><span class="p">(</span><span class="n">snap</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">threads</span></div>
|
|
|
|
</pre></div>
|
|
|
|
<div class="clearer"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
<div class="sphinxsidebarwrapper">
|
|
<search id="searchbox" style="display: none" role="search">
|
|
<h3 id="searchlabel">Quick search</h3>
|
|
<div class="searchformwrapper">
|
|
<form class="search" action="../../../search.html" method="get">
|
|
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
|
<input type="submit" value="Go" />
|
|
</form>
|
|
</div>
|
|
</search>
|
|
<script>document.getElementById('searchbox').style.display = "block"</script>
|
|
</div>
|
|
</div>
|
|
<div class="clearer"></div>
|
|
</div>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../../genindex.html" title="General Index"
|
|
>index</a></li>
|
|
<li class="right" >
|
|
<a href="../../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.3 documentation</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">windows.winobject.system</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="footer" role="contentinfo">
|
|
© Copyright 2015-2020, Clement Rouault.
|
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
|
</div>
|
|
</body>
|
|
</html> |