mirror of
https://github.com/hakril/PythonForWindows
synced 2026-06-08 14:31:45 +00:00
Update doc
This commit is contained in:
+11
-5
@@ -4,12 +4,12 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.com — PythonForWindows 1.0.2 documentation</title>
|
||||
<title>windows.com — 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=1ed6394b"></script>
|
||||
<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>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<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.2 documentation</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.com</a></li>
|
||||
</ul>
|
||||
@@ -75,7 +75,13 @@
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">initsecurity</span><span class="p">():</span> <span class="c1"># Should take some parameters..</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CoInitializeSecurity</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">RPC_C_IMP_LEVEL_IMPERSONATE</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span><span class="mi">0</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">CoInitializeSecurity</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">RPC_C_IMP_LEVEL_IMPERSONATE</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">OSError</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="mh">0xFFFFFFFF</span> <span class="o">!=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">RPC_E_TOO_LATE</span><span class="p">:</span>
|
||||
<span class="c1"># RPC_E_TOO_LATE can happen when the python environment invokes CoInitializeSecurity before we get to it</span>
|
||||
<span class="c1"># mspython builds do this consistently.</span>
|
||||
<span class="k">raise</span> <span class="n">e</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">Dispatch</span><span class="p">(</span><span class="n">interfaces</span><span class="o">.</span><span class="n">IDispatch</span><span class="p">):</span>
|
||||
@@ -489,7 +495,7 @@
|
||||
<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.2 documentation</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.com</a></li>
|
||||
</ul>
|
||||
|
||||
+15
-4
@@ -4,12 +4,12 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.crypto.certificate — PythonForWindows 1.0.2 documentation</title>
|
||||
<title>windows.crypto.certificate — 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=1ed6394b"></script>
|
||||
<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>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<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.2 documentation</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.crypto.certificate</a></li>
|
||||
</ul>
|
||||
@@ -205,6 +205,17 @@
|
||||
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="bp">cls</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="CertificateStore.from_user_store">
|
||||
<a class="viewcode-back" href="../../../crypto.html#windows.crypto.CertificateStore.from_user_store">[docs]</a>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">from_user_store</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">store_name</span><span class="p">,</span> <span class="n">user</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Create a new :class:`CertificateStore` from system store ``store_name``</span>
|
||||
<span class="sd"> (see `System Store Locations <https://msdn.microsoft.com/en-us/library/windows/desktop/aa388136(v=vs.85).aspx>`_)</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertOpenStore</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_PROV_SYSTEM_A</span><span class="p">,</span> <span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_SYSTEM_STORE_CURRENT_USER</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_READONLY_FLAG</span><span class="p">,</span> <span class="n">store_name</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="bp">cls</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="CertificateStore.new_in_memory">
|
||||
<a class="viewcode-back" href="../../../crypto.html#windows.crypto.CertificateStore.new_in_memory">[docs]</a>
|
||||
<span class="nd">@classmethod</span>
|
||||
@@ -697,7 +708,7 @@
|
||||
<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.2 documentation</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.crypto.certificate</a></li>
|
||||
</ul>
|
||||
|
||||
+9
-15
@@ -4,12 +4,12 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.debug.breakpoints — PythonForWindows 1.0.2 documentation</title>
|
||||
<title>windows.debug.breakpoints — 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=1ed6394b"></script>
|
||||
<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>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<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.2 documentation</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.debug.breakpoints</a></li>
|
||||
</ul>
|
||||
@@ -190,17 +190,11 @@
|
||||
<span class="n">t</span> <span class="o">=</span> <span class="n">rt</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">cproc</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">t</span> <span class="o">=</span> <span class="n">rt</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
||||
|
||||
<span class="n">content</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">content</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">contents</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="c1"># contents will fail on basic type</span>
|
||||
<span class="c1"># Not really an expected behavior</span>
|
||||
<span class="c1"># But it works for now.. (and since a while)</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="k">if</span> <span class="n">content</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">t</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="s2">"contents"</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">t</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="n">res</span><span class="p">[</span><span class="n">name</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="n">t</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
|
||||
@@ -365,7 +359,7 @@
|
||||
<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.2 documentation</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.debug.breakpoints</a></li>
|
||||
</ul>
|
||||
|
||||
+13
-15
@@ -4,12 +4,12 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.debug.symbols — PythonForWindows 1.0.2 documentation</title>
|
||||
<title>windows.debug.symbols — 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=1ed6394b"></script>
|
||||
<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>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<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.2 documentation</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.debug.symbols</a></li>
|
||||
</ul>
|
||||
@@ -54,7 +54,7 @@
|
||||
<div class="viewcode-block" id="set_dbghelp_path">
|
||||
<a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.set_dbghelp_path">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">set_dbghelp_path</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Set the path of the ``dbghelp.dll`` file to use. It allow to configure a different version of the DLL handling PDB downloading.</span>
|
||||
<span class="w"> </span><span class="sa">r</span><span class="sd">"""Set the path of the ``dbghelp.dll`` file to use. It allow to configure a different version of the DLL handling PDB downloading.</span>
|
||||
|
||||
<span class="sd"> If ``path`` is a directory, the final ``dbghelp.dll`` will be computed as</span>
|
||||
<span class="sd"> ``path\<current_process_bitness>\dbghelp.dll``.</span>
|
||||
@@ -169,7 +169,7 @@
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">SymbolInfoW</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SYMBOL_INFOW</span><span class="p">,</span> <span class="n">SymbolInfoBase</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Represent a Symbol.</span>
|
||||
<span class="w"> </span><span class="sa">r</span><span class="sd">"""Represent a Symbol.</span>
|
||||
<span class="sd"> This class in based on the class `SYMBOL_INFO <https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/ns-dbghelp-symbol_info>`_</span>
|
||||
<span class="sd"> with the handling on displacement embeded into it.s</span>
|
||||
|
||||
@@ -222,6 +222,10 @@
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">LocalFree</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">newres</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">module</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">resolver</span><span class="o">.</span><span class="n">get_module</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">modbase</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_type_info</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">TI_GET_SYMNAME</span><span class="p">)</span>
|
||||
@@ -373,7 +377,7 @@
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">pdb</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""The local path of the loaded PDB if present</span>
|
||||
<span class="w"> </span><span class="sa">r</span><span class="sd">"""The local path of the loaded PDB if present</span>
|
||||
|
||||
<span class="sd"> Exemple:</span>
|
||||
<span class="sd"> >>> sh = windows.debug.symbols.VirtualSymbolHandler()</span>
|
||||
@@ -503,7 +507,7 @@
|
||||
<span class="k">return</span> <span class="n">sym</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">resolve</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name_or_addr</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Resolve ``name_or_addr``.</span>
|
||||
<span class="w"> </span><span class="sa">r</span><span class="sd">"""Resolve ``name_or_addr``.</span>
|
||||
|
||||
<span class="sd"> If its an int -> Return the :class:`SymbolInfo` at the address.</span>
|
||||
<span class="sd"> If its a string -> Return the :class:`SymbolInfo` corresponding to the symbol name</span>
|
||||
@@ -552,7 +556,7 @@
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">search</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mask</span><span class="p">,</span> <span class="n">mod</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">SYMSEARCH_ALLITEMS</span><span class="p">,</span> <span class="n">callback</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Search the symbols matching ``mask`` (``Windbg`` like).</span>
|
||||
<span class="w"> </span><span class="sa">r</span><span class="sd">"""Search the symbols matching ``mask`` (``Windbg`` like).</span>
|
||||
|
||||
<span class="sd"> :return: [:class:`SymbolInfo`] -- A list of :class:`SymbolInfo`</span>
|
||||
|
||||
@@ -605,12 +609,6 @@
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">SymGetTypeFromNameW</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">mod</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">buff</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">SymbolType</span><span class="o">.</span><span class="n">from_symbol_info</span><span class="p">(</span><span class="n">buff</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">resolver</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
|
||||
|
||||
<span class="c1">#</span>
|
||||
<span class="k">def</span> <span class="nf">types</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mod</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="n">typeslist</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1"># Iter on types of all modules if None provided ?</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">SymEnumTypes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">mod</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">simple_aggregator</span><span class="p">,</span> <span class="n">typeslist</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">SymbolType</span><span class="o">.</span><span class="n">from_symbol_info</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">resolver</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">typeslist</span><span class="p">]</span>
|
||||
|
||||
|
||||
<span class="c1"># TODO: mets de l'huile pour w4kfu</span>
|
||||
<span class="k">class</span> <span class="nc">StackWalker</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
@@ -869,7 +867,7 @@
|
||||
<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.2 documentation</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.debug.symbols</a></li>
|
||||
</ul>
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.generated_def.flag — PythonForWindows 1.0.2 documentation</title>
|
||||
<title>windows.generated_def.flag — 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=1ed6394b"></script>
|
||||
<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>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<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.2 documentation</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.generated_def.flag</a></li>
|
||||
</ul>
|
||||
@@ -145,7 +145,7 @@
|
||||
<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.2 documentation</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.generated_def.flag</a></li>
|
||||
</ul>
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.generated_def.interfaces — PythonForWindows 1.0.2 documentation</title>
|
||||
<title>windows.generated_def.interfaces — 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=1ed6394b"></script>
|
||||
<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>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<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.2 documentation</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.generated_def.interfaces</a></li>
|
||||
</ul>
|
||||
@@ -3998,7 +3998,7 @@
|
||||
<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.2 documentation</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.generated_def.interfaces</a></li>
|
||||
</ul>
|
||||
|
||||
+1241
-850
File diff suppressed because one or more lines are too long
+8
-7
@@ -4,12 +4,12 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.pe_parse — PythonForWindows 1.0.2 documentation</title>
|
||||
<title>windows.pe_parse — 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=1ed6394b"></script>
|
||||
<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>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<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.2 documentation</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.pe_parse</a></li>
|
||||
</ul>
|
||||
@@ -42,6 +42,7 @@
|
||||
<span class="kn">import</span> <span class="nn">windows.hooks</span> <span class="k">as</span> <span class="nn">hooks</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.utils</span> <span class="k">as</span> <span class="nn">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.generated_def.winstructs</span> <span class="kn">import</span> <span class="o">*</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.utils</span> <span class="kn">import</span> <span class="n">transform_ctypes_fields</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.remotectypes</span> <span class="k">as</span> <span class="nn">rctypes</span>
|
||||
@@ -77,9 +78,9 @@
|
||||
<span class="c1"># We can force bitness as the field we access are bitness-independant</span>
|
||||
<span class="n">pe</span> <span class="o">=</span> <span class="n">GetPEFile</span><span class="p">(</span><span class="n">baseaddr</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">force_bitness</span><span class="o">=</span><span class="mi">32</span><span class="p">)</span>
|
||||
<span class="n">machine</span> <span class="o">=</span> <span class="n">pe</span><span class="o">.</span><span class="n">get_NT_HEADER</span><span class="p">()</span><span class="o">.</span><span class="n">FileHeader</span><span class="o">.</span><span class="n">Machine</span>
|
||||
<span class="k">if</span> <span class="n">machine</span> <span class="o">==</span> <span class="mh">0x14c</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">machine</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_I386</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="mi">32</span>
|
||||
<span class="k">elif</span> <span class="n">machine</span> <span class="o">==</span> <span class="mh">0x8664</span><span class="p">:</span>
|
||||
<span class="k">elif</span> <span class="n">machine</span> <span class="ow">in</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_AMD64</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_ARM64</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="mi">64</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Unknow PE target machine <0x</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">machine</span><span class="p">))</span>
|
||||
@@ -150,7 +151,7 @@
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="n">get_string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">Name</span><span class="p">))[:</span><span class="mi">8</span><span class="p">]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="n">get_string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_base_addr</span><span class="p">)[:</span><span class="mi">8</span><span class="p">]</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">read_memory</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_base_addr</span><span class="p">,</span> <span class="mi">8</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"ascii"</span><span class="p">)</span>
|
||||
<span class="c1"># Decode as UTF-8 as the MS doc say ?</span>
|
||||
<span class="k">return</span> <span class="n">name</span>
|
||||
|
||||
@@ -549,7 +550,7 @@
|
||||
<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.2 documentation</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.pe_parse</a></li>
|
||||
</ul>
|
||||
|
||||
+4
-4
@@ -4,12 +4,12 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.remotectypes — PythonForWindows 1.0.2 documentation</title>
|
||||
<title>windows.remotectypes — 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=1ed6394b"></script>
|
||||
<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>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<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.2 documentation</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.remotectypes</a></li>
|
||||
</ul>
|
||||
@@ -599,7 +599,7 @@
|
||||
<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.2 documentation</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.remotectypes</a></li>
|
||||
</ul>
|
||||
|
||||
+36
-25
@@ -216,7 +216,7 @@
|
||||
<span class="n">this</span><span class="o">.</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">7</span><span class="p">)</span>
|
||||
<span class="n">this</span><span class="o">.</span><span class="n">flags</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ORPCF_LOCAL</span>
|
||||
<span class="c1"># Returned correct type with mandatory fields filed</span>
|
||||
<span class="n">lthis</span> <span class="o">=</span> <span class="n">find_correct_localthis_for_version</span><span class="p">()</span>
|
||||
<span class="n">lthis</span> <span class="o">=</span> <span class="n">fill_correct_localthis_for_version</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">buffer</span><span class="p">(</span><span class="n">req</span><span class="p">)[:]</span> <span class="o">+</span> <span class="n">buffer</span><span class="p">(</span><span class="n">this</span><span class="p">)[:]</span> <span class="o">+</span> <span class="n">buffer</span><span class="p">(</span><span class="n">lthis</span><span class="p">)[:]</span> <span class="o">+</span> <span class="n">params</span>
|
||||
<span class="k">return</span> <span class="n">buffer</span><span class="p">(</span><span class="n">req</span><span class="p">)[:]</span> <span class="o">+</span> <span class="n">params</span>
|
||||
|
||||
@@ -255,8 +255,11 @@
|
||||
<span class="s2">"raise if request_type == RESPONSE_TYPE_FAIL"</span>
|
||||
<span class="n">request_type</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s2">"<I"</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">data</span><span class="p">[:</span><span class="mi">4</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">request_type</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">RPC_RESPONSE_TYPE_FAIL</span><span class="p">:</span>
|
||||
<span class="n">error_code</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s2">"<5I"</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">data</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"RPC Response error </span><span class="si">{0}</span><span class="s2"> (</span><span class="si">{1!r}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error_code</span><span class="p">,</span> <span class="n">KNOWN_RPC_ERROR_CODE</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">error_code</span><span class="p">,</span> <span class="n">error_code</span><span class="p">)))</span>
|
||||
<span class="n">effective_error_code</span> <span class="o">=</span> <span class="n">error_code</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s2">"<5I"</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">data</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span>
|
||||
<span class="c1"># https://learn.microsoft.com/en-us/windows/win32/com/structure-of-com-error-codes</span>
|
||||
<span class="k">if</span> <span class="n">gdef</span><span class="o">.</span><span class="n">HRESULT_FACILITY</span><span class="p">(</span><span class="n">error_code</span><span class="p">)</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FACILITY_WIN32</span><span class="p">:</span>
|
||||
<span class="n">effective_error_code</span> <span class="o">=</span> <span class="n">effective_error_code</span> <span class="o">&</span> <span class="mh">0xffff</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"RPC Response error </span><span class="si">{0:#x}</span><span class="s2"> (</span><span class="si">{1!r}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error_code</span><span class="p">,</span> <span class="n">KNOWN_RPC_ERROR_CODE</span><span class="p">[</span><span class="n">effective_error_code</span><span class="p">]))</span>
|
||||
<span class="k">return</span> <span class="n">request_type</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_get_response_effective_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">response</span><span class="p">):</span>
|
||||
@@ -267,33 +270,41 @@
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">ALPC_RPC_RESPONSE</span><span class="p">):]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># Response in view M extract size from PORT_MESSAGE & read data from view</span>
|
||||
<span class="k">assert</span> <span class="n">response</span><span class="o">.</span><span class="n">port_message</span><span class="o">.</span><span class="n">u1</span><span class="o">.</span><span class="n">s1</span><span class="o">.</span><span class="n">TotalLength</span> <span class="o">>=</span> <span class="mh">0x48</span> <span class="c1"># At least 0x20 of data</span>
|
||||
<span class="k">assert</span> <span class="n">response</span><span class="o">.</span><span class="n">port_message</span><span class="o">.</span><span class="n">u1</span><span class="o">.</span><span class="n">s1</span><span class="o">.</span><span class="n">DataLength</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">ALPC_RPC_RESPONSE</span><span class="p">)</span> <span class="c1"># 0x20</span>
|
||||
<span class="n">rpcdatasize</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s2">"<I"</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="mh">0x18</span><span class="p">:</span><span class="mh">0x1c</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># ctypes.sizeof(ALPC_RPC_RESPONSE)</span>
|
||||
<span class="n">viewattr</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">view_attribute</span>
|
||||
<span class="k">assert</span> <span class="n">viewattr</span><span class="o">.</span><span class="n">ViewSize</span> <span class="o">>=</span> <span class="n">rpcdatasize</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">read_memory</span><span class="p">(</span><span class="n">viewattr</span><span class="o">.</span><span class="n">ViewBase</span><span class="p">,</span> <span class="n">rpcdatasize</span><span class="p">)</span>
|
||||
<span class="c1"># We have copied the data from the view: free it</span>
|
||||
<span class="c1"># It looks like:</span>
|
||||
<span class="c1"># windows.winproxy.NtAlpcDeleteSectionView(self.alpc_client.handle, 0, viewattr.ViewBase)</span>
|
||||
<span class="c1"># Will ne be enough, as it will wait for the message to be reused to unmap the section..</span>
|
||||
<span class="c1"># And the current architecture encourage creating new message every time</span>
|
||||
<span class="k">if</span> <span class="n">response_header</span><span class="o">.</span><span class="n">request_id</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">REQUEST_IDENTIFIER_ORPC</span><span class="p">:</span>
|
||||
<span class="c1"># Parse & remove ORPC headers (orpcthat + LocalThat)</span>
|
||||
<span class="n">orpcthat</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ORPCTHAT32</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">orpcthat</span><span class="p">):]</span>
|
||||
<span class="k">if</span> <span class="n">orpcthat</span><span class="o">.</span><span class="n">extensions</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Parsing extension !"</span><span class="p">)</span>
|
||||
<span class="c1"># Parse extension : code have not been tested a lot</span>
|
||||
<span class="n">write_array_extend</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">WireExtentArray</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">WireExtentArray</span><span class="p">):]</span>
|
||||
<span class="k">if</span> <span class="n">write_array_extend</span><span class="o">.</span><span class="n">rounded_size</span> <span class="o">!=</span> <span class="mi">2</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"orpcthat.extensions: WireExtentArray.rounded_size != 2"</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">write_array_extend</span><span class="o">.</span><span class="n">unique_flag</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">value</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pass_wire_extend</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="n">localthat_type</span> <span class="o">=</span> <span class="n">find_correct_localthat_for_version</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">localthat_type</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">localthat</span> <span class="o">=</span> <span class="n">localthat_type</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="c1"># Check localthat pointers are empty</span>
|
||||
<span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"pAsyncResponseBlock"</span><span class="p">,</span> <span class="s2">"containerErrorInformation"</span><span class="p">,</span> <span class="s2">"containerPassthroughData"</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">localthat</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"ORPC Response with localthat.</span><span class="si">{0}</span><span class="s2"> != 0"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="p">))</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">localthat</span><span class="p">):]</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pass_orpc_response_structures</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">data</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_pass_orpc_response_structures</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="n">orpcthat</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ORPCTHAT32</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">orpcthat</span><span class="p">):]</span>
|
||||
<span class="k">if</span> <span class="n">orpcthat</span><span class="o">.</span><span class="n">extensions</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="c1"># Parse extension : code have not been tested a lot</span>
|
||||
<span class="n">write_array_extend</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">WireExtentArray</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">WireExtentArray</span><span class="p">):]</span>
|
||||
<span class="k">if</span> <span class="n">write_array_extend</span><span class="o">.</span><span class="n">rounded_size</span> <span class="o">!=</span> <span class="mi">2</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"orpcthat.extensions: WireExtentArray.rounded_size != 2"</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">write_array_extend</span><span class="o">.</span><span class="n">unique_flag</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">value</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pass_wire_extend</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="n">localthat_type</span> <span class="o">=</span> <span class="n">find_correct_localthat_for_version</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">localthat_type</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">localthat</span> <span class="o">=</span> <span class="n">localthat_type</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="c1"># Check localthat pointers are empty</span>
|
||||
<span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"pAsyncResponseBlock"</span><span class="p">,</span> <span class="s2">"containerErrorInformation"</span><span class="p">,</span> <span class="s2">"containerPassthroughData"</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">localthat</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"ORPC Response with localthat.</span><span class="si">{0}</span><span class="s2"> != 0"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="p">))</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">localthat</span><span class="p">):]</span>
|
||||
<span class="k">return</span> <span class="n">data</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_pass_wire_extend</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
@@ -319,7 +330,7 @@
|
||||
<span class="c1"># Nb fields: 7</span>
|
||||
<span class="c1"># 10.0.16299.1 -> 10.0.26100.2454</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">find_correct_localthis_for_version</span><span class="p">():</span>
|
||||
<span class="k">def</span> <span class="nf">fill_correct_localthis_for_version</span><span class="p">():</span>
|
||||
<span class="n">vmaj</span><span class="p">,</span> <span class="n">vmin</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">version</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="n">vmaj</span><span class="p">,</span> <span class="n">vmin</span><span class="p">)</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="kc">None</span>
|
||||
|
||||
+13
-7
@@ -4,12 +4,12 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.rpc.ndr — PythonForWindows 1.0.2 documentation</title>
|
||||
<title>windows.rpc.ndr — 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=1ed6394b"></script>
|
||||
<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>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<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.2 documentation</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.rpc.ndr</a></li>
|
||||
</ul>
|
||||
@@ -229,6 +229,8 @@
|
||||
<span class="k">assert</span> <span class="n">size1</span> <span class="o">==</span> <span class="n">size2</span>
|
||||
<span class="k">assert</span> <span class="n">zero</span> <span class="o">==</span> <span class="mi">0</span>
|
||||
<span class="n">s</span> <span class="o">=</span> <span class="n">stream</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">size1</span> <span class="o">*</span> <span class="mi">2</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">stream</span><span class="o">.</span><span class="n">use_memoryview</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="nb">bytearray</span><span class="p">(</span><span class="n">s</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"utf-16-le"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">s</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"utf-16-le"</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
@@ -652,10 +654,14 @@
|
||||
<a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrStream">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">NdrStream</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""A stream of bytes used for NDR unpacking"""</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">use_memoryview</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">""""""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">fulldata</span> <span class="o">=</span> <span class="n">data</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">data</span>
|
||||
<span class="c1"># self.data = memoryview(data) # FAST but need some code rewrite at some places</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">use_memoryview</span> <span class="o">=</span> <span class="n">use_memoryview</span>
|
||||
<span class="k">if</span> <span class="n">use_memoryview</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="nb">memoryview</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="c1"># FAST but need some code rewrite at some places</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">data</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">partial_unpack</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">format</span><span class="p">):</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">calcsize</span><span class="p">(</span><span class="nb">format</span><span class="p">)</span>
|
||||
@@ -757,7 +763,7 @@
|
||||
<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.2 documentation</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.rpc.ndr</a></li>
|
||||
</ul>
|
||||
|
||||
+15
-14
@@ -4,12 +4,12 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.syswow64 — PythonForWindows 1.0.2 documentation</title>
|
||||
<title>windows.syswow64 — 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=1ed6394b"></script>
|
||||
<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>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<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.2 documentation</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.syswow64</a></li>
|
||||
</ul>
|
||||
@@ -212,19 +212,20 @@
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_current_process_syswow_peb</span><span class="p">():</span>
|
||||
<span class="n">current_process</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">CurrentProcessReadSyswow</span><span class="p">(</span><span class="n">process</span><span class="o">.</span><span class="n">Process</span><span class="p">):</span>
|
||||
<span class="n">bitness</span> <span class="o">=</span> <span class="mi">64</span>
|
||||
<span class="k">def</span> <span class="nf">_get_handle</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">OpenProcess</span><span class="p">(</span><span class="n">dwProcessId</span><span class="o">=</span><span class="n">current_process</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">read_memory</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
|
||||
<span class="n">buffer_addr</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_string_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">NtWow64ReadVirtualMemory64</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">buffer_addr</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">buffer_addr</span><span class="p">[:]</span>
|
||||
<span class="n">peb_addr</span> <span class="o">=</span> <span class="n">get_current_process_syswow_peb_addr</span><span class="p">()</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">process</span><span class="o">.</span><span class="n">RemotePEB64</span><span class="p">(</span><span class="n">peb_addr</span><span class="p">,</span> <span class="n">CurrentProcessReadSyswow</span><span class="p">())</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">CurrentProcessReadSyswow</span><span class="p">(</span><span class="n">process</span><span class="o">.</span><span class="n">Process</span><span class="p">):</span>
|
||||
<span class="n">bitness</span> <span class="o">=</span> <span class="mi">64</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_get_handle</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="c1"># GetCurrentProcess() is not accepted for NtWow64ReadVirtualMemory64 :(</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">OpenProcess</span><span class="p">(</span><span class="n">dwProcessId</span><span class="o">=</span><span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">read_memory</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
|
||||
<span class="n">buffer_addr</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_string_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">NtWow64ReadVirtualMemory64</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">buffer_addr</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">buffer_addr</span><span class="p">[:]</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">ReadSyswow64Process</span><span class="p">(</span><span class="n">process</span><span class="o">.</span><span class="n">Process</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
|
||||
@@ -432,7 +433,7 @@
|
||||
<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.2 documentation</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.syswow64</a></li>
|
||||
</ul>
|
||||
|
||||
+50
-22
@@ -4,12 +4,12 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.utils.winutils — PythonForWindows 1.0.2 documentation</title>
|
||||
<title>windows.utils.winutils — 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=1ed6394b"></script>
|
||||
<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>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<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.2 documentation</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.utils.winutils</a></li>
|
||||
</ul>
|
||||
@@ -75,19 +75,6 @@
|
||||
<span class="k">return</span> <span class="n">mod</span><span class="o">.</span><span class="n">pe</span><span class="o">.</span><span class="n">exports</span><span class="p">[</span><span class="n">func_name</span><span class="p">]</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">is_wow_64</span><span class="p">(</span><span class="n">hProcess</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">fnIsWow64Process</span> <span class="o">=</span> <span class="n">get_func_addr</span><span class="p">(</span><span class="s2">"kernel32.dll"</span><span class="p">,</span> <span class="s2">"IsWow64Process"</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">WinproxyError</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">False</span>
|
||||
<span class="n">IsWow64Process</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">WINFUNCTYPE</span><span class="p">(</span><span class="n">BOOL</span><span class="p">,</span> <span class="n">HANDLE</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">BOOL</span><span class="p">))(</span><span class="n">fnIsWow64Process</span><span class="p">)</span>
|
||||
<span class="n">Wow64Process</span> <span class="o">=</span> <span class="n">BOOL</span><span class="p">()</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">IsWow64Process</span><span class="p">(</span><span class="n">hProcess</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">Wow64Process</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="n">res</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="n">Wow64Process</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">WinError</span><span class="p">()</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="create_file_from_handle">
|
||||
<a class="viewcode-back" href="../../../utils.html#windows.utils.create_file_from_handle">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">create_file_from_handle</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s2">"r"</span><span class="p">):</span>
|
||||
@@ -136,14 +123,35 @@
|
||||
|
||||
<div class="viewcode-block" id="create_process">
|
||||
<a class="viewcode-back" href="../../../utils.html#windows.utils.create_process">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">create_process</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dwCreationFlags</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">show_windows</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""A convenient wrapper arround :func:`windows.winproxy.CreateProcessW`"""</span>
|
||||
<span class="k">def</span> <span class="nf">create_process</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dwCreationFlags</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">show_windows</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">machine</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""A convenient wrapper arround :func:`windows.winproxy.CreateProcessW`</span>
|
||||
<span class="sd"> ..note:</span>
|
||||
<span class="sd"> The machine param only works starting at vista and should be used on arm64 computer</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">proc_info</span> <span class="o">=</span> <span class="n">PROCESS_INFORMATION</span><span class="p">()</span>
|
||||
<span class="n">StartupInfo</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">lpStartupInfo</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">machine</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</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_string_buffer</span><span class="p">(</span><span class="mh">0x100</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">DWORD64</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">buffer</span><span class="p">))</span>
|
||||
<span class="n">machine</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">WORD</span><span class="p">(</span><span class="n">machine</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">InitializeProcThreadAttributeList</span><span class="p">(</span><span class="n">buffer</span><span class="p">,</span> <span class="mi">1</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">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">UpdateProcThreadAttribute</span><span class="p">(</span><span class="n">buffer</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PROC_THREAD_ATTRIBUTE_MACHINE_TYPE</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">machine</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">machine</span><span class="p">),</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
|
||||
<span class="n">startup_infoex</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">STARTUPINFOEXW</span><span class="p">()</span>
|
||||
<span class="n">startup_infoex</span><span class="o">.</span><span class="n">StartupInfo</span><span class="o">.</span><span class="n">cb</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">gdef</span><span class="o">.</span><span class="n">STARTUPINFOEXW</span><span class="p">)</span>
|
||||
<span class="n">startup_infoex</span><span class="o">.</span><span class="n">lpAttributeList</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">buffer</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PVOID</span><span class="p">)</span>
|
||||
<span class="n">StartupInfo</span> <span class="o">=</span> <span class="n">startup_infoex</span><span class="o">.</span><span class="n">StartupInfo</span>
|
||||
|
||||
<span class="n">dwCreationFlags</span> <span class="o">|=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EXTENDED_STARTUPINFO_PRESENT</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">show_windows</span><span class="p">:</span>
|
||||
<span class="n">StartupInfo</span> <span class="o">=</span> <span class="n">STARTUPINFOW</span><span class="p">()</span>
|
||||
<span class="n">StartupInfo</span><span class="o">.</span><span class="n">cb</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">StartupInfo</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">StartupInfo</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">StartupInfo</span> <span class="o">=</span> <span class="n">STARTUPINFOW</span><span class="p">()</span>
|
||||
<span class="n">StartupInfo</span><span class="o">.</span><span class="n">cb</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">StartupInfo</span><span class="p">)</span>
|
||||
<span class="n">StartupInfo</span><span class="o">.</span><span class="n">dwFlags</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="k">if</span> <span class="n">StartupInfo</span><span class="p">:</span>
|
||||
<span class="n">lpStartupInfo</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">StartupInfo</span><span class="p">)</span>
|
||||
<span class="n">lpCommandLine</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">):</span>
|
||||
@@ -160,6 +168,8 @@
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"CreateProcessW new thread handle </span><span class="si">{:#x}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">proc_info</span><span class="o">.</span><span class="n">hThread</span><span class="p">),</span> <span class="s2">"HANDLE"</span><span class="p">)</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Automatic close of thread handle </span><span class="si">{:#x}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">proc_info</span><span class="o">.</span><span class="n">hThread</span><span class="p">),</span> <span class="s2">"HANDLE"</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">CloseHandle</span><span class="p">(</span><span class="n">proc_info</span><span class="o">.</span><span class="n">hThread</span><span class="p">)</span> <span class="c1"># Give access to a WinThread in addition of the WinProcess ?</span>
|
||||
<span class="k">if</span> <span class="n">machine</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">DeleteProcThreadAttributeList</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</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">process</span><span class="o">.</span><span class="n">WinProcess</span><span class="p">(</span><span class="n">pid</span><span class="o">=</span><span class="n">proc_info</span><span class="o">.</span><span class="n">dwProcessId</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="n">proc_info</span><span class="o">.</span><span class="n">hProcess</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
@@ -360,6 +370,16 @@
|
||||
<span class="n">microsecond</span><span class="o">=</span><span class="n">systime</span><span class="o">.</span><span class="n">wMilliseconds</span> <span class="o">*</span> <span class="mi">1000</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">IMAGE_FILE_MACHINE_TO_PROC_ARCH</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_I386</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PROCESSOR_ARCHITECTURE_INTEL</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_AMD64</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PROCESSOR_ARCHITECTURE_AMD64</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_ARM64</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PROCESSOR_ARCHITECTURE_ARM64</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_UNKNOWN</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PROCESSOR_ARCHITECTURE_UNKNOWN</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">image_file_machine_to_processor_architecture</span><span class="p">(</span><span class="n">image_file_machine</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">IMAGE_FILE_MACHINE_TO_PROC_ARCH</span><span class="p">[</span><span class="n">image_file_machine</span><span class="p">]</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">FixedInteractiveConsole</span><span class="p">(</span><span class="n">code</span><span class="o">.</span><span class="n">InteractiveConsole</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">raw_input</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prompt</span><span class="o">=</span><span class="s2">">>>"</span><span class="p">):</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">prompt</span><span class="p">)</span>
|
||||
@@ -626,6 +646,14 @@
|
||||
<span class="c1"># addr = windows.winproxy.MapViewOfFile(h, dwDesiredAccess=FILE_MAP_READ, dwNumberOfBytesToMap=1)</span>
|
||||
<span class="c1"># return addr</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_system_info</span><span class="p">(</span><span class="n">native</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SYSTEM_INFO</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">native</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">GetNativeSystemInfo</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
|
||||
<span class="k">else</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">GetSystemInfo</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">decompress_buffer</span><span class="p">(</span><span class="n">buffer</span><span class="p">,</span> <span class="n">comptype</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">COMPRESSION_FORMAT_LZNT1</span><span class="p">,</span> <span class="n">uncompress_size</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">uncompress_size</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">uncompress_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span> <span class="o">*</span> <span class="mi">10</span>
|
||||
@@ -700,7 +728,7 @@
|
||||
<div class="viewcode-block" id="DisableWow64FsRedirection">
|
||||
<a class="viewcode-back" href="../../../utils.html#windows.utils.DisableWow64FsRedirection">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">DisableWow64FsRedirection</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""</span>
|
||||
<span class="w"> </span><span class="sa">r</span><span class="sd">"""</span>
|
||||
<span class="sd"> A context manager that disable the SysWow64 Filesystem Redirection ::</span>
|
||||
|
||||
<span class="sd"> if is_process_32_bits:</span>
|
||||
@@ -752,7 +780,7 @@
|
||||
<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.2 documentation</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.utils.winutils</a></li>
|
||||
</ul>
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.winobject.event_log — PythonForWindows 1.0.2 documentation</title>
|
||||
<title>windows.winobject.event_log — 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=1ed6394b"></script>
|
||||
<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>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<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.2 documentation</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.event_log</a></li>
|
||||
</ul>
|
||||
@@ -1279,7 +1279,7 @@
|
||||
<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.2 documentation</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.event_log</a></li>
|
||||
</ul>
|
||||
|
||||
+6
-4
@@ -4,12 +4,12 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.winobject.handle — PythonForWindows 1.0.2 documentation</title>
|
||||
<title>windows.winobject.handle — 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=1ed6394b"></script>
|
||||
<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>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<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.2 documentation</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.handle</a></li>
|
||||
</ul>
|
||||
@@ -186,6 +186,8 @@
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">enumerate_handles_syswow64</span><span class="p">():</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">_is_x86_on_arm64</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Crossing heaven gate x86 -> arm64 not implemented"</span><span class="p">)</span>
|
||||
<span class="n">size_needed</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ULONG</span><span class="p">()</span>
|
||||
<span class="c1"># Should at least be sizeof(gdef.SYSTEM_HANDLE_INFORMATION)</span>
|
||||
<span class="n">tmp_buffer</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">SYSTEM_HANDLE_INFORMATION64</span><span class="p">)()</span>
|
||||
@@ -267,7 +269,7 @@
|
||||
<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.2 documentation</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.handle</a></li>
|
||||
</ul>
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.winobject.object_manager — PythonForWindows 1.0.2 documentation</title>
|
||||
<title>windows.winobject.object_manager — 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=1ed6394b"></script>
|
||||
<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>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<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.2 documentation</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.object_manager</a></li>
|
||||
</ul>
|
||||
@@ -224,13 +224,13 @@
|
||||
<div class="viewcode-block" id="KernelObject.__getitem__">
|
||||
<a class="viewcode-back" href="../../../object_manager.html#windows.winobject.object_manager.KernelObject.__getitem__">[docs]</a>
|
||||
<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">name</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Query object ``name`` from the directory, split and subquery on ``\\``::</span>
|
||||
<span class="w"> </span><span class="sa">r</span><span class="sd">"""Query object ``name`` from the directory, split and subquery on ``\``::</span>
|
||||
|
||||
<span class="sd"> >>> obj</span>
|
||||
<span class="sd"> <KernelObject "\Windows" (type="Directory")></span>
|
||||
<span class="sd"> >>> obj["WindowStations"]["WinSta0"]</span>
|
||||
<span class="sd"> <KernelObject "\Windows\WindowStations" (type="Directory")></span>
|
||||
<span class="sd"> >>> obj["WindowStations\\WinSta0"]</span>
|
||||
<span class="sd"> >>> obj[r"WindowStations\\WinSta0"]</span>
|
||||
<span class="sd"> <KernelObject "\Windows\WindowStations" (type="Directory")></span>
|
||||
|
||||
<span class="sd"> :rtype: :class:`KernelObject`</span>
|
||||
@@ -317,7 +317,7 @@
|
||||
<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.2 documentation</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.object_manager</a></li>
|
||||
</ul>
|
||||
|
||||
+208
-104
@@ -4,12 +4,12 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.winobject.process — PythonForWindows 1.0.2 documentation</title>
|
||||
<title>windows.winobject.process — 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=1ed6394b"></script>
|
||||
<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>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<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.2 documentation</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.process</a></li>
|
||||
</ul>
|
||||
@@ -51,6 +51,7 @@
|
||||
<span class="kn">import</span> <span class="nn">windows</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.native_exec.simple_x86</span> <span class="k">as</span> <span class="nn">x86</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.native_exec.simple_x64</span> <span class="k">as</span> <span class="nn">x64</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.native_exec.simple_arm64</span> <span class="k">as</span> <span class="nn">arm64</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.remotectypes</span> <span class="k">as</span> <span class="nn">rctypes</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
||||
|
||||
@@ -106,27 +107,82 @@
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">Process</span><span class="p">(</span><span class="n">utils</span><span class="o">.</span><span class="n">AutoHandle</span><span class="p">):</span>
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedproperty</span>
|
||||
<span class="k">def</span> <span class="nf">is_wow_64</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""``True`` if the process is a SysWow64 process (32bit process on 64bits system).</span>
|
||||
|
||||
<span class="sd"> :type: :class:`bool`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># return utils.is_wow_64(self.handle)</span>
|
||||
<span class="k">return</span> <span class="n">utils</span><span class="o">.</span><span class="n">is_wow_64</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">limited_handle</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">is_implemented</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">IsWow64Process</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="kc">False</span>
|
||||
<span class="n">Wow64Process</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BOOL</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">IsWow64Process</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">Wow64Process</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="n">Wow64Process</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedproperty</span>
|
||||
<span class="k">def</span> <span class="nf">is_wow_64_2</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">is_implemented</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">IsWow64Process2</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
|
||||
<span class="n">processMachine</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">USHORT</span><span class="p">()</span>
|
||||
<span class="n">nativeMachine</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">USHORT</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">IsWow64Process2</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">processMachine</span><span class="p">,</span> <span class="n">nativeMachine</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_MAPPER</span><span class="p">[</span><span class="n">processMachine</span><span class="o">.</span><span class="n">value</span><span class="p">],</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_MAPPER</span><span class="p">[</span><span class="n">nativeMachine</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">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 process</span>
|
||||
|
||||
<span class="sd"> :returns: :class:`int` -- 32 or 64</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="mi">32</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_wow_64</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_wow_64</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="mi">32</span>
|
||||
<span class="k">return</span> <span class="mi">64</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedproperty</span>
|
||||
<span class="k">def</span> <span class="nf">architecture</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="c1"># Syswow2 will exactly tell us the architecture</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">is_implemented</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">IsWow64Process2</span><span class="p">):</span>
|
||||
<span class="n">process_machine</span><span class="p">,</span> <span class="n">native_machine</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_wow_64_2</span>
|
||||
<span class="k">if</span> <span class="n">process_machine</span> <span class="o">!=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_UNKNOWN</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">process_machine</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">architecture</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PROCESSOR_ARCHITECTURE_ARM64</span><span class="p">:</span>
|
||||
<span class="c1"># May be ARM64 or AMD64 as X64TA64 is not considered WOW64</span>
|
||||
<span class="c1"># ProcessMachineTypeInfo is from build 22000</span>
|
||||
<span class="c1"># What if not implemented ? parse target main binary PE ?</span>
|
||||
<span class="n">machine_archi</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PROCESS_MACHINE_INFORMATION</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">GetProcessInformation</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ProcessMachineTypeInfo</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">machine_archi</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">machine_archi</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_MAPPER</span><span class="p">[</span><span class="n">machine_archi</span><span class="o">.</span><span class="n">ProcessMachine</span><span class="p">]</span>
|
||||
|
||||
<span class="c1"># No IsWow64Process2 -> No ARM</span>
|
||||
<span class="c1"># So its up on x86 -> x64 based on process bitness</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">32</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_I386</span>
|
||||
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_AMD64</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedproperty</span>
|
||||
<span class="k">def</span> <span class="nf">_is_x86_on_arm64</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">architecture</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PROCESSOR_ARCHITECTURE_ARM64</span> <span class="ow">and</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">architecture</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_I386</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">_is_x86_on_x64</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">architecture</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PROCESSOR_ARCHITECTURE_AMD64</span> <span class="ow">and</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">architecture</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_I386</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">_is_native_architecture</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="p">((</span><span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">architecture</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PROCESSOR_ARCHITECTURE_INTEL</span> <span class="ow">and</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">architecture</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_I386</span><span class="p">)</span> <span class="ow">or</span>
|
||||
<span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">architecture</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PROCESSOR_ARCHITECTURE_AMD64</span> <span class="ow">and</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">architecture</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_AMD64</span><span class="p">)</span> <span class="ow">or</span>
|
||||
<span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">architecture</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PROCESSOR_ARCHITECTURE_ARM64</span> <span class="ow">and</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">architecture</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_ARM64</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">limited_handle</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">version</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o"><=</span> <span class="mi">5</span><span class="p">:</span>
|
||||
@@ -134,14 +190,26 @@
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">OpenProcess</span><span class="p">(</span><span class="n">PROCESS_QUERY_INFORMATION</span><span class="p">,</span> <span class="n">dwProcessId</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">OpenProcess</span><span class="p">(</span><span class="n">PROCESS_QUERY_LIMITED_INFORMATION</span><span class="p">,</span> <span class="n">dwProcessId</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">pid</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">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Name of the process</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="sd"> :type: :class:`str`</span>
|
||||
<span class="sd"> """</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">0x1024</span><span class="p">)</span>
|
||||
<span class="n">rsize</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetProcessImageFileNameW</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">limited_handle</span><span class="p">,</span> <span class="n">buffer</span><span class="p">)</span>
|
||||
<span class="c1"># GetProcessImageFileNameW returns the fullpath</span>
|
||||
<span class="k">return</span> <span class="n">buffer</span><span class="p">[:</span><span class="n">rsize</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\\</span><span class="s2">"</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</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">ppid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Parent Process ID</span>
|
||||
|
||||
<span class="sd"> :type: :class:`int`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span> <span class="ow">and</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">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">_is_x86_on_arm64</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Crossing heaven gate x86 -> arm64 not implemented"</span><span class="p">)</span>
|
||||
<span class="n">xtype</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">remotectypes</span><span class="o">.</span><span class="n">transform_type_to_remote64bits</span><span class="p">(</span><span class="n">PROCESS_BASIC_INFORMATION</span><span class="p">)</span>
|
||||
<span class="c1"># Fuck-it <3</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_char</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">xtype</span><span class="p">))()</span>
|
||||
@@ -212,6 +280,8 @@
|
||||
<span class="k">def</span> <span class="nf">virtual_protect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">protect</span><span class="p">,</span> <span class="n">old_protect</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Change the access right of one or more page of the process"""</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span> <span class="ow">and</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">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">_is_x86_on_arm64</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Crossing heaven gate x86 -> arm64 not implemented"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">size</span> <span class="o">&</span> <span class="mh">0x0fff</span><span class="p">:</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="p">((</span><span class="n">size</span> <span class="o">>></span> <span class="mi">12</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">12</span>
|
||||
<span class="k">if</span> <span class="n">old_protect</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
@@ -242,6 +312,8 @@
|
||||
<span class="sd"> :rtype: :class:`~windows.generated_def.winstructs.MEMORY_BASIC_INFORMATION`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span> <span class="ow">and</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">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">_is_x86_on_arm64</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Crossing heaven gate x86 -> arm64 not implemented"</span><span class="p">)</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">MEMORY_BASIC_INFORMATION64</span><span class="p">()</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">v</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">NtQueryVirtualMemory_32_to_64</span><span class="p">(</span><span class="n">ProcessHandle</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">BaseAddress</span><span class="o">=</span><span class="n">addr</span><span class="p">,</span> <span class="n">MemoryInformationClass</span><span class="o">=</span><span class="n">MemoryBasicInformation</span><span class="p">,</span> <span class="n">MemoryInformation</span><span class="o">=</span><span class="n">res</span><span class="p">)</span>
|
||||
@@ -322,6 +394,8 @@
|
||||
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">data</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">info_array</span><span class="p">):</span>
|
||||
<span class="n">info_array</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">VirtualAddress</span> <span class="o">=</span> <span class="n">addresses</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span> <span class="ow">and</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">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">_is_x86_on_arm64</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Crossing heaven gate x86 -> arm64 not implemented"</span><span class="p">)</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">NtQueryVirtualMemory_32_to_64</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">MemoryWorkingSetListEx</span><span class="p">,</span> <span class="n">info_array</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">QueryWorkingSetEx</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</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">info_array</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">info_array</span><span class="p">))</span>
|
||||
@@ -552,11 +626,12 @@
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">h</span> <span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">handles</span> <span class="k">if</span> <span class="n">h</span><span class="o">.</span><span class="n">dwProcessId</span> <span class="o">==</span> <span class="n">pid</span><span class="p">]</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">Process</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__del__</span><span class="p">()</span>
|
||||
<span class="c1"># Same logic that AutoHandle.__del__ for Process.limited_handle</span>
|
||||
<span class="c1"># Assert that Process inherit AutoHandle</span>
|
||||
<span class="c1"># sys.path is not None -> check if python shutdown</span>
|
||||
<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"_limited_handle"</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_limited_handle</span><span class="p">:</span>
|
||||
<span class="c1"># Same logic that AutoHandle.__del__ for Process.limited_handle</span>
|
||||
<span class="c1"># Assert that Process inherit AutoHandle</span>
|
||||
<span class="c1"># Call super after check as Process could be None during destruction</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">Process</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__del__</span><span class="p">()</span>
|
||||
<span class="c1"># Prevent some bug where dbgprint might be None when __del__ is called in a closing process</span>
|
||||
<span class="c1"># This line is bad -> it reopens a handle closed by 'super(Process, self).__del__()' ._.</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Closing limited handle </span><span class="si">{0}</span><span class="s2"> for </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="nb">hex</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_limited_handle</span><span class="p">),</span> <span class="bp">self</span><span class="p">),</span> <span class="s2">"HANDLE"</span><span class="p">)</span> <span class="k">if</span> <span class="n">dbgprint</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
@@ -603,7 +678,14 @@
|
||||
<a class="viewcode-back" href="../../../process.html#windows.winobject.process.CurrentThread">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">CurrentThread</span><span class="p">(</span><span class="n">Thread</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""The current thread"""</span>
|
||||
<span class="nd">@property</span> <span class="c1">#It's not a fixedpropety because executing thread might change</span>
|
||||
|
||||
<span class="n">get_teb_code_by_architecture</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_I386</span><span class="p">:</span> <span class="n">x86</span><span class="o">.</span><span class="n">assemble</span><span class="p">(</span><span class="s2">"mov eax, fs:[0x18]; ret"</span><span class="p">),</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_AMD64</span><span class="p">:</span> <span class="n">x64</span><span class="o">.</span><span class="n">assemble</span><span class="p">(</span><span class="s2">"mov rax, gs:[0x30]; ret"</span><span class="p">),</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">IMAGE_FILE_MACHINE_ARM64</span><span class="p">:</span> <span class="n">arm64</span><span class="o">.</span><span class="n">assemble</span><span class="p">(</span><span class="s2">"mov x0, x18; ret"</span><span class="p">)</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="nd">@property</span> <span class="c1">#It's not a fixedproperty because executing thread might change</span>
|
||||
<span class="k">def</span> <span class="nf">tid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Thread ID</span>
|
||||
|
||||
@@ -611,6 +693,15 @@
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetCurrentThreadId</span><span class="p">()</span>
|
||||
|
||||
<span class="nd">@property</span> <span class="c1">#It's not a fixedproperty because executing thread might change</span>
|
||||
<span class="k">def</span> <span class="nf">teb_base</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">get_teb_base_code</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_teb_code_by_architecture</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="n">architecture</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">get_teb_base_code</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">teb</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">TEB</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">teb_base</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">owner</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""The current process</span>
|
||||
@@ -632,8 +723,6 @@
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">ExitThread</span><span class="p">(</span><span class="n">code</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="CurrentThread.wait">
|
||||
<a class="viewcode-back" href="../../../process.html#windows.winobject.process.CurrentThread.wait">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">wait</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="n">INFINITE</span><span class="p">):</span>
|
||||
@@ -647,37 +736,12 @@
|
||||
<a class="viewcode-back" href="../../../process.html#windows.winobject.process.CurrentProcess">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">CurrentProcess</span><span class="p">(</span><span class="n">Process</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""The current process"""</span>
|
||||
<span class="n">get_peb</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<span class="n">get_peb_32_code</span> <span class="o">=</span> <span class="n">x86</span><span class="o">.</span><span class="n">MultipleInstr</span><span class="p">()</span>
|
||||
<span class="n">get_peb_32_code</span> <span class="o">+=</span> <span class="n">x86</span><span class="o">.</span><span class="n">Mov</span><span class="p">(</span><span class="s1">'EAX'</span><span class="p">,</span> <span class="n">x86</span><span class="o">.</span><span class="n">mem</span><span class="p">(</span><span class="s1">'fs:[0x30]'</span><span class="p">))</span>
|
||||
<span class="n">get_peb_32_code</span> <span class="o">+=</span> <span class="n">x86</span><span class="o">.</span><span class="n">Ret</span><span class="p">()</span>
|
||||
<span class="n">get_peb_32_code</span> <span class="o">=</span> <span class="n">get_peb_32_code</span><span class="o">.</span><span class="n">get_code</span><span class="p">()</span>
|
||||
|
||||
<span class="n">get_peb_64_code</span> <span class="o">=</span> <span class="n">x64</span><span class="o">.</span><span class="n">MultipleInstr</span><span class="p">()</span>
|
||||
<span class="n">get_peb_64_code</span> <span class="o">+=</span> <span class="n">x64</span><span class="o">.</span><span class="n">Mov</span><span class="p">(</span><span class="s1">'RAX'</span><span class="p">,</span> <span class="n">x64</span><span class="o">.</span><span class="n">mem</span><span class="p">(</span><span class="s1">'gs:[0x60]'</span><span class="p">))</span>
|
||||
<span class="n">get_peb_64_code</span> <span class="o">+=</span> <span class="n">x64</span><span class="o">.</span><span class="n">Ret</span><span class="p">()</span>
|
||||
<span class="n">get_peb_64_code</span> <span class="o">=</span> <span class="n">get_peb_64_code</span><span class="o">.</span><span class="n">get_code</span><span class="p">()</span>
|
||||
|
||||
<span class="n">allocator</span> <span class="o">=</span> <span class="n">native_exec</span><span class="o">.</span><span class="n">native_function</span><span class="o">.</span><span class="n">allocator</span>
|
||||
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"CurrentProcess"</span> <span class="c1"># Used by Winthread for __repr__</span>
|
||||
|
||||
<span class="c1"># Use RtlGetCurrentPeb ?</span>
|
||||
<span class="k">def</span> <span class="nf">get_peb_builtin</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_peb</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_peb</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">32</span><span class="p">:</span>
|
||||
<span class="n">get_peb</span> <span class="o">=</span> <span class="n">native_exec</span><span class="o">.</span><span class="n">create_function</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_peb_32_code</span><span class="p">,</span> <span class="p">[</span><span class="n">PVOID</span><span class="p">])</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">get_peb</span> <span class="o">=</span> <span class="n">native_exec</span><span class="o">.</span><span class="n">create_function</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_peb_64_code</span><span class="p">,</span> <span class="p">[</span><span class="n">PVOID</span><span class="p">])</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">get_peb</span> <span class="o">=</span> <span class="n">get_peb</span>
|
||||
<span class="k">return</span> <span class="n">get_peb</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_get_handle</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetCurrentProcess</span><span class="p">()</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedproperty</span>
|
||||
<span class="k">def</span> <span class="nf">limited_handle</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetCurrentProcess</span><span class="p">()</span>
|
||||
|
||||
@@ -693,23 +757,21 @@
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">getpid</span><span class="p">()</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span> <span class="c1"># leave it has fixed property as we don't care if CurrentProcess is never collected</span>
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedproperty</span> <span class="c1"># leave it has fixed property as we don't care if CurrentProcess is never collected</span>
|
||||
<span class="k">def</span> <span class="nf">peb</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""The Process Environment Block of the current process</span>
|
||||
|
||||
<span class="sd"> :type: :class:`PEB`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">PEB</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_peb_builtin</span><span class="p">()())</span>
|
||||
<span class="k">return</span> <span class="n">PEB</span><span class="o">.</span><span class="n">from_address</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">RtlGetCurrentPeb</span><span class="p">())</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedproperty</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 process</span>
|
||||
|
||||
<span class="sd"> :type: :class:`int` -- 32 or 64</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="kn">import</span> <span class="nn">platform</span>
|
||||
<span class="n">bits</span> <span class="o">=</span> <span class="n">platform</span><span class="o">.</span><span class="n">architecture</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">bits</span><span class="p">[:</span><span class="mi">2</span><span class="p">])</span>
|
||||
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">PVOID</span><span class="p">)</span> <span class="o">*</span> <span class="mi">8</span> <span class="c1"># byte to bits</span>
|
||||
|
||||
<div class="viewcode-block" id="CurrentProcess.virtual_alloc">
|
||||
<a class="viewcode-back" href="../../../process.html#windows.winobject.process.CurrentProcess.virtual_alloc">[docs]</a>
|
||||
@@ -798,7 +860,7 @@
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"wait() on current thread"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedproperty</span>
|
||||
<span class="k">def</span> <span class="nf">peb_syswow</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""The 64bits PEB of a SysWow64 process</span>
|
||||
|
||||
@@ -806,6 +868,8 @@
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_wow_64</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Not a syswow process"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">_is_x86_on_arm64</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Crossing heaven gate x86 -> arm64 not implemented"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">get_current_process_syswow_peb</span><span class="p">()</span>
|
||||
|
||||
<span class="c1"># TODO: use ctypes.string_at / ctypes.wstring_at for read_string / read_wstring ?</span>
|
||||
@@ -850,21 +914,21 @@
|
||||
<span class="c1"># Create a DeadThread if thread is already dead ?</span>
|
||||
<span class="k">return</span> <span class="n">WinThread</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">handle</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedproperty</span>
|
||||
<span class="k">def</span> <span class="nf">tid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Thread ID</span>
|
||||
|
||||
<span class="sd"> :type: :class:`int`"""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_thread_id</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedproperty</span>
|
||||
<span class="k">def</span> <span class="nf">owner_pid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">THREAD_BASIC_INFORMATION</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">NtQueryInformationThread</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">ThreadBasicInformation</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">res</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">res</span><span class="p">))</span>
|
||||
<span class="n">owner_id</span> <span class="o">=</span> <span class="n">res</span><span class="o">.</span><span class="n">ClientId</span><span class="o">.</span><span class="n">UniqueProcess</span>
|
||||
<span class="k">return</span> <span class="n">owner_id</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedproperty</span>
|
||||
<span class="k">def</span> <span class="nf">owner</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""The Process owning the thread</span>
|
||||
|
||||
@@ -947,6 +1011,8 @@
|
||||
<span class="sd"> :type: :class:`int`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">owner</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">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">_is_x86_on_arm64</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Crossing heaven gate x86 -> arm64 not implemented"</span><span class="p">)</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">ULONGLONG</span><span class="p">()</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">NtQueryInformationThread_32_to_64</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">ThreadQuerySetWin32StartAddress</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">res</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">res</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">res</span><span class="o">.</span><span class="n">value</span>
|
||||
@@ -966,6 +1032,9 @@
|
||||
<span class="c1"># - Want the TEB of a 64b process</span>
|
||||
<span class="c1"># - Want the TEB64 of a Wowprocess</span>
|
||||
<span class="c1"># It's the same code for both</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">_is_x86_on_arm64</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Crossing heaven gate x86 -> arm64 not implemented"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">is_wow_64</span><span class="p">:</span>
|
||||
<span class="n">restype</span> <span class="o">=</span> <span class="n">rctypes</span><span class="o">.</span><span class="n">transform_type_to_remote64bits</span><span class="p">(</span><span class="n">THREAD_BASIC_INFORMATION</span><span class="p">)</span>
|
||||
<span class="n">ressize</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">restype</span><span class="p">))</span>
|
||||
@@ -995,7 +1064,11 @@
|
||||
<span class="c1"># TebBase->NtTib.ExceptionList = (PVOID)Teb32Base;</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="n">read_dword</span><span class="p">(</span><span class="n">main_teb_addr</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">teb</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">RemoteTEB32</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">teb_base</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">RemoteTEB64</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">teb_base</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">teb_syswow_base</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -1008,6 +1081,12 @@
|
||||
<span class="c1"># just return the main TEB</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_principal_teb_addr</span><span class="p">()</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">teb_syswow</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</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="n">RemoteTEB64</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">teb_syswow_base</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span> <span class="c1">#current is 32bits</span>
|
||||
<span class="k">return</span> <span class="n">RemoteTEB64</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">teb_syswow_base</span><span class="p">,</span> <span class="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">ReadSyswow64Process</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="p">))</span>
|
||||
|
||||
<div class="viewcode-block" id="WinThread.exit">
|
||||
<a class="viewcode-back" href="../../../process.html#windows.winobject.process.WinThread.exit">[docs]</a>
|
||||
@@ -1069,8 +1148,6 @@
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">_get_thread_id_manual</span><span class="p">(</span><span class="n">handle</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">owner</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">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"[_get_thread_id_manual] 32 -> 64 (XP64 bits + Syswow process ?)"</span><span class="p">)</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">THREAD_BASIC_INFORMATION</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">NtQueryInformationThread</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">ThreadBasicInformation</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">res</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">res</span><span class="p">))</span>
|
||||
<span class="n">id2</span> <span class="o">=</span> <span class="n">res</span><span class="o">.</span><span class="n">ClientId</span><span class="o">.</span><span class="n">UniqueThread</span>
|
||||
@@ -1113,18 +1190,7 @@
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">pid</span><span class="o">=</span><span class="n">pid</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span> <span class="n">ppid</span><span class="o">=</span><span class="n">ppid</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">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Name of the process</span>
|
||||
|
||||
<span class="sd"> :type: :class:`str`</span>
|
||||
<span class="sd"> """</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">0x1024</span><span class="p">)</span>
|
||||
<span class="n">rsize</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetProcessImageFileNameW</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">limited_handle</span><span class="p">,</span> <span class="n">buffer</span><span class="p">)</span>
|
||||
<span class="c1"># GetProcessImageFileNameW returns the fullpath</span>
|
||||
<span class="k">return</span> <span class="n">buffer</span><span class="p">[:</span><span class="n">rsize</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\\</span><span class="s2">"</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedproperty</span>
|
||||
<span class="k">def</span> <span class="nf">pid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Process ID</span>
|
||||
|
||||
@@ -1149,13 +1215,13 @@
|
||||
|
||||
<div class="viewcode-block" id="WinProcess.virtual_alloc">
|
||||
<a class="viewcode-back" href="../../../process.html#windows.winobject.process.WinProcess.virtual_alloc">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">virtual_alloc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">prot</span><span class="o">=</span><span class="n">PAGE_EXECUTE_READWRITE</span><span class="p">,</span> <span class="n">addr</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">virtual_alloc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">prot</span><span class="o">=</span><span class="n">PAGE_EXECUTE_READWRITE</span><span class="p">,</span> <span class="n">addr</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">MEM_COMMIT</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Allocate memory in the process</span>
|
||||
|
||||
<span class="sd"> :return: The address of the allocated memory</span>
|
||||
<span class="sd"> :rtype: :class:`int`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">VirtualAllocEx</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">lpAddress</span><span class="o">=</span><span class="n">addr</span><span class="p">,</span> <span class="n">dwSize</span><span class="o">=</span><span class="n">size</span><span class="p">,</span> <span class="n">flProtect</span><span class="o">=</span><span class="n">prot</span><span class="p">)</span></div>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">VirtualAllocEx</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">lpAddress</span><span class="o">=</span><span class="n">addr</span><span class="p">,</span> <span class="n">dwSize</span><span class="o">=</span><span class="n">size</span><span class="p">,</span> <span class="n">flAllocationType</span><span class="o">=</span><span class="nb">type</span><span class="p">,</span> <span class="n">flProtect</span><span class="o">=</span><span class="n">prot</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="WinProcess.virtual_free">
|
||||
@@ -1236,11 +1302,16 @@
|
||||
|
||||
<span class="sd"> :rtype: :class:`WinThread` or :class:`DeadThread`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># We are using NtCreateThreadEx as its more permissive about cross-bitness / cross-architecture</span>
|
||||
<span class="c1"># And we can asume we known what we are doing -> So no safeguard ;)</span>
|
||||
<span class="n">thread_handle</span> <span class="o">=</span> <span class="n">HANDLE</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span> <span class="ow">and</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="n">thread_handle</span> <span class="o">=</span> <span class="n">HANDLE</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_x86_on_arm64</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Crossing heaven gate x86 -> arm64 not implemented"</span><span class="p">)</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">NtCreateThreadEx_32_to_64</span><span class="p">(</span><span class="n">ThreadHandle</span><span class="o">=</span><span class="n">byref</span><span class="p">(</span><span class="n">thread_handle</span><span class="p">)</span> <span class="p">,</span><span class="n">ProcessHandle</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">lpStartAddress</span><span class="o">=</span><span class="n">addr</span><span class="p">,</span> <span class="n">lpParameter</span><span class="o">=</span><span class="n">param</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">WinThread</span><span class="o">.</span><span class="n">_from_handle</span><span class="p">(</span><span class="n">thread_handle</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">WinThread</span><span class="o">.</span><span class="n">_from_handle</span><span class="p">(</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CreateRemoteThread</span><span class="p">(</span><span class="n">hProcess</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">lpStartAddress</span><span class="o">=</span><span class="n">addr</span><span class="p">,</span> <span class="n">lpParameter</span><span class="o">=</span><span class="n">param</span><span class="p">))</span></div>
|
||||
<span class="k">else</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">NtCreateThreadEx</span><span class="p">(</span><span class="n">ThreadHandle</span><span class="o">=</span><span class="n">byref</span><span class="p">(</span><span class="n">thread_handle</span><span class="p">)</span> <span class="p">,</span><span class="n">ProcessHandle</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">lpStartAddress</span><span class="o">=</span><span class="n">addr</span><span class="p">,</span> <span class="n">lpParameter</span><span class="o">=</span><span class="n">param</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">WinThread</span><span class="o">.</span><span class="n">_from_handle</span><span class="p">(</span><span class="n">thread_handle</span><span class="o">.</span><span class="n">value</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="WinProcess.load_library">
|
||||
@@ -1257,55 +1328,62 @@
|
||||
<div class="viewcode-block" id="WinProcess.execute_python">
|
||||
<a class="viewcode-back" href="../../../process.html#windows.winobject.process.WinProcess.execute_python">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">execute_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pycode</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Execute Python code into the remote process.</span>
|
||||
<span class="w"> </span><span class="sd">"""Execute Python code in the remote process.</span>
|
||||
|
||||
<span class="sd"> This function waits for the remote process to end and</span>
|
||||
<span class="sd"> raises an exception if the remote thread raised one</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="sd"> .. note::</span>
|
||||
<span class="sd"> This method is incompatible with Microsoft Store builds of python, as the interpreter DLLs do not grant execute to Users.</span>
|
||||
<span class="sd"> See workaround: https://hakril.github.io/PythonForWindows/build/html/sample.html#microsoft-store-python-injection</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">injection</span><span class="o">.</span><span class="n">safe_execute_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pycode</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="WinProcess.execute_python_unsafe">
|
||||
<a class="viewcode-back" href="../../../process.html#windows.winobject.process.WinProcess.execute_python_unsafe">[docs]</a>
|
||||
<span class="k">def</span> <span class="nf">execute_python_unsafe</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pycode</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Execute Python code into the remote process.</span>
|
||||
<span class="w"> </span><span class="sd">"""Execute Python code in the remote process.</span>
|
||||
|
||||
<span class="sd"> :rtype: :rtype: :class:`WinThread` or :class:`DeadThread` : The thread executing the python code</span>
|
||||
|
||||
<span class="sd"> .. note::</span>
|
||||
<span class="sd"> This method is incompatible with Microsoft Store builds of python, as the interpreter DLLs do not grant execute to Users.</span>
|
||||
<span class="sd"> See workaround: https://hakril.github.io/PythonForWindows/build/html/sample.html#microsoft-store-python-injection</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">injection</span><span class="o">.</span><span class="n">execute_python_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pycode</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedproperty</span>
|
||||
<span class="k">def</span> <span class="nf">peb_addr</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""The address of the PEB</span>
|
||||
<span class="w"> </span><span class="sd">"""The address of the PEB.</span>
|
||||
|
||||
<span class="sd"> :type: :class:`int`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span> <span class="ow">and</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">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">_is_x86_on_arm64</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Crossing heaven gate x86 -> arm64 not implemented"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span> <span class="ow">and</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="c1"># Intel to Intel</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">remotectypes</span><span class="o">.</span><span class="n">transform_type_to_remote64bits</span><span class="p">(</span><span class="n">PROCESS_BASIC_INFORMATION</span><span class="p">)</span>
|
||||
<span class="c1"># Fuck-it <3</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_char</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">x</span><span class="p">))()</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">NtQueryInformationProcess_32_to_64</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">ProcessInformation</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">ProcessInformationLength</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">x</span><span class="p">))</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">NtQueryInformationProcess_32_to_64</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ProcessBasicInformation</span><span class="p">,</span> <span class="n">ProcessInformation</span><span class="o">=</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="n">peb_offset</span> <span class="o">=</span> <span class="n">x</span><span class="o">.</span><span class="n">PebBaseAddress</span><span class="o">.</span><span class="n">offset</span>
|
||||
<span class="n">peb_addr</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s2">"<Q"</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">PebBaseAddress</span><span class="o">.</span><span class="n">offset</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">PebBaseAddress</span><span class="o">.</span><span class="n">offset</span><span class="o">+</span><span class="mi">8</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">elif</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">64</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span><span class="p">:</span>
|
||||
<span class="n">information_type</span> <span class="o">=</span> <span class="mi">26</span>
|
||||
<span class="n">y</span> <span class="o">=</span> <span class="n">ULONGLONG</span><span class="p">()</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtQueryInformationProcess</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">information_type</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">y</span><span class="p">),</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">y</span><span class="p">))</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtQueryInformationProcess</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ProcessWow64Information</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">y</span><span class="p">),</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">y</span><span class="p">))</span>
|
||||
<span class="n">peb_addr</span> <span class="o">=</span> <span class="n">y</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">information_type</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">PROCESS_BASIC_INFORMATION</span><span class="p">()</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtQueryInformationProcess</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">information_type</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtQueryInformationProcess</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ProcessBasicInformation</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
|
||||
<span class="n">peb_addr</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">x</span><span class="o">.</span><span class="n">PebBaseAddress</span><span class="p">,</span> <span class="n">PVOID</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="k">if</span> <span class="n">peb_addr</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Could not get peb addr of process </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">peb_addr</span>
|
||||
|
||||
<span class="c1"># Not a fixedpropety to prevent ref-cycle and uncollectable WinProcess</span>
|
||||
<span class="c1"># Not a fixedproperty to prevent ref-cycle and uncollectable WinProcess</span>
|
||||
<span class="c1"># Try with a weakref ?</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">peb</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -1319,10 +1397,14 @@
|
||||
<span class="k">return</span> <span class="n">RemotePEB32</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">peb_addr</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">RemotePEB</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">peb_addr</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedproperty</span>
|
||||
<span class="k">def</span> <span class="nf">peb_syswow_addr</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_wow_64</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Not a syswow process"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">_is_x86_on_arm64</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Crossing heaven gate x86 -> arm64 not implemented"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</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="n">information_type</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">PROCESS_BASIC_INFORMATION</span><span class="p">()</span>
|
||||
@@ -1338,7 +1420,7 @@
|
||||
<span class="n">peb_addr</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s2">"<Q"</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">PebBaseAddress</span><span class="o">.</span><span class="n">offset</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">PebBaseAddress</span><span class="o">.</span><span class="n">offset</span><span class="o">+</span><span class="mi">8</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="n">peb_addr</span>
|
||||
|
||||
<span class="c1"># Not a fixedpropety to prevent ref-cycle and uncollectable WinProcess</span>
|
||||
<span class="c1"># Not a fixedproperty to prevent ref-cycle and uncollectable WinProcess</span>
|
||||
<span class="c1"># Try with a weakref ?</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">peb_syswow</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -1362,8 +1444,6 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">transform_ctypes_fields</span><span class="p">(</span><span class="n">struct</span><span class="p">,</span> <span class="n">replacement</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="p">[(</span><span class="n">name</span><span class="p">,</span> <span class="n">replacement</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="nb">type</span><span class="p">))</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="nb">type</span> <span class="ow">in</span> <span class="n">struct</span><span class="o">.</span><span class="n">_fields_</span><span class="p">]</span>
|
||||
|
||||
@@ -1409,11 +1489,6 @@
|
||||
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">LIST_ENTRY_PTR</span><span class="p">(</span><span class="n">PVOID</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">TO_LDR_ENTRY</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">LDR_DATA_TABLE_ENTRY</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">value</span> <span class="o">-</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">PVOID</span><span class="p">)</span> <span class="o">*</span> <span class="mi">2</span><span class="p">)</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="PEB">
|
||||
<a class="viewcode-back" href="../../../process.html#windows.winobject.process.PEB">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">PEB</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">PEB</span><span class="p">):</span>
|
||||
@@ -1450,13 +1525,13 @@
|
||||
<span class="sd"> :type: [:class:`LoadedModule`] -- List of loaded modules</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">list_entry_ptr</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="bp">self</span><span class="o">.</span><span class="n">Ldr</span><span class="o">.</span><span class="n">contents</span><span class="o">.</span><span class="n">InMemoryOrderModuleList</span><span class="o">.</span><span class="n">Flink</span><span class="p">,</span> <span class="n">LIST_ENTRY_PTR</span><span class="p">)</span>
|
||||
<span class="n">current_dll</span> <span class="o">=</span> <span class="n">list_entry_ptr</span><span class="o">.</span><span class="n">TO_LDR_ENTRY</span><span class="p">()</span>
|
||||
<span class="n">first_flink</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">Ldr</span><span class="o">.</span><span class="n">contents</span><span class="o">.</span><span class="n">InMemoryOrderModuleList</span><span class="o">.</span><span class="n">Flink</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">current_dll</span> <span class="o">=</span> <span class="n">first_flink</span><span class="o">.</span><span class="n">get_real_struct</span><span class="p">(</span><span class="n">LoadedModule</span><span class="p">,</span> <span class="n">LoadedModule</span><span class="o">.</span><span class="n">InMemoryOrderLinks</span><span class="p">)</span>
|
||||
<span class="k">while</span> <span class="n">current_dll</span><span class="o">.</span><span class="n">DllBase</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">current_dll</span><span class="p">)</span>
|
||||
<span class="n">list_entry_ptr</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">current_dll</span><span class="o">.</span><span class="n">InMemoryOrderLinks</span><span class="o">.</span><span class="n">Flink</span><span class="p">,</span> <span class="n">LIST_ENTRY_PTR</span><span class="p">)</span>
|
||||
<span class="n">current_dll</span> <span class="o">=</span> <span class="n">list_entry_ptr</span><span class="o">.</span><span class="n">TO_LDR_ENTRY</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">LoadedModule</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="n">addressof</span><span class="p">(</span><span class="n">LDR</span><span class="p">))</span> <span class="k">for</span> <span class="n">LDR</span> <span class="ow">in</span> <span class="n">res</span><span class="p">]</span>
|
||||
<span class="n">next_flink</span> <span class="o">=</span> <span class="n">current_dll</span><span class="o">.</span><span class="n">InMemoryOrderLinks</span><span class="o">.</span><span class="n">Flink</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">current_dll</span> <span class="o">=</span> <span class="n">next_flink</span><span class="o">.</span><span class="n">get_real_struct</span><span class="p">(</span><span class="n">LoadedModule</span><span class="p">,</span> <span class="n">LoadedModule</span><span class="o">.</span><span class="n">InMemoryOrderLinks</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">_extract_environment</span><span class="p">(</span><span class="n">env_block_addr</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
|
||||
@@ -1487,7 +1562,6 @@
|
||||
<span class="k">return</span> <span class="n">apisetmap</span><span class="o">.</span><span class="n">get_api_set_map_for_current_process</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ApiSetMap</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
|
||||
<span class="c1"># Memory stuff</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">EPSAPI_WORKING_SET_BLOCK_BASE</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
@@ -1599,9 +1673,24 @@
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"ApiSetMap for remote process not implemented yet"</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="c1"># TEB enhanced, same bitness as PEB (current process)</span>
|
||||
<span class="k">class</span> <span class="nc">TEB</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">TEB</span><span class="p">):</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">peb</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ProcessEnvironmentBlock</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">PEB</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span>
|
||||
|
||||
<span class="c1"># mote TEB enhanced, same bitness as PEB (current process)</span>
|
||||
<span class="k">class</span> <span class="nc">RemoteTEB</span><span class="p">(</span><span class="n">rctypes</span><span class="o">.</span><span class="n">RemoteStructure</span><span class="o">.</span><span class="n">from_structure</span><span class="p">(</span><span class="n">TEB</span><span class="p">)):</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">peb</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">ctypes_peb</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ProcessEnvironmentBlock</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="k">return</span> <span class="n">RemotePEB</span><span class="p">(</span><span class="n">ctypes_peb</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_target</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">CurrentProcess</span><span class="p">()</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span><span class="p">:</span>
|
||||
<span class="n">RemoteLoadedModule32</span> <span class="o">=</span> <span class="n">RemoteLoadedModule</span>
|
||||
<span class="n">RemotePEB32</span> <span class="o">=</span> <span class="n">RemotePEB</span>
|
||||
<span class="n">RemoteTEB32</span> <span class="o">=</span> <span class="n">RemoteTEB</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">RemoteLoadedModule64</span><span class="p">(</span><span class="n">rctypes</span><span class="o">.</span><span class="n">transform_type_to_remote64bits</span><span class="p">(</span><span class="n">LoadedModule</span><span class="p">)):</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">pe</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -1616,7 +1705,6 @@
|
||||
<span class="k">def</span> <span class="nf">ptr_flink_to_remote_module</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ptr_value</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">RemoteLoadedModule64</span><span class="p">(</span><span class="n">ptr_value</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">rctypes</span><span class="o">.</span><span class="n">c_void_p64</span><span class="p">)</span> <span class="o">*</span> <span class="mi">2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_target</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">exe</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""The executable of the process, as pointed by PEB.ImageBaseAddress</span>
|
||||
@@ -1649,7 +1737,17 @@
|
||||
|
||||
<span class="n">apisetmap</span> <span class="o">=</span> <span class="n">RemotePEB</span><span class="o">.</span><span class="n">apisetmap</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">RemoteTEB64</span><span class="p">(</span><span class="n">rctypes</span><span class="o">.</span><span class="n">transform_type_to_remote64bits</span><span class="p">(</span><span class="n">TEB</span><span class="p">)):</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">peb</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">ctypes_peb</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ProcessEnvironmentBlock</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="k">return</span> <span class="n">RemotePEB64</span><span class="p">(</span><span class="n">ctypes_peb</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_target</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">if</span> <span class="n">CurrentProcess</span><span class="p">()</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="n">RemoteLoadedModule64</span> <span class="o">=</span> <span class="n">RemoteLoadedModule</span>
|
||||
<span class="n">RemotePEB64</span> <span class="o">=</span> <span class="n">RemotePEB</span>
|
||||
<span class="n">RemoteTEB64</span> <span class="o">=</span> <span class="n">RemoteTEB</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">RemoteLoadedModule32</span><span class="p">(</span><span class="n">rctypes</span><span class="o">.</span><span class="n">transform_type_to_remote32bits</span><span class="p">(</span><span class="n">LoadedModule</span><span class="p">)):</span>
|
||||
<span class="nd">@property</span>
|
||||
@@ -1696,6 +1794,12 @@
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_environment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ProcessParameters</span><span class="o">.</span><span class="n">contents</span><span class="o">.</span><span class="n">Environment</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_target</span><span class="p">)</span>
|
||||
|
||||
<span class="n">apisetmap</span> <span class="o">=</span> <span class="n">RemotePEB</span><span class="o">.</span><span class="n">apisetmap</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">RemoteTEB32</span><span class="p">(</span><span class="n">rctypes</span><span class="o">.</span><span class="n">transform_type_to_remote32bits</span><span class="p">(</span><span class="n">TEB</span><span class="p">)):</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">peb</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">ctypes_peb</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ProcessEnvironmentBlock</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="k">return</span> <span class="n">RemotePEB32</span><span class="p">(</span><span class="n">ctypes_peb</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_target</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></div>
|
||||
@@ -1727,7 +1831,7 @@
|
||||
<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.2 documentation</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.process</a></li>
|
||||
</ul>
|
||||
|
||||
+93
-10
@@ -49,7 +49,6 @@
|
||||
<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>
|
||||
@@ -128,7 +127,7 @@
|
||||
|
||||
<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="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>
|
||||
@@ -301,12 +300,77 @@
|
||||
<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="c1"># Based on:</span>
|
||||
<span class="c1"># https://jrsoftware.org/ishelp/index.php?topic=winvernotes</span>
|
||||
<span class="c1"># https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions</span>
|
||||
|
||||
<span class="n">WINDOWS_10_BUILD_NUMBER_VERSION</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="c1"># (build_number, is_workstation): "version_name"</span>
|
||||
<span class="p">(</span><span class="mi">10240</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows 10 Version 1507"</span><span class="p">,</span>
|
||||
<span class="p">(</span><span class="mi">10586</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows 10 Version 1511"</span><span class="p">,</span>
|
||||
<span class="p">(</span><span class="mi">14393</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows 10 Version 1607"</span><span class="p">,</span>
|
||||
<span class="p">(</span><span class="mi">15063</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows 10 Version 1703"</span><span class="p">,</span>
|
||||
<span class="p">(</span><span class="mi">16299</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows 10 Version 1709"</span><span class="p">,</span>
|
||||
<span class="p">(</span><span class="mi">17134</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows 10 Version 1803"</span><span class="p">,</span>
|
||||
<span class="p">(</span><span class="mi">17763</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows 10 Version 1809"</span><span class="p">,</span>
|
||||
<span class="p">(</span><span class="mi">18362</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows 10 Version 1903"</span><span class="p">,</span>
|
||||
<span class="p">(</span><span class="mi">18363</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows 10 Version 1909"</span><span class="p">,</span>
|
||||
<span class="p">(</span><span class="mi">19041</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows 10 Version 2004"</span><span class="p">,</span>
|
||||
<span class="p">(</span><span class="mi">19042</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows 10 Version 20H2"</span><span class="p">,</span>
|
||||
<span class="p">(</span><span class="mi">19043</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows 10 Version 21H1"</span><span class="p">,</span>
|
||||
<span class="p">(</span><span class="mi">19044</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows 10 Version 21H2"</span><span class="p">,</span>
|
||||
<span class="p">(</span><span class="mi">19045</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows 10 Version 22H2"</span><span class="p">,</span>
|
||||
<span class="p">(</span><span class="mi">22000</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows 11 Version 21H2"</span><span class="p">,</span>
|
||||
<span class="p">(</span><span class="mi">22621</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows 11 Version 22H2"</span><span class="p">,</span>
|
||||
<span class="p">(</span><span class="mi">22631</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows 11 Version 23H2"</span><span class="p">,</span>
|
||||
<span class="p">(</span><span class="mi">26100</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows 11 Version 24H2"</span><span class="p">,</span>
|
||||
|
||||
<span class="p">(</span><span class="mi">14393</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows Server 2016"</span><span class="p">,</span>
|
||||
<span class="c1"># 16299 : Windows Server, version 1709 ?</span>
|
||||
<span class="c1"># 17134 : Windows Server, version 1803 ?</span>
|
||||
<span class="c1"># 17134 : Windows Server, version 1803 ?</span>
|
||||
<span class="p">(</span><span class="mi">17763</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows Server 2019"</span><span class="p">,</span>
|
||||
<span class="c1"># 18362 : Windows Server, version 1903 ?</span>
|
||||
<span class="c1"># 18363 : Windows Server, version 1909 ?</span>
|
||||
<span class="c1"># 19041 : Windows Server, version 2004 ?</span>
|
||||
<span class="c1"># 19042 : Windows Server, version 20H2 ?</span>
|
||||
<span class="p">(</span><span class="mi">20348</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows Server 2022"</span><span class="p">,</span>
|
||||
<span class="c1"># 25398 : Windows Server, version 23H2 ?</span>
|
||||
<span class="p">(</span><span class="mi">26100</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> <span class="sa">u</span><span class="s2">"Windows Server 2025"</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_get_version_name_for_10_build</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">build_number</span><span class="p">,</span> <span class="n">is_workstation</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">WINDOWS_10_BUILD_NUMBER_VERSION</span><span class="p">[(</span><span class="n">build_number</span><span class="p">,</span> <span class="n">is_workstation</span><span class="p">)]</span>
|
||||
<span class="k">except</span> <span class="ne">KeyError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="sa">u</span><span class="s2">"Unknown Windows 10+ <versionstr=</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="bp">self</span><span class="o">.</span><span class="n">versionstr</span><span class="p">,</span> <span class="n">is_workstation</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">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 2025</span>
|
||||
<span class="sd"> * Windows 11 Version 24H2</span>
|
||||
<span class="sd"> * Windows 11 Version 23H2</span>
|
||||
<span class="sd"> * Windows 11 Version 22H2</span>
|
||||
<span class="sd"> * Windows 11 Version 21H2</span>
|
||||
<span class="sd"> * Windows 10 Version 22H2</span>
|
||||
<span class="sd"> * Windows 10 Version 21H2</span>
|
||||
<span class="sd"> * Windows Server 2022</span>
|
||||
<span class="sd"> * Windows 10 Version 21H1</span>
|
||||
<span class="sd"> * Windows 10 Version 20H2</span>
|
||||
<span class="sd"> * Windows 10 Version 2004</span>
|
||||
<span class="sd"> * Windows 10 Version 1909</span>
|
||||
<span class="sd"> * Windows 10 Version 1903</span>
|
||||
<span class="sd"> * Windows Server 2019</span>
|
||||
<span class="sd"> * Windows 10 Version 1809</span>
|
||||
<span class="sd"> * Windows 10 Version 1803</span>
|
||||
<span class="sd"> * Windows 10 Version 1709</span>
|
||||
<span class="sd"> * Windows 10 Version 1703</span>
|
||||
<span class="sd"> * Windows 10 Version 1607</span>
|
||||
<span class="sd"> * Windows 10 Version 1511</span>
|
||||
<span class="sd"> * Windows 10 Version 1507</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>
|
||||
@@ -316,19 +380,20 @@
|
||||
<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"> * Unknown: 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"> * "Unknown Windows 10+ <versionstr={0} | is_workstation={1}>".format(self.versionstr, is_workstation)</span>
|
||||
<span class="sd"> * "Unknown Windows <version={0} | is_workstation={1}>".format(version, is_workstation)</span>
|
||||
|
||||
<span class="sd"> :type: :class:`str`</span>
|
||||
<span class="sd"> :type: :class:`unicode`</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_version_name_for_10_build</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">build_number</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>
|
||||
@@ -343,7 +408,7 @@
|
||||
<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">return</span> <span class="sa">u</span><span class="s2">"Unknown: 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>
|
||||
@@ -353,7 +418,7 @@
|
||||
<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="k">return</span> <span class="sa">u</span><span class="s2">"Unknown 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>
|
||||
@@ -561,6 +626,24 @@
|
||||
<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">@utils</span><span class="o">.</span><span class="n">fixedproperty</span>
|
||||
<span class="k">def</span> <span class="nf">architecture</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="c1"># Retrieve system processor architecture</span>
|
||||
<span class="c1"># It's not that easy as x64-on-ARM64 will lie on most API except IsWow64Process2</span>
|
||||
<span class="c1"># EX: GetNativeSystemInfo will returns PROCESSOR_ARCHITECTURE_AMD64</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">is_implemented</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">IsWow64Process2</span><span class="p">):</span>
|
||||
<span class="n">process_machine</span><span class="p">,</span> <span class="n">native_machine</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">is_wow_64_2</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">utils</span><span class="o">.</span><span class="n">image_file_machine_to_processor_architecture</span><span class="p">(</span><span class="n">native_machine</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">KeyError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Unknown IsWow64Process2(native_machine:#x) -> </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">native_machine</span><span class="p">))</span>
|
||||
|
||||
<span class="c1"># No IsWow64Process2 -> assert it cannot be ARM64 and thus GetNativeSystemInfo will not lie ?</span>
|
||||
<span class="n">sysinfo</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SYSTEM_INFO</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">GetNativeSystemInfo</span><span class="p">(</span><span class="n">sysinfo</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PROCESSOR_ARCHITECTURE_MAPPER</span><span class="p">[</span><span class="n">sysinfo</span><span class="o">.</span><span class="n">wProcessorArchitecture</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>
|
||||
@@ -596,7 +679,7 @@
|
||||
|
||||
<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">return</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">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>
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.winobject.system_module — PythonForWindows 1.0.2 documentation</title>
|
||||
<title>windows.winobject.system_module — 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=1ed6394b"></script>
|
||||
<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>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<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.2 documentation</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_module</a></li>
|
||||
</ul>
|
||||
@@ -92,6 +92,8 @@
|
||||
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">modules</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">enumerate_kernel_modules_syswow64</span><span class="p">():</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">_is_x86_on_arm64</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Crossing heaven gate x86 -> arm64 not implemented"</span><span class="p">)</span>
|
||||
<span class="n">cbsize</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="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">NtQuerySystemInformation_32_to_64</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SystemModuleInformation</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">cbsize</span><span class="p">))</span>
|
||||
<span class="n">raw_buffer</span> <span class="o">=</span> <span class="p">(</span><span class="n">cbsize</span><span class="o">.</span><span class="n">value</span> <span class="o">*</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BYTE</span><span class="p">)()</span>
|
||||
@@ -130,7 +132,7 @@
|
||||
<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.2 documentation</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_module</a></li>
|
||||
</ul>
|
||||
|
||||
+6
-6
@@ -4,12 +4,12 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>windows.winobject.wmi — PythonForWindows 1.0.2 documentation</title>
|
||||
<title>windows.winobject.wmi — 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=1ed6394b"></script>
|
||||
<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>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<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.2 documentation</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.wmi</a></li>
|
||||
</ul>
|
||||
@@ -602,11 +602,11 @@
|
||||
<div class="viewcode-block" id="WmiManager">
|
||||
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiManager">[docs]</a>
|
||||
<span class="k">class</span> <span class="nc">WmiManager</span><span class="p">(</span><span class="nb">dict</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""The main WMI class exposed, used to list and access differents WMI namespace, can be used as a dict to access</span>
|
||||
<span class="w"> </span><span class="sa">r</span><span class="sd">"""The main WMI class exposed, used to list and access differents WMI namespace, can be used as a dict to access</span>
|
||||
<span class="sd"> :class:`WmiNamespace` by name</span>
|
||||
|
||||
<span class="sd"> Example:</span>
|
||||
<span class="sd"> >>> windows.system.wmi["root\\SecurityCenter2"]</span>
|
||||
<span class="sd"> >>> windows.system.wmi[r"root\SecurityCenter2"]</span>
|
||||
<span class="sd"> <WmiNamespace "root\SecurityCenter2"></span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">DEFAULT_NAMESPACE</span> <span class="o">=</span> <span class="s2">"root</span><span class="se">\\</span><span class="s2">cimv2"</span> <span class="c1">#: The default namespace for :func:`select` & :func:`query`</span>
|
||||
@@ -676,7 +676,7 @@
|
||||
<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.2 documentation</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.wmi</a></li>
|
||||
</ul>
|
||||
|
||||
Reference in New Issue
Block a user