Updated online documentation for 0.6

This commit is contained in:
hakril
2020-07-16 23:48:22 +02:00
parent 7a368a1a23
commit 8d33e0143f
116 changed files with 26124 additions and 11325 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: fdedfd034d8970f3d8ed3da3263d316a
config: 46ec48b2adfc0c477458709c63587450
tags: 645f666f9bcd5a90fca523b33c5a78b7
+13 -10
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>colorama.win32 &#8212; PythonForWindows 0.5 documentation</title>
<title>colorama.win32 &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -45,15 +48,15 @@
<span class="k">try</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">from</span> <span class="nn">ctypes</span> <span class="k">import</span> <span class="n">LibraryLoader</span>
<span class="kn">from</span> <span class="nn">ctypes</span> <span class="kn">import</span> <span class="n">LibraryLoader</span>
<span class="n">windll</span> <span class="o">=</span> <span class="n">LibraryLoader</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">WinDLL</span><span class="p">)</span>
<span class="kn">from</span> <span class="nn">ctypes</span> <span class="k">import</span> <span class="n">wintypes</span>
<span class="kn">from</span> <span class="nn">ctypes</span> <span class="kn">import</span> <span class="n">wintypes</span>
<span class="k">except</span> <span class="p">(</span><span class="ne">AttributeError</span><span class="p">,</span> <span class="ne">ImportError</span><span class="p">):</span>
<span class="n">windll</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">SetConsoleTextAttribute</span> <span class="o">=</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="kc">None</span>
<span class="n">winapi_test</span> <span class="o">=</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">ctypes</span> <span class="k">import</span> <span class="n">byref</span><span class="p">,</span> <span class="n">Structure</span><span class="p">,</span> <span class="n">c_char</span><span class="p">,</span> <span class="n">POINTER</span>
<span class="kn">from</span> <span class="nn">ctypes</span> <span class="kn">import</span> <span class="n">byref</span><span class="p">,</span> <span class="n">Structure</span><span class="p">,</span> <span class="n">c_char</span><span class="p">,</span> <span class="n">POINTER</span>
<span class="n">COORD</span> <span class="o">=</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">_COORD</span>
@@ -66,7 +69,7 @@
<span class="p">(</span><span class="s2">&quot;srWindow&quot;</span><span class="p">,</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">SMALL_RECT</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;dwMaximumWindowSize&quot;</span><span class="p">,</span> <span class="n">COORD</span><span class="p">),</span>
<span class="p">]</span>
<span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s1">&#39;(</span><span class="si">%d</span><span class="s1">,</span><span class="si">%d</span><span class="s1">,</span><span class="si">%d</span><span class="s1">,</span><span class="si">%d</span><span class="s1">,</span><span class="si">%d</span><span class="s1">,</span><span class="si">%d</span><span class="s1">,</span><span class="si">%d</span><span class="s1">,</span><span class="si">%d</span><span class="s1">,</span><span class="si">%d</span><span class="s1">,</span><span class="si">%d</span><span class="s1">,</span><span class="si">%d</span><span class="s1">)&#39;</span> <span class="o">%</span> <span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dwSize</span><span class="o">.</span><span class="n">Y</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwSize</span><span class="o">.</span><span class="n">X</span>
<span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwCursorPosition</span><span class="o">.</span><span class="n">Y</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwCursorPosition</span><span class="o">.</span><span class="n">X</span>
@@ -221,13 +224,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+42 -39
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ctypes &#8212; PythonForWindows 0.5 documentation</title>
<title>ctypes &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -43,20 +46,20 @@
<span class="n">__version__</span> <span class="o">=</span> <span class="s2">&quot;1.1.0&quot;</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">Union</span><span class="p">,</span> <span class="n">Structure</span><span class="p">,</span> <span class="n">Array</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">_Pointer</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">CFuncPtr</span> <span class="k">as</span> <span class="n">_CFuncPtr</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">__version__</span> <span class="k">as</span> <span class="n">_ctypes_version</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">RTLD_LOCAL</span><span class="p">,</span> <span class="n">RTLD_GLOBAL</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">ArgumentError</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">Union</span><span class="p">,</span> <span class="n">Structure</span><span class="p">,</span> <span class="n">Array</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">_Pointer</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">CFuncPtr</span> <span class="k">as</span> <span class="n">_CFuncPtr</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">__version__</span> <span class="k">as</span> <span class="n">_ctypes_version</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">RTLD_LOCAL</span><span class="p">,</span> <span class="n">RTLD_GLOBAL</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">ArgumentError</span>
<span class="kn">from</span> <span class="nn">struct</span> <span class="k">import</span> <span class="n">calcsize</span> <span class="k">as</span> <span class="n">_calcsize</span>
<span class="kn">from</span> <span class="nn">struct</span> <span class="kn">import</span> <span class="n">calcsize</span> <span class="k">as</span> <span class="n">_calcsize</span>
<span class="k">if</span> <span class="n">__version__</span> <span class="o">!=</span> <span class="n">_ctypes_version</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">&quot;Version number mismatch&quot;</span><span class="p">,</span> <span class="n">__version__</span><span class="p">,</span> <span class="n">_ctypes_version</span><span class="p">)</span>
<span class="k">if</span> <span class="n">_os</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;nt&quot;</span><span class="p">,</span> <span class="s2">&quot;ce&quot;</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">FormatError</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">FormatError</span>
<span class="n">DEFAULT_MODE</span> <span class="o">=</span> <span class="n">RTLD_LOCAL</span>
<span class="k">if</span> <span class="n">_os</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;posix&quot;</span> <span class="ow">and</span> <span class="n">_sys</span><span class="o">.</span><span class="n">platform</span> <span class="o">==</span> <span class="s2">&quot;darwin&quot;</span><span class="p">:</span>
@@ -68,7 +71,7 @@
<span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">_os</span><span class="o">.</span><span class="n">uname</span><span class="p">()[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span> <span class="o">&lt;</span> <span class="mi">8</span><span class="p">:</span>
<span class="n">DEFAULT_MODE</span> <span class="o">=</span> <span class="n">RTLD_GLOBAL</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">FUNCFLAG_CDECL</span> <span class="k">as</span> <span class="n">_FUNCFLAG_CDECL</span><span class="p">,</span> \
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">FUNCFLAG_CDECL</span> <span class="k">as</span> <span class="n">_FUNCFLAG_CDECL</span><span class="p">,</span> \
<span class="n">FUNCFLAG_PYTHONAPI</span> <span class="k">as</span> <span class="n">_FUNCFLAG_PYTHONAPI</span><span class="p">,</span> \
<span class="n">FUNCFLAG_USE_ERRNO</span> <span class="k">as</span> <span class="n">_FUNCFLAG_USE_ERRNO</span><span class="p">,</span> \
<span class="n">FUNCFLAG_USE_LASTERROR</span> <span class="k">as</span> <span class="n">_FUNCFLAG_USE_LASTERROR</span>
@@ -145,8 +148,8 @@
<span class="k">return</span> <span class="n">CFunctionType</span>
<span class="k">if</span> <span class="n">_os</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;nt&quot;</span><span class="p">,</span> <span class="s2">&quot;ce&quot;</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">LoadLibrary</span> <span class="k">as</span> <span class="n">_dlopen</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">FUNCFLAG_STDCALL</span> <span class="k">as</span> <span class="n">_FUNCFLAG_STDCALL</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">LoadLibrary</span> <span class="k">as</span> <span class="n">_dlopen</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">FUNCFLAG_STDCALL</span> <span class="k">as</span> <span class="n">_FUNCFLAG_STDCALL</span>
<span class="k">if</span> <span class="n">_os</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;ce&quot;</span><span class="p">:</span>
<span class="c1"># &#39;ce&#39; doesn&#39;t have the stdcall calling convention</span>
<span class="n">_FUNCFLAG_STDCALL</span> <span class="o">=</span> <span class="n">_FUNCFLAG_CDECL</span>
@@ -174,16 +177,16 @@
<span class="n">WINFUNCTYPE</span><span class="o">.</span><span class="vm">__doc__</span> <span class="o">=</span> <span class="n">CFUNCTYPE</span><span class="o">.</span><span class="vm">__doc__</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;CFUNCTYPE&quot;</span><span class="p">,</span> <span class="s2">&quot;WINFUNCTYPE&quot;</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">_os</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;posix&quot;</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">dlopen</span> <span class="k">as</span> <span class="n">_dlopen</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">dlopen</span> <span class="k">as</span> <span class="n">_dlopen</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">sizeof</span><span class="p">,</span> <span class="n">byref</span><span class="p">,</span> <span class="n">addressof</span><span class="p">,</span> <span class="n">alignment</span><span class="p">,</span> <span class="n">resize</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">get_errno</span><span class="p">,</span> <span class="n">set_errno</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">_SimpleCData</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">sizeof</span><span class="p">,</span> <span class="n">byref</span><span class="p">,</span> <span class="n">addressof</span><span class="p">,</span> <span class="n">alignment</span><span class="p">,</span> <span class="n">resize</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">get_errno</span><span class="p">,</span> <span class="n">set_errno</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">_SimpleCData</span>
<span class="k">def</span> <span class="nf">_check_size</span><span class="p">(</span><span class="n">typ</span><span class="p">,</span> <span class="n">typecode</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="c1"># Check if sizeof(ctypes_type) against struct.calcsize. This</span>
<span class="c1"># should protect somewhat against a misconfigured libffi.</span>
<span class="kn">from</span> <span class="nn">struct</span> <span class="k">import</span> <span class="n">calcsize</span>
<span class="kn">from</span> <span class="nn">struct</span> <span class="kn">import</span> <span class="n">calcsize</span>
<span class="k">if</span> <span class="n">typecode</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># Most _type_ codes are the same as used in struct</span>
<span class="n">typecode</span> <span class="o">=</span> <span class="n">typ</span><span class="o">.</span><span class="n">_type_</span>
@@ -194,7 +197,7 @@
<span class="k">class</span> <span class="nc">py_object</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">&quot;O&quot;</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">py_object</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__repr__</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
@@ -279,12 +282,12 @@
<span class="k">class</span> <span class="nc">c_char_p</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">&quot;z&quot;</span>
<span class="k">if</span> <span class="n">_os</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;nt&quot;</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</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">windll</span><span class="o">.</span><span class="n">kernel32</span><span class="o">.</span><span class="n">IsBadStringPtrA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="si">%s</span><span class="s2">(</span><span class="si">%r</span><span class="s2">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="si">%s</span><span class="s2">(</span><span class="si">%s</span><span class="s2">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">cast</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">c_void_p</span><span class="p">)</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="si">%s</span><span class="s2">(</span><span class="si">%s</span><span class="s2">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">cast</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">c_void_p</span><span class="p">)</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="n">_check_size</span><span class="p">(</span><span class="n">c_char_p</span><span class="p">,</span> <span class="s2">&quot;P&quot;</span><span class="p">)</span>
@@ -296,7 +299,7 @@
<span class="k">class</span> <span class="nc">c_bool</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">&quot;?&quot;</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">POINTER</span><span class="p">,</span> <span class="n">pointer</span><span class="p">,</span> <span class="n">_pointer_type_cache</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">POINTER</span><span class="p">,</span> <span class="n">pointer</span><span class="p">,</span> <span class="n">_pointer_type_cache</span>
<span class="k">def</span> <span class="nf">_reset_cache</span><span class="p">():</span>
<span class="n">_pointer_type_cache</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
@@ -315,7 +318,7 @@
<span class="n">CFUNCTYPE</span><span class="p">(</span><span class="n">c_int</span><span class="p">)(</span><span class="k">lambda</span><span class="p">:</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">set_conversion_mode</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">set_conversion_mode</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">else</span><span class="p">:</span>
@@ -382,7 +385,7 @@
<span class="n">_func_flags_</span> <span class="o">=</span> <span class="n">_FUNCFLAG_CDECL</span>
<span class="n">_func_restype_</span> <span class="o">=</span> <span class="n">c_int</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="n">DEFAULT_MODE</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="kc">None</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">name</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="n">DEFAULT_MODE</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">use_errno</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">use_last_error</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_name</span> <span class="o">=</span> <span class="n">name</span>
@@ -402,20 +405,20 @@
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_handle</span> <span class="o">=</span> <span class="n">handle</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">%s</span><span class="s2"> &#39;</span><span class="si">%s</span><span class="s2">&#39;, handle </span><span class="si">%x</span><span class="s2"> at </span><span class="si">%x</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> \
<span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</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="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_handle</span> <span class="o">&amp;</span> <span class="p">(</span><span class="n">_sys</span><span class="o">.</span><span class="n">maxint</span><span class="o">*</span><span class="mi">2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)),</span>
<span class="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">&amp;</span> <span class="p">(</span><span class="n">_sys</span><span class="o">.</span><span class="n">maxint</span><span class="o">*</span><span class="mi">2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">__getattr__</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="k">def</span> <span class="fm">__getattr__</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="k">if</span> <span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;__&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">name</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s1">&#39;__&#39;</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">func</span><span class="p">)</span>
<span class="k">return</span> <span class="n">func</span>
<span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name_or_ordinal</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name_or_ordinal</span><span class="p">):</span>
<span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_FuncPtr</span><span class="p">((</span><span class="n">name_or_ordinal</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="nb">isinstance</span><span class="p">(</span><span class="n">name_or_ordinal</span><span class="p">,</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">long</span><span class="p">)):</span>
<span class="n">func</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">=</span> <span class="n">name_or_ordinal</span>
@@ -438,7 +441,7 @@
<span class="c1"># XXX Hm, what about HRESULT as normal parameter?</span>
<span class="c1"># Mustn&#39;t it derive from c_long then?</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">_check_HRESULT</span><span class="p">,</span> <span class="n">_SimpleCData</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">_check_HRESULT</span><span class="p">,</span> <span class="n">_SimpleCData</span>
<span class="k">class</span> <span class="nc">HRESULT</span><span class="p">(</span><span class="n">_SimpleCData</span><span class="p">):</span>
<span class="n">_type_</span> <span class="o">=</span> <span class="s2">&quot;l&quot;</span>
<span class="c1"># _check_retval_ is called with the function&#39;s result when it</span>
@@ -462,17 +465,17 @@
<span class="n">_func_restype_</span> <span class="o">=</span> <span class="n">HRESULT</span>
<span class="k">class</span> <span class="nc">LibraryLoader</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dlltype</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">dlltype</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_dlltype</span> <span class="o">=</span> <span class="n">dlltype</span>
<span class="k">def</span> <span class="nf">__getattr__</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="k">def</span> <span class="fm">__getattr__</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="k">if</span> <span class="n">name</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;_&#39;</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="n">dll</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dlltype</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">dll</span><span class="p">)</span>
<span class="k">return</span> <span class="n">dll</span>
<span class="k">def</span> <span class="nf">__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="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="k">return</span> <span class="nb">getattr</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="k">def</span> <span class="nf">LoadLibrary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
@@ -497,7 +500,7 @@
<span class="n">GetLastError</span> <span class="o">=</span> <span class="n">windll</span><span class="o">.</span><span class="n">kernel32</span><span class="o">.</span><span class="n">GetLastError</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">GetLastError</span> <span class="o">=</span> <span class="n">windll</span><span class="o">.</span><span class="n">coredll</span><span class="o">.</span><span class="n">GetLastError</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">get_last_error</span><span class="p">,</span> <span class="n">set_last_error</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">get_last_error</span><span class="p">,</span> <span class="n">set_last_error</span>
<span class="k">def</span> <span class="nf">WinError</span><span class="p">(</span><span class="n">code</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">descr</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">code</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
@@ -518,7 +521,7 @@
<span class="c1"># functions</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">_memmove_addr</span><span class="p">,</span> <span class="n">_memset_addr</span><span class="p">,</span> <span class="n">_string_at_addr</span><span class="p">,</span> <span class="n">_cast_addr</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">_memmove_addr</span><span class="p">,</span> <span class="n">_memset_addr</span><span class="p">,</span> <span class="n">_string_at_addr</span><span class="p">,</span> <span class="n">_cast_addr</span>
<span class="c1">## void *memmove(void *, const void *, size_t);</span>
<span class="n">memmove</span> <span class="o">=</span> <span class="n">CFUNCTYPE</span><span class="p">(</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">c_void_p</span><span class="p">,</span> <span class="n">c_void_p</span><span class="p">,</span> <span class="n">c_size_t</span><span class="p">)(</span><span class="n">_memmove_addr</span><span class="p">)</span>
@@ -545,7 +548,7 @@
<span class="k">return</span> <span class="n">_string_at</span><span class="p">(</span><span class="n">ptr</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">_wstring_at_addr</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">_wstring_at_addr</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">else</span><span class="p">:</span>
@@ -573,7 +576,7 @@
<span class="k">return</span> <span class="mi">0</span> <span class="c1"># S_OK</span>
<span class="k">return</span> <span class="n">ccom</span><span class="o">.</span><span class="n">DllCanUnloadNow</span><span class="p">()</span>
<span class="kn">from</span> <span class="nn">ctypes._endian</span> <span class="k">import</span> <span class="n">BigEndianStructure</span><span class="p">,</span> <span class="n">LittleEndianStructure</span>
<span class="kn">from</span> <span class="nn">ctypes._endian</span> <span class="kn">import</span> <span class="n">BigEndianStructure</span><span class="p">,</span> <span class="n">LittleEndianStructure</span>
<span class="c1"># Fill in specifically-sized types</span>
<span class="n">c_int8</span> <span class="o">=</span> <span class="n">c_byte</span>
@@ -621,13 +624,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+13 -6
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Overview: module code &#8212; PythonForWindows 0.5 documentation</title>
<title>Overview: module code &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
@@ -47,6 +50,8 @@
<li><a href="windows/debug/breakpoints.html">windows.debug.breakpoints</a></li>
<li><a href="windows/debug/debugger.html">windows.debug.debugger</a></li>
<li><a href="windows/debug/localdbg.html">windows.debug.localdbg</a></li>
<li><a href="windows/debug/symboldbg.html">windows.debug.symboldbg</a></li>
<li><a href="windows/debug/symbols.html">windows.debug.symbols</a></li>
<li><a href="windows/generated_def/flag.html">windows.generated_def.flag</a></li>
<li><a href="windows/generated_def/winstructs.html">windows.generated_def.winstructs</a></li>
<li><a href="windows/hooks.html">windows.hooks</a></li>
@@ -64,7 +69,9 @@
<li><a href="windows/utils/pythonutils.html">windows.utils.pythonutils</a></li>
<li><a href="windows/utils/winutils.html">windows.utils.winutils</a></li>
<li><a href="windows/winobject/apisetmap.html">windows.winobject.apisetmap</a></li>
<li><a href="windows/winobject/device_manager.html">windows.winobject.device_manager</a></li>
<li><a href="windows/winobject/event_log.html">windows.winobject.event_log</a></li>
<li><a href="windows/winobject/event_trace.html">windows.winobject.event_trace</a></li>
<li><a href="windows/winobject/exception.html">windows.winobject.exception</a></li>
<li><a href="windows/winobject/handle.html">windows.winobject.handle</a></li>
<li><a href="windows/winobject/network.html">windows.winobject.network</a></li>
@@ -113,12 +120,12 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+18 -15
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.alpc &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.alpc &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -39,11 +42,11 @@
<h1>Source code for windows.alpc</h1><div class="highlight"><pre>
<span></span><span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">namedtuple</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">namedtuple</span>
<span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">generated_def</span> <span class="k">as</span> <span class="n">gdef</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">generated_def</span> <span class="k">as</span> <span class="n">gdef</span>
<span class="kn">import</span> <span class="nn">windows.pycompat</span>
@@ -59,7 +62,7 @@
<div class="viewcode-block" id="AlpcMessage"><a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcMessage">[docs]</a><span class="k">class</span> <span class="nc">AlpcMessage</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent a full ALPC Message: a :class:`AlpcMessagePort` and a :class:`MessageAttribute`&quot;&quot;&quot;</span>
<span class="c1"># PORT_MESSAGE + MessageAttribute</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg_or_size</span><span class="o">=</span><span class="mh">0x1000</span><span class="p">,</span> <span class="n">attributes</span><span class="o">=</span><span class="kc">None</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">msg_or_size</span><span class="o">=</span><span class="mh">0x1000</span><span class="p">,</span> <span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="c1"># Init the PORT_MESSAGE</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">msg_or_size</span><span class="p">,</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">int_types</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">port_message_buffer_size</span> <span class="o">=</span> <span class="n">msg_or_size</span>
@@ -390,10 +393,10 @@
<span class="s2">&quot;An ALPC client able to connect to a port and send/receive messages&quot;</span>
<span class="n">DEFAULT_MAX_MESSAGE_LENGTH</span> <span class="o">=</span> <span class="mh">0x9000</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">port_name</span><span class="o">=</span><span class="kc">None</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">port_name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Init the :class:`AlpcClient` automatically connect to ``port_name`` using default values if given&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">port_name</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">port_name</span> <span class="o">=</span> <span class="kc">None</span> <span class="c1">#: The name of the ALPC port the client is connect to.</span>
<span class="k">if</span> <span class="n">port_name</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">connect_to_port</span><span class="p">(</span><span class="n">port_name</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
@@ -477,7 +480,7 @@
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_close_port</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="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</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="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="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">disconnect</span><span class="p">()</span></div>
@@ -486,7 +489,7 @@
<span class="sd">&quot;&quot;&quot;An ALPC server able to create a port, accept connections and send/receive messages&quot;&quot;&quot;</span>
<span class="n">DEFAULT_MAX_MESSAGE_LENGTH</span> <span class="o">=</span> <span class="mh">0x1000</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">port_name</span><span class="o">=</span><span class="kc">None</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">port_name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">port_name</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">communication_port_list</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="kc">None</span>
@@ -576,7 +579,7 @@
<span class="c1"># TODO: add an API to close a communication port ?</span>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</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="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="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">disconnect</span><span class="p">()</span></div>
</pre></div>
@@ -611,13 +614,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+19 -16
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.com &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.com &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -41,18 +44,18 @@
<span class="kn">import</span> <span class="nn">struct</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">functools</span>
<span class="kn">from</span> <span class="nn">ctypes</span> <span class="k">import</span> <span class="n">HRESULT</span><span class="p">,</span> <span class="n">byref</span><span class="p">,</span> <span class="n">cast</span>
<span class="kn">from</span> <span class="nn">ctypes</span> <span class="kn">import</span> <span class="n">HRESULT</span><span class="p">,</span> <span class="n">byref</span><span class="p">,</span> <span class="n">cast</span>
<span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.generated_def.winstructs</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.generated_def.winstructs</span> <span class="kn">import</span> <span class="o">*</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</span> <span class="k">import</span> <span class="n">RPC_C_IMP_LEVEL_IMPERSONATE</span><span class="p">,</span> <span class="n">CLSCTX_INPROC_SERVER</span>
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="k">import</span> <span class="n">interfaces</span>
<span class="kn">from</span> <span class="nn">windows.generated_def.interfaces</span> <span class="k">import</span> <span class="n">generate_IID</span><span class="p">,</span> <span class="n">IID</span>
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="kn">import</span> <span class="n">RPC_C_IMP_LEVEL_IMPERSONATE</span><span class="p">,</span> <span class="n">CLSCTX_INPROC_SERVER</span>
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="kn">import</span> <span class="n">interfaces</span>
<span class="kn">from</span> <span class="nn">windows.generated_def.interfaces</span> <span class="kn">import</span> <span class="n">generate_IID</span><span class="p">,</span> <span class="n">IID</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="k">import</span> <span class="n">int_types</span><span class="p">,</span> <span class="n">basestring</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="kn">import</span> <span class="n">int_types</span><span class="p">,</span> <span class="n">basestring</span>
<span class="c1"># We have windows.com.COMImplementation</span>
<span class="c1"># So we need windows.com.COMInterface</span>
@@ -204,7 +207,7 @@
<span class="n">empty</span> <span class="o">=</span> <span class="nb">object</span><span class="p">()</span>
<span class="k">class</span> <span class="nc">Variant</span><span class="p">(</span><span class="n">VARIANT</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">empty</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="kc">None</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">value</span><span class="o">=</span><span class="n">empty</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">type</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">set_value_and_type</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">type</span><span class="p">)</span>
<span class="k">return</span>
@@ -309,7 +312,7 @@
<span class="n">asbyte</span> <span class="o">=</span> <span class="n">generate_getter</span><span class="p">(</span><span class="n">VT_UI1</span><span class="p">)</span>
<span class="n">asunknown</span> <span class="o">=</span> <span class="n">generate_getter</span><span class="p">(</span><span class="n">VT_UNKNOWN</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&quot;&quot;&lt;</span><span class="si">{0}</span><span class="s2"> of type </span><span class="si">{1}</span><span class="s2">&gt;&quot;&quot;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">vt</span><span class="p">)</span>
<span class="c1"># Deprecated: remove me when test pass :)</span>
@@ -370,7 +373,7 @@
<span class="n">_fields_</span> <span class="o">=</span> <span class="p">[(</span><span class="n">name</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span><span class="p">]</span>
<span class="k">return</span> <span class="n">Vtable</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">implems</span><span class="p">]),</span> <span class="n">implems</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">verify_implem</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">IMPLEMENT</span><span class="p">)</span>
<span class="n">vtable</span><span class="p">,</span> <span class="n">implems</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_vtable</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">IMPLEMENT</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">vtable</span> <span class="o">=</span> <span class="n">vtable</span>
@@ -424,13 +427,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+19 -16
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.crypto.certificate &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.crypto.certificate &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -41,10 +44,10 @@
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</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.crypto</span> <span class="k">import</span> <span class="n">DEFAULT_ENCODING</span>
<span class="kn">from</span> <span class="nn">windows.crypto</span> <span class="kn">import</span> <span class="n">DEFAULT_ENCODING</span>
<span class="kn">import</span> <span class="nn">windows.crypto.cryptmsg</span>
@@ -82,7 +85,7 @@
<span class="n">gdef</span><span class="o">.</span><span class="n">CMSG_SIGNER_COUNT_PARAM</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">CMSG_CERT_COUNT_PARAM</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">}</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">content_type</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_CONTENT_FLAG_ALL</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">filename</span><span class="p">,</span> <span class="n">content_type</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_CONTENT_FLAG_ALL</span><span class="p">):</span>
<span class="c1"># No other API than filename for now..</span>
<span class="bp">self</span><span class="o">.</span><span class="n">filename</span> <span class="o">=</span> <span class="n">filename</span>
@@ -136,7 +139,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_signers_and_certs_generator</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s1">&#39;&lt;</span><span class="si">{0}</span><span class="s1"> &quot;</span><span class="si">{1}</span><span class="s1">&quot; content_type=</span><span class="si">{2!r}</span><span class="s1">&gt;&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">filename</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">content_type</span><span class="p">)</span></div>
@@ -215,7 +218,7 @@
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">Certificate</span><span class="o">.</span><span class="n">from_pointer</span><span class="p">(</span><span class="n">rawcertcontext</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</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="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertCloseStore</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span></div>
@@ -516,12 +519,12 @@
<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">ptr</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">Certificate</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Certificate</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">NotImplemented</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CertCompareCertificate</span><span class="p">(</span><span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pCertInfo</span><span class="p">,</span> <span class="n">other</span><span class="o">.</span><span class="n">pCertInfo</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s1">&#39;&lt;</span><span class="si">{0}</span><span class="s1"> &quot;</span><span class="si">{1}</span><span class="s1">&quot; serial=&quot;</span><span class="si">{2}</span><span class="s1">&quot;&gt;&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</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="bp">self</span><span class="o">.</span><span class="n">serial</span><span class="p">)</span></div>
@@ -596,7 +599,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">_type_</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">HCRYPTPROV</span><span class="o">.</span><span class="n">_type_</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pszContainer</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pszProvider</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dwProvType</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">dwFlags</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">retrycreate</span><span class="o">=</span><span class="kc">False</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">pszContainer</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pszProvider</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dwProvType</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">dwFlags</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">retrycreate</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pszContainer</span> <span class="o">=</span> <span class="n">pszContainer</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pszProvider</span> <span class="o">=</span> <span class="n">pszProvider</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dwProvType</span> <span class="o">=</span> <span class="n">dwProvType</span>
@@ -605,11 +608,11 @@
<span class="c1">#self.value = HCRYPTPROV()</span>
<span class="k">pass</span>
<span class="k">def</span> <span class="nf">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
<span class="k">return</span> <span class="bp">self</span>
<span class="k">def</span> <span class="nf">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">acquire</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@@ -654,13 +657,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+16 -12
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.crypto.cryptmsg &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.crypto.cryptmsg &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -39,7 +42,7 @@
<h1>Source code for windows.crypto.cryptmsg</h1><div class="highlight"><pre>
<span></span><span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</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">import</span> <span class="nn">windows.crypto</span>
@@ -154,20 +157,21 @@
<span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">blob</span><span class="p">,</span> <span class="n">final</span><span class="p">):</span>
<span class="c1"># Test isinstance string ?</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">blob</span><span class="p">,</span> <span class="p">(</span><span class="n">basestring</span><span class="p">,</span> <span class="nb">bytearray</span><span class="p">)):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">blob</span><span class="p">,</span> <span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">anybuff</span><span class="p">,</span> <span class="nb">bytearray</span><span class="p">)):</span>
<span class="n">blob</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">raw_encode</span><span class="p">(</span><span class="n">blob</span><span class="p">)</span>
<span class="n">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">BYTE</span><span class="p">)</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">blob</span><span class="p">)</span>
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CryptMsgUpdate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">buffer</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">blob</span><span class="p">),</span> <span class="n">final</span><span class="p">)</span>
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CryptMsgUpdate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">blob</span><span class="o">.</span><span class="n">pbData</span><span class="p">,</span> <span class="n">blob</span><span class="o">.</span><span class="n">cbData</span><span class="p">,</span> <span class="n">final</span><span class="p">)</span>
<span class="c1"># constructor</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">from_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<div class="viewcode-block" id="CryptMessage.from_buffer"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CryptMessage.from_buffer">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">from_buffer</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">hmsg</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CryptMsgOpenToDecode</span><span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">crypto</span><span class="o">.</span><span class="n">DEFAULT_ENCODING</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="kc">None</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">newmsg</span> <span class="o">=</span> <span class="n">CryptMessage</span><span class="p">(</span><span class="n">hmsg</span><span class="p">)</span>
<span class="n">newmsg</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">final</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">return</span> <span class="n">newmsg</span>
<span class="k">return</span> <span class="n">newmsg</span></div>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</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="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CryptMsgClose</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
</pre></div>
@@ -201,13 +205,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+14 -11
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.crypto.encrypt_decrypt &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.crypto.encrypt_decrypt &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -37,11 +40,11 @@
<div class="body" role="main">
<h1>Source code for windows.crypto.encrypt_decrypt</h1><div class="highlight"><pre>
<span></span><span class="kn">from</span> <span class="nn">os</span> <span class="k">import</span> <span class="n">urandom</span>
<span></span><span class="kn">from</span> <span class="nn">os</span> <span class="kn">import</span> <span class="n">urandom</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.crypto</span> <span class="k">import</span> <span class="n">DEFAULT_ENCODING</span>
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.crypto</span> <span class="kn">import</span> <span class="n">DEFAULT_ENCODING</span>
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="kn">import</span> <span class="o">*</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;encrypt&quot;</span><span class="p">,</span> <span class="s2">&quot;decrypt&quot;</span><span class="p">]</span>
@@ -56,7 +59,7 @@
<span class="k">class</span> <span class="nc">GenerateInitVector</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;GenerateInitVector()&quot;</span>
<span class="k">def</span> <span class="nf">generate_init_vector</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">algo</span><span class="p">):</span>
@@ -188,13 +191,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+12 -9
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.crypto.generation &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.crypto.generation &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -38,9 +41,9 @@
<h1>Source code for windows.crypto.generation</h1><div class="highlight"><pre>
<span></span><span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">windows.crypto</span> <span class="k">import</span> <span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="n">CertificateStore</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="kn">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">windows.crypto</span> <span class="kn">import</span> <span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="n">CertificateStore</span>
<div class="viewcode-block" id="generate_selfsigned_certificate"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.generation.generate_selfsigned_certificate">[docs]</a><span class="k">def</span> <span class="nf">generate_selfsigned_certificate</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s2">&quot;CN=DEFAULT&quot;</span><span class="p">,</span> <span class="n">prov</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">key_info</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">signature_algo</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
@@ -122,13 +125,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+30 -21
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.debug.breakpoints &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.debug.breakpoints &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -37,12 +40,13 @@
<div class="body" role="main">
<h1>Source code for windows.debug.breakpoints</h1><div class="highlight"><pre>
<span></span><span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">OrderedDict</span>
<span></span><span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">OrderedDict</span>
<span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">from</span> <span class="nn">windows.generated_def.winstructs</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="k">import</span> <span class="n">windef</span>
<span class="kn">from</span> <span class="nn">windows.winobject.process</span> <span class="k">import</span> <span class="n">WinProcess</span><span class="p">,</span> <span class="n">WinThread</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.generated_def</span> <span class="kn">import</span> <span class="n">windef</span>
<span class="kn">from</span> <span class="nn">windows.winobject.process</span> <span class="kn">import</span> <span class="n">WinProcess</span><span class="p">,</span> <span class="n">WinThread</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="kn">import</span> <span class="n">basestring</span>
<span class="n">STANDARD_BP</span> <span class="o">=</span> <span class="s2">&quot;BP&quot;</span>
@@ -52,7 +56,7 @@
<div class="viewcode-block" id="Breakpoint"><a class="viewcode-back" href="../../../debug.html#windows.debug.Breakpoint">[docs]</a><span class="k">class</span> <span class="nc">Breakpoint</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;An standard (Int3) breakpoint (type == ``STANDARD_BP``)&quot;&quot;&quot;</span>
<span class="nb">type</span> <span class="o">=</span> <span class="n">STANDARD_BP</span> <span class="c1"># REAL BP</span>
<span class="k">def</span> <span class="nf">__init__</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="k">def</span> <span class="fm">__init__</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="bp">self</span><span class="o">.</span><span class="n">addr</span> <span class="o">=</span> <span class="n">addr</span>
<span class="k">def</span> <span class="nf">apply_to_target</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
@@ -64,7 +68,7 @@
<span class="k">class</span> <span class="nc">ProxyBreakpoint</span><span class="p">(</span><span class="n">Breakpoint</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="nb">type</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> <span class="n">addr</span><span class="p">,</span> <span class="nb">type</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">target</span>
<span class="bp">self</span><span class="o">.</span><span class="n">addr</span> <span class="o">=</span> <span class="n">addr</span>
<span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="nb">type</span>
@@ -85,7 +89,7 @@
<span class="nb">type</span> <span class="o">=</span> <span class="n">MEMORY_BREAKPOINT</span>
<span class="n">DEFAULT_EVENTS</span> <span class="o">=</span> <span class="s2">&quot;RWX&quot;</span>
<span class="n">DEFAULT_SIZE</span> <span class="o">=</span> <span class="mh">0x1000</span>
<div class="viewcode-block" id="MemoryBreakpoint.__init__"><a class="viewcode-back" href="../../../debug.html#windows.debug.MemoryBreakpoint.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</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="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">events</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<div class="viewcode-block" id="MemoryBreakpoint.__init__"><a class="viewcode-back" href="../../../debug.html#windows.debug.MemoryBreakpoint.__init__">[docs]</a> <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">addr</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">events</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;``size``: the size of the memory breakpoint.</span>
<span class="sd"> ``events``: a string representing the events that interest the BP (any of &quot;RWX&quot;)&quot;&quot;&quot;</span>
@@ -124,7 +128,7 @@
<span class="c1">## Behaviour breakpoint !</span>
<span class="c1"># class FunctionParamDumpBP(Breakpoint):</span>
<span class="k">class</span> <span class="nc">FunctionParamDumpBPAbstract</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</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="n">target</span><span class="o">=</span><span class="kc">None</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">addr</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">target</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">try</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">TARGET</span>
@@ -205,13 +209,13 @@
<span class="k">class</span> <span class="nc">FunctionParameterProxy</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="c1"># TODO: clean this + put more of the logic in the X64ArgumentRetriever</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">extractor</span><span class="p">,</span> <span class="n">name_map</span><span class="p">,</span> <span class="n">parameters_type</span><span class="p">,</span> <span class="n">x</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">extractor</span><span class="p">,</span> <span class="n">name_map</span><span class="p">,</span> <span class="n">parameters_type</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">extractor</span> <span class="o">=</span> <span class="n">extractor</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name_map</span> <span class="o">=</span> <span class="n">name_map</span>
<span class="bp">self</span><span class="o">.</span><span class="n">parameters_type</span> <span class="o">=</span> <span class="n">parameters_type</span>
<span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="n">x</span>
<span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name_map</span><span class="p">[</span><span class="n">x</span><span class="p">]</span>
<span class="c1"># import pdb;pdb.set_trace()</span>
@@ -229,7 +233,7 @@
<span class="k">pass</span>
<span class="k">return</span> <span class="n">t</span>
<span class="k">def</span> <span class="nf">__setitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__setitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name_map</span><span class="p">[</span><span class="n">x</span><span class="p">]</span>
<span class="k">try</span><span class="p">:</span>
@@ -248,7 +252,7 @@
<span class="k">pass</span>
<span class="k">class</span> <span class="nc">FunctionRetBP</span><span class="p">(</span><span class="n">Breakpoint</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</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">initial_breakpoint</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">addr</span><span class="p">,</span> <span class="n">initial_breakpoint</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">FunctionRetBP</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">initial_breakpoint</span> <span class="o">=</span> <span class="n">initial_breakpoint</span>
@@ -261,10 +265,15 @@
<span class="sd">&quot;&quot;&quot;A Breakpoint that allow to trigger at the return of a function&quot;&quot;&quot;</span>
<div class="viewcode-block" id="FunctionCallBP.break_on_ret"><a class="viewcode-back" href="../../../debug.html#windows.debug.FunctionCallBP.break_on_ret">[docs]</a> <span class="k">def</span> <span class="nf">break_on_ret</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dbg</span><span class="p">,</span> <span class="n">exception</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Setup a breakpoint at the return address of the function, this breakpoint will call :func:`ret_trigger`&quot;&quot;&quot;</span>
<span class="n">cproc</span> <span class="o">=</span> <span class="n">dbg</span><span class="o">.</span><span class="n">current_process</span>
<span class="n">return_addr</span> <span class="o">=</span> <span class="n">dbg</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">read_ptr</span><span class="p">(</span><span class="n">dbg</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">sp</span><span class="p">)</span>
<span class="n">return_addr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_ret_addr</span><span class="p">(</span><span class="n">dbg</span><span class="p">,</span> <span class="n">exception</span><span class="p">)</span>
<span class="n">dbg</span><span class="o">.</span><span class="n">add_bp</span><span class="p">(</span><span class="n">FunctionRetBP</span><span class="p">(</span><span class="n">return_addr</span><span class="p">,</span> <span class="bp">self</span><span class="p">),</span> <span class="n">target</span><span class="o">=</span><span class="n">dbg</span><span class="o">.</span><span class="n">current_process</span><span class="p">)</span></div>
<div class="viewcode-block" id="FunctionCallBP.get_ret_addr"><a class="viewcode-back" href="../../../debug.html#windows.debug.FunctionCallBP.get_ret_addr">[docs]</a> <span class="k">def</span> <span class="nf">get_ret_addr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dbg</span><span class="p">,</span> <span class="n">exception</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Get the return address of the current target, only valid in the trigger() function.&quot;&quot;&quot;</span>
<span class="n">cproc</span> <span class="o">=</span> <span class="n">dbg</span><span class="o">.</span><span class="n">current_process</span>
<span class="k">return</span> <span class="n">dbg</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">read_ptr</span><span class="p">(</span><span class="n">dbg</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">sp</span><span class="p">)</span></div>
<div class="viewcode-block" id="FunctionCallBP.ret_trigger"><a class="viewcode-back" href="../../../debug.html#windows.debug.FunctionCallBP.ret_trigger">[docs]</a> <span class="k">def</span> <span class="nf">ret_trigger</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dbg</span><span class="p">,</span> <span class="n">exception</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Called at the return of the function if :func:`break_on_ret` was called&quot;&quot;&quot;</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;ret_trigger&quot;</span><span class="p">)</span></div></div>
@@ -278,7 +287,7 @@
<span class="sd"> &quot;&quot;&quot;</span></div>
<span class="k">class</span> <span class="nc">PrintBP</span><span class="p">(</span><span class="n">Breakpoint</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</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="nb">format</span><span class="p">,</span> <span class="n">func</span><span class="o">=</span><span class="kc">None</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">addr</span><span class="p">,</span> <span class="nb">format</span><span class="p">,</span> <span class="n">func</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">PrintBP</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">format</span> <span class="o">=</span> <span class="nb">format</span>
<span class="bp">self</span><span class="o">.</span><span class="n">func</span> <span class="o">=</span> <span class="n">func</span>
@@ -321,13 +330,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+24 -17
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.debug.debugger &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.debug.debugger &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -38,8 +41,8 @@
<h1>Source code for windows.debug.debugger</h1><div class="highlight"><pre>
<span></span><span class="kn">import</span> <span class="nn">os.path</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">defaultdict</span><span class="p">,</span> <span class="n">namedtuple</span>
<span class="kn">from</span> <span class="nn">contextlib</span> <span class="k">import</span> <span class="n">contextmanager</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">defaultdict</span><span class="p">,</span> <span class="n">namedtuple</span>
<span class="kn">from</span> <span class="nn">contextlib</span> <span class="kn">import</span> <span class="n">contextmanager</span>
<span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
@@ -48,17 +51,17 @@
<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">from</span> <span class="nn">windows.winobject.process</span> <span class="k">import</span> <span class="n">WinProcess</span><span class="p">,</span> <span class="n">WinThread</span>
<span class="kn">from</span> <span class="nn">windows.dbgprint</span> <span class="k">import</span> <span class="n">dbgprint</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.generated_def.winstructs</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="k">import</span> <span class="n">windef</span>
<span class="kn">from</span> <span class="nn">.breakpoints</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">windows.winobject.process</span> <span class="kn">import</span> <span class="n">WinProcess</span><span class="p">,</span> <span class="n">WinThread</span>
<span class="kn">from</span> <span class="nn">windows.dbgprint</span> <span class="kn">import</span> <span class="n">dbgprint</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.generated_def.winstructs</span> <span class="kn">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="kn">import</span> <span class="n">windef</span>
<span class="kn">from</span> <span class="nn">.breakpoints</span> <span class="kn">import</span> <span class="o">*</span>
<span class="c1">#from windows.syswow64 import CS_32bits</span>
<span class="kn">from</span> <span class="nn">windows.winobject.exception</span> <span class="k">import</span> <span class="n">VectoredException</span>
<span class="kn">from</span> <span class="nn">windows.winobject.exception</span> <span class="kn">import</span> <span class="n">VectoredException</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="k">import</span> <span class="n">basestring</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="kn">import</span> <span class="n">basestring</span>
<span class="n">PAGE_SIZE</span> <span class="o">=</span> <span class="mh">0x1000</span>
@@ -87,7 +90,7 @@
<span class="sd"> * Memory BP (virtual_protect)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="Debugger.__init__"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
<div class="viewcode-block" id="Debugger.__init__"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.__init__">[docs]</a> <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>
<span class="sd">&quot;&quot;&quot;``target`` must be a debuggable :class:`WinProcess`.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_init_dispatch_handlers</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">target</span>
@@ -810,6 +813,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">breakpoints</span><span class="p">[</span><span class="bp">self</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="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_memory_save</span><span class="p">[</span><span class="bp">self</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="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_module_by_process</span><span class="p">[</span><span class="bp">self</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="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_internal_on_create_process</span><span class="p">(</span><span class="n">create_process</span><span class="p">)</span> <span class="c1"># Allow hook for symbol-debugger</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_update_debugger_state</span><span class="p">(</span><span class="n">debug_event</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_add_exe_to_module_list</span><span class="p">(</span><span class="n">create_process</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_setup_pending_breakpoints_new_process</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="p">)</span>
@@ -875,6 +879,9 @@
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_breakpoint_to_reput</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">tid</span><span class="p">]</span>
<span class="k">return</span> <span class="n">retvalue</span>
<span class="k">def</span> <span class="nf">_internal_on_create_process</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">create_process</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">def</span> <span class="nf">_internal_on_load_dll</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">load_dll</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">None</span>
@@ -1205,13 +1212,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+28 -23
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.debug.localdbg &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.debug.localdbg &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -37,20 +40,20 @@
<div class="body" role="main">
<h1>Source code for windows.debug.localdbg</h1><div class="highlight"><pre>
<span></span><span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">defaultdict</span>
<span class="kn">from</span> <span class="nn">contextlib</span> <span class="k">import</span> <span class="n">contextmanager</span>
<span></span><span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">defaultdict</span>
<span class="kn">from</span> <span class="nn">contextlib</span> <span class="kn">import</span> <span class="n">contextmanager</span>
<span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">import</span> <span class="nn">windows.winobject.exception</span> <span class="k">as</span> <span class="nn">winexception</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="k">import</span> <span class="n">windef</span>
<span class="kn">from</span> <span class="nn">windows.generated_def.winstructs</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">.breakpoints</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="kn">import</span> <span class="n">windef</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">.breakpoints</span> <span class="kn">import</span> <span class="o">*</span>
<span class="k">class</span> <span class="nc">FakeDebuggerCurrentThread</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A pseudo thread representing the current thread at exception time&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dbg</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">dbg</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dbg</span> <span class="o">=</span> <span class="n">dbg</span>
<span class="nd">@property</span>
@@ -75,7 +78,7 @@
<span class="sd"> * Hardware-Exec BP (DrX)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">breakpoints</span> <span class="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_memory_save</span> <span class="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_reput_breakpoint</span> <span class="o">=</span> <span class="p">{}</span>
@@ -85,7 +88,7 @@
<span class="n">winproxy</span><span class="o">.</span><span class="n">AddVectoredExceptionHandler</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">callback_vectored</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setup_hxbp_callback_vectored</span> <span class="o">=</span> <span class="n">winexception</span><span class="o">.</span><span class="n">VectoredException</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">setup_hxbp_callback</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">hxbp_info</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">code</span> <span class="o">=</span> <span class="n">windows</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="s2">&quot;</span><span class="se">\xcc\xc3</span><span class="s2">&quot;</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">code</span> <span class="o">=</span> <span class="n">windows</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="sa">b</span><span class="s2">&quot;</span><span class="se">\xcc\xc3</span><span class="s2">&quot;</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">veh_depth</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current_exception</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">exceptions_stack</span> <span class="o">=</span> <span class="p">[</span><span class="kc">None</span><span class="p">]</span>
@@ -167,7 +170,7 @@
<span class="n">bp</span><span class="p">,</span> <span class="n">single_step</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reput_breakpoint</span><span class="p">[</span><span class="n">windows</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">tid</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_memory_save</span><span class="p">[</span><span class="n">bp</span><span class="o">.</span><span class="n">_addr</span><span class="p">]</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">bp</span><span class="o">.</span><span class="n">_addr</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">with</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">VirtualProtected</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">_addr</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">PAGE_EXECUTE_READWRITE</span><span class="p">):</span>
<span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">_addr</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\xcc</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">_addr</span><span class="p">,</span> <span class="sa">b</span><span class="s2">&quot;</span><span class="se">\xcc</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reput_breakpoint</span><span class="p">[</span><span class="n">windows</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">tid</span><span class="p">]</span>
<span class="k">if</span> <span class="n">single_step</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_exception</span><span class="p">(</span><span class="n">exc</span><span class="p">)</span>
@@ -223,7 +226,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">breakpoints</span><span class="p">[</span><span class="n">addr</span><span class="p">]</span> <span class="o">=</span> <span class="n">bp</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_memory_save</span><span class="p">[</span><span class="n">addr</span><span class="p">]</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">addr</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">with</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">VirtualProtected</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">PAGE_EXECUTE_READWRITE</span><span class="p">):</span>
<span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\xcc</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="sa">b</span><span class="s2">&quot;</span><span class="se">\xcc</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">return</span></div>
<span class="k">def</span> <span class="nf">add_bp_hxbp</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bp</span><span class="p">,</span> <span class="n">targets</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
@@ -243,16 +246,18 @@
<span class="k">def</span> <span class="nf">setup_hxbp_callback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc</span><span class="p">):</span>
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">NewCurrentException</span><span class="p">(</span><span class="n">exc</span><span class="p">):</span>
<span class="n">exp_code</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_exception_code</span><span class="p">()</span>
<span class="k">if</span> <span class="n">exp_code</span> <span class="o">!=</span> <span class="n">windef</span><span class="o">.</span><span class="n">EXCEPTION_BREAKPOINT</span><span class="p">:</span>
<span class="k">return</span> <span class="n">windef</span><span class="o">.</span><span class="n">EXCEPTION_CONTINUE_SEARCH</span>
<span class="n">context</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_exception_context</span><span class="p">()</span>
<span class="n">exp_addr</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="n">pc</span>
<span class="n">hxbp_used</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">setup_hxbp_in_context</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">)</span>
<span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</span><span class="p">(</span><span class="n">exp_addr</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\x90</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</span><span class="p">(</span><span class="n">exp_addr</span><span class="p">,</span> <span class="sa">b</span><span class="s2">&quot;</span><span class="se">\x90</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="c1"># Raising in the VEH is a bad idea..</span>
<span class="c1"># So better give the information to triggerer..</span>
<span class="k">if</span> <span class="n">hxbp_used</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">get_exception_context</span><span class="p">()</span><span class="o">.</span><span class="n">Eax</span> <span class="o">=</span> <span class="n">exp_addr</span>
<span class="bp">self</span><span class="o">.</span><span class="n">get_exception_context</span><span class="p">()</span><span class="o">.</span><span class="n">func_result</span> <span class="o">=</span> <span class="n">exp_addr</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">get_exception_context</span><span class="p">()</span><span class="o">.</span><span class="n">Eax</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">get_exception_context</span><span class="p">()</span><span class="o">.</span><span class="n">func_result</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">return</span> <span class="n">windef</span><span class="o">.</span><span class="n">EXCEPTION_CONTINUE_EXECUTION</span>
<span class="k">def</span> <span class="nf">remove_hxbp_callback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc</span><span class="p">):</span>
@@ -261,7 +266,7 @@
<span class="n">context</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_exception_context</span><span class="p">()</span>
<span class="n">exp_addr</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="n">pc</span>
<span class="n">hxbp_used</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">remove_hxbp_in_context</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">)</span>
<span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</span><span class="p">(</span><span class="n">exp_addr</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\x90</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</span><span class="p">(</span><span class="n">exp_addr</span><span class="p">,</span> <span class="sa">b</span><span class="s2">&quot;</span><span class="se">\x90</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="c1"># Raising in the VEH is a bad idea..</span>
<span class="c1"># So better give the information to triggerer..</span>
<span class="k">if</span> <span class="n">hxbp_used</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
@@ -306,7 +311,7 @@
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">code</span><span class="p">()</span>
<span class="k">if</span> <span class="n">x</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">&quot;Could not setup HXBP&quot;</span><span class="p">)</span>
<span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\xcc</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="sa">b</span><span class="s2">&quot;</span><span class="se">\xcc</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">def</span> <span class="nf">setup_hxbp_other_thread</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">thread</span><span class="p">):</span>
@@ -329,7 +334,7 @@
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">code</span><span class="p">()</span>
<span class="k">if</span> <span class="n">x</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">&quot;Could not remove HXBP&quot;</span><span class="p">)</span>
<span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\xcc</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="sa">b</span><span class="s2">&quot;</span><span class="se">\xcc</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">def</span> <span class="nf">remove_hxbp_other_thread</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">thread</span><span class="p">):</span>
@@ -372,13 +377,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+132
View File
@@ -0,0 +1,132 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.debug.symboldbg &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for windows.debug.symboldbg</h1><div class="highlight"><pre>
<span></span><span class="kn">import</span> <span class="nn">windows</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.pycompat</span> <span class="kn">import</span> <span class="n">int_types</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">Debugger</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">symbols</span>
<div class="viewcode-block" id="SymbolDebugger"><a class="viewcode-back" href="../../../debug.html#windows.debug.SymbolDebugger">[docs]</a><span class="k">class</span> <span class="nc">SymbolDebugger</span><span class="p">(</span><span class="n">Debugger</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A debugger using the symbol API (hence PDB) for name resolution.</span>
<span class="sd"> To use PDB, a correct version of dbghelp should be configured as well as ``_NT_SYMBOL_PATH``.</span>
<span class="sd"> (See :ref:`debug_symbols_module`)</span>
<span class="sd"> This debugger add a ``current_resolver`` variable (A :class:`~windows.debug.symbols.ProcessSymbolHandler`) for the ``current_process``.</span>
<span class="sd"> &quot;&quot;&quot;</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="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">SymbolDebugger</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_resolvers</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">def</span> <span class="nf">_internal_on_load_dll</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">load_dll</span><span class="p">):</span>
<span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_loaded_dll</span><span class="p">(</span><span class="n">load_dll</span><span class="p">)</span>
<span class="c1"># Path is used instead of name for naming the module (and can be set to whatever if using file handle)</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_resolver</span><span class="o">.</span><span class="n">load_module</span><span class="p">(</span><span class="n">load_dll</span><span class="o">.</span><span class="n">hFile</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">addr</span><span class="o">=</span><span class="n">load_dll</span><span class="o">.</span><span class="n">lpBaseOfDll</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_internal_on_create_process</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">create_process</span><span class="p">):</span>
<span class="c1"># Create and setup a symbol resolver for the new process</span>
<span class="n">resolver</span> <span class="o">=</span> <span class="n">symbols</span><span class="o">.</span><span class="n">ProcessSymbolHandler</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_resolvers</span><span class="p">[</span><span class="bp">self</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="o">=</span> <span class="n">resolver</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current_resolver</span> <span class="o">=</span> <span class="n">resolver</span>
<span class="k">def</span> <span class="nf">_update_debugger_state</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">debug_event</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">SymbolDebugger</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">_update_debugger_state</span><span class="p">(</span><span class="n">debug_event</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current_resolver</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resolvers</span><span class="p">[</span><span class="n">debug_event</span><span class="o">.</span><span class="n">dwProcessId</span><span class="p">]</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">addr</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="n">int_types</span><span class="p">):</span>
<span class="k">return</span> <span class="n">addr</span>
<span class="k">if</span> <span class="s2">&quot;+&quot;</span> <span class="ow">in</span> <span class="n">addr</span><span class="p">:</span>
<span class="n">symbol</span><span class="p">,</span> <span class="n">deplacement</span> <span class="o">=</span> <span class="n">addr</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">deplacement</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">deplacement</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="n">addr</span>
<span class="n">deplacement</span> <span class="o">=</span> <span class="mi">0</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">current_resolver</span><span class="p">[</span><span class="n">symbol</span><span class="p">]</span><span class="o">.</span><span class="n">addr</span> <span class="o">+</span> <span class="n">deplacement</span>
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="ow">in</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_NOT_FOUND</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_MOD_NOT_FOUND</span><span class="p">):</span>
<span class="k">raise</span>
<span class="k">return</span> <span class="kc">None</span></div>
</pre></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+816
View File
@@ -0,0 +1,816 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.debug.symbols &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for windows.debug.symbols</h1><div class="highlight"><pre>
<span></span><span class="kn">import</span> <span class="nn">os.path</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">copy</span>
<span class="kn">import</span> <span class="nn">itertools</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">namedtuple</span>
<span class="kn">import</span> <span class="nn">windows</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</span> <span class="kn">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="kn">import</span> <span class="n">basestring</span>
<span class="n">DEFAULT_DBG_OPTION</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SYMOPT_DEFERRED_LOADS</span> <span class="o">+</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SYMOPT_UNDNAME</span>
<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="sd">&quot;&quot;&quot;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\&lt;current_process_bitness&gt;\dbghelp.dll``.</span>
<span class="sd"> This allow to use the same script transparently in both 32b &amp; 64b python interpreters.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">loaded_modules</span> <span class="o">=</span> <span class="p">[</span><span class="n">m</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">peb</span><span class="o">.</span><span class="n">modules</span><span class="p">]</span>
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
<span class="n">path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</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="p">),</span> <span class="s2">&quot;dbghelp.dll&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="s2">&quot;dbghelp.dll&quot;</span> <span class="ow">in</span> <span class="n">loaded_modules</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;setup_dbghelp_path should be called before any dbghelp function&quot;</span><span class="p">)</span>
<span class="c1"># Change the DLL used by DbgHelpProxy</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">DbgHelpProxy</span><span class="o">.</span><span class="n">APIDLL</span> <span class="o">=</span> <span class="n">path</span>
<span class="k">return</span></div>
<span class="c1"># Load symbol config from ENV if present</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">env_dbghelp_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s2">&quot;PFW_DBGHELP_PATH&quot;</span><span class="p">]</span>
<span class="c1"># Setup the dbghelp path used by PFW</span>
<span class="n">set_dbghelp_path</span><span class="p">(</span><span class="n">env_dbghelp_path</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">pass</span>
<span class="k">class</span> <span class="nc">SymbolInfoBase</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent a Symbol.</span>
<span class="sd"> This class in based on the class `SYMBOL_INFO &lt;https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/ns-dbghelp-symbol_info&gt;`_</span>
<span class="sd"> with the handling on displacement embeded into it.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Init on ctypes struct is not always called</span>
<span class="c1"># resolver &amp; displacement should be set manually</span>
<span class="n">CHAR_TYPE</span> <span class="o">=</span> <span class="kc">None</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="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">resolver</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;resolver&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="c1">#: POUET POUET</span>
<span class="bp">self</span><span class="o">.</span><span class="n">displacement</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;displacement&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="c1">#: POUET POUET</span>
<span class="k">def</span> <span class="nf">as_type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># assert self.Address == 0 ?</span>
<span class="k">return</span> <span class="n">SymbolType</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">Index</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="bp">self</span><span class="o">.</span><span class="n">resolver</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="sd">&quot;&quot;&quot;The name of the symbol&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">NameLen</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NameLen</span>
<span class="n">addr</span> <span class="o">=</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="p">)</span> <span class="o">+</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">Name</span><span class="o">.</span><span class="n">offset</span>
<span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CHAR_TYPE</span> <span class="o">*</span> <span class="n">size</span><span class="p">)</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="n">addr</span><span class="p">)[:]</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">fullname</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The fullname of the symbol in the windbg format ``mod!sym+displacement``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">addr</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The address of the symbol&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">Address</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">displacement</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The address of the start of the symbol</span>
<span class="sd"> If the symbol include a displacement, it is not taken into account</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">Address</span>
<span class="nd">@property</span> <span class="c1"># Fixed ?</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="sd">&quot;&quot;&quot;The module containing the symbol</span>
<span class="sd"> :type: :class:`SymbolModule`</span>
<span class="sd"> &quot;&quot;&quot;</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">tag</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The Tag of the module</span>
<span class="sd"> :type: :class:`~windows.generated_def.winstructs.SymTagEnum`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SymTagEnum</span><span class="o">.</span><span class="n">mapper</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">Tag</span><span class="p">]</span>
<span class="k">def</span> <span class="fm">__int__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;An alias for ``addr``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">addr</span>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The fullname of the symbol in the windbg format ``mod!sym+displacement``&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">displacement</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="si">{self.module.name}</span><span class="s2">!</span><span class="si">{self.name}</span><span class="s2">+</span><span class="si">{self.displacement:#x}</span><span class="s2">&quot;</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="bp">self</span><span class="p">)</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="si">{self.module.name}</span><span class="s2">!</span><span class="si">{self.name}</span><span class="s2">&quot;</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="bp">self</span><span class="p">)</span>
<span class="k">def</span> <span class="fm">__repr__</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">displacement</span><span class="p">:</span>
<span class="k">return</span> <span class="s1">&#39;&lt;</span><span class="si">{0}</span><span class="s1"> name=&quot;</span><span class="si">{1}</span><span class="s1">&quot; start=</span><span class="si">{2:#x}</span><span class="s1"> displacement=</span><span class="si">{3:#x}</span><span class="s1"> tag=</span><span class="si">{4}</span><span class="s1">&gt;&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</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="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">displacement</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tag</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="k">return</span> <span class="s1">&#39;&lt;</span><span class="si">{0}</span><span class="s1"> name=&quot;</span><span class="si">{1}</span><span class="s1">&quot; start=</span><span class="si">{2:#x}</span><span class="s1"> tag=</span><span class="si">{3}</span><span class="s1">&gt;&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</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="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tag</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<div class="viewcode-block" id="SymbolInfoA"><a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.SymbolInfoA">[docs]</a><span class="k">class</span> <span class="nc">SymbolInfoA</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SYMBOL_INFO</span><span class="p">,</span> <span class="n">SymbolInfoBase</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent a Symbol.</span>
<span class="sd"> This class in based on the class `SYMBOL_INFO &lt;https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/ns-dbghelp-symbol_info&gt;`_</span>
<span class="sd"> with the handling on displacement embeded into it.s</span>
<span class="sd"> Exemple:</span>
<span class="sd"> &gt;&gt;&gt; sh = windows.debug.symbols.VirtualSymbolHandler()</span>
<span class="sd"> &gt;&gt;&gt; mod = sh.load_file(r&quot;c:\windows\system32\kernelbase.dll&quot;)</span>
<span class="sd"> &gt;&gt;&gt; sym1 = sh[&quot;kernelbase!CreateFileW&quot;]</span>
<span class="sd"> &gt;&gt;&gt; sym2 = sh[int(sym1) + 3]</span>
<span class="sd"> &gt;&gt;&gt; sym2</span>
<span class="sd"> &lt;SymbolInfoA name=&quot;CreateFileW&quot; start=0x100f20b0 displacement=0x3 tag=SymTagPublicSymbol&gt;</span>
<span class="sd"> &gt;&gt;&gt; hex(sym2.start)</span>
<span class="sd"> &#39;0x100f20b0L&#39;</span>
<span class="sd"> &gt;&gt;&gt; hex(sym2.addr)</span>
<span class="sd"> &#39;0x100f20b3L&#39;</span>
<span class="sd"> &gt;&gt;&gt; hex(sym2.displacement)</span>
<span class="sd"> &#39;0x3L&#39;</span>
<span class="sd"> &gt;&gt;&gt; str(sym2)</span>
<span class="sd"> &#39;kernelbase!CreateFileW+0x3&#39;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">CHAR_TYPE</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CHAR</span></div>
<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="n">CHAR_TYPE</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">WCHAR</span>
<span class="c1"># We use the A Api in our code (for now)</span>
<span class="n">SymbolInfo</span> <span class="o">=</span> <span class="n">SymbolInfoA</span>
<span class="k">class</span> <span class="nc">SymbolType</span><span class="p">(</span><span class="nb">object</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">typeid</span><span class="p">,</span> <span class="n">modbase</span><span class="p">,</span> <span class="n">resolver</span><span class="p">):</span>
<span class="c1"># Inheritance ?</span>
<span class="bp">self</span><span class="o">.</span><span class="n">resolver</span> <span class="o">=</span> <span class="n">resolver</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_typeid</span> <span class="o">=</span> <span class="n">typeid</span> <span class="c1"># Kind of a handle. Different of typeid property.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">modbase</span> <span class="o">=</span> <span class="n">modbase</span>
<span class="k">def</span> <span class="nf">_get_type_info</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">typeinfo</span><span class="p">,</span> <span class="n">ires</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">ires</span>
<span class="k">if</span> <span class="n">res</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">TST_TYPE_RES_TYPE</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">typeinfo</span><span class="p">,</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">winproxy</span><span class="o">.</span><span class="n">SymGetTypeInfo</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resolver</span><span class="o">.</span><span class="n">handle</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="bp">self</span><span class="o">.</span><span class="n">_typeid</span><span class="p">,</span> <span class="n">typeinfo</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">res</span><span class="p">))</span>
<span class="k">if</span> <span class="n">ires</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="n">ires</span>
<span class="n">newres</span> <span class="o">=</span> <span class="n">res</span><span class="o">.</span><span class="n">value</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">LPWSTR</span><span class="p">):</span>
<span class="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">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>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">size</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_LENGTH</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">tag</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_SYMTAG</span><span class="p">)</span>
<span class="c1"># Diff type/typeid ?</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">type</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">new_typeid</span><span class="p">(</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_TYPE</span><span class="p">))</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">typeid</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">new_typeid</span><span class="p">(</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_TYPEID</span><span class="p">))</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">basetype</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BasicType</span><span class="o">.</span><span class="n">mapper</span><span class="p">[</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_BASETYPE</span><span class="p">)]</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">datakind</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DataKind</span><span class="o">.</span><span class="n">mapper</span><span class="p">[</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_DATAKIND</span><span class="p">)]</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">udtkind</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">UdtKind</span><span class="o">.</span><span class="n">mapper</span><span class="p">[</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_UDTKIND</span><span class="p">)]</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">offset</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_OFFSET</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">nb_children</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_CHILDRENCOUNT</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">children</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">nb_children</span>
<span class="k">class</span> <span class="nc">res_struct</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">Structure</span><span class="p">):</span>
<span class="n">_fields_</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;Count&quot;</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ULONG</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;Start&quot;</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ULONG</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;Types&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ULONG</span> <span class="o">*</span> <span class="n">count</span><span class="p">))]</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">res_struct</span><span class="p">()</span>
<span class="n">x</span><span class="o">.</span><span class="n">Count</span> <span class="o">=</span> <span class="n">count</span>
<span class="n">x</span><span class="o">.</span><span class="n">Start</span> <span class="o">=</span> <span class="mi">0</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_FINDCHILDREN</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
<span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">new_typeid</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span> <span class="k">for</span> <span class="n">ch</span> <span class="ow">in</span> <span class="n">x</span><span class="o">.</span><span class="n">Types</span><span class="p">]</span>
<span class="c1"># Constructor</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">from_symbol_info</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">syminfo</span><span class="p">,</span> <span class="n">resolver</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">syminfo</span><span class="o">.</span><span class="n">TypeIndex</span><span class="p">,</span> <span class="n">syminfo</span><span class="o">.</span><span class="n">ModBase</span><span class="p">,</span> <span class="n">resolver</span><span class="p">)</span>
<span class="c1"># Constructor</span>
<span class="k">def</span> <span class="nf">new_typeid</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">newtypeid</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)(</span><span class="n">newtypeid</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="bp">self</span><span class="o">.</span><span class="n">resolver</span><span class="p">)</span>
<span class="k">def</span> <span class="fm">__repr__</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">tag</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SymTagBaseType</span><span class="p">:</span>
<span class="k">return</span> <span class="s1">&#39;&lt;</span><span class="si">{0}</span><span class="s1"> &lt;basetype&gt; </span><span class="si">{1}</span><span class="s1">&gt;&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">basetype</span><span class="p">)</span>
<span class="k">return</span> <span class="s1">&#39;&lt;</span><span class="si">{0}</span><span class="s1"> name=&quot;</span><span class="si">{1}</span><span class="s1">&quot; tag=</span><span class="si">{2}</span><span class="s1">&gt;&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</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="bp">self</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
<div class="viewcode-block" id="SymbolModule"><a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.SymbolModule">[docs]</a><span class="k">class</span> <span class="nc">SymbolModule</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">IMAGEHLP_MODULE64</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent a loaded symbol module</span>
<span class="sd"> (see `MSDN IMAGEHLP_MODULE64 &lt;https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/ns-dbghelp-imagehlp_module64&gt;`_)</span>
<span class="sd"> .. note::</span>
<span class="sd"> This represent a module in the ``symbol space`` for symbol resolution.</span>
<span class="sd"> This can be completly virtual (particularly in the case of :class:`VirtualSymbolHandler`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Init on ctypes struct is not always called</span>
<span class="c1"># resolver should be set manually</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">resolver</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">resolver</span> <span class="o">=</span> <span class="n">resolver</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">addr</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The load address of the module&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">BaseOfImage</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="sd">&quot;&quot;&quot;The name of the module&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ModuleName</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">path</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The full path and file name of the file from which symbols were loaded.&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">LoadedImageName</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The type of module (:class:`~windows.generated_def.winstructs.SYM_TYPE`),</span>
<span class="sd"> which can be one of:</span>
<span class="sd"> =========== =========================</span>
<span class="sd"> SymCoff COFF symbols.</span>
<span class="sd"> SymCv CodeView symbols.</span>
<span class="sd"> SymDeferred Symbol loading deferred.</span>
<span class="sd"> SymDia DIA symbols.</span>
<span class="sd"> SymExport Symbols generated from a DLL export table.</span>
<span class="sd"> SymNone No symbols are loaded.</span>
<span class="sd"> SymPdb PDB symbols.</span>
<span class="sd"> SymSym .sym file.</span>
<span class="sd"> SymVirtual The virtual module created by SymLoadModuleEx with SLMFLAG_VIRTUAL.</span>
<span class="sd"> =========== =========================</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">SymType</span>
<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="sd">&quot;&quot;&quot;The local path of the loaded PDB if present</span>
<span class="sd"> Exemple:</span>
<span class="sd"> &gt;&gt;&gt; sh = windows.debug.symbols.VirtualSymbolHandler()</span>
<span class="sd"> &gt;&gt;&gt; mod = sh.load_file(r&quot;c:\windows\system32\kernelbase.dll&quot;)</span>
<span class="sd"> &gt;&gt;&gt; mod.pdb</span>
<span class="sd"> &#39;d:\\symbols\\wkernelbase.pdb\\017FA9C5278235B7E6BFBA74A9A5AAD91\\wkernelbase.pdb&#39;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">LoadedPdbName</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">LoadedPdbName</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">LoadedPdbName</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">LoadedPdbName</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">pdb_basename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">LoadedPdbName</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">b</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="k">return</span> <span class="s1">&#39;&lt;</span><span class="si">{0}</span><span class="s1"> name=&quot;</span><span class="si">{1}</span><span class="s1">&quot; type=</span><span class="si">{2}</span><span class="s1"> pdb=&quot;</span><span class="si">{3}</span><span class="s1">&quot; addr=</span><span class="si">{4:#x}</span><span class="s1">&gt;&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</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="bp">self</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">value</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">pdb_basename</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">addr</span><span class="p">)</span></div>
<span class="c1"># https://docs.microsoft.com/en-us/windows/win32/debug/symbol-handler-initialization</span>
<span class="k">class</span> <span class="nc">SymbolHandler</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Base class of symbol handler&quot;&quot;&quot;</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">handle</span><span class="p">,</span> <span class="n">search_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">invade_process</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="c1"># https://docs.microsoft.com/en-us/windows/desktop/api/dbghelp/nf-dbghelp-syminitialize</span>
<span class="c1"># This value should be unique and nonzero, but need not be a process handle.</span>
<span class="c1"># be sure to use the correct handle.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">handle</span> <span class="c1">#: The handle of the symbol handler</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">engine</span><span class="o">.</span><span class="n">options_already_setup</span><span class="p">:</span>
<span class="n">engine</span><span class="o">.</span><span class="n">set_options</span><span class="p">(</span><span class="n">DEFAULT_DBG_OPTION</span><span class="p">)</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">SymInitialize</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">search_path</span><span class="p">,</span> <span class="n">invade_process</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">load_module</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">file_handle</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">addr</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">size</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="kc">None</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Load a module at a given ``addr``. The module to load can be pass via a ``file_handle``</span>
<span class="sd"> or the direct ``path`` of the file to load.</span>
<span class="sd"> :return: :class:`SymbolModule` -- The loaded module</span>
<span class="sd"> .. note::</span>
<span class="sd"> The logic of ``SymLoadModuleEx`` seems somewhat strange about the naming of the loaded module.</span>
<span class="sd"> A custom module ``name`` is only taken into account if the file is passed via a File handle.</span>
<span class="sd"> To make it more intuitive, if this function is call with a ``path`` and ``name`` and no ``file_handle``,</span>
<span class="sd"> it will open the path and directly call ``SymLoadModuleEx`` with a file handle and a name.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Is that a bug in SymLoadModuleEx ?</span>
<span class="c1"># To get a custom name for a module it use &quot;path&quot;</span>
<span class="c1"># So we need to use file_handle and set a custom path</span>
<span class="c1"># ! BUT it means we cannot get a custom name for a module where the path is not explicit and need to be searched</span>
<span class="k">if</span> <span class="n">name</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">file_handle</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="n">file_handle</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">get_handle_from_file</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
<span class="n">path</span> <span class="o">=</span> <span class="n">name</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="k">pass</span>
<span class="c1"># Expect a-string</span>
<span class="n">path</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">raw_encode</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">load_addr</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">SymLoadModuleEx</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">file_handle</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">name</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">data</span><span class="p">,</span> <span class="n">flags</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="c1"># if e.winerror == 0:</span>
<span class="c1"># Already loaded ?</span>
<span class="c1"># What if someone try to load another PE at the same BaseOfDll ?</span>
<span class="c1"># return BaseOfDll</span>
<span class="k">raise</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_module</span><span class="p">(</span><span class="n">load_addr</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">load_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">addr</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">size</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="kc">None</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Load the module ``path`` at ``addr``</span>
<span class="sd"> :return: :class:`SymbolModule` -- The loaded module</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">load_module</span><span class="p">(</span><span class="n">path</span><span class="o">=</span><span class="n">path</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">addr</span><span class="o">=</span><span class="n">addr</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">size</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">flags</span><span class="o">=</span><span class="n">flags</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">unload</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="sd">&quot;&quot;&quot;Unload the module at ``addr``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">SymUnloadModule64</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="nd">@staticmethod</span>
<span class="nd">@ctypes</span><span class="o">.</span><span class="n">WINFUNCTYPE</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">BOOL</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PCSTR</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD64</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">py_object</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">modules_aggregator</span><span class="p">(</span><span class="n">modname</span><span class="p">,</span> <span class="n">modaddr</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
<span class="n">ctx</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">modaddr</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">modules</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The list of loaded modules</span>
<span class="sd"> :return: [:class:`SymbolModule`] -- A list of modules</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">res</span> <span class="o">=</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">SymEnumerateModules64</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="bp">self</span><span class="o">.</span><span class="n">modules_aggregator</span><span class="p">,</span> <span class="n">res</span><span class="p">)</span>
<span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">get_module</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span> <span class="k">for</span> <span class="n">addr</span> <span class="ow">in</span> <span class="n">res</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">get_module</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">base</span><span class="p">):</span>
<span class="n">modinfo</span> <span class="o">=</span> <span class="n">SymbolModule</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="n">modinfo</span><span class="o">.</span><span class="n">SizeOfStruct</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">modinfo</span><span class="p">)</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">SymGetModuleInfo64</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">base</span><span class="p">,</span> <span class="n">modinfo</span><span class="p">)</span>
<span class="k">return</span> <span class="n">modinfo</span>
<span class="k">def</span> <span class="nf">symbol_and_displacement_from_address</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">displacement</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="n">max_len_size</span> <span class="o">=</span> <span class="mh">0x1000</span>
<span class="n">full_size</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">SymbolInfo</span><span class="p">)</span> <span class="o">+</span> <span class="p">(</span><span class="n">max_len_size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">buff</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">SymbolInfo</span><span class="p">)(</span><span class="n">size</span><span class="o">=</span><span class="n">full_size</span><span class="p">)</span>
<span class="n">sym</span> <span class="o">=</span> <span class="n">buff</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">sym</span><span class="o">.</span><span class="n">SizeOfStruct</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">SymbolInfo</span><span class="p">)</span>
<span class="n">sym</span><span class="o">.</span><span class="n">MaxNameLen</span> <span class="o">=</span> <span class="n">max_len_size</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">SymFromAddr</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">displacement</span><span class="p">,</span> <span class="n">buff</span><span class="p">)</span> <span class="c1"># SymFromAddrW ?</span>
<span class="n">sym</span><span class="o">.</span><span class="n">resolver</span> <span class="o">=</span> <span class="bp">self</span>
<span class="n">sym</span><span class="o">.</span><span class="n">displacement</span> <span class="o">=</span> <span class="n">displacement</span><span class="o">.</span><span class="n">value</span>
<span class="k">return</span> <span class="n">sym</span>
<span class="k">def</span> <span class="nf">symbol_from_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="n">max_len_size</span> <span class="o">=</span> <span class="mh">0x1000</span>
<span class="n">full_size</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">SymbolInfo</span><span class="p">)</span> <span class="o">+</span> <span class="p">(</span><span class="n">max_len_size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">buff</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">SymbolInfo</span><span class="p">)(</span><span class="n">size</span><span class="o">=</span><span class="n">full_size</span><span class="p">)</span>
<span class="n">sym</span> <span class="o">=</span> <span class="n">buff</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">sym</span><span class="o">.</span><span class="n">SizeOfStruct</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">SymbolInfo</span><span class="p">)</span>
<span class="n">sym</span><span class="o">.</span><span class="n">MaxNameLen</span> <span class="o">=</span> <span class="n">max_len_size</span>
<span class="c1"># Expect a-string</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">raw_encode</span><span class="p">(</span><span class="n">name</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">SymFromName</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">name</span><span class="p">,</span> <span class="n">buff</span><span class="p">)</span>
<span class="n">sym</span><span class="o">.</span><span class="n">resolver</span> <span class="o">=</span> <span class="bp">self</span>
<span class="n">sym</span><span class="o">.</span><span class="n">displacement</span> <span class="o">=</span> <span class="mi">0</span>
<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="sd">&quot;&quot;&quot;Resolve ``name_or_addr``.</span>
<span class="sd"> If its an int -&gt; Return the :class:`SymbolInfo` at the address.</span>
<span class="sd"> If its a string -&gt; Return the :class:`SymbolInfo` corresponding to the symbol name</span>
<span class="sd"> :return: :class:`SymbolInfo`</span>
<span class="sd"> .. note::</span>
<span class="sd"> ``__getitem__`` is an alias for ``resolve()``</span>
<span class="sd"> Exemple:</span>
<span class="sd"> &gt;&gt;&gt; sh = windows.debug.symbols.VirtualSymbolHandler()</span>
<span class="sd"> &gt;&gt;&gt; mod = sh.load_file(r&quot;c:\windows\system32\kernelbase.dll&quot;)</span>
<span class="sd"> &gt;&gt;&gt; mod</span>
<span class="sd"> &lt;SymbolModule name=&quot;kernelbase&quot; type=SymPdb pdb=&quot;wkernelbase.pdb&quot; addr=0x10000000&gt;</span>
<span class="sd"> &gt;&gt;&gt; sh.resolve(&quot;kernelbase!CreateFileInternal&quot;)</span>
<span class="sd"> &lt;SymbolInfoA name=&quot;CreateFileInternal&quot; addr=0x100f2120 tag=SymTagFunction&gt;</span>
<span class="sd"> &gt;&gt;&gt; sh[0x100f2042]</span>
<span class="sd"> &lt;SymbolInfoA name=&quot;ReadFile&quot; addr=0x100f1ee0 displacement=0x162 tag=SymTagFunction&gt;</span>
<span class="sd"> &gt;&gt;&gt; str(sh[0x100f2042])</span>
<span class="sd"> &#39;kernelbase!ReadFile+0x162&#39;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Only returns None if symbol is not Found ?</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">name_or_addr</span><span class="p">,</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">anybuff</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">symbol_from_name</span><span class="p">(</span><span class="n">name_or_addr</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">symbol_and_displacement_from_address</span><span class="p">(</span><span class="n">name_or_addr</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">!=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_MOD_NOT_FOUND</span><span class="p">:</span>
<span class="k">raise</span>
<span class="c1"># We could not resolve and address -&gt; return None</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="fm">__getitem__</span> <span class="o">=</span> <span class="n">resolve</span>
<span class="sd">&quot;&quot;&quot;Alias to resolve for simpler use&quot;&quot;&quot;</span>
<span class="nd">@staticmethod</span>
<span class="nd">@ctypes</span><span class="o">.</span><span class="n">WINFUNCTYPE</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">BOOL</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">SymbolInfo</span><span class="p">),</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ULONG</span> <span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">py_object</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">simple_aggregator</span><span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
<span class="n">sym</span> <span class="o">=</span> <span class="n">info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">fullsize</span> <span class="o">=</span> <span class="n">sym</span><span class="o">.</span><span class="n">SizeOfStruct</span> <span class="o">+</span> <span class="n">sym</span><span class="o">.</span><span class="n">NameLen</span>
<span class="n">cpy</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">SymbolInfo</span><span class="p">)(</span><span class="n">size</span><span class="o">=</span><span class="n">fullsize</span><span class="p">)</span>
<span class="n">ctypes</span><span class="o">.</span><span class="n">memmove</span><span class="p">(</span><span class="n">cpy</span><span class="p">,</span> <span class="n">info</span><span class="p">,</span> <span class="n">fullsize</span><span class="p">)</span>
<span class="n">ctx</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cpy</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<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="sd">&quot;&quot;&quot;Search the symbols matching ``mask`` (``Windbg`` like).</span>
<span class="sd"> :return: [:class:`SymbolInfo`] -- A list of :class:`SymbolInfo`</span>
<span class="sd"> &gt;&gt;&gt; sh = windows.debug.symbols.VirtualSymbolHandler()</span>
<span class="sd"> &gt;&gt;&gt; mod = sh.load_file(r&quot;c:\windows\system32\kernelbase.dll&quot;)</span>
<span class="sd"> &gt;&gt;&gt; sh.search(&quot;kernelbase!CreateFile*&quot;)</span>
<span class="sd"> [&lt;SymbolInfoA name=&quot;CreateFileInternal&quot; addr=0x100f2120 tag=SymTagFunction&gt;,</span>
<span class="sd"> &lt;SymbolInfoA name=&quot;CreateFileMoniker&quot; addr=0x10117d80 tag=SymTagFunction&gt;,</span>
<span class="sd"> &lt;SymbolInfoA name=&quot;CreateFile2&quot; addr=0x1011e690 tag=SymTagFunction&gt;,</span>
<span class="sd"> ...]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span> <span class="n">callback</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">callback</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simple_aggregator</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">callback</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">gdef</span><span class="o">.</span><span class="n">BOOL</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">SymbolInfo</span><span class="p">),</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ULONG</span> <span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">py_object</span><span class="p">)(</span><span class="n">callback</span><span class="p">)</span>
<span class="n">addr</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="s2">&quot;addr&quot;</span><span class="p">,</span> <span class="n">mod</span><span class="p">)</span> <span class="c1"># Retrieve mod.addr, else us the value directly</span>
<span class="c1"># Expect A-string</span>
<span class="n">mask</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">raw_encode</span><span class="p">(</span><span class="n">mask</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">SymSearch</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">DWORD64</span><span class="p">(</span><span class="n">addr</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">mask</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">res</span><span class="p">,</span> <span class="n">options</span><span class="p">)</span>
<span class="k">for</span> <span class="n">sym</span> <span class="ow">in</span> <span class="n">res</span><span class="p">:</span>
<span class="n">sym</span><span class="o">.</span><span class="n">resolver</span> <span class="o">=</span> <span class="bp">self</span>
<span class="n">sym</span><span class="o">.</span><span class="n">displacement</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">return</span> <span class="n">res</span>
<span class="k">def</span> <span class="nf">get_symbols</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">callback</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span> <span class="n">callback</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">callback</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simple_aggregator</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">callback</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">gdef</span><span class="o">.</span><span class="n">BOOL</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">SymbolInfo</span><span class="p">),</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ULONG</span> <span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">py_object</span><span class="p">)(</span><span class="n">callback</span><span class="p">)</span>
<span class="k">try</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">SymEnumSymbolsForAddr</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">callback</span><span class="p">,</span> <span class="n">res</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_MOD_NOT_FOUND</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[]</span>
<span class="k">raise</span>
<span class="k">for</span> <span class="n">sym</span> <span class="ow">in</span> <span class="n">res</span><span class="p">:</span>
<span class="n">sym</span><span class="o">.</span><span class="n">resolver</span> <span class="o">=</span> <span class="bp">self</span>
<span class="n">sym</span><span class="o">.</span><span class="n">displacement</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">return</span> <span class="n">res</span>
<span class="c1"># Type stuff</span>
<span class="k">def</span> <span class="nf">get_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">mod</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="n">max_len_size</span> <span class="o">=</span> <span class="mh">0x1000</span>
<span class="n">full_size</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">SymbolInfo</span><span class="p">)</span> <span class="o">+</span> <span class="p">(</span><span class="n">max_len_size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">buff</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">SymbolInfo</span><span class="p">)(</span><span class="n">size</span><span class="o">=</span><span class="n">full_size</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="o">.</span><span class="n">SizeOfStruct</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">SymbolInfo</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="o">.</span><span class="n">MaxNameLen</span> <span class="o">=</span> <span class="n">max_len_size</span>
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">SymGetTypeFromName</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"># TODO: mets de l&#39;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>
<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">resolver</span><span class="p">,</span> <span class="n">process</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">thread</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">resolver</span> <span class="o">=</span> <span class="n">resolver</span>
<span class="k">if</span> <span class="n">process</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">thread</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">&quot;At least a process or thread must be provided&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">process</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">process</span> <span class="o">=</span> <span class="n">thread</span><span class="o">.</span><span class="n">owner</span>
<span class="bp">self</span><span class="o">.</span><span class="n">process</span> <span class="o">=</span> <span class="n">process</span>
<span class="bp">self</span><span class="o">.</span><span class="n">thread</span> <span class="o">=</span> <span class="n">thread</span>
<span class="bp">self</span><span class="o">.</span><span class="n">context</span> <span class="o">=</span> <span class="n">context</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="n">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">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;StackWalking 64b does not seems to works from 32b process&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_stack_frame_generator</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">ctx</span><span class="p">,</span> <span class="n">machine</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_effective_context_and_machine</span><span class="p">()</span>
<span class="n">frame</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_setup_initial_frame_from_context</span><span class="p">(</span><span class="n">ctx</span><span class="p">,</span> <span class="n">machine</span><span class="p">)</span>
<span class="n">thread_handle</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">thread</span><span class="o">.</span><span class="n">handle</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">thread</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</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">StackWalkEx</span><span class="p">(</span><span class="n">machine</span><span class="p">,</span>
<span class="c1"># dbg.current_process.handle,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">resolver</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span>
<span class="n">thread_handle</span><span class="p">,</span>
<span class="c1"># 0,</span>
<span class="n">frame</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">ctx</span><span class="p">),</span>
<span class="kc">None</span><span class="p">,</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">resolve</span><span class="p">(</span><span class="n">winproxy</span><span class="o">.</span><span class="n">SymFunctionTableAccess64</span><span class="p">),</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">resolve</span><span class="p">(</span><span class="n">winproxy</span><span class="o">.</span><span class="n">SymGetModuleBase64</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="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span><span class="p">:</span>
<span class="k">return</span> <span class="c1"># No_ERROR -&gt; end of stack walking</span>
<span class="k">raise</span>
<span class="k">yield</span> <span class="nb">type</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> <span class="c1"># Make a copy ?</span>
<span class="k">def</span> <span class="fm">__iter__</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">_stack_frame_generator</span><span class="p">()</span>
<span class="c1"># Autorise to force the retrieving of 32b stack when code is currently on 64b code ?</span>
<span class="k">def</span> <span class="nf">_get_effective_context_and_machine</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">ctx</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">thread</span><span class="o">.</span><span class="n">context</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">process</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="c1"># Process is 32b, so the context is inevitably x86</span>
<span class="k">return</span> <span class="p">(</span><span class="n">ctx</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="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="p">:</span>
<span class="c1"># If we are 32b, we will only be able to handle x86 stack</span>
<span class="c1"># ctx is obligatory a 32b one, as the case us32/target64 is handled</span>
<span class="c1"># in __init__ with a NotImplementedError</span>
<span class="k">return</span> <span class="p">(</span><span class="n">ctx</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">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="c1"># Process is 64b, so the context is inevitably x64</span>
<span class="k">return</span> <span class="p">(</span><span class="n">ctx</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="c1"># Thing get a little more complicated here :)</span>
<span class="c1"># We are a 64b process and target is 32b.</span>
<span class="c1"># So we must find-out if we are in 32 or 64b world at the moment.</span>
<span class="c1"># The context_syswow.SegCS give us the information</span>
<span class="c1"># The context32.SegCs would be always 32</span>
<span class="n">ctxsyswow</span> <span class="o">=</span> <span class="n">dbg</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">context_syswow</span>
<span class="k">if</span> <span class="n">ctxsyswow</span><span class="o">.</span><span class="n">SegCs</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CS_USER_32B</span><span class="p">:</span>
<span class="k">return</span> <span class="p">(</span><span class="n">ctx</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="k">return</span> <span class="p">(</span><span class="n">ctxsyswow</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="k">def</span> <span class="nf">_setup_initial_frame_from_context</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">,</span> <span class="n">machine</span><span class="p">):</span>
<span class="n">frame</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">STACKFRAME_EX</span><span class="p">()</span>
<span class="n">frame</span><span class="o">.</span><span class="n">AddrPC</span><span class="o">.</span><span class="n">Mode</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">AddrModeFlat</span>
<span class="n">frame</span><span class="o">.</span><span class="n">AddrFrame</span><span class="o">.</span><span class="n">Mode</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">AddrModeFlat</span>
<span class="n">frame</span><span class="o">.</span><span class="n">AddrStack</span><span class="o">.</span><span class="n">Mode</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">AddrModeFlat</span>
<span class="n">frame</span><span class="o">.</span><span class="n">AddrPC</span><span class="o">.</span><span class="n">Offset</span> <span class="o">=</span> <span class="n">ctx</span><span class="o">.</span><span class="n">pc</span>
<span class="n">frame</span><span class="o">.</span><span class="n">AddrStack</span><span class="o">.</span><span class="n">Offset</span> <span class="o">=</span> <span class="n">ctx</span><span class="o">.</span><span class="n">sp</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="n">frame</span><span class="o">.</span><span class="n">AddrFrame</span><span class="o">.</span><span class="n">Offset</span> <span class="o">=</span> <span class="n">ctx</span><span class="o">.</span><span class="n">Ebp</span>
<span class="c1"># Need RBP on 64b ?</span>
<span class="k">return</span> <span class="n">frame</span>
<div class="viewcode-block" id="VirtualSymbolHandler"><a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.VirtualSymbolHandler">[docs]</a><span class="k">class</span> <span class="nc">VirtualSymbolHandler</span><span class="p">(</span><span class="n">SymbolHandler</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A SymbolHandler where its handle is not a valid process handle</span>
<span class="sd"> Allow to create/resolve symbol in a &#39;virtual&#39; process</span>
<span class="sd"> But all API needing a real process handle will fail</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">VIRTUAL_HANDLER_COUNTER</span> <span class="o">=</span> <span class="n">itertools</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="mh">0x11223344</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">search_path</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="n">handle</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">VIRTUAL_HANDLER_COUNTER</span><span class="p">)</span>
<span class="nb">super</span><span class="p">(</span><span class="n">VirtualSymbolHandler</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">search_path</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
<span class="c1"># The VirtualSymbolHandler is not based on an existing process</span>
<span class="c1"># So load() in its simplest for should just take the path of the file to load</span>
<span class="n">load</span> <span class="o">=</span> <span class="n">SymbolHandler</span><span class="o">.</span><span class="n">load_file</span>
<span class="sd">&quot;&quot;&quot;An alias for :func:`VirtualSymbolHandler.load_file`&quot;&quot;&quot;</span>
<div class="viewcode-block" id="VirtualSymbolHandler.refresh"><a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.VirtualSymbolHandler.refresh">[docs]</a> <span class="k">def</span> <span class="nf">refresh</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Do nothing for a :class:`VirtualSymbolHandler`&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="kc">False</span></div></div>
<div class="viewcode-block" id="ProcessSymbolHandler"><a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.ProcessSymbolHandler">[docs]</a><span class="k">class</span> <span class="nc">ProcessSymbolHandler</span><span class="p">(</span><span class="n">SymbolHandler</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">process</span><span class="p">,</span> <span class="n">search_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">invade_process</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">ProcessSymbolHandler</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">process</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">search_path</span><span class="p">,</span> <span class="n">invade_process</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">process</span>
<span class="c1"># The ProcessSymbolHandler is based on an existing process</span>
<span class="c1"># So load() in its simplest form should be able to load the symbol for an existing</span>
<span class="c1"># module that is already loaded</span>
<span class="c1"># Question: should be able to load other module at other address ?</span>
<div class="viewcode-block" id="ProcessSymbolHandler.load"><a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.ProcessSymbolHandler.load">[docs]</a> <span class="k">def</span> <span class="nf">load</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="sd">&quot;&quot;&quot;Load the :class:`SymbolModule` associated with the loaded module ``name`` (as found in the PEB)</span>
<span class="sd"> :return: :class:`SymbolModule`</span>
<span class="sd"> Exemple:</span>
<span class="sd"> &gt;&gt;&gt; sh = windows.debug.symbols.ProcessSymbolHandler(windows.test.pop_proc_64())</span>
<span class="sd"> &lt;windows.debug.symbols.ProcessSymbolHandler object at 0x033A2C30&gt;</span>
<span class="sd"> &gt;&gt;&gt; sh</span>
<span class="sd"> &lt;windows.debug.symbols.ProcessSymbolHandler object at 0x033A2C30&gt;</span>
<span class="sd"> &gt;&gt;&gt; sh.load(&quot;kernelbase.dll&quot;)</span>
<span class="sd"> &lt;SymbolModule name=&quot;kernelbase&quot; type=SymDeferred pdb=&quot;&quot; addr=0x7ffb5b090000&gt;</span>
<span class="sd"> &gt;&gt;&gt; sh[&quot;kernelbase!CreateProcessA&quot;]</span>
<span class="sd"> &lt;SymbolInfoA name=&quot;CreateProcessA&quot; start=0x7ffb5b2371f0 tag=SymTagPublicSymbol&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">mods</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">peb</span><span class="o">.</span><span class="n">modules</span> <span class="k">if</span> <span class="n">x</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="n">name</span><span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">mods</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Could not find module &lt;</span><span class="si">{0}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">mods</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="c1"># Load all if multiple match ?</span>
<span class="n">mod</span> <span class="o">=</span> <span class="n">mods</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">load_module</span><span class="p">(</span><span class="n">addr</span><span class="o">=</span><span class="n">mod</span><span class="o">.</span><span class="n">baseaddr</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">mod</span><span class="o">.</span><span class="n">fullname</span><span class="p">)</span></div>
<div class="viewcode-block" id="ProcessSymbolHandler.refresh"><a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.ProcessSymbolHandler.refresh">[docs]</a> <span class="k">def</span> <span class="nf">refresh</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Update the list of loaded modules to match the modules present in the target process</span>
<span class="sd"> .. note::</span>
<span class="sd"> This function only call `SymRefreshModuleList &lt;https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/nf-dbghelp-symrefreshmodulelist&gt;`_ for now.</span>
<span class="sd"> It seems that this function do not handle refreshing a 64b target from a 32b python</span>
<span class="sd"> Also, on a 32b target from a 64b python it seems to only load symbols for the 64b modules (ntdll + syswow dll)</span>
<span class="sd"> Exemple:</span>
<span class="sd"> &gt;&gt;&gt; sh = windows.debug.symbols.ProcessSymbolHandler(windows.test.pop_proc_64())</span>
<span class="sd"> &gt;&gt;&gt; sh.modules</span>
<span class="sd"> []</span>
<span class="sd"> &gt;&gt;&gt; sh.refresh()</span>
<span class="sd"> 44</span>
<span class="sd"> &gt;&gt;&gt; sh.modules</span>
<span class="sd"> [&lt;SymbolModule name=&quot;notepad&quot; type=SymDeferred pdb=&quot;&quot; addr=0x7ff772b80000&gt;,</span>
<span class="sd"> &lt;SymbolModule name=&quot;ntdll&quot; type=SymDeferred pdb=&quot;&quot; addr=0x7ffb5d860000&gt;,</span>
<span class="sd"> &lt;SymbolModule name=&quot;KERNEL32&quot; type=SymDeferred pdb=&quot;&quot; addr=0x7ffb5bb90000&gt;,</span>
<span class="sd"> &lt;SymbolModule name=&quot;KERNELBASE&quot; type=SymDeferred pdb=&quot;&quot; addr=0x7ffb5b090000&gt;,</span>
<span class="sd"> ...]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">SymRefreshModuleList</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">stackwalk</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="SymbolEngine"><a class="viewcode-back" href="../../../debug.html#windows.debug.symbols.SymbolEngine">[docs]</a><span class="k">class</span> <span class="nc">SymbolEngine</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent the global symbol engine. Just a proxy to get/set global engine options</span>
<span class="sd"> Its instance can be accessed using ``windows.debug.symbols.engine``</span>
<span class="sd"> Exemple:</span>
<span class="sd"> &gt;&gt;&gt; windows.debug.symbols.engine.options</span>
<span class="sd"> 6L</span>
<span class="sd"> &gt;&gt;&gt; windows.debug.symbols.engine.options = gdef.SYMOPT_UNDNAME</span>
<span class="sd"> &gt;&gt;&gt; windows.debug.symbols.engine.options</span>
<span class="sd"> 2L</span>
<span class="sd"> &quot;&quot;&quot;</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="c1"># use to now if we need to call the setup of options</span>
<span class="c1"># At the first DbgHelp call</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options_already_setup</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">set_options</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">options</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options_already_setup</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">SymSetOptions</span><span class="p">(</span><span class="n">options</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">get_options</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">SymGetOptions</span><span class="p">()</span>
<span class="n">options</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_options</span><span class="p">,</span> <span class="n">set_options</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The options of the Symbol engine</span>
<span class="sd"> (`see options &lt;https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/nf-dbghelp-symsetoptions#parameters&gt;`_)</span>
<span class="sd"> .. note::</span>
<span class="sd"> Default options are: ``gdef.SYMOPT_DEFERRED_LOADS + gdef.SYMOPT_UNDNAME``</span>
<span class="sd"> &quot;&quot;&quot;</span></div>
<span class="n">engine</span> <span class="o">=</span> <span class="n">SymbolEngine</span><span class="p">()</span>
<span class="sd">&quot;&quot;&quot;The instance of the :class:`SymbolEngine`&quot;&quot;&quot;</span>
<span class="n">TST_TYPE_RES_TYPE</span> <span class="o">=</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> <span class="n">gdef</span><span class="o">.</span><span class="n">LPWSTR</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">TI_GET_LENGTH</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ULONG64</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">TI_GET_ADDRESS</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ULONG64</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">TI_GTIEX_REQS_VALID</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ULONG64</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">TI_GET_SYMTAG</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SymTagEnum</span><span class="p">,</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+19 -16
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.generated_def.flag &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.generated_def.flag &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -44,13 +47,13 @@
<div class="viewcode-block" id="Flag"><a class="viewcode-back" href="../../../generated.html#windows.generated_def.Flag">[docs]</a><span class="k">class</span> <span class="nc">Flag</span><span class="p">(</span><span class="n">long</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Flag</span><span class="p">,</span> <span class="bp">cls</span><span class="p">)</span><span class="o">.</span><span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</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">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="si">{0}</span><span class="s2">(</span><span class="si">{1:#x}</span><span class="s2">)&quot;</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="bp">self</span><span class="p">)</span>
<span class="c1"># Custom __str__ removed for multiple reason</span>
@@ -66,15 +69,15 @@
<span class="k">class</span> <span class="nc">StrFlag</span><span class="p">(</span><span class="nb">str</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="bp">cls</span><span class="p">):</span>
<span class="k">return</span> <span class="n">value</span>
<span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">StrFlag</span><span class="p">,</span> <span class="bp">cls</span><span class="p">)</span><span class="o">.</span><span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</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">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="si">{0}</span><span class="s2">(</span><span class="si">{1}</span><span class="s2">)&quot;</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="nb">str</span><span class="o">.</span><span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
<span class="c1"># __str__ = __repr__</span>
@@ -91,20 +94,20 @@
<span class="k">class</span> <span class="nc">FlagMapper</span><span class="p">(</span><span class="nb">dict</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">values</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="o">*</span><span class="n">values</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="n">x</span><span class="p">:</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">values</span><span class="p">})</span>
<span class="k">def</span> <span class="nf">__missing__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__missing__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
<span class="k">return</span> <span class="n">key</span>
<span class="k">class</span> <span class="nc">FlagExatractor</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">values</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">attr</span><span class="p">,</span> <span class="n">values</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">attr</span> <span class="o">=</span> <span class="n">attr</span>
<span class="bp">self</span><span class="o">.</span><span class="n">attrsize</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">size</span> <span class="o">*</span> <span class="mi">8</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mapper</span> <span class="o">=</span> <span class="n">FlagMapper</span><span class="p">(</span><span class="o">*</span><span class="n">values</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__get__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="nb">type</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__get__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="nb">type</span><span class="p">):</span>
<span class="k">if</span> <span class="n">obj</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span>
<span class="c1"># Retrieve the real value</span>
@@ -143,13 +146,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
File diff suppressed because one or more lines are too long
+17 -14
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.hooks &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.hooks &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -42,10 +45,10 @@
<span class="kn">import</span> <span class="nn">windows</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">from</span> <span class="nn">.</span> <span class="k">import</span> <span class="n">native_exec</span>
<span class="kn">from</span> <span class="nn">.generated_def</span> <span class="k">import</span> <span class="n">winfuncs</span>
<span class="kn">from</span> <span class="nn">.generated_def.windef</span> <span class="k">import</span> <span class="n">PAGE_EXECUTE_READWRITE</span>
<span class="kn">from</span> <span class="nn">.generated_def.winstructs</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">native_exec</span>
<span class="kn">from</span> <span class="nn">.generated_def</span> <span class="kn">import</span> <span class="n">winfuncs</span>
<span class="kn">from</span> <span class="nn">.generated_def.windef</span> <span class="kn">import</span> <span class="n">PAGE_EXECUTE_READWRITE</span>
<span class="kn">from</span> <span class="nn">.generated_def.winstructs</span> <span class="kn">import</span> <span class="o">*</span>
<span class="c1"># TODO Not a big fan of importing &#39;meta&#39; every load</span>
<span class="c1"># Should do an Hook API that take the winproxy function (not generate every hook possible)</span>
@@ -54,10 +57,10 @@
<div class="viewcode-block" id="Callback"><a class="viewcode-back" href="../../iat_hook.html#windows.hooks.Callback">[docs]</a><span class="k">class</span> <span class="nc">Callback</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Give type information to hook callback&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">types</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="o">*</span><span class="n">types</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">types</span> <span class="o">=</span> <span class="n">types</span>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="n">func</span><span class="o">.</span><span class="n">_types_info</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span>
<span class="k">return</span> <span class="n">func</span></div>
@@ -65,7 +68,7 @@
<span class="k">class</span> <span class="nc">KnownCallback</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="n">types</span> <span class="o">=</span> <span class="p">()</span>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="n">func</span><span class="o">.</span><span class="n">_types_info</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span>
<span class="k">return</span> <span class="n">func</span>
@@ -91,7 +94,7 @@
<div class="viewcode-block" id="IATHook"><a class="viewcode-back" href="../../iat_hook.html#windows.hooks.IATHook">[docs]</a><span class="k">class</span> <span class="nc">IATHook</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Look at my hook &lt;3&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">IAT_entry</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">types</span><span class="o">=</span><span class="kc">None</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">IAT_entry</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">types</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">types</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">callback</span><span class="p">,</span> <span class="s2">&quot;_types_info&quot;</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Callback for IATHook has no type infomations&quot;</span><span class="p">)</span>
@@ -199,13 +202,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+10 -7
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.native_exec.cpuid &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.native_exec.cpuid &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -43,7 +46,7 @@
<span class="kn">import</span> <span class="nn">native_function</span>
<span class="kn">import</span> <span class="nn">simple_x86</span> <span class="k">as</span> <span class="nn">x86</span>
<span class="kn">import</span> <span class="nn">simple_x64</span> <span class="k">as</span> <span class="nn">x64</span>
<span class="kn">from</span> <span class="nn">windows.generated_def.winstructs</span> <span class="k">import</span> <span class="o">*</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="k">def</span> <span class="nf">_bitness</span><span class="p">():</span>
@@ -228,13 +231,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.native_exec.native_function &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.native_exec.native_function &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -45,8 +48,8 @@
<span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">import</span> <span class="nn">windows.winproxy</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="k">import</span> <span class="n">simple_x86</span> <span class="k">as</span> <span class="n">x86</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="k">import</span> <span class="n">simple_x64</span> <span class="k">as</span> <span class="n">x64</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">simple_x86</span> <span class="k">as</span> <span class="n">x86</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">simple_x64</span> <span class="k">as</span> <span class="n">x64</span>
<span class="k">class</span> <span class="nc">PyObj</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">Structure</span><span class="p">):</span>
@@ -61,7 +64,7 @@
<span class="c1"># Specific mmap class for code injection</span>
<span class="k">class</span> <span class="nc">MyMap</span><span class="p">(</span><span class="n">mmap</span><span class="o">.</span><span class="n">mmap</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot; A mmap that is never unmapped and that contains the page address &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwarg</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="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwarg</span><span class="p">):</span>
<span class="c1"># Get the page address by &#39;introspection&#39; of the C struct</span>
<span class="n">m</span> <span class="o">=</span> <span class="n">PyMmap</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">addr</span> <span class="o">=</span> <span class="n">m</span><span class="o">.</span><span class="n">ob_addr</span>
@@ -100,7 +103,7 @@
<span class="k">class</span> <span class="nc">CustomAllocator</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="n">int_size</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;32bit&#39;</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span> <span class="s1">&#39;64bit&#39;</span><span class="p">:</span> <span class="mi">8</span><span class="p">}</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">maps</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cur_offset</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cur_page_size</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># Force get_new_page on first request</span>
@@ -186,13 +189,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+32 -29
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.native_exec.simple_x86 &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.native_exec.simple_x86 &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -51,7 +54,7 @@
<span class="n">int_types</span> <span class="o">=</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">long</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">BitArray</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</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">bits</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">size</span><span class="p">,</span> <span class="n">bits</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="n">size</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">bits</span><span class="p">)</span> <span class="o">&gt;</span> <span class="n">size</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;size &gt; len(bits)&quot;</span><span class="p">)</span>
@@ -76,17 +79,17 @@
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
<span class="k">return</span> <span class="nb">bytearray</span><span class="p">((</span><span class="n">res</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">slice</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">slice</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">[</span><span class="nb">slice</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">__setitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">slice</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__setitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">slice</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">[</span><span class="nb">slice</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__add__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__add__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">BitArray</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">NotImplemented</span>
<span class="k">return</span> <span class="n">BitArray</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">+</span> <span class="n">other</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">array</span> <span class="o">+</span> <span class="n">other</span><span class="o">.</span><span class="n">array</span><span class="p">)</span>
@@ -114,10 +117,10 @@
<span class="k">class</span> <span class="nc">Prefix</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="n">PREFIX_VALUE</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">next</span><span class="o">=</span><span class="kc">None</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="nb">next</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="nb">next</span>
<span class="k">def</span> <span class="nf">__add__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__add__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)(</span><span class="n">other</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">get_code_py3</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@@ -308,7 +311,7 @@
<span class="c1"># Instruction Parameters</span>
<span class="k">class</span> <span class="nc">FixedRegister</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">register</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">register</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">reg</span> <span class="o">=</span> <span class="n">register</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">accept_arg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">instr_state</span><span class="p">):</span>
@@ -446,7 +449,7 @@
<span class="k">class</span> <span class="nc">ModRM</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sub_modrm</span><span class="p">,</span> <span class="n">accept_reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">has_direction_bit</span><span class="o">=</span><span class="kc">True</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">sub_modrm</span><span class="p">,</span> <span class="n">accept_reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">has_direction_bit</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">accept_reverse</span> <span class="o">=</span> <span class="n">accept_reverse</span>
<span class="bp">self</span><span class="o">.</span><span class="n">has_direction_bit</span> <span class="o">=</span> <span class="n">has_direction_bit</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sub</span> <span class="o">=</span> <span class="n">sub_modrm</span>
@@ -478,7 +481,7 @@
<span class="k">return</span> <span class="n">X86</span><span class="o">.</span><span class="n">is_reg</span><span class="p">(</span><span class="n">arg1</span><span class="p">)</span> <span class="ow">and</span> <span class="n">X86</span><span class="o">.</span><span class="n">is_reg</span><span class="p">(</span><span class="n">arg2</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">,</span> <span class="nb">reversed</span><span class="p">,</span> <span class="n">instr_state</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">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">,</span> <span class="nb">reversed</span><span class="p">,</span> <span class="n">instr_state</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mod</span> <span class="o">=</span> <span class="n">BitArray</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;11&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">X86</span><span class="o">.</span><span class="n">reg_size</span><span class="p">(</span><span class="n">arg1</span><span class="p">)</span> <span class="o">!=</span> <span class="n">X86</span><span class="o">.</span><span class="n">reg_size</span><span class="p">(</span><span class="n">arg2</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Register size mitmatch between </span><span class="si">{0}</span><span class="s2"> and </span><span class="si">{1}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">))</span>
@@ -494,7 +497,7 @@
<span class="k">def</span> <span class="nf">match</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">):</span>
<span class="k">return</span> <span class="n">X86</span><span class="o">.</span><span class="n">is_reg</span><span class="p">(</span><span class="n">arg1</span><span class="p">)</span> <span class="ow">and</span> <span class="n">X86</span><span class="o">.</span><span class="n">is_seg_reg</span><span class="p">(</span><span class="n">arg2</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">,</span> <span class="nb">reversed</span><span class="p">,</span> <span class="n">instr_state</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">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">,</span> <span class="nb">reversed</span><span class="p">,</span> <span class="n">instr_state</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mod</span> <span class="o">=</span> <span class="n">BitArray</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;11&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">rm</span> <span class="o">=</span> <span class="n">X86RegisterSelector</span><span class="o">.</span><span class="n">get_reg_bits</span><span class="p">(</span><span class="n">arg1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">reg</span> <span class="o">=</span> <span class="n">BitArray</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="n">x86_segment_selectors_number</span><span class="p">[</span><span class="n">arg2</span><span class="o">.</span><span class="n">upper</span><span class="p">()])</span>
@@ -513,7 +516,7 @@
<span class="k">if</span> <span class="n">X86</span><span class="o">.</span><span class="n">reg_size</span><span class="p">(</span><span class="n">regname</span><span class="p">)</span> <span class="o">==</span> <span class="mi">16</span><span class="p">:</span>
<span class="n">instr_state</span><span class="o">.</span><span class="n">prefixes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">OperandSizeOverride</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">,</span> <span class="nb">reversed</span><span class="p">,</span> <span class="n">instr_state</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">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">,</span> <span class="nb">reversed</span><span class="p">,</span> <span class="n">instr_state</span><span class="p">):</span>
<span class="c1"># ARG1 : REG</span>
<span class="c1"># ARG2 : prefix:[MEM]</span>
<span class="c1"># Handle prefix:</span>
@@ -594,7 +597,7 @@
<span class="k">class</span> <span class="nc">Slash</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="s2">&quot;No idea for the name: represent the modRM for single args + encoding in reg (/7 in cmp in man intel)&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">reg_num</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">reg_num</span><span class="p">):</span>
<span class="s2">&quot;reg = 7 for /7&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">reg</span> <span class="o">=</span> <span class="n">x86_regs</span><span class="p">[</span><span class="n">reg_num</span><span class="p">]</span>
@@ -609,7 +612,7 @@
<span class="k">return</span> <span class="n">arg_consum</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">value</span>
<span class="k">class</span> <span class="nc">ControlRegisterModRM</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">writecr</span> <span class="o">=</span> <span class="kc">False</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">writecr</span> <span class="o">=</span> <span class="kc">False</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">writecr</span> <span class="o">=</span> <span class="n">writecr</span>
<span class="k">def</span> <span class="nf">accept_arg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">instr_state</span><span class="p">):</span>
@@ -639,7 +642,7 @@
<span class="sd">&quot;&quot;&quot;Base class of instructions, use `encoding` to find a valid way to assemble the instruction&quot;&quot;&quot;</span>
<span class="n">encoding</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">initial_args</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="o">*</span><span class="n">initial_args</span><span class="p">):</span>
<span class="k">for</span> <span class="n">type_encoding</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">encoding</span><span class="p">:</span>
<span class="n">args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">initial_args</span><span class="p">)</span>
<span class="n">prefix</span> <span class="o">=</span> <span class="p">[]</span>
@@ -675,7 +678,7 @@
<span class="c1"># res += other</span>
<span class="c1"># return res</span>
<span class="k">def</span> <span class="nf">__mul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__mul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">int_types</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">NotImplemented</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">MultipleInstr</span><span class="p">()</span>
@@ -688,7 +691,7 @@
<span class="k">class</span> <span class="nc">DelayedJump</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A jump to a label :NAME&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">type</span><span class="p">,</span> <span class="n">label</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="nb">type</span><span class="p">,</span> <span class="n">label</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="nb">type</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label</span> <span class="o">=</span> <span class="n">label</span>
@@ -696,7 +699,7 @@
<span class="k">class</span> <span class="nc">JmpType</span><span class="p">(</span><span class="n">Instruction</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Dispatcher between a real jump or DelayedJump if parameters is a label&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="o">*</span><span class="n">initial_args</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="o">*</span><span class="n">initial_args</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">initial_args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">arg</span> <span class="o">=</span> <span class="n">initial_args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">and</span> <span class="n">arg</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;:&quot;</span><span class="p">:</span>
@@ -709,7 +712,7 @@
<span class="sd"> Sub a specified size from the size to jump to `emulate` a jump from the begin address of the instruction&quot;&quot;&quot;</span>
<span class="n">accept_as_Ximmediat</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sub</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">sub</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sub</span> <span class="o">=</span> <span class="n">sub</span>
<span class="k">def</span> <span class="nf">accept_arg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">instr_state</span><span class="p">):</span>
@@ -949,7 +952,7 @@
<span class="k">class</span> <span class="nc">Raw</span><span class="p">(</span><span class="n">Instruction</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Output raw data&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">initial_args</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="o">*</span><span class="n">initial_args</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">initial_args</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;raw &#39;opcode&#39; only accept one argument&quot;</span><span class="p">)</span>
<span class="c1"># Accept space</span>
@@ -962,7 +965,7 @@
<span class="k">class</span> <span class="nc">Label</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</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="k">def</span> <span class="fm">__init__</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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
@@ -976,7 +979,7 @@
<span class="k">class</span> <span class="nc">MultipleInstr</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="n">JUMP_SIZE</span> <span class="o">=</span> <span class="mi">6</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">init_instrs</span><span class="o">=</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">init_instrs</span><span class="o">=</span><span class="p">()):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">instrs</span> <span class="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">labels</span> <span class="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">expected_labels</span> <span class="o">=</span> <span class="p">{}</span>
@@ -1111,7 +1114,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">add_instruction</span><span class="p">(</span><span class="n">Label</span><span class="p">(</span><span class="n">label_name</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_instruction</span><span class="p">(</span><span class="n">instr</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__iadd__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__iadd__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">MultipleInstr</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">merge_shellcode</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
@@ -1231,13 +1234,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+14 -11
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.pe_parse &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.pe_parse &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -42,8 +45,8 @@
<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">from</span> <span class="nn">windows.generated_def.winstructs</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">windows.utils</span> <span class="k">import</span> <span class="n">transform_ctypes_fields</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>
<span class="n">IMAGE_ORDINAL_FLAG32</span> <span class="o">=</span> <span class="mh">0x80000000</span>
@@ -151,7 +154,7 @@
<span class="k">def</span> <span class="nf">size</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">VirtualSize</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;PESection </span><span class="se">\&quot;</span><span class="si">{0}</span><span class="se">\&quot;</span><span class="s2">&gt;&quot;</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>
@@ -189,7 +192,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">target</span>
<span class="k">return</span> <span class="bp">self</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s1">&#39;&lt;</span><span class="si">{0}</span><span class="s1"> &quot;</span><span class="si">{1}</span><span class="s1">&quot; ordinal </span><span class="si">{2}</span><span class="s1">&gt;&#39;</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="vm">__class__</span><span class="o">.</span><span class="vm">__name__</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="bp">self</span><span class="o">.</span><span class="n">ord</span><span class="p">)</span>
<div class="viewcode-block" id="IATEntry.set_hook"><a class="viewcode-back" href="../../process.html#windows.pe_parse.IATEntry.set_hook">[docs]</a> <span class="k">def</span> <span class="nf">set_hook</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">types</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
@@ -333,7 +336,7 @@
<div class="viewcode-block" id="PEFile"><a class="viewcode-back" href="../../process.html#windows.pe_parse.PEFile">[docs]</a><span class="k">class</span> <span class="nc">PEFile</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent a PE loaded in a process (current or remote)&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">baseaddr</span><span class="p">,</span> <span class="n">targetedbitness</span><span class="p">,</span> <span class="n">transformers</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> <span class="n">baseaddr</span><span class="p">,</span> <span class="n">targetedbitness</span><span class="p">,</span> <span class="n">transformers</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">target</span>
<span class="bp">self</span><span class="o">.</span><span class="n">baseaddr</span> <span class="o">=</span> <span class="n">baseaddr</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bitness</span> <span class="o">=</span> <span class="n">targetedbitness</span>
@@ -494,13 +497,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+17 -14
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.pipe &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.pipe &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -38,16 +41,16 @@
<h1>Source code for windows.pipe</h1><div class="highlight"><pre>
<span></span><span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</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">import</span> <span class="nn">ctypes</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="k">import</span> <span class="n">is_py3</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="kn">import</span> <span class="n">is_py3</span>
<span class="k">if</span> <span class="n">is_py3</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">multiprocessing.connection</span> <span class="k">import</span> <span class="n">PipeConnection</span> <span class="k">as</span> <span class="n">native_PipeConnection</span>
<span class="kn">from</span> <span class="nn">multiprocessing.connection</span> <span class="kn">import</span> <span class="n">PipeConnection</span> <span class="k">as</span> <span class="n">native_PipeConnection</span>
<span class="k">else</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">_multiprocessing</span> <span class="k">import</span> <span class="n">PipeConnection</span> <span class="k">as</span> <span class="n">native_PipeConnection</span>
<span class="kn">from</span> <span class="nn">_multiprocessing</span> <span class="kn">import</span> <span class="n">PipeConnection</span> <span class="k">as</span> <span class="n">native_PipeConnection</span>
<span class="c1"># Inspired from &#39;multiprocessing\connection.py&#39;</span>
@@ -63,7 +66,7 @@
<span class="sd">&quot;&quot;&quot;A wrapper arround :class:`_multiprocessing.PipeConnection` able to work as a ContextManager&quot;&quot;&quot;</span>
<span class="n">BUFFER_SIZE</span> <span class="o">=</span> <span class="mh">0x2000</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connection</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">server</span><span class="o">=</span><span class="kc">False</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">connection</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">server</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">connection</span><span class="o">.</span><span class="n">fileno</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">connection</span> <span class="o">=</span> <span class="n">connection</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
@@ -140,13 +143,13 @@
<span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="kc">None</span></div>
<span class="k">def</span> <span class="nf">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__enter__</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="k">def</span> <span class="nf">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&quot;&quot;&lt;</span><span class="si">{0}</span><span class="s2"> name=&quot;</span><span class="si">{1}</span><span class="s2">&quot; server=</span><span class="si">{2}</span><span class="s2">&gt;&quot;&quot;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</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="bp">self</span><span class="o">.</span><span class="n">server</span><span class="p">)</span></div>
@@ -196,13 +199,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+23 -20
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.remotectypes &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.remotectypes &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -44,7 +47,7 @@
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">ctypes.wintypes</span>
<span class="kn">import</span> <span class="nn">itertools</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">_SimpleCData</span>
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="kn">import</span> <span class="n">_SimpleCData</span>
<span class="c1"># No PFW deps in this file</span>
<span class="kn">import</span> <span class="nn">sys</span>
@@ -199,7 +202,7 @@
<span class="n">remote_pointed_type</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="bp">self</span><span class="o">.</span><span class="n">real_pointer_type</span><span class="o">.</span><span class="n">_type_</span><span class="p">)</span>
<span class="k">return</span> <span class="n">remote_pointed_type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">raw_value</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">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;RemoteStructurePointer to </span><span class="si">{0}</span><span class="s2">&gt;&quot;</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">real_pointer_type</span><span class="o">.</span><span class="n">_type_</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span>
@@ -209,11 +212,11 @@
<span class="n">_length_</span> <span class="o">=</span> <span class="nb">len</span>
<span class="n">_type_</span> <span class="o">=</span> <span class="n">subtype</span>
<span class="k">def</span> <span class="nf">__init__</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">target</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">addr</span><span class="p">,</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="o">=</span> <span class="n">addr</span>
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">target</span>
<span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">slice</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">slice</span><span class="p">):</span>
<span class="c1"># import pdb;pdb.set_trace()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="nb">slice</span><span class="p">,</span> <span class="n">int_types</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;RemoteArray slice __getitem__&quot;</span><span class="p">)</span>
@@ -238,7 +241,7 @@
<span class="c1"># 64bits pointers</span>
<span class="k">class</span> <span class="nc">RemotePtr64</span><span class="p">(</span><span class="n">RemoteValue</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">target</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">value</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">target</span>
<span class="nb">super</span><span class="p">(</span><span class="n">RemotePtr64</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
@@ -259,12 +262,12 @@
<span class="c1"># RemoteCCharP for the good `value` implem</span>
<span class="c1"># c_char_p64 for the good _type_ (ctypes size)</span>
<span class="k">class</span> <span class="nc">Remote_c_char_p64</span><span class="p">(</span><span class="n">c_char_p64</span><span class="p">,</span> <span class="n">RemotePtr64</span><span class="p">,</span> <span class="n">RemoteCCharP</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;Remote_c_char_p64(</span><span class="si">{0}</span><span class="s2">)&gt;&quot;</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">raw_value</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">Remote_w_char_p64</span><span class="p">(</span><span class="n">c_wchar_p64</span><span class="p">,</span> <span class="n">RemotePtr64</span><span class="p">,</span> <span class="n">RemoteWCharP</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;Remote_c_wchar_p64(</span><span class="si">{0}</span><span class="s2">)&gt;&quot;</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">raw_value</span><span class="p">)</span>
@@ -296,7 +299,7 @@
<span class="c1"># 32bits pointers</span>
<span class="k">class</span> <span class="nc">RemotePtr32</span><span class="p">(</span><span class="n">RemoteValue</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">target</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">value</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">target</span>
<span class="nb">super</span><span class="p">(</span><span class="n">RemotePtr32</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
@@ -317,12 +320,12 @@
<span class="c1"># RemoteCCharP for the good `value` implem</span>
<span class="c1"># c_char_p64 for the good _type_ (ctypes size)</span>
<span class="k">class</span> <span class="nc">Remote_c_char_p32</span><span class="p">(</span><span class="n">c_char_p32</span><span class="p">,</span> <span class="n">RemotePtr32</span><span class="p">,</span> <span class="n">RemoteCCharP</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;Remote_c_char_p32(</span><span class="si">{0}</span><span class="s2">)&gt;&quot;</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">raw_value</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">Remote_w_char_p32</span><span class="p">(</span><span class="n">c_wchar_p32</span><span class="p">,</span> <span class="n">RemotePtr32</span><span class="p">,</span> <span class="n">RemoteWCharP</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;Remote_c_wchar_p32(</span><span class="si">{0}</span><span class="s2">)&gt;&quot;</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">raw_value</span><span class="p">)</span>
@@ -383,7 +386,7 @@
<span class="n">Remote_w_char_p32</span><span class="p">:</span> <span class="n">Remote_w_char_p32</span>
<span class="p">}</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">base_addr</span><span class="p">,</span> <span class="n">target</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">base_addr</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_target</span> <span class="o">=</span> <span class="n">target</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_base_addr</span> <span class="o">=</span> <span class="n">base_addr</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_fields_dict_</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_fields_</span><span class="p">)</span>
@@ -430,7 +433,7 @@
<span class="k">return</span> <span class="n">ftype</span><span class="o">.</span><span class="n">from_buffer</span><span class="p">(</span><span class="nb">bytearray</span><span class="p">(</span><span class="n">s</span><span class="p">))</span>
<span class="k">return</span> <span class="n">ftype</span><span class="o">.</span><span class="n">from_buffer</span><span class="p">(</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">value</span>
<span class="k">def</span> <span class="nf">__getattribute__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__getattribute__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">):</span>
<span class="k">if</span> <span class="n">fieldname</span> <span class="ow">in</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">_reserved_name</span><span class="p">:</span> <span class="c1"># Prevent recursion !</span>
<span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">RemoteStructureUnion</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__getattribute__</span><span class="p">(</span><span class="n">fieldname</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
@@ -479,7 +482,7 @@
<span class="k">def</span> <span class="nf">contents</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">RemoteStructurePointer64</span><span class="o">.</span><span class="n">from_buffer_with_target_and_ptr_type</span><span class="p">(</span><span class="nb">bytearray</span><span class="p">(</span><span class="bp">self</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">target</span><span class="p">,</span> <span class="n">ptr_type</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">contents</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;RemotePtr64 to struct </span><span class="si">{0}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span>
<span class="k">return</span> <span class="n">PointerToStruct64</span>
@@ -523,7 +526,7 @@
<span class="k">def</span> <span class="nf">contents</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">RemoteStructurePointer32</span><span class="o">.</span><span class="n">from_buffer_with_target_and_ptr_type</span><span class="p">(</span><span class="nb">bytearray</span><span class="p">(</span><span class="bp">self</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">target</span><span class="p">,</span> <span class="n">ptr_type</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">contents</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;RemotePtr32 to struct </span><span class="si">{0}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span>
<span class="k">return</span> <span class="n">PointerToStruct32</span>
@@ -594,13 +597,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+11 -8
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.rpc.client &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.rpc.client &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -102,8 +105,8 @@
<div class="viewcode-block" id="RPCClient"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.RPCClient">[docs]</a><span class="k">class</span> <span class="nc">RPCClient</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A client for RPC-over-ALPC able to bind to interface and perform calls using NDR32 marshalling&quot;&quot;&quot;</span>
<span class="n">REQUEST_IDENTIFIER</span> <span class="o">=</span> <span class="mh">0x11223344</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">port</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">alpc_client</span> <span class="o">=</span> <span class="n">alpc</span><span class="o">.</span><span class="n">AlpcClient</span><span class="p">(</span><span class="n">port</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">port</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">alpc_client</span> <span class="o">=</span> <span class="n">alpc</span><span class="o">.</span><span class="n">AlpcClient</span><span class="p">(</span><span class="n">port</span><span class="p">)</span> <span class="c1">#: The :class:`windows.alpc.AlpcClient` used to communicate with the server</span>
<span class="bp">self</span><span class="o">.</span><span class="n">number_of_bind_if</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># if -&gt; interface</span>
<span class="bp">self</span><span class="o">.</span><span class="n">if_bind_number</span> <span class="o">=</span> <span class="p">{}</span>
@@ -249,13 +252,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+13 -10
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.rpc.epmapper &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.rpc.epmapper &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -38,13 +41,13 @@
<h1>Source code for windows.rpc.epmapper</h1><div class="highlight"><pre>
<span></span><span class="kn">import</span> <span class="nn">struct</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">namedtuple</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">namedtuple</span>
<span class="kn">import</span> <span class="nn">windows</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.rpc</span> <span class="k">import</span> <span class="n">ndr</span>
<span class="kn">from</span> <span class="nn">windows.dbgprint</span> <span class="k">import</span> <span class="n">dbgprint</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="k">import</span> <span class="n">basestring</span>
<span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="kn">import</span> <span class="n">ndr</span>
<span class="kn">from</span> <span class="nn">windows.dbgprint</span> <span class="kn">import</span> <span class="n">dbgprint</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="kn">import</span> <span class="n">basestring</span>
@@ -268,13 +271,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+146 -30
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.rpc.ndr &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.rpc.ndr &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -68,7 +71,7 @@
<div class="viewcode-block" id="NdrUniquePTR"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrUniquePTR">[docs]</a><span class="k">class</span> <span class="nc">NdrUniquePTR</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Create a UNIQUE PTR around a given Ndr type&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">subcls</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">subcls</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">subcls</span> <span class="o">=</span> <span class="n">subcls</span>
<span class="k">def</span> <span class="nf">pack</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
@@ -101,7 +104,12 @@
<span class="n">data</span> <span class="o">=</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">&quot;&lt;I&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">data</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">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subcls</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span></div>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subcls</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">get_alignment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># 14.3.2 Alignment of Constructed Types</span>
<span class="c1"># Pointer alignment is always modulo 4.</span>
<span class="k">return</span> <span class="mi">4</span></div>
<span class="k">class</span> <span class="nc">NdrUnpackNone</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="nd">@classmethod</span>
@@ -110,7 +118,7 @@
<span class="k">class</span> <span class="nc">NdrRef</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="c1"># TESTING</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">subcls</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">subcls</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">subcls</span> <span class="o">=</span> <span class="n">subcls</span>
<span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
@@ -120,7 +128,7 @@
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subcls</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">NdrFixedArray</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">subcls</span><span class="p">,</span> <span class="n">size</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">subcls</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">subcls</span> <span class="o">=</span> <span class="n">subcls</span>
<span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="n">size</span>
@@ -133,6 +141,9 @@
<span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
<span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">subcls</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">)]</span>
<span class="k">def</span> <span class="nf">get_alignment</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">subcls</span><span class="o">.</span><span class="n">get_alignment</span><span class="p">()</span>
<div class="viewcode-block" id="NdrSID"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrSID">[docs]</a><span class="k">class</span> <span class="nc">NdrSID</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="NdrSID.pack"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrSID.pack">[docs]</a> <span class="nd">@classmethod</span>
@@ -150,7 +161,12 @@
<span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Unpack a PSID, partial implementation that returns a :class:`str` and not a PSID&quot;&quot;&quot;</span>
<span class="n">subcount</span> <span class="o">=</span> <span class="n">NdrLong</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
<span class="k">return</span> <span class="n">stream</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">8</span> <span class="o">+</span> <span class="p">(</span><span class="n">subcount</span> <span class="o">*</span> <span class="mi">4</span><span class="p">))</span></div></div>
<span class="k">return</span> <span class="n">stream</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">8</span> <span class="o">+</span> <span class="p">(</span><span class="n">subcount</span> <span class="o">*</span> <span class="mi">4</span><span class="p">))</span></div>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">get_alignment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># Not sur, but it seems to contain an array of long</span>
<span class="k">return</span> <span class="mi">4</span></div>
<span class="k">class</span> <span class="nc">NdrVaryingCString</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="nd">@classmethod</span>
@@ -165,6 +181,11 @@
<span class="n">result</span> <span class="o">+=</span> <span class="n">data</span>
<span class="k">return</span> <span class="n">dword_pad</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">get_alignment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># Not sur, but size is on 4 bytes so...</span>
<span class="k">return</span> <span class="mi">4</span>
<div class="viewcode-block" id="NdrWString"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrWString">[docs]</a><span class="k">class</span> <span class="nc">NdrWString</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="NdrWString.pack"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrWString.pack">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">pack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
@@ -186,7 +207,12 @@
<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">return</span> <span class="n">s</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">&quot;utf-16-le&quot;</span><span class="p">)</span></div>
<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">&quot;utf-16-le&quot;</span><span class="p">)</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">get_alignment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># Not sur, but size is on 4 bytes so...</span>
<span class="k">return</span> <span class="mi">4</span></div>
<div class="viewcode-block" id="NdrCString"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrCString">[docs]</a><span class="k">class</span> <span class="nc">NdrCString</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="NdrCString.pack"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrCString.pack">[docs]</a> <span class="nd">@classmethod</span>
@@ -199,7 +225,12 @@
<span class="n">l</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">&quot;&lt;3I&quot;</span><span class="p">,</span> <span class="n">l</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">l</span><span class="p">)</span>
<span class="n">result</span> <span class="o">+=</span> <span class="n">data</span>
<span class="k">return</span> <span class="n">dword_pad</span><span class="p">(</span><span class="n">result</span><span class="p">)</span></div></div>
<span class="k">return</span> <span class="n">dword_pad</span><span class="p">(</span><span class="n">result</span><span class="p">)</span></div>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">get_alignment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># Not sur, but size is on 4 bytes so...</span>
<span class="k">return</span> <span class="mi">4</span></div>
<span class="c1"># @classmethod</span>
<span class="c1"># def unpack(self, stream):</span>
@@ -217,7 +248,11 @@
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
<span class="n">stream</span><span class="o">.</span><span class="n">align</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
<span class="k">return</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">&quot;&lt;I&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
<span class="k">return</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">&quot;&lt;I&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">get_alignment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="mi">4</span></div>
<div class="viewcode-block" id="NdrHyper"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrHyper">[docs]</a><span class="k">class</span> <span class="nc">NdrHyper</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="nd">@classmethod</span>
@@ -227,7 +262,11 @@
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
<span class="n">stream</span><span class="o">.</span><span class="n">align</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span>
<span class="k">return</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">&quot;&lt;Q&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
<span class="k">return</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">&quot;&lt;Q&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">get_alignment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="mi">8</span></div>
<div class="viewcode-block" id="NdrShort"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrShort">[docs]</a><span class="k">class</span> <span class="nc">NdrShort</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="nd">@classmethod</span>
@@ -236,7 +275,11 @@
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
<span class="k">return</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">&quot;&lt;H&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
<span class="k">return</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">&quot;&lt;H&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">get_alignment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="mi">2</span></div>
<div class="viewcode-block" id="NdrByte"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrByte">[docs]</a><span class="k">class</span> <span class="nc">NdrByte</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
@@ -246,7 +289,11 @@
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
<span class="k">return</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">&quot;&lt;B&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
<span class="k">return</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">&quot;&lt;B&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">get_alignment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="mi">1</span></div>
<span class="k">class</span> <span class="nc">NdrGuid</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
@@ -261,6 +308,11 @@
<span class="n">rawguid</span> <span class="o">=</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">&quot;16s&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IID</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">rawguid</span><span class="p">)</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">get_alignment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="mi">1</span>
<span class="k">class</span> <span class="nc">NdrContextHandle</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">pack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
@@ -273,6 +325,11 @@
<span class="n">attributes</span><span class="p">,</span> <span class="n">rawguid</span> <span class="o">=</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">&quot;&lt;I16s&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IID</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">rawguid</span><span class="p">)</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">get_alignment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="mi">4</span>
<div class="viewcode-block" id="NdrStructure"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrStructure">[docs]</a><span class="k">class</span> <span class="nc">NdrStructure</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;a NDR structure that tries to respect the rules of pointer packing, this class should be subclassed with</span>
@@ -290,21 +347,38 @@
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;NdrStructure packing number elements mismatch: structure has &lt;</span><span class="si">{0}</span><span class="s2">&gt; members got &lt;</span><span class="si">{1}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">MEMBERS</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)))</span>
<span class="n">conformant_size</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">res_size</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">pointed</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">outstream</span> <span class="o">=</span> <span class="n">NdrWriteStream</span><span class="p">()</span>
<span class="n">pointed_to_pack</span> <span class="o">=</span> <span class="p">[]</span>
<span class="c1"># pointedoutstream = NdrWriteStream()</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">member</span><span class="p">,</span> <span class="n">memberdata</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">MEMBERS</span><span class="p">,</span> <span class="n">data</span><span class="p">)):</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">member</span><span class="p">,</span> <span class="s2">&quot;pack_in_struct&quot;</span><span class="p">):</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">member</span><span class="o">.</span><span class="n">pack_in_struct</span><span class="p">(</span><span class="n">memberdata</span><span class="p">,</span> <span class="n">i</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">x</span><span class="p">)</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">==</span> <span class="mi">4</span><span class="p">,</span> <span class="s2">&quot;Pointer should be size 4&quot;</span>
<span class="c1"># Write the pointer</span>
<span class="n">outstream</span><span class="o">.</span><span class="n">align</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
<span class="n">outstream</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="k">if</span> <span class="n">y</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">pointed</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
<span class="c1"># Store the info to the pointed to pack</span>
<span class="n">pointed_to_pack</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">member</span><span class="o">.</span><span class="n">subcls</span><span class="o">.</span><span class="n">get_alignment</span><span class="p">(),</span> <span class="n">y</span><span class="p">))</span>
<span class="c1"># pointedoutstream.write(y)</span>
<span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">member</span><span class="p">,</span> <span class="s2">&quot;pack_conformant&quot;</span><span class="p">):</span>
<span class="n">size</span><span class="p">,</span> <span class="n">data</span> <span class="o">=</span> <span class="n">member</span><span class="o">.</span><span class="n">pack_conformant</span><span class="p">(</span><span class="n">memberdata</span><span class="p">)</span>
<span class="n">outstream</span><span class="o">.</span><span class="n">align</span><span class="p">(</span><span class="n">member</span><span class="o">.</span><span class="n">get_alignment</span><span class="p">())</span>
<span class="n">outstream</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="n">conformant_size</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">size</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">data</span><span class="p">)</span>
<span class="c1"># res.append(data)</span>
<span class="c1"># res_size += len(data)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">packed_member</span> <span class="o">=</span> <span class="n">member</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">memberdata</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">packed_member</span><span class="p">)</span>
<span class="k">return</span> <span class="n">dword_pad</span><span class="p">(</span><span class="sa">b</span><span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">conformant_size</span><span class="p">))</span> <span class="o">+</span> <span class="n">dword_pad</span><span class="p">(</span><span class="sa">b</span><span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">res</span><span class="p">))</span> <span class="o">+</span> <span class="n">dword_pad</span><span class="p">(</span><span class="sa">b</span><span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">pointed</span><span class="p">))</span></div>
<span class="n">outstream</span><span class="o">.</span><span class="n">align</span><span class="p">(</span><span class="n">member</span><span class="o">.</span><span class="n">get_alignment</span><span class="p">())</span>
<span class="n">outstream</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">packed_member</span><span class="p">)</span>
<span class="c1"># Pack the pointed to the stream</span>
<span class="k">for</span> <span class="n">alignement</span><span class="p">,</span> <span class="n">pointed_data</span> <span class="ow">in</span> <span class="n">pointed_to_pack</span><span class="p">:</span>
<span class="n">outstream</span><span class="o">.</span><span class="n">align</span><span class="p">(</span><span class="n">alignement</span><span class="p">)</span>
<span class="n">outstream</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pointed_data</span><span class="p">)</span>
<span class="k">return</span> <span class="n">dword_pad</span><span class="p">(</span><span class="sa">b</span><span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">conformant_size</span><span class="p">))</span> <span class="o">+</span> <span class="n">outstream</span><span class="o">.</span><span class="n">get_data</span><span class="p">()</span></div>
<div class="viewcode-block" id="NdrStructure.unpack"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrStructure.unpack">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
@@ -342,7 +416,11 @@
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">post_unpack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="k">return</span> <span class="n">data</span></div>
<span class="k">return</span> <span class="n">data</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">get_alignment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">max</span><span class="p">([</span><span class="n">x</span><span class="o">.</span><span class="n">get_alignment</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">MEMBERS</span><span class="p">])</span></div>
@@ -359,11 +437,17 @@
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot; * data </span><span class="si">{0}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot; * members = </span><span class="si">{0}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">MEMBERS</span><span class="p">))</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;NdrParameters packing number elements mismatch: structure has &lt;</span><span class="si">{0}</span><span class="s2">&gt; members got &lt;</span><span class="si">{1}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">MEMBERS</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)))</span>
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">outstream</span> <span class="o">=</span> <span class="n">NdrWriteStream</span><span class="p">()</span>
<span class="k">for</span> <span class="p">(</span><span class="n">member</span><span class="p">,</span> <span class="n">memberdata</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">MEMBERS</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="n">alignment</span> <span class="o">=</span> <span class="n">member</span><span class="o">.</span><span class="n">get_alignment</span><span class="p">()</span>
<span class="n">outstream</span><span class="o">.</span><span class="n">align</span><span class="p">(</span><span class="n">alignment</span><span class="p">)</span>
<span class="n">packed_member</span> <span class="o">=</span> <span class="n">member</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">memberdata</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">packed_member</span><span class="p">)</span>
<span class="k">return</span> <span class="sa">b</span><span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dword_pad</span><span class="p">(</span><span class="n">elt</span><span class="p">)</span> <span class="k">for</span> <span class="n">elt</span> <span class="ow">in</span> <span class="n">res</span><span class="p">)</span>
<span class="n">outstream</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">packed_member</span><span class="p">)</span>
<span class="k">return</span> <span class="n">outstream</span><span class="o">.</span><span class="n">get_data</span><span class="p">()</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
@@ -371,7 +455,10 @@
<span class="k">for</span> <span class="n">member</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="n">MEMBERS</span><span class="p">:</span>
<span class="n">unpacked_member</span> <span class="o">=</span> <span class="n">member</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</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">unpacked_member</span><span class="p">)</span>
<span class="k">return</span> <span class="n">res</span></div>
<span class="k">return</span> <span class="n">res</span>
<span class="k">def</span> <span class="nf">get_alignment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;NdrParameters should always be top type in NDR description&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="NdrConformantArray"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrConformantArray">[docs]</a><span class="k">class</span> <span class="nc">NdrConformantArray</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
@@ -401,7 +488,12 @@
<span class="k">def</span> <span class="nf">unpack_conformant</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">stream</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
<span class="n">res</span> <span class="o">=</span> <span class="p">[</span><span class="bp">cls</span><span class="o">.</span><span class="n">MEMBER_TYPE</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">size</span><span class="p">)]</span>
<span class="n">stream</span><span class="o">.</span><span class="n">align</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
<span class="k">return</span> <span class="n">res</span></div>
<span class="k">return</span> <span class="n">res</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">get_alignment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># TODO: test on array of Hyper</span>
<span class="k">return</span> <span class="nb">max</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">MEMBER_TYPE</span><span class="o">.</span><span class="n">get_alignment</span><span class="p">())</span></div>
<div class="viewcode-block" id="NdrConformantVaryingArrays"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrConformantVaryingArrays">[docs]</a><span class="k">class</span> <span class="nc">NdrConformantVaryingArrays</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
@@ -443,8 +535,11 @@
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">_post_unpack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">result</span><span class="p">):</span>
<span class="k">return</span> <span class="n">result</span></div>
<span class="k">return</span> <span class="n">result</span>
<span class="k">def</span> <span class="nf">get_alignment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># TODO: test on array of Hyper</span>
<span class="k">return</span> <span class="nb">max</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">MEMBER_TYPE</span><span class="o">.</span><span class="n">get_alignment</span><span class="p">())</span></div>
<span class="k">class</span> <span class="nc">NdrWcharConformantVaryingArrays</span><span class="p">(</span><span class="n">NdrConformantVaryingArrays</span><span class="p">):</span>
<span class="n">MEMBER_TYPE</span> <span class="o">=</span> <span class="n">NdrShort</span>
@@ -488,7 +583,7 @@
<div class="viewcode-block" id="NdrStream"><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="sd">&quot;&quot;&quot;A stream of bytes used for NDR unpacking&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__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="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>
@@ -526,6 +621,27 @@
<span class="c1"># print(&quot;align {0}: 0&quot;.format(size))</span>
<span class="k">return</span> <span class="mi">0</span></div></div>
<span class="k">class</span> <span class="nc">NdrWriteStream</span><span class="p">(</span><span class="nb">object</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="bp">self</span><span class="o">.</span><span class="n">data_parts</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data_size</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">def</span> <span class="nf">get_data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">data</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data_parts</span><span class="p">)</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">data_size</span>
<span class="k">return</span> <span class="n">data</span>
<span class="k">def</span> <span class="nf">write</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="bp">self</span><span class="o">.</span><span class="n">data_parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data_size</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">def</span> <span class="nf">align</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alignement</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">data_size</span> <span class="o">%</span> <span class="n">alignement</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span>
<span class="n">topadsize</span> <span class="o">=</span> <span class="p">(</span><span class="n">alignement</span><span class="p">)</span> <span class="o">-</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data_size</span> <span class="o">%</span> <span class="n">alignement</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">b</span><span class="s2">&quot;P&quot;</span> <span class="o">*</span> <span class="n">topadsize</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">def</span> <span class="nf">make_parameters</span><span class="p">(</span><span class="n">types</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">class</span> <span class="nc">NdrCustomParameters</span><span class="p">(</span><span class="n">NdrParameters</span><span class="p">):</span>
@@ -568,13 +684,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+33 -18
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.security &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.security &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -42,9 +45,10 @@
<span class="kn">import</span> <span class="nn">windows</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</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="kn">import</span> <span class="n">basestring</span>
<span class="kn">from</span> <span class="nn">windows.winobject.token</span> <span class="k">import</span> <span class="n">Token</span><span class="p">,</span> <span class="n">KNOW_INTEGRITY_LEVEL</span>
<span class="kn">from</span> <span class="nn">windows.winobject.token</span> <span class="kn">import</span> <span class="n">Token</span><span class="p">,</span> <span class="n">KNOW_INTEGRITY_LEVEL</span>
<span class="c1"># Specific access right</span>
@@ -354,7 +358,7 @@
<span class="n">subcls</span> <span class="o">=</span> <span class="n">ACE_CLASS_BY_ACE_TYPE</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">AceType</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_to_ace_type</span><span class="p">(</span><span class="n">subcls</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">{0}</span><span class="s2"> type=</span><span class="si">{1}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">AceType</span><span class="p">)</span></div>
@@ -405,7 +409,7 @@
<span class="k">if</span> <span class="n">v</span><span class="p">:</span>
<span class="k">yield</span> <span class="n">ACE_MASKS</span><span class="p">[</span><span class="n">v</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">{0}</span><span class="s2"> mask=</span><span class="si">{1}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">Mask</span><span class="p">)</span></div>
@@ -674,11 +678,11 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<div class="viewcode-block" id="Acl.__len__"><a class="viewcode-back" href="../../security.html#windows.security.Acl.__len__">[docs]</a> <span class="k">def</span> <span class="nf">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<div class="viewcode-block" id="Acl.__len__"><a class="viewcode-back" href="../../security.html#windows.security.Acl.__len__">[docs]</a> <span class="k">def</span> <span class="fm">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The number of ``ACE`` in the :class:`Acl`&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">AceCount</span></div>
<div class="viewcode-block" id="Acl.__getitem__"><a class="viewcode-back" href="../../security.html#windows.security.Acl.__getitem__">[docs]</a> <span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">):</span>
<div class="viewcode-block" id="Acl.__getitem__"><a class="viewcode-back" href="../../security.html#windows.security.Acl.__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">i</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return ``ACE`` nb ``i``</span>
<span class="sd"> :return: :class:`Ace`</span>
@@ -690,14 +694,14 @@
<span class="k">raise</span> <span class="ne">IndexError</span><span class="p">(</span><span class="s2">&quot;Invalid ACL index </span><span class="si">{0}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">))</span>
<span class="k">raise</span></div>
<div class="viewcode-block" id="Acl.__iter__"><a class="viewcode-back" href="../../security.html#windows.security.Acl.__iter__">[docs]</a> <span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<div class="viewcode-block" id="Acl.__iter__"><a class="viewcode-back" href="../../security.html#windows.security.Acl.__iter__">[docs]</a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return an iterable over all the ``ACE`` in the :class:`Acl`</span>
<span class="sd"> :yield: :class:`Ace`&quot;&quot;&quot;</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AceCount</span><span class="p">):</span>
<span class="k">yield</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_ace</span><span class="p">(</span><span class="n">i</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;Acl count=</span><span class="si">{0}</span><span class="s2">&gt;&quot;</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">AceCount</span><span class="p">)</span></div>
<span class="n">PAcl</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">Acl</span><span class="p">)</span>
@@ -816,7 +820,7 @@
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">sacl</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The SACL of the security descriptor. You may need special attention to retrieve it (see :any:`DEFAULT_SECURITY_INFORMATION`)</span>
<span class="sd">&quot;&quot;&quot;The SACL of the security descriptor. You may need special attention to retrieve it (see :class:`DEFAULT_SECURITY_INFORMATION`)</span>
<span class="sd"> :type: :class:`Acl` or ``None`` if the SACL was ``NULL`` or not present</span>
<span class="sd"> &quot;&quot;&quot;</span>
@@ -928,6 +932,17 @@
<span class="n">flags</span> <span class="o">|=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SACL_SECURITY_INFORMATION</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">SetNamedSecurityInfoW</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SE_FILE_OBJECT</span><span class="p">,</span> <span class="n">flags</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="bp">self</span><span class="o">.</span><span class="n">group</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dacl</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sacl</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">to_handle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">flags</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="p">:</span>
<span class="n">flags</span> <span class="o">|=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">OWNER_SECURITY_INFORMATION</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">group</span><span class="p">:</span>
<span class="n">flags</span> <span class="o">|=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">GROUP_SECURITY_INFORMATION</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dacl</span><span class="p">:</span>
<span class="n">flags</span> <span class="o">|=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DACL_SECURITY_INFORMATION</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sacl</span><span class="p">:</span>
<span class="n">flags</span> <span class="o">|=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SACL_SECURITY_INFORMATION</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_apply_to_handle_and_type</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SE_FILE_OBJECT</span><span class="p">,</span> <span class="n">flags</span><span class="p">)</span>
<div class="viewcode-block" id="SecurityDescriptor.from_service"><a class="viewcode-back" href="../../security.html#windows.security.SecurityDescriptor.from_service">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">from_service</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">query_sacl</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">SERVICE_SECURITY_INFORMATION</span><span class="p">):</span>
@@ -1016,11 +1031,11 @@
<span class="k">def</span> <span class="nf">explain_simple_ace</span><span class="p">(</span><span class="n">ace</span><span class="p">,</span> <span class="n">sdtype</span><span class="p">):</span>
<span class="k">yield</span> <span class="sa">u</span><span class="s2">&quot;Type:&quot;</span>
<span class="k">yield</span> <span class="sa">u</span><span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">ace</span><span class="o">.</span><span class="n">Header</span><span class="o">.</span><span class="n">AceType</span><span class="p">)</span>
<span class="k">yield</span> <span class="sa">u</span><span class="s2">&quot;Flags:&quot;</span>
<span class="k">yield</span> <span class="sa">u</span><span class="s2">&quot; </span><span class="si">{0:#x}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ace</span><span class="o">.</span><span class="n">Header</span><span class="o">.</span><span class="n">AceFlags</span><span class="p">)</span>
<span class="k">yield</span> <span class="sa">u</span><span class="s2">&quot;Flags: </span><span class="si">{0:#x}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ace</span><span class="o">.</span><span class="n">Header</span><span class="o">.</span><span class="n">AceFlags</span><span class="p">)</span>
<span class="k">yield</span> <span class="sa">u</span><span class="s2">&quot; </span><span class="si">{0}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ace</span><span class="o">.</span><span class="n">Header</span><span class="o">.</span><span class="n">flags</span><span class="p">)</span>
<span class="k">yield</span> <span class="sa">u</span><span class="s2">&quot;SID:&quot;</span>
<span class="k">yield</span> <span class="sa">u</span><span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="n">explain_sid</span><span class="p">(</span><span class="n">ace</span><span class="o">.</span><span class="n">sid</span><span class="p">)</span>
<span class="k">yield</span> <span class="sa">u</span><span class="s2">&quot;Mask:&quot;</span>
<span class="k">yield</span> <span class="sa">u</span><span class="s2">&quot;Mask: </span><span class="si">{0:#x}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ace</span><span class="o">.</span><span class="n">Mask</span><span class="p">)</span>
<span class="n">mapper</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">security</span><span class="o">.</span><span class="n">SPECIFIC_ACCESS_RIGTH_BY_TYPE</span><span class="p">[</span><span class="n">sdtype</span><span class="p">]</span>
<span class="k">yield</span> <span class="sa">u</span><span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">mapper</span><span class="p">[</span><span class="n">x</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">ace</span><span class="o">.</span><span class="n">mask</span><span class="p">))</span>
@@ -1154,13 +1169,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+18 -15
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.syswow64 &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.syswow64 &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -39,18 +42,18 @@
<h1>Source code for windows.syswow64</h1><div class="highlight"><pre>
<span></span><span class="kn">import</span> <span class="nn">struct</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">from</span> <span class="nn">ctypes</span> <span class="k">import</span> <span class="n">byref</span>
<span class="kn">from</span> <span class="nn">ctypes</span> <span class="kn">import</span> <span class="n">byref</span>
<span class="kn">import</span> <span class="nn">codecs</span>
<span class="kn">import</span> <span class="nn">functools</span>
<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">from</span> <span class="nn">.generated_def.winstructs</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">process</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">.winproxy</span> <span class="k">import</span> <span class="n">NeededParameter</span>
<span class="kn">from</span> <span class="nn">.pycompat</span> <span class="k">import</span> <span class="n">int_types</span>
<span class="kn">from</span> <span class="nn">.generated_def.winstructs</span> <span class="kn">import</span> <span class="o">*</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</span> <span class="kn">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">.winproxy</span> <span class="kn">import</span> <span class="n">NeededParameter</span>
<span class="kn">from</span> <span class="nn">.pycompat</span> <span class="kn">import</span> <span class="n">int_types</span>
<span class="c1"># Special code for syswow64 process</span>
<span class="n">CS_32bits</span> <span class="o">=</span> <span class="mh">0x23</span>
@@ -207,7 +210,7 @@
<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="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</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>
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">target</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_bitness</span> <span class="o">=</span> <span class="n">target</span><span class="o">.</span><span class="n">bitness</span>
@@ -238,7 +241,7 @@
<div class="viewcode-block" id="Syswow64ApiProxy"><a class="viewcode-back" href="../../internals.html#windows.syswow64.Syswow64ApiProxy">[docs]</a><span class="k">class</span> <span class="nc">Syswow64ApiProxy</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Create a python wrapper around a function&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">winproxy_function</span><span class="p">,</span> <span class="n">errcheck</span><span class="o">=</span><span class="kc">None</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">winproxy_function</span><span class="p">,</span> <span class="n">errcheck</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">winproxy_function</span> <span class="o">=</span> <span class="n">winproxy_function</span>
<span class="bp">self</span><span class="o">.</span><span class="n">raw_call</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">errcheck</span> <span class="o">=</span> <span class="n">errcheck</span>
@@ -248,7 +251,7 @@
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">python_proxy</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">python_proxy</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="bp">self</span><span class="o">.</span><span class="n">winproxy_function</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">None</span>
@@ -390,13 +393,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+13 -9
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.utils.pythonutils &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.utils.pythonutils &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -43,8 +46,9 @@
<span class="kn">import</span> <span class="nn">_ctypes</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.dbgprint</span> <span class="k">import</span> <span class="n">dbgprint</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.dbgprint</span> <span class="kn">import</span> <span class="n">dbgprint</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="kn">import</span> <span class="n">basestring</span>
@@ -145,7 +149,7 @@
<span class="sd">&quot;&quot;&quot;Wait for the object&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">WaitForSingleObject</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">timeout</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</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="c1"># sys.path is not None -&gt; check if python shutdown</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">sys</span><span class="p">,</span> <span class="s2">&quot;path&quot;</span><span class="p">)</span> <span class="ow">and</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">&quot;_handle&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle</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>
@@ -183,13 +187,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+24 -21
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.utils.winutils &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.utils.winutils &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -45,14 +48,14 @@
<span class="kn">import</span> <span class="nn">math</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="kn">import</span> <span class="nn">warnings</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">namedtuple</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">namedtuple</span>
<span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">from</span> <span class="nn">windows.dbgprint</span> <span class="k">import</span> <span class="n">dbgprint</span>
<span class="kn">from</span> <span class="nn">windows.dbgprint</span> <span class="kn">import</span> <span class="n">dbgprint</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">..</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">..generated_def.winstructs</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">..</span> <span class="kn">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">..generated_def.winstructs</span> <span class="kn">import</span> <span class="o">*</span>
<span class="c1"># Function resolution !</span>
@@ -339,12 +342,12 @@
<span class="k">def</span> <span class="nf">all</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">while</span> <span class="bp">self</span><span class="p">:</span>
<span class="k">yield</span> <span class="bp">self</span>
<span class="bp">self</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">next</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;ADS name=&#39;</span><span class="si">{0}</span><span class="s2">&#39;&gt;&quot;</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>
@@ -424,12 +427,12 @@
<span class="k">return</span> <span class="n">new</span>
<span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">while</span> <span class="bp">self</span><span class="p">:</span>
<span class="k">yield</span> <span class="bp">self</span>
<span class="bp">self</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">next</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s1">&#39;&lt;</span><span class="si">{0}</span><span class="s1"> name=&quot;</span><span class="si">{1}</span><span class="s1">&quot;&gt;&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
@@ -600,19 +603,19 @@
<span class="sd"> with utils.VirtualProtected(IATentry.addr, ctypes.sizeof(PVOID), gdef.PAGE_EXECUTE_READWRITE):</span>
<span class="sd"> IATentry.value = 0x42424242</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</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">new_protect</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">addr</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">new_protect</span><span class="p">):</span>
<span class="k">if</span> <span class="p">(</span><span class="n">addr</span> <span class="o">%</span> <span class="mh">0x1000</span><span class="p">):</span>
<span class="n">addr</span> <span class="o">=</span> <span class="n">addr</span> <span class="o">-</span> <span class="n">addr</span> <span class="o">%</span> <span class="mh">0x1000</span>
<span class="bp">self</span><span class="o">.</span><span class="n">addr</span> <span class="o">=</span> <span class="n">addr</span>
<span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="n">size</span>
<span class="bp">self</span><span class="o">.</span><span class="n">new_protect</span> <span class="o">=</span> <span class="n">new_protect</span>
<span class="k">def</span> <span class="nf">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">old_protect</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">()</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">VirtualProtect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">addr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">new_protect</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="bp">self</span><span class="o">.</span><span class="n">old_protect</span><span class="p">))</span>
<span class="k">return</span> <span class="bp">self</span>
<span class="k">def</span> <span class="nf">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc_type</span><span class="p">,</span> <span class="n">exc_value</span><span class="p">,</span> <span class="n">traceback</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc_type</span><span class="p">,</span> <span class="n">exc_value</span><span class="p">,</span> <span class="n">traceback</span><span class="p">):</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">VirtualProtect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">addr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">old_protect</span><span class="o">.</span><span class="n">value</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="bp">self</span><span class="o">.</span><span class="n">old_protect</span><span class="p">))</span>
<span class="k">return</span> <span class="kc">False</span></div>
@@ -626,15 +629,15 @@
<span class="sd"> with windows.utils.DisableWow64FsRedirection():</span>
<span class="sd"> return windows.utils.create_process(r&quot;C:\Windows\system32\calc.exe&quot;, True)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__enter__</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">def</span> <span class="fm">__enter__</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="ow">or</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="bp">self</span>
<span class="bp">self</span><span class="o">.</span><span class="n">OldValue</span> <span class="o">=</span> <span class="n">PVOID</span><span class="p">()</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">Wow64DisableWow64FsRedirection</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="bp">self</span><span class="o">.</span><span class="n">OldValue</span><span class="p">))</span>
<span class="k">return</span> <span class="bp">self</span>
<span class="k">def</span> <span class="nf">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc_type</span><span class="p">,</span> <span class="n">exc_value</span><span class="p">,</span> <span class="n">traceback</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">def</span> <span class="fm">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc_type</span><span class="p">,</span> <span class="n">exc_value</span><span class="p">,</span> <span class="n">traceback</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="ow">or</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="kc">False</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">Wow64RevertWow64FsRedirection</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OldValue</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">False</span></div>
@@ -670,13 +673,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+11 -8
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.winobject.apisetmap &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.winobject.apisetmap &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -42,7 +45,7 @@
<span class="kn">import</span> <span class="nn">windows</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</span> <span class="k">import</span> <span class="n">utils</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">utils</span>
<span class="k">def</span> <span class="nf">get_api_set_map_for_current_process</span><span class="p">(</span><span class="n">base</span><span class="p">):</span>
@@ -59,7 +62,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">version</span> <span class="o">=</span> <span class="kc">None</span> <span class="c1">#: The version of the ApiSetMap</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">base</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">base</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">=</span> <span class="n">base</span>
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span>
@@ -250,13 +253,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
@@ -0,0 +1,599 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.winobject.device_manager &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for windows.winobject.device_manager</h1><div class="highlight"><pre>
<span></span><span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">itertools</span>
<span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</span>
<span class="kn">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.security</span> <span class="kn">import</span> <span class="n">SecurityDescriptor</span>
<span class="kn">from</span> <span class="nn">windows.utils</span> <span class="kn">import</span> <span class="n">fixedproperty</span>
<div class="viewcode-block" id="DeviceManager"><a class="viewcode-back" href="../../../device_manager.html#windows.winobject.device_manager.DeviceManager">[docs]</a><span class="k">class</span> <span class="nc">DeviceManager</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent the device manager&quot;&quot;&quot;</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">classes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The list of installed device classes.</span>
<span class="sd"> :return: [:class:`DeviceClass`] -- A list of :class:`DeviceClass`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_classes_generator</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">_classes_generator</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">for</span> <span class="n">index</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">count</span><span class="p">():</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">yield</span> <span class="bp">self</span><span class="o">.</span><span class="n">_enumerate_classes</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CR_NO_SUCH_VALUE</span><span class="p">:</span>
<span class="k">break</span>
<span class="c1"># Some index values might represent list entries containing invalid class data,</span>
<span class="c1"># in which case the function returns CR_INVALID_DATA.</span>
<span class="c1"># This return value can be ignored.</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CR_INVALID_DATA</span><span class="p">:</span>
<span class="k">continue</span>
<span class="k">raise</span>
<span class="k">def</span> <span class="nf">_enumerate_classes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">DeviceClass</span><span class="p">()</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CM_Enumerate_Classes</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">res</span><span class="p">,</span> <span class="n">flags</span><span class="p">)</span>
<span class="k">return</span> <span class="n">res</span></div>
<div class="viewcode-block" id="DeviceClass"><a class="viewcode-back" href="../../../device_manager.html#windows.winobject.device_manager.DeviceClass">[docs]</a><span class="k">class</span> <span class="nc">DeviceClass</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">GUID</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A Device class, which is mainly a :class:`GUID` with additional attributes&quot;&quot;&quot;</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="c1"># Bypass GUID __init__ that is not revelant here</span>
<span class="k">pass</span>
<span class="nd">@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="sd">&quot;&quot;&quot;The name of the device class&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_device_class_name</span><span class="p">()</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">devices</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The set of devices of the current class.</span>
<span class="sd"> :type: :class:`DeviceInformationSet`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">enumerate_devices</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">enumerate_devices</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="n">handle</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">SetupDiGetClassDevsA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">Flags</span><span class="o">=</span><span class="n">flags</span><span class="p">)</span>
<span class="k">return</span> <span class="n">DeviceInformationSet</span><span class="p">(</span><span class="n">handle</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_get_device_class_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">name</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">gdef</span><span class="o">.</span><span class="n">MAX_CLASS_NAME_LEN</span><span class="p">)</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">SetupDiClassNameFromGuidA</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="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">value</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">guid_cls</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_string</span><span class="p">()</span>
<span class="k">return</span> <span class="s2">&quot;&quot;&quot;&lt;</span><span class="si">{0}</span><span class="s2"> name=&quot;</span><span class="si">{1}</span><span class="s2">&quot; guid=</span><span class="si">{2}</span><span class="s2">&gt;&quot;&quot;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</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="n">guid_cls</span><span class="p">)</span>
<span class="fm">__str__</span> <span class="o">=</span> <span class="fm">__repr__</span> <span class="c1"># Overwrite default GUID str</span></div>
<div class="viewcode-block" id="DeviceInformationSet"><a class="viewcode-back" href="../../../device_manager.html#windows.winobject.device_manager.DeviceInformationSet">[docs]</a><span class="k">class</span> <span class="nc">DeviceInformationSet</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">HDEVINFO</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A device instances, can be itered to retrieve the underliyings :class:`DeviceInstance`&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">all_device_infos</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">for</span> <span class="n">index</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">count</span><span class="p">():</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">yield</span> <span class="bp">self</span><span class="o">.</span><span class="n">enum_device_info</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_NO_MORE_ITEMS</span><span class="p">:</span>
<span class="k">return</span>
<span class="k">raise</span>
<span class="fm">__iter__</span> <span class="o">=</span> <span class="n">all_device_infos</span>
<span class="k">def</span> <span class="nf">enum_device_info</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">):</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">DeviceInstance</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">cbSize</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">res</span><span class="p">)</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">SetupDiEnumDeviceInfo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">,</span> <span class="n">res</span><span class="p">)</span>
<span class="k">return</span> <span class="n">res</span>
<div class="viewcode-block" id="DeviceInformationSet.enum_device_interface"><a class="viewcode-back" href="../../../device_manager.html#windows.winobject.device_manager.DeviceInformationSet.enum_device_interface">[docs]</a> <span class="k">def</span> <span class="nf">enum_device_interface</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Not Implemented Yet&quot;&quot;&quot;</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;enum_device_interface&quot;</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">all</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
<div class="viewcode-block" id="DeviceInstance"><a class="viewcode-back" href="../../../device_manager.html#windows.winobject.device_manager.DeviceInstance">[docs]</a><span class="k">class</span> <span class="nc">DeviceInstance</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SP_DEVINFO_DATA</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;An instance of a Device.</span>
<span class="sd"> The properties are from the page https://docs.microsoft.com/en-us/windows/win32/api/setupapi/nf-setupapi-setupdigetdeviceregistrypropertya#spdrp_address</span>
<span class="sd"> &quot;&quot;&quot;</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">information_set</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">information_set</span> <span class="o">=</span> <span class="n">information_set</span>
<span class="c1"># make a .device_class ? that return the DeviceClass ased in ClassGuid ?</span>
<span class="k">def</span> <span class="nf">get_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">property</span><span class="p">):</span>
<span class="n">datatype</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">buffer_size</span> <span class="o">=</span> <span class="mh">0x1000</span>
<span class="n">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">BYTE</span><span class="p">,</span> <span class="n">nbelt</span><span class="o">=</span><span class="n">buffer_size</span><span class="p">)()</span>
<span class="n">required_size</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
<span class="c1"># Registry parsing code expect W stuff, so use W function</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">SetupDiGetDeviceRegistryPropertyW</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">information_set</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="nb">property</span><span class="p">,</span> <span class="n">datatype</span><span class="p">,</span> <span class="n">buffer</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">LPBYTE</span><span class="p">),</span> <span class="n">buffer_size</span><span class="p">,</span> <span class="n">required_size</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_INVALID_DATA</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">raise</span>
<span class="c1"># PropertyRegDataType</span>
<span class="c1"># A pointer to a variable that receives the data type of the property</span>
<span class="c1"># that is being retrieved.</span>
<span class="c1"># This is one of the standard registry data types</span>
<span class="c1"># Look like its registry based, so use the registry decoders :)</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">registry</span><span class="o">.</span><span class="n">decode_registry_buffer</span><span class="p">(</span><span class="n">datatype</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">buffer</span><span class="p">,</span> <span class="n">required_size</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_generate_property_getter</span><span class="p">(</span><span class="n">prop</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">getter</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_property</span><span class="p">(</span><span class="n">prop</span><span class="p">)</span>
<span class="k">return</span> <span class="nb">property</span><span class="p">(</span><span class="n">getter</span><span class="p">)</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">_generate_property_getter</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SPDRP_FRIENDLYNAME</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The name of the device&quot;&quot;&quot;</span>
<span class="n">description</span> <span class="o">=</span> <span class="n">_generate_property_getter</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SPDRP_DEVICEDESC</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The description of the device&quot;&quot;&quot;</span>
<span class="n">hardware_id</span> <span class="o">=</span> <span class="n">_generate_property_getter</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SPDRP_HARDWAREID</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The list of hardware IDs for the device.</span>
<span class="sd"> (https://docs.microsoft.com/en-us/windows/win32/api/setupapi/nf-setupapi-setupdigetdeviceregistrypropertya#spdrp_hardwareid)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">enumerator_name</span> <span class="o">=</span> <span class="n">_generate_property_getter</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SPDRP_ENUMERATOR_NAME</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The enumerator name of the devices</span>
<span class="sd"> (https://docs.microsoft.com/en-us/windows/win32/api/setupapi/nf-setupapi-setupdigetdeviceregistrypropertya#spdrp_enumerator_name)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">driver</span> <span class="o">=</span> <span class="n">_generate_property_getter</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SPDRP_DRIVER</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The driver of the device</span>
<span class="sd"> https://docs.microsoft.com/en-us/windows/win32/api/setupapi/nf-setupapi-setupdigetdeviceregistrypropertya#spdrp_driver</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Map on Device type ?</span>
<span class="c1"># https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/specifying-device-types</span>
<span class="nb">type</span> <span class="o">=</span> <span class="n">_generate_property_getter</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SPDRP_DEVTYPE</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The type of device</span>
<span class="sd"> (https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/specifying-device-types)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">upper_filters</span> <span class="o">=</span> <span class="n">_generate_property_getter</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SPDRP_UPPERFILTERS</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;A list of string that contains the names of a device&#39;s upper filter drivers.&quot;&quot;&quot;</span>
<span class="n">lower_filters</span> <span class="o">=</span> <span class="n">_generate_property_getter</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SPDRP_LOWERFILTERS</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;A list of string that contains the names of a device&#39;s lower filter drivers.&quot;&quot;&quot;</span>
<span class="n">raw_security_descriptor</span> <span class="o">=</span> <span class="n">_generate_property_getter</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SPDRP_SECURITY</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The raw (binary) security descriptor of the device&quot;&quot;&quot;</span>
<span class="c1"># I would prefer to use the security_descriptor sddl</span>
<span class="c1"># ssdl = _generate_property_getter(gdef.SPDRP_SECURITY_SDS)</span>
<span class="n">service_name</span> <span class="o">=</span> <span class="n">_generate_property_getter</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SPDRP_SERVICE</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The name of the service for the device</span>
<span class="sd"> (https://docs.microsoft.com/en-us/windows/win32/api/setupapi/nf-setupapi-setupdigetdeviceregistrypropertya#spdrp_service)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">manufacturer</span> <span class="o">=</span> <span class="n">_generate_property_getter</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SPDRP_MFG</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The name of the device manufacturer.&quot;&quot;&quot;</span>
<span class="n">location_information</span> <span class="o">=</span> <span class="n">_generate_property_getter</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SPDRP_LOCATION_INFORMATION</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The hardware location of a device.&quot;&quot;&quot;</span>
<span class="n">location_paths</span> <span class="o">=</span> <span class="n">_generate_property_getter</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SPDRP_LOCATION_PATHS</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;A list of strings that represents the location of the device in the device tree.&quot;&quot;&quot;</span>
<span class="c1"># Looks like it can raise ERROR_NO_SUCH_DEVINST</span>
<span class="c1"># install_date = _generate_property_getter(gdef.SPDRP_INSTALL_STATE)</span>
<span class="n">capabilites</span> <span class="o">=</span> <span class="n">_generate_property_getter</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SPDRP_CAPABILITIES</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The device capabilites</span>
<span class="sd"> (https://docs.microsoft.com/en-us/windows/win32/api/setupapi/nf-setupapi-setupdigetdeviceregistrypropertya#spdrp_capabilities)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">bus_type</span> <span class="o">=</span> <span class="n">_generate_property_getter</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SPDRP_BUSTYPEGUID</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The function retrieves the GUID for the device&#39;s bus type.&quot;&quot;&quot;</span>
<span class="n">bus_number</span> <span class="o">=</span> <span class="n">_generate_property_getter</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SPDRP_BUSNUMBER</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The device&#39;s bus number.&quot;&quot;&quot;</span>
<span class="n">address</span> <span class="o">=</span> <span class="n">_generate_property_getter</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SPDRP_ADDRESS</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The device&#39;s address.&quot;&quot;&quot;</span>
<span class="n">ui_number</span> <span class="o">=</span> <span class="n">_generate_property_getter</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SPDRP_UI_NUMBER</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;Retrieves a DWORD value set to the value of the UINumber member of the device&#39;s&quot;&quot;&quot;</span>
<span class="n">ui_number_desc_format</span> <span class="o">=</span> <span class="n">_generate_property_getter</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SPDRP_UI_NUMBER_DESC_FORMAT</span><span class="p">)</span>
<span class="c1"># Getter with special error handling</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">device_object_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The function retrieves a string that contains the name that is associated with the device&#39;s PDO.&quot;&quot;&quot;</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">get_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SPDRP_PHYSICAL_DEVICE_OBJECT_NAME</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_INVALID_DATA</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_NO_SUCH_DEVINST</span><span class="p">):</span>
<span class="k">raise</span>
<span class="c1"># https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/hardware-resources</span>
<span class="c1"># Explanation of types:</span>
<span class="c1"># - https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/hardware-resources#logical-configuration-types-for-resource-requirements-lists</span>
<span class="k">def</span> <span class="nf">get_first_logical_configuration</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">type</span><span class="p">):</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">LogicalConfiguration</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">CM_Get_First_Log_Conf</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">DevInst</span><span class="p">,</span> <span class="nb">type</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CR_CALL_NOT_IMPLEMENTED</span><span class="p">:</span>
<span class="n">e</span><span class="o">.</span><span class="n">strerror</span> <span class="o">+=</span> <span class="s2">&quot; (Cannot be called from Wow64 process since Win8)&quot;</span>
<span class="k">raise</span>
<span class="k">return</span> <span class="n">res</span>
<span class="k">def</span> <span class="nf">get_next_logical_configuration</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">logconf</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">HANDLE</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">CM_Get_Next_Log_Conf</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="n">logconf</span><span class="p">)</span>
<span class="k">return</span> <span class="n">res</span>
<span class="k">def</span> <span class="nf">_logical_configuration_generator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">type</span><span class="p">):</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_first_logical_configuration</span><span class="p">(</span><span class="nb">type</span><span class="p">)</span>
<span class="k">while</span> <span class="n">x</span><span class="p">:</span>
<span class="k">yield</span> <span class="n">x</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_next_logical_configuration</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CR_NO_MORE_LOG_CONF</span><span class="p">:</span>
<span class="k">return</span>
<span class="k">raise</span>
<span class="k">def</span> <span class="nf">get_logical_configuration</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">type</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_logical_configuration_generator</span><span class="p">(</span><span class="nb">type</span><span class="p">))</span>
<span class="c1"># Allocated Configuration</span>
<span class="c1"># From https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/hardware-resources#logical-configuration-types-for-resource-lists</span>
<span class="c1"># A resource list identifying resources currently in use by a device instance.</span>
<span class="c1"># !!! Only one allocated configuration can exist for each device instance.</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">allocated_configuration</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The allocated configuration of the device.</span>
<span class="sd"> (https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/hardware-resources#logical-configuration-types-for-resource-lists)</span>
<span class="sd"> :type: :class:`LogicalConfiguration`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">allocconfs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_logical_configuration</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALLOC_LOG_CONF</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">allocconfs</span><span class="p">:</span>
<span class="k">return</span> <span class="n">allocconfs</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">allocconfs</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="c1"># Only one allocated configuration can exist for each device instance.</span>
<span class="k">return</span> <span class="n">allocconfs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="c1"># Boot Configuration</span>
<span class="c1"># From https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/hardware-resources#logical-configuration-types-for-resource-lists</span>
<span class="c1"># A resource list identifying the resources assigned to a device instance when the system is booted</span>
<span class="c1"># Only one boot configuration can exist for each device instance.</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">boot_configuration</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The boot configuration of the device.</span>
<span class="sd"> (https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/hardware-resources#logical-configuration-types-for-resource-lists)</span>
<span class="sd"> :type: :class:`LogicalConfiguration`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">bootconfs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_logical_configuration</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">BOOT_LOG_CONF</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">bootconfs</span><span class="p">:</span>
<span class="k">return</span> <span class="n">bootconfs</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">bootconfs</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="c1"># Only one boot configuration can exist for each device instance.</span>
<span class="k">return</span> <span class="n">bootconfs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="c1"># Make properties for Each type of logical configuration ?</span>
<span class="c1"># &#39;advanced&#39; attributes extrapolated from properties</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">security_descriptor</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The security descriptor of the device.</span>
<span class="sd"> :type: :class:`~windows.security.SecurityDescriptor`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">SecurityDescriptor</span><span class="o">.</span><span class="n">from_binary</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">raw_security_descriptor</span><span class="p">)</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&quot;&quot;&lt;</span><span class="si">{0}</span><span class="s2"> &quot;</span><span class="si">{1}</span><span class="s2">&quot; (id=</span><span class="si">{2}</span><span class="s2">)&gt;&quot;&quot;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">DevInst</span><span class="p">)</span></div>
<div class="viewcode-block" id="LogicalConfiguration"><a class="viewcode-back" href="../../../device_manager.html#windows.winobject.device_manager.LogicalConfiguration">[docs]</a><span class="k">class</span> <span class="nc">LogicalConfiguration</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">HANDLE</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Logical Configuration of a Device instance&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">get_next_resource_descriptor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">resource</span><span class="p">,</span> <span class="n">resdes</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">resdes</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># Using logical-conf as resdes will retrieve the first one</span>
<span class="c1"># https://docs.microsoft.com/en-us/windows/win32/api/cfgmgr32/nf-cfgmgr32-cm_get_next_res_des#remarks</span>
<span class="n">resdes</span> <span class="o">=</span> <span class="bp">self</span>
<span class="n">resid</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">resource</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ResType_All</span><span class="p">:</span>
<span class="n">resid</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">RESOURCEID</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">HANDLE</span><span class="p">()</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">CM_Get_Next_Res_Des</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="n">resdes</span><span class="p">,</span> <span class="n">resource</span><span class="p">,</span> <span class="n">resid</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">resdes_type</span> <span class="o">=</span> <span class="n">resid</span><span class="o">.</span><span class="n">value</span> <span class="k">if</span> <span class="n">resid</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">resource</span>
<span class="k">return</span> <span class="n">ResourceDescriptor</span><span class="o">.</span><span class="n">from_handle_and_type</span><span class="p">(</span><span class="n">res</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">resdes_type</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">get_resources_for_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">type</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_next_resource_descriptor</span><span class="p">(</span><span class="nb">type</span><span class="p">)</span>
<span class="k">yield</span> <span class="n">current</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_next_resource_descriptor</span><span class="p">(</span><span class="nb">type</span><span class="p">,</span> <span class="n">current</span><span class="p">)</span>
<span class="k">yield</span> <span class="n">current</span>
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CR_NO_MORE_RES_DES</span><span class="p">:</span>
<span class="k">return</span>
<span class="k">raise</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">resources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The list of resources in the current logical configuration</span>
<span class="sd"> :type: [:class:`ResourceDescriptor`] -- A list of [:class:`ResourceDescriptor`]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_resources_for_type</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ResType_All</span><span class="p">))</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">{0}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span></div>
<span class="n">ResType_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">ResType_None</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_Mem</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_IO</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_DMA</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_IRQ</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_BusNumber</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_MemLarge</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_ClassSpecific</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_DevicePrivate</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_MfCardConfig</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_PcCardConfig</span><span class="p">,</span>
<span class="p">)</span>
<div class="viewcode-block" id="ResourceDescriptor"><a class="viewcode-back" href="../../../device_manager.html#windows.winobject.device_manager.ResourceDescriptor">[docs]</a><span class="k">class</span> <span class="nc">ResourceDescriptor</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">HANDLE</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Describe a resource allocated or reserved by a device instance.</span>
<span class="sd"> This class is a base class, all resources returned by :class:`LogicalConfiguration` should be one of the following:</span>
<span class="sd"> * :class:`ResourceNoType`</span>
<span class="sd"> * :class:`MemoryResource`</span>
<span class="sd"> * :class:`IoResource`</span>
<span class="sd"> * :class:`DmaResource`</span>
<span class="sd"> * :class:`IrqResource`</span>
<span class="sd"> * :class:`BusNumberResource`</span>
<span class="sd"> * :class:`MemLargeResource`</span>
<span class="sd"> * :class:`ClassSpecificResource`</span>
<span class="sd"> * :class:`DevicePrivateResource`</span>
<span class="sd"> * :class:`MfCardConfigResource`</span>
<span class="sd"> * :class:`PcCardConfigResource`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">SUBCLASSES</span> <span class="o">=</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">handle</span><span class="p">,</span> <span class="nb">type</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">ResourceDescriptor</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">handle</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">ResType_Mapper</span><span class="p">[</span><span class="nb">type</span><span class="p">]</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">from_handle_and_type</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">handle</span><span class="p">,</span> <span class="nb">type</span><span class="p">):</span>
<span class="n">ecls</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">SUBCLASSES</span><span class="p">[</span><span class="nb">type</span><span class="p">]</span>
<span class="k">return</span> <span class="n">ecls</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="nb">type</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">rawdata</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The raw data describing the resource&quot;&quot;&quot;</span>
<span class="n">data_size</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="n">winproxy</span><span class="o">.</span><span class="n">CM_Get_Res_Des_Data_Size</span><span class="p">(</span><span class="n">data_size</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="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">data_size</span> <span class="o">=</span> <span class="n">data_size</span><span class="o">.</span><span class="n">value</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="n">data_size</span><span class="p">)</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">CM_Get_Res_Des_Data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">buffer</span><span class="p">,</span> <span class="n">data_size</span><span class="p">)</span>
<span class="k">return</span> <span class="nb">bytearray</span><span class="p">(</span><span class="n">buffer</span><span class="p">[:</span><span class="n">data_size</span><span class="p">])</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">{0}</span><span class="s2"> type=</span><span class="si">{1!r}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">)</span></div>
<span class="k">class</span> <span class="nc">ResourceDescriptorWithHeader</span><span class="p">(</span><span class="n">ResourceDescriptor</span><span class="p">):</span>
<span class="c1"># Assert the header is the first field</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">header_type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># Type of first field</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">DATA_TYPE</span><span class="o">.</span><span class="n">_fields_</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">header</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">header_type</span><span class="o">.</span><span class="n">from_buffer</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rawdata</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">class</span> <span class="nc">ResourceDescriptorWithHeaderAndRanges</span><span class="p">(</span><span class="n">ResourceDescriptorWithHeader</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">count_field_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># Assert (manyally checked) that the first field of the</span>
<span class="c1"># header is a field containing the size of the data array</span>
<span class="c1"># Return name of the first field of the header</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">header_type</span><span class="o">.</span><span class="n">_fields_</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="nd">@property</span>
<span class="k">def</span> <span class="nf">data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">count_field_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">count_field_name</span><span class="p">()</span>
<span class="n">count</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="p">,</span> <span class="n">count_field_name</span><span class="p">)</span>
<span class="c1"># No entry:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">count</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[]</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Resource descriptor with non-zero entry in range array&quot;</span><span class="p">)</span>
<div class="viewcode-block" id="ResourceNoType"><a class="viewcode-back" href="../../../device_manager.html#windows.winobject.device_manager.ResourceNoType">[docs]</a><span class="k">class</span> <span class="nc">ResourceNoType</span><span class="p">(</span><span class="n">ResourceDescriptor</span><span class="p">):</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">data</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">rawdata</span></div>
<div class="viewcode-block" id="MemoryResource"><a class="viewcode-back" href="../../../device_manager.html#windows.winobject.device_manager.MemoryResource">[docs]</a><span class="k">class</span> <span class="nc">MemoryResource</span><span class="p">(</span><span class="n">ResourceDescriptorWithHeaderAndRanges</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A resource of type MEM_RESOURCE&quot;&quot;&quot;</span>
<span class="n">DATA_TYPE</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">MEM_RESOURCE</span>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">{0}</span><span class="s2"> : [</span><span class="si">{1:#016x}</span><span class="s2">-</span><span class="si">{2:#016x}</span><span class="s2">]&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">MD_Alloc_Base</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">MD_Alloc_End</span><span class="p">)</span></div>
<div class="viewcode-block" id="IoResource"><a class="viewcode-back" href="../../../device_manager.html#windows.winobject.device_manager.IoResource">[docs]</a><span class="k">class</span> <span class="nc">IoResource</span><span class="p">(</span><span class="n">ResourceDescriptorWithHeaderAndRanges</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A resource of type IO_RESOURCE&quot;&quot;&quot;</span>
<span class="n">DATA_TYPE</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IO_RESOURCE</span>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">{0}</span><span class="s2"> : [</span><span class="si">{1:#016x}</span><span class="s2">-</span><span class="si">{2:#016x}</span><span class="s2">]&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">IOD_Alloc_Base</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">IOD_Alloc_End</span><span class="p">)</span></div>
<div class="viewcode-block" id="DmaResource"><a class="viewcode-back" href="../../../device_manager.html#windows.winobject.device_manager.DmaResource">[docs]</a><span class="k">class</span> <span class="nc">DmaResource</span><span class="p">(</span><span class="n">ResourceDescriptorWithHeaderAndRanges</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A resource of type DMA_RESOURCE&quot;&quot;&quot;</span>
<span class="n">DATA_TYPE</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DMA_RESOURCE</span>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">{0}</span><span class="s2"> : [</span><span class="si">{1:#016x}</span><span class="s2">]&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">DD_Alloc_Chan</span><span class="p">)</span></div>
<div class="viewcode-block" id="IrqResource"><a class="viewcode-back" href="../../../device_manager.html#windows.winobject.device_manager.IrqResource">[docs]</a><span class="k">class</span> <span class="nc">IrqResource</span><span class="p">(</span><span class="n">ResourceDescriptorWithHeaderAndRanges</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A resource of type IRQ_RESOURCE&quot;&quot;&quot;</span>
<span class="c1"># 32/64 based on current process bitness</span>
<span class="c1"># Cross bitness cannot be implemented as &gt;=Win8 block it</span>
<span class="n">DATA_TYPE</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IRQ_RESOURCE</span>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">{0}</span><span class="s2"> : [</span><span class="si">{1:#016x}</span><span class="s2">]&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">IRQD_Alloc_Num</span><span class="p">)</span></div>
<div class="viewcode-block" id="BusNumberResource"><a class="viewcode-back" href="../../../device_manager.html#windows.winobject.device_manager.BusNumberResource">[docs]</a><span class="k">class</span> <span class="nc">BusNumberResource</span><span class="p">(</span><span class="n">ResourceDescriptorWithHeaderAndRanges</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A resource of type BUSNUMBER_RESOURCE&quot;&quot;&quot;</span>
<span class="n">DATA_TYPE</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BUSNUMBER_RESOURCE</span>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">{0}</span><span class="s2"> : [</span><span class="si">{1:#016x}</span><span class="s2">-</span><span class="si">{2:#016x}</span><span class="s2">]&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">BUSD_Alloc_Base</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">BUSD_Alloc_End</span><span class="p">)</span></div>
<div class="viewcode-block" id="MemLargeResource"><a class="viewcode-back" href="../../../device_manager.html#windows.winobject.device_manager.MemLargeResource">[docs]</a><span class="k">class</span> <span class="nc">MemLargeResource</span><span class="p">(</span><span class="n">ResourceDescriptor</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A resource of type MEM_LARGE_RESOURCE&quot;&quot;&quot;</span>
<span class="n">DATA_TYPE</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">MEM_LARGE_RESOURCE</span>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">{0}</span><span class="s2"> : [</span><span class="si">{1:#016x}</span><span class="s2">-</span><span class="si">{2:#016x}</span><span class="s2">]&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">MLD_Alloc_Base</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">MLD_Alloc_End</span><span class="p">)</span></div>
<div class="viewcode-block" id="ClassSpecificResource"><a class="viewcode-back" href="../../../device_manager.html#windows.winobject.device_manager.ClassSpecificResource">[docs]</a><span class="k">class</span> <span class="nc">ClassSpecificResource</span><span class="p">(</span><span class="n">ResourceDescriptorWithHeader</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A resource of type CS_RESOURCE&quot;&quot;&quot;</span>
<span class="n">DATA_TYPE</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CS_RESOURCE</span></div>
<span class="c1"># Any idea for __str__ ?</span>
<div class="viewcode-block" id="DevicePrivateResource"><a class="viewcode-back" href="../../../device_manager.html#windows.winobject.device_manager.DevicePrivateResource">[docs]</a><span class="k">class</span> <span class="nc">DevicePrivateResource</span><span class="p">(</span><span class="n">ResourceDescriptor</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A device private resource</span>
<span class="sd"> (https://docs.microsoft.com/en-us/windows-hardware/drivers/install/devprivate-resource)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">header</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">None</span></div>
<span class="c1"># Any idea for __str__ ?</span>
<div class="viewcode-block" id="MfCardConfigResource"><a class="viewcode-back" href="../../../device_manager.html#windows.winobject.device_manager.MfCardConfigResource">[docs]</a><span class="k">class</span> <span class="nc">MfCardConfigResource</span><span class="p">(</span><span class="n">ResourceDescriptorWithHeader</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A resource of type MFCARD_RESOURCE&quot;&quot;&quot;</span>
<span class="n">DATA_TYPE</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">MFCARD_RESOURCE</span></div>
<span class="c1"># Any idea for __str__ ?</span>
<div class="viewcode-block" id="PcCardConfigResource"><a class="viewcode-back" href="../../../device_manager.html#windows.winobject.device_manager.PcCardConfigResource">[docs]</a><span class="k">class</span> <span class="nc">PcCardConfigResource</span><span class="p">(</span><span class="n">ResourceDescriptorWithHeader</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A resource of type PCCARD_RESOURCE&quot;&quot;&quot;</span>
<span class="n">DATA_TYPE</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PCCARD_RESOURCE</span></div>
<span class="c1"># Any idea for __str__ ?</span>
<span class="c1"># Flemme de faire une meta-classe pour ca..</span>
<span class="n">ResourceDescriptor</span><span class="o">.</span><span class="n">SUBCLASSES</span><span class="o">.</span><span class="n">update</span><span class="p">({</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_None</span><span class="p">:</span> <span class="n">ResourceNoType</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_Mem</span><span class="p">:</span> <span class="n">MemoryResource</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_IO</span><span class="p">:</span> <span class="n">IoResource</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_DMA</span><span class="p">:</span> <span class="n">DmaResource</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_IRQ</span><span class="p">:</span> <span class="n">IrqResource</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_BusNumber</span><span class="p">:</span> <span class="n">BusNumberResource</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_MemLarge</span><span class="p">:</span> <span class="n">MemLargeResource</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_ClassSpecific</span><span class="p">:</span> <span class="n">ClassSpecificResource</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_DevicePrivate</span><span class="p">:</span> <span class="n">DevicePrivateResource</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_MfCardConfig</span><span class="p">:</span> <span class="n">MfCardConfigResource</span><span class="p">,</span>
<span class="n">gdef</span><span class="o">.</span><span class="n">ResType_PcCardConfig</span><span class="p">:</span> <span class="n">PcCardConfigResource</span><span class="p">,</span>
<span class="p">})</span>
</pre></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+135 -96
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.winobject.event_log &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.winobject.event_log &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -40,12 +43,12 @@
<span></span><span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">os.path</span>
<span class="kn">import</span> <span class="nn">xml.dom.minidom</span>
<span class="kn">from</span> <span class="nn">contextlib</span> <span class="k">import</span> <span class="n">contextmanager</span>
<span class="kn">from</span> <span class="nn">contextlib</span> <span class="kn">import</span> <span class="n">contextmanager</span>
<span class="kn">import</span> <span class="nn">windows</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</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="k">import</span> <span class="n">int_types</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="kn">import</span> <span class="n">int_types</span><span class="p">,</span> <span class="n">basestring</span>
<span class="c1"># Helpers</span>
@@ -96,7 +99,7 @@
<span class="c1"># No need to pass any param to close ourself :)</span>
<span class="n">_close_function</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">EvtClose</span>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</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="k">if</span> <span class="ow">not</span> <span class="nb">bool</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">_close_function</span><span class="p">()</span>
@@ -106,11 +109,11 @@
<span class="sd">&quot;&quot;&quot;Represent an Event-log query&quot;&quot;&quot;</span>
<span class="n">TIMEOUT</span> <span class="o">=</span> <span class="mh">0x1000</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">channel</span><span class="o">=</span><span class="kc">None</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">handle</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">channel</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">EvtQuery</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">handle</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">channel</span> <span class="o">=</span> <span class="n">channel</span>
<span class="k">def</span> <span class="nf">__next__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__next__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return the next :class:`EvtEvent` matching the query&quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">event</span> <span class="o">=</span> <span class="n">EvtEvent</span><span class="p">(</span><span class="n">channel</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="p">)</span>
@@ -123,10 +126,25 @@
<span class="k">assert</span> <span class="n">ret</span><span class="o">.</span><span class="n">value</span> <span class="o">==</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">event</span>
<span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__iter__</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="k">def</span> <span class="nf">seek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">position</span><span class="p">,</span> <span class="n">seek_flags</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<div class="viewcode-block" id="EvtQuery.seek"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.EvtQuery.seek">[docs]</a> <span class="k">def</span> <span class="nf">seek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">position</span><span class="p">,</span> <span class="n">seek_flags</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Seek to ``position``.</span>
<span class="sd"> ``seek_flags`` can be one of:</span>
<span class="sd"> * ``None``</span>
<span class="sd"> * ``EvtSeekRelativeToFirst``</span>
<span class="sd"> * ``EvtSeekRelativeToLast``</span>
<span class="sd"> * ``EvtSeekRelativeToBookmark``</span>
<span class="sd"> If ``seek_flags`` is None:</span>
<span class="sd"> * ``position &gt;= 0`` will use ``EvtSeekRelativeToFirst``</span>
<span class="sd"> * ``position &lt; 0`` will use ``EvtSeekRelativeToLast`` and with ``position+1``</span>
<span class="sd"> * This allow retrieve the ``position`` lasts events</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">seek_flags</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="n">position</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">seek_flags</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtSeekRelativeToFirst</span>
@@ -136,7 +154,7 @@
<span class="c1"># If user do not want this calcul it can directly pass seek_flags</span>
<span class="n">seek_flags</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtSeekRelativeToLast</span>
<span class="n">position</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">EvtSeek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">position</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">seek_flags</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">EvtSeek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">position</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">seek_flags</span><span class="p">)</span></div>
<span class="nb">next</span> <span class="o">=</span> <span class="fm">__next__</span> <span class="c1"># Yep.. real name is &#39;next&#39; in Py2 :D</span>
@@ -159,7 +177,7 @@
<div class="viewcode-block" id="EvtEvent"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.EvtEvent">[docs]</a><span class="k">class</span> <span class="nc">EvtEvent</span><span class="p">(</span><span class="n">EvtHandle</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;An Event log&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">channel</span><span class="o">=</span><span class="kc">None</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">handle</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">channel</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">EvtEvent</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">handle</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">channel</span> <span class="o">=</span> <span class="n">channel</span>
@@ -214,10 +232,11 @@
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">ctx</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtRenderEventValues</span><span class="p">)</span>
<span class="k">return</span> <span class="p">[</span><span class="n">r</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">result</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">event_values</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<div class="viewcode-block" id="EvtEvent.event_values"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.EvtEvent.event_values">[docs]</a> <span class="k">def</span> <span class="nf">event_values</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The values of the event in a list&quot;&quot;&quot;</span>
<span class="n">ctx</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">EvtCreateRenderContext</span><span class="p">(</span><span class="mi">0</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">EvtRenderContextUser</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">ctx</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtRenderEventValues</span><span class="p">)</span>
<span class="k">return</span> <span class="p">[</span><span class="n">r</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">result</span><span class="p">]</span>
<span class="k">return</span> <span class="p">[</span><span class="n">r</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">result</span><span class="p">]</span></div>
<span class="k">def</span> <span class="nf">get_raw_values</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtRenderContextValues</span><span class="p">):</span>
<span class="n">nbelt</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">values</span><span class="p">)</span>
@@ -234,8 +253,14 @@
<span class="c1"># Properties arround common Event/System values</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">provider</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The provider of the event&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">system_values</span><span class="p">()[</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtSystemProviderName</span><span class="p">]</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">computer</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The computer that generated the event&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">system_values</span><span class="p">()[</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtSystemComputer</span><span class="p">]</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The ID of the Event&quot;&quot;&quot;</span>
@@ -271,6 +296,16 @@
<span class="sd">&quot;&quot;&quot;The process ID of the Event&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">value</span><span class="p">(</span><span class="s2">&quot;Event/System/Execution/@ThreadID&quot;</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">error_payload</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">raw</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">value</span><span class="p">(</span><span class="s2">&quot;Event/ProcessingErrorData/EventPayload&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="nb">bytearray</span><span class="p">(</span><span class="n">raw</span><span class="p">)</span> <span class="k">if</span> <span class="n">raw</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>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">user</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The User ID associated with the Event&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">system_values</span><span class="p">()[</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtSystemUserID</span><span class="p">]</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The medata for the current Event</span>
@@ -285,9 +320,6 @@
<span class="c1"># id not found: try via the Provider in the event (classic channel)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">get_classic_event_metadata</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">provider</span><span class="p">)</span>
<span class="c1"># Test</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># user/event specifique data</span>
@@ -301,12 +333,51 @@
<span class="n">event_data_name</span> <span class="o">=</span> <span class="p">(</span><span class="n">i</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="o">.</span><span class="n">event_data</span> <span class="k">if</span> <span class="n">i</span><span class="p">[</span><span class="s2">&quot;type&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;data&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span><span class="n">v</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">event_data_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">event_values</span><span class="p">())}</span>
<span class="k">def</span> <span class="nf">xml_data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">xmlevt</span> <span class="o">=</span> <span class="n">xml</span><span class="o">.</span><span class="n">dom</span><span class="o">.</span><span class="n">minidom</span><span class="o">.</span><span class="n">parseString</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">render_xml</span><span class="p">())</span>
<span class="n">res</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">eventdata</span> <span class="o">=</span> <span class="n">xmlevt</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s2">&quot;EventData&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">eventdata</span><span class="p">:</span>
<span class="c1"># &lt;Data Name=&#39;FIELD_NAME&#39;&gt;FIELD_VALUE&lt;/Data&gt;</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">datanode</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">xmlevt</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s2">&quot;Data&quot;</span><span class="p">)):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">datanode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s2">&quot;Name&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">name</span><span class="p">:</span>
<span class="c1"># Some Data in old EVTX have no name (Windows Powershell)</span>
<span class="c1"># Do the best we can by using the position of the event</span>
<span class="n">name</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="k">if</span> <span class="n">datanode</span><span class="o">.</span><span class="n">hasChildNodes</span><span class="p">():</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">datanode</span><span class="o">.</span><span class="n">firstChild</span><span class="o">.</span><span class="n">nodeValue</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">res</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">pdb</span><span class="p">;</span><span class="n">pdb</span><span class="o">.</span><span class="n">set_trace</span><span class="p">()</span>
<span class="n">res</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
<span class="n">userdata</span> <span class="o">=</span> <span class="n">xmlevt</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s2">&quot;UserData&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">userdata</span><span class="p">:</span>
<span class="c1"># &lt;UserData&gt;</span>
<span class="c1"># &lt;EventXML xmlns=&quot;Event_NS&quot;&gt;</span>
<span class="c1"># &lt;FIELD_NAME&gt;FIELD_VALUE&lt;/FIELD_NAME&gt;</span>
<span class="c1"># &lt;/EventXML&gt;</span>
<span class="c1"># &lt;/UserData&gt;</span>
<span class="k">for</span> <span class="n">datanode</span> <span class="ow">in</span> <span class="n">userdata</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">firstChild</span><span class="o">.</span><span class="n">childNodes</span><span class="p">:</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">datanode</span><span class="o">.</span><span class="n">tagName</span>
<span class="k">if</span> <span class="n">datanode</span><span class="o">.</span><span class="n">hasChildNodes</span><span class="p">():</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">datanode</span><span class="o">.</span><span class="n">firstChild</span><span class="o">.</span><span class="n">nodeValue</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">assert</span> <span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">res</span>
<span class="n">res</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
<span class="k">return</span> <span class="n">res</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">date</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Event.time_created as a datetime&quot;&quot;&quot;</span>
<span class="sd">&quot;&quot;&quot;``Event.time_created`` as a :class:``datetime``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">datetime_from_filetime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">time_created</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">creation_time</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">datetime_from_filetime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">time_created</span><span class="p">)</span>
<span class="k">return</span> <span class="s1">&#39;&lt;</span><span class="si">{0}</span><span class="s1"> id=&quot;</span><span class="si">{self.id}</span><span class="s1">&quot; time=&quot;</span><span class="si">{creation_time}</span><span class="s1">&quot;&gt;&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">creation_time</span><span class="o">=</span><span class="n">creation_time</span><span class="p">)</span></div>
@@ -372,6 +443,10 @@
<span class="n">vtype</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtVarTypeUInt64</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
<span class="n">vtype</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtVarTypeString</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">):</span>
<span class="c1"># not basestring and bytes -&gt; py3 bytes</span>
<span class="n">vtype</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtVarTypeBinary</span>
<span class="n">value</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">BYTE</span><span class="p">)</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;LATER&quot;</span><span class="p">)</span>
<span class="bp">self</span> <span class="o">=</span> <span class="bp">cls</span><span class="p">()</span>
@@ -385,36 +460,16 @@
<span class="bp">self</span><span class="o">.</span><span class="n">Count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">{0}</span><span class="s2"> of type=</span><span class="si">{1}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span>
<span class="c1"># x = windows.winproxy.EvtQuery(None,</span>
<span class="c1"># &quot;Microsoft-Windows-Windows Firewall With Advanced Security/Firewall&quot;,</span>
<span class="c1"># &quot;Event/System[EventID=2004 or EventID=2006]&quot;,</span>
<span class="c1"># gdef.EvtQueryChannelPath + gdef.EvtQueryForwardDirection)</span>
<span class="c1"># print(x)</span>
<span class="c1"># eq = EvtQuery(x)</span>
<span class="c1"># event = next(eq)</span>
<span class="c1"># xx = gdef.LPWSTR(&quot;ModifyingApplication&quot;)</span>
<span class="c1"># xx = gdef.LPWSTR(&quot;Event/System/Channel&quot;)</span>
<span class="c1"># xx = gdef.LPWSTR(&#39;Event/EventData/Data[@Name=&quot;ModifyingApplication&quot;]&#39;)</span>
<span class="c1"># xx = gdef.LPWSTR(&#39;Event/System/EventID&#39;)</span>
<span class="c1"># event = next(eq)</span>
<span class="c1"># list(channels())</span>
<div class="viewcode-block" id="EvtChannel"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.EvtChannel">[docs]</a><span class="k">class</span> <span class="nc">EvtChannel</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;An Event Log channel&quot;&quot;&quot;</span>
<span class="n">DEFAULT_QUERY_FLAGS</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtQueryChannelPath</span> <span class="o">+</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtQueryForwardDirection</span>
<span class="k">def</span> <span class="nf">__init__</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="k">def</span> <span class="fm">__init__</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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
<span class="bp">self</span><span class="o">.</span><span class="n">event_metadata_by_id</span> <span class="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">classic_event_metadata_by_id</span> <span class="o">=</span> <span class="p">{}</span> <span class="c1"># For classic only</span>
@@ -486,7 +541,7 @@
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">classic_event_metadata_by_id</span><span class="p">[</span><span class="n">providername</span><span class="p">][</span><span class="nb">id</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s1">&#39;&lt;</span><span class="si">{0}</span><span class="s1"> &quot;</span><span class="si">{1}</span><span class="s1">&quot;&gt;&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span></div>
@@ -505,7 +560,7 @@
<div class="viewcode-block" id="ChannelConfig"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.ChannelConfig">[docs]</a><span class="k">class</span> <span class="nc">ChannelConfig</span><span class="p">(</span><span class="n">EvtHandle</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The configuration of a event channel&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</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">handle</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">ChannelConfig</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">handle</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
@@ -537,12 +592,14 @@
<span class="sd">&quot;&quot;&quot;``True`` if the channel is a classic event channel (for example the Application or System log)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="n">chaninfo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtChannelConfigClassicEventlog</span><span class="p">)</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s1">&#39;&lt;</span><span class="si">{0}</span><span class="s1"> &quot;</span><span class="si">{1}</span><span class="s1">&quot;&gt;&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span></div>
<span class="k">class</span> <span class="nc">PublisherMetadataChannel</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pub_metadata</span><span class="p">,</span> <span class="n">channel_id</span><span class="p">):</span>
<span class="k">class</span> <span class="nc">PublisherMetadataChannel</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent a PublisherMetadataChannel (see https://docs.microsoft.com/en-us/windows/win32/api/winevt/ne-winevt-evt_publisher_metadata_property_id)&quot;&quot;&quot;</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">pub_metadata</span><span class="p">,</span> <span class="n">channel_id</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">PublisherMetadataChannel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pub_metadata</span> <span class="o">=</span> <span class="n">pub_metadata</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_id</span> <span class="o">=</span> <span class="n">channel_id</span>
@@ -552,28 +609,33 @@
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">flags</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The flags of the ``PublisherMetadataChannel``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_channel_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataChannelReferenceFlags</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="sd">&quot;&quot;&quot;The name of the ``PublisherMetadataChannel``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_channel_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataChannelReferencePath</span><span class="p">))</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The reference id of the ``PublisherMetadataChannel``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_channel_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataChannelReferenceID</span><span class="p">))</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">index</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The reference index of the ``PublisherMetadataChannel``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_channel_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataChannelReferenceIndex</span><span class="p">))</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">message_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The message id of the ``PublisherMetadataChannel``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_channel_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataChannelReferenceMessageID</span><span class="p">))</span>
<span class="k">class</span> <span class="nc">PublisherMetadataLevel</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pub_metadata</span><span class="p">,</span> <span class="n">channel_id</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent a PublisherMetadataLevel (see https://docs.microsoft.com/en-us/windows/win32/api/winevt/ne-winevt-evt_publisher_metadata_property_id)&quot;&quot;&quot;</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">pub_metadata</span><span class="p">,</span> <span class="n">channel_id</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">PublisherMetadataLevel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pub_metadata</span> <span class="o">=</span> <span class="n">pub_metadata</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_id</span> <span class="o">=</span> <span class="n">channel_id</span>
@@ -595,8 +657,8 @@
<span class="k">class</span> <span class="nc">PublisherMetadataOpcode</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pub_metadata</span><span class="p">,</span> <span class="n">channel_id</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent a PublisherMetadataOpcode (see https://docs.microsoft.com/en-us/windows/win32/api/winevt/ne-winevt-evt_publisher_metadata_property_id)&quot;&quot;&quot;</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">pub_metadata</span><span class="p">,</span> <span class="n">channel_id</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">PublisherMetadataOpcode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pub_metadata</span> <span class="o">=</span> <span class="n">pub_metadata</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_id</span> <span class="o">=</span> <span class="n">channel_id</span>
@@ -606,20 +668,24 @@
<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="sd">&quot;&quot;&quot;The name of the ``PublisherMetadataOpcode``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_opcode_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataOpcodeName</span><span class="p">))</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The opcode value of the ``PublisherMetadataOpcode``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_opcode_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataOpcodeValue</span><span class="p">))</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">message_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The message id of the ``PublisherMetadataOpcode``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_opcode_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataOpcodeMessageID</span><span class="p">))</span>
<span class="k">class</span> <span class="nc">PublisherMetadataKeyword</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent a PublisherMetadataKeyword (see https://docs.microsoft.com/en-us/windows/win32/api/winevt/ne-winevt-evt_publisher_metadata_property_id)&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pub_metadata</span><span class="p">,</span> <span class="n">channel_id</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">pub_metadata</span><span class="p">,</span> <span class="n">channel_id</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">PublisherMetadataKeyword</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pub_metadata</span> <span class="o">=</span> <span class="n">pub_metadata</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_id</span> <span class="o">=</span> <span class="n">channel_id</span>
@@ -629,19 +695,22 @@
<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="sd">&quot;&quot;&quot;The name of the ``PublisherMetadataKeyword``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_keyword_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataKeywordName</span><span class="p">))</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The value of the ``PublisherMetadataKeyword``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_keyword_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataKeywordValue</span><span class="p">))</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">message_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The message id of the ``PublisherMetadataKeyword``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_keyword_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataKeywordMessageID</span><span class="p">))</span>
<span class="k">class</span> <span class="nc">PublisherMetadataTask</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pub_metadata</span><span class="p">,</span> <span class="n">channel_id</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent a PublisherMetadataTask (see https://docs.microsoft.com/en-us/windows/win32/api/winevt/ne-winevt-evt_publisher_metadata_property_id)&quot;&quot;&quot;</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">pub_metadata</span><span class="p">,</span> <span class="n">channel_id</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">PublisherMetadataTask</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pub_metadata</span> <span class="o">=</span> <span class="n">pub_metadata</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_id</span> <span class="o">=</span> <span class="n">channel_id</span>
@@ -651,23 +720,27 @@
<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="sd">&quot;&quot;&quot;The name of the ``PublisherMetadataTask``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_keyword_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataTaskName</span><span class="p">))</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The value of the ``PublisherMetadataTask``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_keyword_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataTaskValue</span><span class="p">))</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">event_guid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The event GUId of the ``PublisherMetadataTask``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_query_keyword_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataTaskEventGuid</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">message_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The message ID GUId of the ``PublisherMetadataTask``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_keyword_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataTaskMessageID</span><span class="p">))</span>
<div class="viewcode-block" id="EvtPublisher"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.EvtPublisher">[docs]</a><span class="k">class</span> <span class="nc">EvtPublisher</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;An Event provider&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</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="k">def</span> <span class="fm">__init__</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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
<span class="nd">@property</span>
@@ -678,13 +751,13 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">PublisherMetadata</span><span class="o">.</span><span class="n">from_publisher_name</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">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s1">&#39;&lt;</span><span class="si">{0}</span><span class="s1"> &quot;</span><span class="si">{1}</span><span class="s1">&quot;&gt;&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span></div>
<div class="viewcode-block" id="PublisherMetadata"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.PublisherMetadata">[docs]</a><span class="k">class</span> <span class="nc">PublisherMetadata</span><span class="p">(</span><span class="n">EvtHandle</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The metadata about an event provider&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</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">handle</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">PublisherMetadata</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">handle</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
@@ -860,7 +933,7 @@
<span class="k">return</span> <span class="n">publishinfo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataParameterFilePath</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s1">&#39;&lt;</span><span class="si">{0}</span><span class="s1"> &quot;</span><span class="si">{1}</span><span class="s1">&quot;&gt;&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span></div>
@@ -1062,7 +1135,7 @@
<span class="n">publisher</span><span class="o">.</span><span class="n">metadata</span> <span class="c1"># Force to retrieve a handle (check channel exists)</span>
<span class="k">return</span> <span class="n">publisher</span></div>
<div class="viewcode-block" id="EvtlogManager.__getitem__"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.EvtlogManager.__getitem__">[docs]</a> <span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<div class="viewcode-block" id="EvtlogManager.__getitem__"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.EvtlogManager.__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="sd">&quot;&quot;&quot;Open the Evt Channel/Publisher or Evtx file with ``name``</span>
<span class="sd"> :rtype: :class:`EvtChannel` or :class:`EvtPublisher` or :class:`EvtFile`</span>
@@ -1081,40 +1154,6 @@
<span class="c1"># Raise FILE_NOT_FOUND if not found (last chance)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">open_evtx_file</span><span class="p">(</span><span class="n">name</span><span class="p">)</span></div></div>
<span class="c1"># CHANNAME = &quot;Microsoft-Windows-Windows Firewall With Advanced Security/Firewall&quot;</span>
<span class="c1"># CHANNAME = r&quot;Microsoft-Windows-Windows Defender/Operational&quot;</span>
<span class="c1"># print(&quot;Working of channel: &lt;{0}&gt;&quot;.format(CHANNAME))</span>
<span class="c1"># channel = EvtChannel(CHANNAME)</span>
<span class="c1"># chanconf = channel.config</span>
<span class="c1"># publisher = chanconf.publisher</span>
<span class="c1"># open publisher metadata</span>
<span class="c1"># print(&quot;Provider is &lt;{0}&gt;&quot;.format(publisher.name))</span>
<span class="c1"># pmd = publisher.metadata</span>
<span class="c1"># chansref = pmd.chanrefs</span>
<span class="c1"># channame_by_value_id = pmd.channel_name_by_id()</span>
<span class="c1"># for event_metadata in pmd.events_metadata:</span>
<span class="c1"># id = event_metadata.id</span>
<span class="c1"># if id == 2004:</span>
<span class="c1"># print(&quot;LOL&quot;)</span>
<span class="c1"># chan = event_metadata.channel_id</span>
<span class="c1"># channame = channame_by_value_id[chan]</span>
<span class="c1"># print(&quot; * {0}) {1}&quot;.format(id, channame))</span>
<span class="c1"># if &quot;unexpected&quot; in pmd.message(event_metadata.message_id).lower():</span>
<span class="c1"># print(&quot;UNEXPECTED in message :D&quot;)</span>
<span class="c1"># query = channel.query(ids=5008)</span>
<span class="c1"># evts = list(query)</span>
</pre></div>
</div>
@@ -1147,13 +1186,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
@@ -0,0 +1,532 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.winobject.event_trace &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for windows.winobject.event_trace</h1><div class="highlight"><pre>
<span></span><span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">windows</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.pycompat</span> <span class="kn">import</span> <span class="n">basestring</span>
<span class="c1"># Renommer le fichier etw ?</span>
<span class="n">MAX_ETW_SESSIONS</span> <span class="o">=</span> <span class="mi">64</span>
<span class="n">MAX_SESSION_NAME_LEN</span> <span class="o">=</span> <span class="mi">1024</span>
<span class="n">MAX_LOGFILE_PATH_LEN</span> <span class="o">=</span> <span class="mi">1024</span>
<span class="n">MAX_SESSION_NAME_LEN_W</span> <span class="o">=</span> <span class="n">MAX_SESSION_NAME_LEN</span> <span class="o">*</span> <span class="mi">2</span>
<span class="n">MAX_LOGFILE_PATH_LEN_W</span> <span class="o">=</span> <span class="n">MAX_LOGFILE_PATH_LEN</span> <span class="o">*</span> <span class="mi">2</span>
<div class="viewcode-block" id="EventRecord"><a class="viewcode-back" href="../../../etw.html#windows.winobject.event_trace.EventRecord">[docs]</a><span class="k">class</span> <span class="nc">EventRecord</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EVENT_RECORD</span><span class="p">):</span>
<span class="nd">@property</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="sd">&quot;&quot;&quot;Thread ID that provided the event&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">EventHeader</span><span class="o">.</span><span class="n">ThreadId</span>
<span class="nd">@property</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="sd">&quot;&quot;&quot;Process ID that provided the event&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">EventHeader</span><span class="o">.</span><span class="n">ProcessId</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">guid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Guid of the Event&quot;&quot;&quot;</span>
<span class="c1"># Well, this is called &quot;ProviderId&quot; but seems to be the Event GUID</span>
<span class="c1"># As a provider can generated multiple event with differents GUID</span>
<span class="c1"># And this value reflect EVENT_TRACE_HEADER.Guid passed to TraceEvent</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">EventHeader</span><span class="o">.</span><span class="n">ProviderId</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;ID of the Event&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">EventHeader</span><span class="o">.</span><span class="n">EventDescriptor</span><span class="o">.</span><span class="n">Id</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">opcode</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">EventHeader</span><span class="o">.</span><span class="n">EventDescriptor</span><span class="o">.</span><span class="n">Opcode</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">EventHeader</span><span class="o">.</span><span class="n">EventDescriptor</span><span class="o">.</span><span class="n">Version</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">level</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">EventHeader</span><span class="o">.</span><span class="n">EventDescriptor</span><span class="o">.</span><span class="n">Level</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">context</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">UserContext</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">py_object</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">UserContext</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">user_data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Event specific data</span>
<span class="sd"> :type: :class:`str`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">UserData</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">UserDataLength</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&quot;</span>
<span class="n">dbuf</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="bp">self</span><span class="o">.</span><span class="n">UserDataLength</span><span class="p">)</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">UserData</span><span class="p">)</span>
<span class="k">return</span> <span class="n">dbuf</span><span class="p">[:]</span>
<span class="c1"># def match(self, provider=None, id=None, opcode=None):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">guid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">EventHeader</span><span class="o">.</span><span class="n">ProviderId</span>
<span class="k">return</span> <span class="s2">&quot;&quot;&quot;&lt;</span><span class="si">{0}</span><span class="s2"> provider=&quot;</span><span class="si">{1}</span><span class="s2">&quot; id=</span><span class="si">{2}</span><span class="s2">&gt;&quot;&quot;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">guid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">)</span></div>
<span class="n">PEventRecord</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">EventRecord</span><span class="p">)</span>
<div class="viewcode-block" id="EventTraceProperties"><a class="viewcode-back" href="../../../etw.html#windows.winobject.event_trace.EventTraceProperties">[docs]</a><span class="k">class</span> <span class="nc">EventTraceProperties</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EVENT_TRACE_PROPERTIES</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent an Event Trace session that may exist or now. (https://docs.microsoft.com/en-us/windows/win32/api/evntrace/ns-evntrace-event_trace_properties)</span>
<span class="sd"> This class is widly used by :class:`EtwTrace`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Test: ascii / Use Wchar ?</span>
<span class="n">FULL_SIZE</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">EVENT_TRACE_PROPERTIES</span><span class="p">)</span> <span class="o">+</span> <span class="n">MAX_SESSION_NAME_LEN_W</span> <span class="o">+</span> <span class="n">MAX_LOGFILE_PATH_LEN_W</span>
<span class="c1"># def alloc(cls, size) ?</span>
<div class="viewcode-block" id="EventTraceProperties.create"><a class="viewcode-back" href="../../../etw.html#windows.winobject.event_trace.EventTraceProperties.create">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Initialize a new :class:`EventTraceProperties`&quot;&quot;&quot;</span>
<span class="n">buff</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="bp">cls</span><span class="p">)(</span><span class="n">size</span><span class="o">=</span><span class="bp">cls</span><span class="o">.</span><span class="n">FULL_SIZE</span><span class="p">)</span>
<span class="c1"># ctypes.memset(buff, &quot;\x00&quot;, cls.FULL_SIZE)</span>
<span class="bp">self</span> <span class="o">=</span> <span class="n">buff</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">Wnode</span><span class="o">.</span><span class="n">BufferSize</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">FULL_SIZE</span>
<span class="bp">self</span><span class="o">.</span><span class="n">LoggerNameOffset</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="bp">cls</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">LogFileNameOffset</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="bp">cls</span><span class="p">)</span> <span class="o">+</span> <span class="n">MAX_SESSION_NAME_LEN</span>
<span class="k">return</span> <span class="bp">self</span></div>
<span class="k">def</span> <span class="nf">get_logfilename</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">assert</span> <span class="bp">self</span><span class="o">.</span><span class="n">LogFileNameOffset</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">read_string</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="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">LogFileNameOffset</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">set_logfilename</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">):</span>
<span class="k">assert</span> <span class="bp">self</span><span class="o">.</span><span class="n">LogFileNameOffset</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">filename</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\x00</span><span class="s2">&quot;</span><span class="p">):</span>
<span class="n">filename</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\x00</span><span class="s2">&quot;</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</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="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">LogFileNameOffset</span><span class="p">,</span> <span class="n">filename</span><span class="p">)</span>
<span class="n">logfile</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_logfilename</span><span class="p">,</span> <span class="n">set_logfilename</span><span class="p">)</span> <span class="c1">#: The logfile associated with the session</span>
<span class="k">def</span> <span class="nf">get_logger_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">assert</span> <span class="bp">self</span><span class="o">.</span><span class="n">LoggerNameOffset</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">read_string</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="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">LoggerNameOffset</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">set_logfilename</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">):</span>
<span class="k">assert</span> <span class="bp">self</span><span class="o">.</span><span class="n">LoggerNameOffset</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">filename</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\x00</span><span class="s2">&quot;</span><span class="p">):</span>
<span class="n">filename</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\x00</span><span class="s2">&quot;</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</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="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">LoggerNameOffset</span><span class="p">,</span> <span class="n">filename</span><span class="p">)</span>
<span class="n">name</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_logger_name</span><span class="p">,</span> <span class="n">set_logfilename</span><span class="p">)</span> <span class="c1">#: The name of the session</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">guid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The GUID of the Event Trace session (see ``Wnode.Guid``)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">Wnode</span><span class="o">.</span><span class="n">Guid</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The LoggerId if the session (see ``Wnode.HistoricalContext``)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">Wnode</span><span class="o">.</span><span class="n">HistoricalContext</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&quot;&quot;&lt;</span><span class="si">{0}</span><span class="s2"> name=&quot;</span><span class="si">{1}</span><span class="s2">&quot; guid=</span><span class="si">{2}</span><span class="s2">&gt;&quot;&quot;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</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="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span></div>
<span class="c1"># GUID setter ?</span>
<span class="k">class</span> <span class="nc">CtxProcess</span><span class="p">(</span><span class="nb">object</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">trace</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">stop</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">trace</span> <span class="o">=</span> <span class="n">trace</span>
<span class="bp">self</span><span class="o">.</span><span class="n">func</span> <span class="o">=</span> <span class="n">func</span>
<span class="bp">self</span><span class="o">.</span><span class="n">stop</span> <span class="o">=</span> <span class="n">stop</span>
<span class="bp">self</span><span class="o">.</span><span class="n">timing</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">def</span> <span class="nf">_get_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">now</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FILETIME</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">GetSystemTimeAsFileTime</span><span class="p">(</span><span class="n">now</span><span class="p">)</span>
<span class="k">return</span> <span class="n">now</span>
<span class="k">def</span> <span class="fm">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">timing</span><span class="p">[</span><span class="s2">&quot;begin&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_time</span><span class="p">()</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">timing</span>
<span class="k">def</span> <span class="fm">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc_type</span><span class="p">,</span> <span class="n">exc_value</span><span class="p">,</span> <span class="n">traceback</span><span class="p">):</span>
<span class="c1"># bad_end = self._get_time()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">trace</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">stop</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">trace</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
<span class="c1"># End time after the flush is effective.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">timing</span><span class="p">[</span><span class="s2">&quot;end&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_time</span><span class="p">()</span>
<span class="c1"># print(&quot;Trace ctx: fake-end: {0:#x}&quot;.format(int(fake_end)))</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Trace ctx: begin=</span><span class="si">{0:#x}</span><span class="s2"> | end=</span><span class="si">{1:#x}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">timing</span><span class="p">[</span><span class="s2">&quot;begin&quot;</span><span class="p">]),</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">timing</span><span class="p">[</span><span class="s2">&quot;end&quot;</span><span class="p">])))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">trace</span><span class="o">.</span><span class="n">process</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">timing</span><span class="p">)</span>
<div class="viewcode-block" id="EtwTrace"><a class="viewcode-back" href="../../../etw.html#windows.winobject.event_trace.EtwTrace">[docs]</a><span class="k">class</span> <span class="nc">EtwTrace</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent an ETW Trace for tracing/processing events&quot;&quot;&quot;</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">name</span><span class="p">,</span> <span class="n">logfile</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">guid</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">raw_encode</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="c1">#: The name of the trace</span>
<span class="bp">self</span><span class="o">.</span><span class="n">logfile</span> <span class="o">=</span> <span class="n">logfile</span> <span class="c1">#: The logging file of the trace (``None`` means real time trace)</span>
<span class="k">if</span> <span class="n">guid</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">guid</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
<span class="n">guid</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">GUID</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">guid</span> <span class="o">=</span> <span class="n">guid</span> <span class="c1">#: The guid of the trace</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="mi">0</span>
<div class="viewcode-block" id="EtwTrace.exists"><a class="viewcode-back" href="../../../etw.html#windows.winobject.event_trace.EtwTrace.exists">[docs]</a> <span class="k">def</span> <span class="nf">exists</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return ``True`` if the trace already exist (based on its name)&quot;&quot;&quot;</span>
<span class="n">prop</span> <span class="o">=</span> <span class="n">EventTraceProperties</span><span class="o">.</span><span class="n">create</span><span class="p">()</span>
<span class="k">try</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">ControlTraceA</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="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">prop</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EVENT_TRACE_CONTROL_QUERY</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_WMI_INSTANCE_NOT_FOUND</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span> <span class="c1"># Not found -&gt; does not exists</span>
<span class="k">raise</span> <span class="c1"># Other error -&gt; reraise</span>
<span class="k">return</span> <span class="kc">True</span></div>
<div class="viewcode-block" id="EtwTrace.start"><a class="viewcode-back" href="../../../etw.html#windows.winobject.event_trace.EtwTrace.start">[docs]</a> <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Start the tracing&quot;&quot;&quot;</span>
<span class="n">prop</span> <span class="o">=</span> <span class="n">EventTraceProperties</span><span class="o">.</span><span class="n">create</span><span class="p">()</span>
<span class="n">prop</span><span class="o">.</span><span class="n">NumberOfBuffers</span> <span class="o">=</span> <span class="mi">42</span>
<span class="n">prop</span><span class="o">.</span><span class="n">EnableFlags</span> <span class="o">=</span> <span class="n">flags</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">:</span>
<span class="n">prop</span><span class="o">.</span><span class="n">Wnode</span><span class="o">.</span><span class="n">Guid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">logfile</span><span class="p">:</span>
<span class="n">prop</span><span class="o">.</span><span class="n">logfile</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">logfile</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">:</span> <span class="c1"># Base REAL_TIME on option ? name presence ? logfile presence ?</span>
<span class="n">prop</span><span class="o">.</span><span class="n">LogFileMode</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EVENT_TRACE_REAL_TIME_MODE</span>
<span class="n">handle</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">TRACEHANDLE</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">StartTraceA</span><span class="p">(</span><span class="n">handle</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="n">prop</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">guid</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">guid</span> <span class="o">=</span> <span class="n">prop</span><span class="o">.</span><span class="n">Wnode</span><span class="o">.</span><span class="n">Guid</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">handle</span></div>
<div class="viewcode-block" id="EtwTrace.stop"><a class="viewcode-back" href="../../../etw.html#windows.winobject.event_trace.EtwTrace.stop">[docs]</a> <span class="k">def</span> <span class="nf">stop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">soft</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> <span class="c1"># Change name</span>
<span class="sd">&quot;&quot;&quot;stop the tracing.</span>
<span class="sd"> ``soft`` will allow to stop a non-existing trace that do not exists/run.</span>
<span class="sd"> This allow for simpler script that stop/start some EtwTrace.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">prop</span> <span class="o">=</span> <span class="n">EventTraceProperties</span><span class="o">.</span><span class="n">create</span><span class="p">()</span>
<span class="k">try</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">ControlTraceA</span><span class="p">(</span><span class="mi">0</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="n">prop</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EVENT_TRACE_CONTROL_STOP</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">soft</span> <span class="ow">and</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_WMI_INSTANCE_NOT_FOUND</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">raise</span>
<span class="k">return</span> <span class="kc">True</span></div>
<div class="viewcode-block" id="EtwTrace.flush"><a class="viewcode-back" href="../../../etw.html#windows.winobject.event_trace.EtwTrace.flush">[docs]</a> <span class="k">def</span> <span class="nf">flush</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Flush the trace&quot;&quot;&quot;</span>
<span class="n">prop</span> <span class="o">=</span> <span class="n">EventTraceProperties</span><span class="o">.</span><span class="n">create</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">ControlTraceA</span><span class="p">(</span><span class="mi">0</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="n">prop</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EVENT_TRACE_CONTROL_FLUSH</span><span class="p">)</span></div>
<div class="viewcode-block" id="EtwTrace.enable"><a class="viewcode-back" href="../../../etw.html#windows.winobject.event_trace.EtwTrace.enable">[docs]</a> <span class="k">def</span> <span class="nf">enable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="mh">0xff</span><span class="p">,</span> <span class="n">level</span><span class="o">=</span><span class="mh">0xff</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Enable the specified event trace provider.&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">guid</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
<span class="n">guid</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">GUID</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">EnableTrace</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="n">level</span><span class="p">,</span> <span class="n">guid</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="c1"># EnableTraceEx ?</span></div>
<div class="viewcode-block" id="EtwTrace.enable_ex"><a class="viewcode-back" href="../../../etw.html#windows.winobject.event_trace.EtwTrace.enable_ex">[docs]</a> <span class="k">def</span> <span class="nf">enable_ex</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="mh">0xff</span><span class="p">,</span> <span class="n">level</span><span class="o">=</span><span class="mh">0xff</span><span class="p">,</span> <span class="n">any_keyword</span> <span class="o">=</span> <span class="mh">0xffffffff</span><span class="p">,</span> <span class="n">all_keyword</span><span class="o">=</span><span class="mh">0x00</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Enable the specified event trace provider.&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">guid</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
<span class="n">guid</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">GUID</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
<span class="c1"># TODO : implement EnableParameters</span>
<span class="n">EVENT_CONTROL_CODE_ENABLE_PROVIDER</span> <span class="o">=</span> <span class="mi">1</span>
<span class="c1"># EnableTraceEx only accept a UCHAR for the level param</span>
<span class="c1"># TODO : maybe raise an Exception instead of silently masking the value ?</span>
<span class="n">level</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">UCHAR</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">level</span> <span class="o">&amp;</span> <span class="mh">0xff</span><span class="p">))</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">EnableTraceEx2</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">guid</span><span class="p">,</span> <span class="n">EVENT_CONTROL_CODE_ENABLE_PROVIDER</span><span class="p">,</span> <span class="n">level</span> <span class="p">,</span> <span class="n">any_keyword</span><span class="p">,</span> <span class="n">all_keyword</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
<div class="viewcode-block" id="EtwTrace.process"><a class="viewcode-back" href="../../../etw.html#windows.winobject.event_trace.EtwTrace.process">[docs]</a> <span class="k">def</span> <span class="nf">process</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">begin</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Process the event retrieved by the trace.</span>
<span class="sd"> This function will call ``callback`` with any :class:`EventRecord` in the trace.</span>
<span class="sd"> ``begin/end`` allow to filter and only process events in a given timeframe.</span>
<span class="sd"> .. warning::</span>
<span class="sd"> If the trace if ``REALTIME`` (no logfile) this function will hang/process new event until the trace is stopped.</span>
<span class="sd"> Using ``logman -ets stop TRACE_NAME`` for exemple.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">end</span> <span class="o">==</span> <span class="s2">&quot;now&quot;</span><span class="p">:</span>
<span class="n">end</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FILETIME</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">GetSystemTimeAsFileTime</span><span class="p">(</span><span class="n">end</span><span class="p">)</span>
<span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">sprint</span><span class="p">(</span><span class="n">end</span><span class="p">)</span>
<span class="n">logfile</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EVENT_TRACE_LOGFILEW</span><span class="p">()</span>
<span class="n">logfile</span><span class="o">.</span><span class="n">LoggerName</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">raw_decode</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="c1"># logfile.ProcessTraceMode = gdef.PROCESS_TRACE_MODE_EVENT_RECORD | gdef.PROCESS_TRACE_MODE_RAW_TIMESTAMP</span>
<span class="n">logfile</span><span class="o">.</span><span class="n">ProcessTraceMode</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PROCESS_TRACE_MODE_EVENT_RECORD</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">logfile</span><span class="p">:</span>
<span class="n">logfile</span><span class="o">.</span><span class="n">ProcessTraceMode</span> <span class="o">|=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PROCESS_TRACE_MODE_REAL_TIME</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># logfile.ProcessTraceMode |= gdef.PROCESS_TRACE_MODE_REAL_TIME</span>
<span class="n">logfile</span><span class="o">.</span><span class="n">LogFileName</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">logfile</span>
<span class="k">if</span> <span class="n">context</span><span class="p">:</span>
<span class="n">context_ptr</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">pointer</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">py_object</span><span class="p">(</span><span class="n">context</span><span class="p">))</span>
<span class="n">logfile</span><span class="o">.</span><span class="n">Context</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">context_ptr</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)</span>
<span class="nd">@ctypes</span><span class="o">.</span><span class="n">WINFUNCTYPE</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">PEventRecord</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">real_callback</span><span class="p">(</span><span class="n">record_ptr</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">callback</span><span class="p">(</span><span class="n">record_ptr</span><span class="p">[</span><span class="mi">0</span><span class="p">])</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="nb">print</span><span class="p">(</span><span class="s2">&quot;CALLBACK ERROR: </span><span class="si">{0}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
<span class="k">return</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">x</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">x</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">x</span>
<span class="nd">@ctypes</span><span class="o">.</span><span class="n">WINFUNCTYPE</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">gdef</span><span class="o">.</span><span class="n">PEVENT_TRACE_LOGFILEW</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">buffer_callback</span><span class="p">(</span><span class="n">trace</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Buffer-callback: event-lost=</span><span class="si">{0}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">trace</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">LogfileHeader</span><span class="o">.</span><span class="n">EventsLost</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Buffer-callback: buffer-lost=</span><span class="si">{0}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">trace</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">LogfileHeader</span><span class="o">.</span><span class="n">BuffersLost</span><span class="p">))</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="n">logfile</span><span class="o">.</span><span class="n">EventRecordCallback</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">real_callback</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="c1"># logfile.BufferCallback = ctypes.cast(buffer_callback, gdef.PVOID)</span>
<span class="n">r</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">OpenTraceW</span><span class="p">(</span><span class="n">logfile</span><span class="p">)</span>
<span class="n">rh</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">TRACEHANDLE</span><span class="p">(</span><span class="n">r</span><span class="p">)</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">ProcessTrace</span><span class="p">(</span><span class="n">rh</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">begin</span><span class="p">,</span> <span class="n">end</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">CtxProcess</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">stop</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CtxProcess</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">stop</span><span class="o">=</span><span class="n">stop</span><span class="p">)</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&quot;&quot;&lt;</span><span class="si">{0}</span><span class="s2"> name=</span><span class="si">{1!r}</span><span class="s2"> logfile=</span><span class="si">{2!r}</span><span class="s2">&gt;&quot;&quot;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</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="bp">self</span><span class="o">.</span><span class="n">logfile</span><span class="p">)</span></div>
<span class="k">class</span> <span class="nc">TraceProvider</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent a ETW provider, which is just a GUID.</span>
<span class="sd"> Corresponding name for a provider may be available trhought WMI.</span>
<span class="sd"> &quot;&quot;&quot;</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">guid</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">guid</span> <span class="o">=</span> <span class="n">guid</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">infos</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The :class:`TraceGuidInfo` associated with the provider.</span>
<span class="sd"> Main use is to retrieve the instances of the provider (directly available with ``instances``)</span>
<span class="sd"> :type: :class:`TraceGuidInfo`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">size</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
<span class="n">info_buffer</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_buffer</span><span class="p">(</span><span class="mh">0x1000</span><span class="p">)</span>
<span class="k">try</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">EnumerateTraceGuidsEx</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">TraceGuidQueryInfo</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</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="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">),</span> <span class="n">info_buffer</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_buffer</span><span class="p">),</span> <span class="n">size</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_INSUFFICIENT_BUFFER</span><span class="p">:</span>
<span class="k">raise</span>
<span class="c1"># Buffer to small</span>
<span class="n">info_buffer</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_buffer</span><span class="p">(</span><span class="n">size</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">EnumerateTraceGuidsEx</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">TraceGuidQueryInfo</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</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="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">),</span> <span class="n">info_buffer</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_buffer</span><span class="p">),</span> <span class="n">size</span><span class="p">)</span>
<span class="k">return</span> <span class="n">TraceGuidInfo</span><span class="o">.</span><span class="n">from_raw_buffer</span><span class="p">(</span><span class="n">info_buffer</span><span class="p">)</span>
<span class="c1"># We dont really care about the C struct layout</span>
<span class="c1"># Our trace providers should be able to directly returns its instances</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">instances</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The instances of the provider.</span>
<span class="sd"> :type: [:class:`TraceProviderInstanceInfo`] -- A list of :class:`TraceProviderInstanceInfo`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">infos</span><span class="o">.</span><span class="n">instances</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&quot;&quot;&lt;</span><span class="si">{0}</span><span class="s2"> for &quot;</span><span class="si">{1}</span><span class="s2">&quot;&gt;&quot;&quot;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">TraceGuidInfo</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">TRACE_GUID_INFO</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Defines the header to the list of sessions that enabled the provider</span>
<span class="sd"> (see https://docs.microsoft.com/en-us/windows/win32/api/evntrace/ns-evntrace-trace_guid_info)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">from_raw_buffer</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">buffer</span><span class="p">):</span>
<span class="bp">self</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">from_buffer</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_raw_buffer_</span> <span class="o">=</span> <span class="n">buffer</span>
<span class="k">return</span> <span class="bp">self</span>
<span class="k">def</span> <span class="nf">_instance_generator</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">InstanceCount</span><span class="p">:</span>
<span class="k">return</span>
<span class="n">abs_offset</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="bp">self</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">InstanceCount</span><span class="p">):</span>
<span class="n">instance</span> <span class="o">=</span> <span class="n">TraceProviderInstanceInfo</span><span class="o">.</span><span class="n">from_raw_buffer</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_raw_buffer_</span><span class="p">,</span> <span class="n">abs_offset</span><span class="p">)</span>
<span class="n">abs_offset</span> <span class="o">+=</span> <span class="n">instance</span><span class="o">.</span><span class="n">NextOffset</span>
<span class="k">yield</span> <span class="n">instance</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">instances</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The instances of the provider.</span>
<span class="sd"> :type: [:class:`TraceProviderInstanceInfo`] -- A list of :class:`TraceProviderInstanceInfo`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_instance_generator</span><span class="p">()]</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">{0}</span><span class="s2"> InstanceCount=</span><span class="si">{1}</span><span class="s2"> Reserved=</span><span class="si">{2}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">InstanceCount</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">Reserved</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">TraceProviderInstanceInfo</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">TRACE_PROVIDER_INSTANCE_INFO</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Defines an instance of the provider</span>
<span class="sd"> (see https://docs.microsoft.com/en-us/windows/win32/api/evntrace/ns-evntrace-trace_provider_instance_info)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">from_raw_buffer</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">buffer</span><span class="p">,</span> <span class="n">offset</span><span class="p">):</span>
<span class="bp">self</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">from_buffer</span><span class="p">(</span><span class="n">buffer</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_offset</span> <span class="o">=</span> <span class="n">offset</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_raw_buffer_</span> <span class="o">=</span> <span class="n">buffer</span>
<span class="k">return</span> <span class="bp">self</span>
<span class="k">def</span> <span class="nf">_instance_generator</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_offset</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="bp">self</span><span class="p">)</span>
<span class="n">entry_size</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">TRACE_ENABLE_INFO</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">EnableCount</span><span class="p">):</span>
<span class="k">yield</span> <span class="n">gdef</span><span class="o">.</span><span class="n">TRACE_ENABLE_INFO</span><span class="o">.</span><span class="n">from_buffer</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_raw_buffer_</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
<span class="n">offset</span> <span class="o">+=</span> <span class="n">entry_size</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">sessions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The sessions for the instance</span>
<span class="sd"> :type: [:class:`~windows.generated_def.winstructs.TRACE_ENABLE_INFO`] -- A list of session</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_instance_generator</span><span class="p">()]</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">{0}</span><span class="s2"> Pid=</span><span class="si">{1}</span><span class="s2"> EnableCount=</span><span class="si">{2}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">Pid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EnableCount</span><span class="p">)</span>
<div class="viewcode-block" id="EtwManager"><a class="viewcode-back" href="../../../etw.html#windows.winobject.event_trace.EtwManager">[docs]</a><span class="k">class</span> <span class="nc">EtwManager</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;An object to query ETW session/providers and open new trace&quot;&quot;&quot;</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">sessions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The list of currently active ETW session.</span>
<span class="sd"> :type: [:class:`EventTraceProperties`] -- A list of :class:`EventTraceProperties`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Create a tuple of MAX_ETW_SESSIONS EventTraceProperties ptr</span>
<span class="n">t</span> <span class="o">=</span> <span class="p">[</span><span class="n">EventTraceProperties</span><span class="o">.</span><span class="n">create</span><span class="p">()</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">MAX_ETW_SESSIONS</span><span class="p">)]</span>
<span class="c1"># Put this in a ctypes array</span>
<span class="n">array</span> <span class="o">=</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">EventTraceProperties</span><span class="p">)</span> <span class="o">*</span> <span class="n">MAX_ETW_SESSIONS</span><span class="p">)(</span><span class="o">*</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">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">t</span><span class="p">))</span>
<span class="c1"># Cast as array/ptr does not handle subtypes very-well</span>
<span class="n">tarray</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">array</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">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EVENT_TRACE_PROPERTIES</span><span class="p">)))</span>
<span class="n">count</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">winproxy</span><span class="o">.</span><span class="n">QueryAllTracesA</span><span class="p">(</span><span class="n">tarray</span><span class="p">,</span> <span class="n">MAX_ETW_SESSIONS</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="k">return</span> <span class="n">t</span><span class="p">[:</span><span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">]</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">providers</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The list of currently existing ETW providers.</span>
<span class="sd"> :type: [:class:`TraceProvider`] -- A list of ETW providers</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">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">GUID</span><span class="p">,</span> <span class="mh">0x1000</span><span class="p">)()</span>
<span class="n">size</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">EnumerateTraceGuidsEx</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">TraceGuidQueryList</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">buffer</span><span class="p">,</span> <span class="n">buffer</span><span class="o">.</span><span class="n">real_size</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
<span class="k">return</span> <span class="p">[</span><span class="n">TraceProvider</span><span class="p">(</span><span class="n">g</span><span class="p">)</span> <span class="k">for</span> <span class="n">g</span> <span class="ow">in</span> <span class="n">buffer</span><span class="p">[:</span><span class="n">size</span><span class="o">.</span><span class="n">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">gdef</span><span class="o">.</span><span class="n">GUID</span><span class="p">)]]</span>
<span class="c1"># Temp name / API ?</span>
<div class="viewcode-block" id="EtwManager.open_trace"><a class="viewcode-back" href="../../../etw.html#windows.winobject.event_trace.EtwManager.open_trace">[docs]</a> <span class="k">def</span> <span class="nf">open_trace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">logfile</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">guid</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Open a new ETW Trace</span>
<span class="sd"> :return: :class:`EtwTrace`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">EtwTrace</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">logfile</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span></div></div>
</pre></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+16 -13
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.winobject.exception &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.winobject.exception &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -39,7 +42,7 @@
<h1>Source code for windows.winobject.exception</h1><div class="highlight"><pre>
<span></span><span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">from</span> <span class="nn">windows.generated_def.winstructs</span> <span class="k">import</span> <span class="o">*</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">import</span> <span class="nn">windows.generated_def.windef</span> <span class="k">as</span> <span class="nn">windef</span>
<span class="n">EXCEPTION_CONTINUE_SEARCH</span> <span class="o">=</span> <span class="p">(</span><span class="mh">0x0</span><span class="p">)</span>
@@ -175,7 +178,7 @@
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="k">return</span> <span class="s2">&quot;|&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">hex</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__hex__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@@ -369,7 +372,7 @@
<span class="sd">&quot;&quot;&quot;A decorator that create a callable which can be passed to :func:`AddVectoredExceptionHandler`&quot;&quot;&quot;</span>
<span class="n">func_type</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">ctypes</span><span class="o">.</span><span class="n">c_uint</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">EEXCEPTION_POINTERS</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="bp">self</span> <span class="o">=</span> <span class="nb">object</span><span class="o">.</span><span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">func</span> <span class="o">=</span> <span class="n">func</span>
<span class="n">v</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func_type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">decorator</span><span class="p">)</span>
@@ -387,20 +390,20 @@
<span class="k">class</span> <span class="nc">VectoredExceptionHandler</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pos</span><span class="p">,</span> <span class="n">handler</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">pos</span><span class="p">,</span> <span class="n">handler</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handler</span> <span class="o">=</span> <span class="n">VectoredException</span><span class="p">(</span><span class="n">handler</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pos</span> <span class="o">=</span> <span class="n">pos</span>
<span class="k">def</span> <span class="nf">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__enter__</span><span class="p">(</span><span class="bp">self</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">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">AddVectoredExceptionHandler</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pos</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">handler</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span>
<span class="k">def</span> <span class="nf">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc_type</span><span class="p">,</span> <span class="n">exc_value</span><span class="p">,</span> <span class="n">traceback</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc_type</span><span class="p">,</span> <span class="n">exc_value</span><span class="p">,</span> <span class="n">traceback</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">RemoveVectoredExceptionHandler</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">class</span> <span class="nc">DumpContextOnException</span><span class="p">(</span><span class="n">VectoredExceptionHandler</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exit</span><span class="o">=</span><span class="kc">False</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">exit</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">exit</span> <span class="o">=</span> <span class="n">exit</span>
<span class="nb">super</span><span class="p">(</span><span class="n">DumpContextOnException</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">print_context_result</span><span class="p">)</span>
@@ -444,13 +447,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+13 -10
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.winobject.handle &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.winobject.handle &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -41,8 +44,8 @@
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="k">import</span> <span class="n">windef</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="kn">import</span> <span class="n">windef</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="n">current_process_pid</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getpid</span><span class="p">()</span>
@@ -146,10 +149,10 @@
<span class="k">del</span> <span class="n">thread</span><span class="o">.</span><span class="n">_handle</span>
<span class="k">return</span> <span class="n">res</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">{0}</span><span class="s2"> value=&lt;0x</span><span class="si">{1:x}</span><span class="s2">&gt; in process pid=</span><span class="si">{2}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">wValue</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwProcessId</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwProcessId</span> <span class="o">==</span> <span class="n">current_process_pid</span><span class="p">:</span>
<span class="k">return</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;_local_handle&quot;</span><span class="p">):</span>
@@ -262,13 +265,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+16 -13
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.winobject.network &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.winobject.network &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -42,11 +45,11 @@
<span class="kn">import</span> <span class="nn">socket</span>
<span class="kn">import</span> <span class="nn">struct</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</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.com</span> <span class="k">import</span> <span class="n">interfaces</span> <span class="k">as</span> <span class="n">cominterfaces</span>
<span class="kn">from</span> <span class="nn">windows.generated_def.winstructs</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">windows.generated_def.windef</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">windows.com</span> <span class="kn">import</span> <span class="n">interfaces</span> <span class="k">as</span> <span class="n">cominterfaces</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.generated_def.windef</span> <span class="kn">import</span> <span class="o">*</span>
<div class="viewcode-block" id="TCP4Connection"><a class="viewcode-back" href="../../../network.html#windows.winobject.network.TCP4Connection">[docs]</a><span class="k">class</span> <span class="nc">TCP4Connection</span><span class="p">(</span><span class="n">MIB_TCPROW_OWNER_PID</span><span class="p">):</span>
@@ -119,7 +122,7 @@
<span class="n">closing</span><span class="o">.</span><span class="n">dwRemotePort</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwRemotePort</span>
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">SetTcpEntry</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">closing</span><span class="p">))</span></div>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</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">established</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;&lt;TCP IPV4 Listening socket on </span><span class="si">{0}</span><span class="s2">:</span><span class="si">{1}</span><span class="s2">&gt;&quot;</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">local_addr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_port</span><span class="p">)</span>
<span class="k">return</span> <span class="s2">&quot;&lt;TCP IPV4 Connection </span><span class="si">{s.local_addr}</span><span class="s2">:</span><span class="si">{s.local_port}</span><span class="s2"> -&gt; </span><span class="si">{s.remote_addr}</span><span class="s2">:</span><span class="si">{s.remote_port}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">s</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span></div>
@@ -177,7 +180,7 @@
<span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Closing IPV6 connection non implemented&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</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">established</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;&lt;TCP IPV6 Listening socket on </span><span class="si">{0}</span><span class="s2">:</span><span class="si">{1}</span><span class="s2">&gt;&quot;</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">local_addr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_port</span><span class="p">)</span>
<span class="k">return</span> <span class="s2">&quot;&lt;TCP IPV6 Connection </span><span class="si">{0}</span><span class="s2">:</span><span class="si">{1}</span><span class="s2"> -&gt; </span><span class="si">{2}</span><span class="s2">:</span><span class="si">{3}</span><span class="s2">&gt;&quot;</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">local_addr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_port</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">remote_addr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">remote_port</span><span class="p">)</span></div>
@@ -432,7 +435,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">get_RemotePorts</span><span class="p">(</span><span class="n">icmp_type_and_code</span><span class="p">)</span>
<span class="k">return</span> <span class="n">icmp_type_and_code</span><span class="o">.</span><span class="n">value</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="sa">u</span><span class="s1">&#39;&lt;</span><span class="si">{0}</span><span class="s1"> &quot;</span><span class="si">{1}</span><span class="s1">&quot;&gt;&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</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="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">&quot;ascii&quot;</span><span class="p">,</span> <span class="n">errors</span><span class="o">=</span><span class="s1">&#39;backslashreplace&#39;</span><span class="p">)</span></div>
<div class="viewcode-block" id="Network"><a class="viewcode-back" href="../../../network.html#windows.winobject.network.Network">[docs]</a><span class="k">class</span> <span class="nc">Network</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
@@ -516,13 +519,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.winobject.object_manager &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.winobject.object_manager &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -39,10 +42,10 @@
<h1>Source code for windows.winobject.object_manager</h1><div class="highlight"><pre>
<span></span><span class="kn">import</span> <span class="nn">os.path</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">namedtuple</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">namedtuple</span>
<span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</span>
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
@@ -59,13 +62,20 @@
<span class="n">x</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">NtOpenSymbolicLinkObject</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DIRECTORY_QUERY</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">READ_CONTROL</span> <span class="p">,</span> <span class="n">obj_attr</span><span class="p">)</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">LSA_UNICODE_STRING</span><span class="o">.</span><span class="n">from_size</span><span class="p">(</span><span class="mi">1000</span><span class="p">)</span>
<span class="n">s</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="n">winproxy</span><span class="o">.</span><span class="n">NtQuerySymbolicLinkObject</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">s</span><span class="p">)</span> <span class="c1"># Handle Buffer-too-small ?</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtQuerySymbolicLinkObject</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">s</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">&amp;</span> <span class="mh">0xffffffff</span><span class="p">)</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">STATUS_BUFFER_TOO_SMALL</span><span class="p">:</span>
<span class="k">raise</span>
<span class="c1"># If our initial 1000 buffer is not enought (improbable) retry with correct size</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">LSA_UNICODE_STRING</span><span class="o">.</span><span class="n">from_size</span><span class="p">(</span><span class="n">s</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtQuerySymbolicLinkObject</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">s</span><span class="p">)</span>
<span class="k">return</span> <span class="n">v</span><span class="o">.</span><span class="n">str</span>
<div class="viewcode-block" id="KernelObject"><a class="viewcode-back" href="../../../object_manager.html#windows.winobject.object_manager.KernelObject">[docs]</a><span class="k">class</span> <span class="nc">KernelObject</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent an object in the Object Manager namespace&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="kc">None</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">path</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">path</span> <span class="o">=</span> <span class="n">path</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
<span class="k">if</span> <span class="n">path</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">path</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">):</span>
@@ -170,7 +180,7 @@
<span class="k">break</span>
<span class="k">yield</span> <span class="n">v</span><span class="o">.</span><span class="n">Name</span><span class="o">.</span><span class="n">str</span><span class="p">,</span> <span class="n">v</span><span class="o">.</span><span class="n">TypeName</span><span class="o">.</span><span class="n">str</span>
<div class="viewcode-block" id="KernelObject.__iter__"><a class="viewcode-back" href="../../../object_manager.html#windows.winobject.object_manager.KernelObject.__iter__">[docs]</a> <span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<div class="viewcode-block" id="KernelObject.__iter__"><a class="viewcode-back" href="../../../object_manager.html#windows.winobject.object_manager.KernelObject.__iter__">[docs]</a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Iter over the list of name in the Directory object.</span>
<span class="sd"> :yield: :class:`str` -- The names of objects in the directory.</span>
@@ -183,7 +193,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="p">(</span><span class="n">name</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="bp">self</span><span class="o">.</span><span class="n">_directory_query_generator</span><span class="p">())</span></div>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&quot;&quot;&lt;</span><span class="si">{0}</span><span class="s2"> &quot;</span><span class="si">{1}</span><span class="s2">&quot; (type=&quot;</span><span class="si">{2}</span><span class="s2">&quot;)&gt;&quot;&quot;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">fullname</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
<div class="viewcode-block" id="KernelObject.get"><a class="viewcode-back" href="../../../object_manager.html#windows.winobject.object_manager.KernelObject.get">[docs]</a> <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
@@ -196,7 +206,7 @@
<span class="k">return</span> <span class="n">KernelObject</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fullname</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">objtype</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="s2">&quot;Could not find WinObject &lt;</span><span class="si">{0}</span><span class="s2">&gt; under &lt;</span><span class="si">{1}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">fullname</span><span class="p">))</span></div>
<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="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<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="sd">&quot;&quot;&quot;Query object ``name`` from the directory, split and subquery on ``\\``::</span>
<span class="sd"> &gt;&gt;&gt; obj</span>
@@ -246,7 +256,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">KernelObject</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;Directory&quot;</span><span class="p">)</span>
<div class="viewcode-block" id="ObjectManager.__getitem__"><a class="viewcode-back" href="../../../object_manager.html#windows.winobject.object_manager.ObjectManager.__getitem__">[docs]</a> <span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<div class="viewcode-block" id="ObjectManager.__getitem__"><a class="viewcode-back" href="../../../object_manager.html#windows.winobject.object_manager.ObjectManager.__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="sd">&quot;&quot;&quot;Query ``name`` from the root ``\\`` directory::</span>
<span class="sd"> object_manager[&quot;RPC Control&quot;][&quot;lsasspirpc&quot;]</span>
@@ -288,13 +298,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+33 -30
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.winobject.process &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.winobject.process &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -45,8 +48,8 @@
<span class="kn">import</span> <span class="nn">struct</span>
<span class="kn">import</span> <span class="nn">itertools</span>
<span class="kn">from</span> <span class="nn">contextlib</span> <span class="k">import</span> <span class="n">contextmanager</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">namedtuple</span>
<span class="kn">from</span> <span class="nn">contextlib</span> <span class="kn">import</span> <span class="n">contextmanager</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">namedtuple</span>
<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>
@@ -54,21 +57,21 @@
<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>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">injection</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">native_exec</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">pe_parse</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">utils</span>
<span class="kn">from</span> <span class="nn">windows.dbgprint</span> <span class="k">import</span> <span class="n">dbgprint</span>
<span class="kn">from</span> <span class="nn">windows.generated_def.winstructs</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">windows.generated_def.ntstatus</span> <span class="k">import</span> <span class="n">NtStatusException</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">injection</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">native_exec</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">pe_parse</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">utils</span>
<span class="kn">from</span> <span class="nn">windows.dbgprint</span> <span class="kn">import</span> <span class="n">dbgprint</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.generated_def.ntstatus</span> <span class="kn">import</span> <span class="n">NtStatusException</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">exception</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">apisetmap</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">token</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">security</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">exception</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">apisetmap</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">token</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">security</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="k">import</span> <span class="n">raw_encode</span><span class="p">,</span> <span class="n">raw_decode</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="kn">import</span> <span class="n">raw_encode</span><span class="p">,</span> <span class="n">raw_decode</span><span class="p">,</span> <span class="n">basestring</span>
<span class="n">TimeInfo</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s2">&quot;TimeInfo&quot;</span><span class="p">,</span> <span class="p">[</span><span class="s2">&quot;creation&quot;</span><span class="p">,</span> <span class="s2">&quot;exit&quot;</span><span class="p">,</span> <span class="s2">&quot;kernel&quot;</span><span class="p">,</span> <span class="s2">&quot;user&quot;</span><span class="p">])</span>
<span class="sd">&quot;&quot;&quot;Time information about a process&quot;&quot;&quot;</span>
@@ -76,7 +79,7 @@
<div class="viewcode-block" id="DeadThread"><a class="viewcode-back" href="../../../process.html#windows.winobject.process.DeadThread">[docs]</a><span class="k">class</span> <span class="nc">DeadThread</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="sd">&quot;&quot;&quot;An already dead thread (returned only by API returning a new thread if thread die before being returned)&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">,</span> <span class="n">tid</span><span class="o">=</span><span class="kc">None</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">handle</span><span class="p">,</span> <span class="n">tid</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">tid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">tid</span> <span class="o">=</span> <span class="n">WinThread</span><span class="o">.</span><span class="n">_get_thread_id</span><span class="p">(</span><span class="n">handle</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">tid</span> <span class="o">=</span> <span class="n">tid</span>
@@ -548,7 +551,7 @@
<span class="n">pid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pid</span>
<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="nf">__del__</span><span class="p">(</span><span class="bp">self</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>
@@ -617,7 +620,7 @@
<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">GetCurrentThread</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</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="k">pass</span>
<div class="viewcode-block" id="CurrentThread.exit"><a class="viewcode-back" href="../../../process.html#windows.winobject.process.CurrentThread.exit">[docs]</a> <span class="k">def</span> <span class="nf">exit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">code</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
@@ -668,7 +671,7 @@
<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="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</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="k">pass</span>
<span class="nd">@property</span>
@@ -774,7 +777,7 @@
<div class="viewcode-block" id="WinThread"><a class="viewcode-back" href="../../../process.html#windows.winobject.process.WinThread">[docs]</a><span class="k">class</span> <span class="nc">WinThread</span><span class="p">(</span><span class="n">Thread</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent a thread &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tid</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">owner_pid</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">owner</span><span class="o">=</span><span class="kc">None</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">tid</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">owner_pid</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">owner</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">tid</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">handle</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">&quot;Need at least &lt;pid&gt; or &lt;handle&gt; to create a </span><span class="si">{0}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">))</span>
@@ -953,7 +956,7 @@
<span class="n">winproxy</span><span class="o">.</span><span class="n">GetExitCodeThread</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">byref</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>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">owner</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">owner</span>
<span class="k">if</span> <span class="n">owner</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">owner_name</span> <span class="o">=</span> <span class="s2">&quot;&lt;Dead process with pid </span><span class="si">{0}</span><span class="s2">&gt;&quot;</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">th32OwnerProcessID</span><span class="p">))</span>
@@ -986,7 +989,7 @@
<div class="viewcode-block" id="WinProcess"><a class="viewcode-back" href="../../../process.html#windows.winobject.process.WinProcess">[docs]</a><span class="k">class</span> <span class="nc">WinProcess</span><span class="p">(</span><span class="n">Process</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A Process on the system&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pid</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ppid</span><span class="o">=</span><span class="kc">None</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">pid</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ppid</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">pid</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">handle</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">&quot;Need at least &lt;pid&gt; or &lt;handle&gt; to create a </span><span class="si">{0}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">))</span>
@@ -1035,7 +1038,7 @@
<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="bp">self</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">exe_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
@@ -1260,7 +1263,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">FullDllName</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s1">&#39;&lt;</span><span class="si">{0}</span><span class="s1"> &quot;</span><span class="si">{1}</span><span class="s1">&quot; at </span><span class="si">{2}</span><span class="s1">&gt;&#39;</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="vm">__class__</span><span class="o">.</span><span class="vm">__name__</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="nb">hex</span><span class="p">(</span><span class="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">)))</span>
<span class="nd">@property</span>
@@ -1588,13 +1591,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+23 -20
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.winobject.registry &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.winobject.registry &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -41,13 +44,13 @@
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">itertools</span>
<span class="kn">import</span> <span class="nn">struct</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">namedtuple</span><span class="p">,</span> <span class="n">defaultdict</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">namedtuple</span><span class="p">,</span> <span class="n">defaultdict</span>
<span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">from</span> <span class="nn">windows.dbgprint</span> <span class="k">import</span> <span class="n">dbgprint</span>
<span class="kn">from</span> <span class="nn">windows.dbgprint</span> <span class="kn">import</span> <span class="n">dbgprint</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</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="k">import</span> <span class="n">basestring</span><span class="p">,</span> <span class="n">int_types</span><span class="p">,</span> <span class="n">is_py3</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="kn">import</span> <span class="n">basestring</span><span class="p">,</span> <span class="n">int_types</span><span class="p">,</span> <span class="n">is_py3</span>
<span class="n">WENCODING</span> <span class="o">=</span> <span class="s2">&quot;utf-16-le&quot;</span>
@@ -57,7 +60,7 @@
<span class="k">class</span> <span class="nc">WinRegistryKey</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">HKEY</span><span class="p">):</span>
<span class="n">_close_function</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">winproxy</span><span class="o">.</span><span class="n">RegCloseKey</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</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="k">if</span> <span class="n">sys</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="c1"># Late shutdown (not sur winproxy is still up)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="bp">self</span><span class="p">:</span> <span class="c1"># Not NULL handle ?</span>
@@ -68,13 +71,13 @@
<span class="k">class</span> <span class="nc">ExpectWindowsError</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">errornumber</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">errornumber</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">errornumber</span> <span class="o">=</span> <span class="n">errornumber</span>
<span class="k">def</span> <span class="nf">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">pass</span>
<span class="k">def</span> <span class="nf">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">etype</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="n">tb</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">etype</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="n">tb</span><span class="p">):</span>
<span class="k">return</span> <span class="p">(</span><span class="n">etype</span> <span class="ow">in</span> <span class="p">(</span><span class="n">winproxy</span><span class="o">.</span><span class="n">WinproxyError</span><span class="p">,</span> <span class="ne">WindowsError</span><span class="p">)</span> <span class="ow">and</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">errornumber</span><span class="p">)</span>
<span class="c1"># Translation reg-buffer &lt;-&gt; python methodes</span>
@@ -184,7 +187,7 @@
<div class="viewcode-block" id="PyHKey"><a class="viewcode-back" href="../../../registry.html#windows.winobject.registry.PyHKey">[docs]</a><span class="k">class</span> <span class="nc">PyHKey</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A windows registry key&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">surkey</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">sam</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">KEY_READ</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">surkey</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">sam</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">KEY_READ</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">surkey</span> <span class="o">=</span> <span class="n">surkey</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fullname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">surkey</span><span class="o">.</span><span class="n">fullname</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">surkey</span><span class="o">.</span><span class="n">name</span>
@@ -192,7 +195,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">_phkey</span> <span class="o">=</span> <span class="kc">None</span>
<span class="c1">#self.phkey</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s1">&#39;&lt;PyHKey &quot;</span><span class="si">{0}</span><span class="s1">&quot;&gt;&#39;</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">fullname</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_open_key</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">sam</span><span class="p">):</span>
@@ -400,7 +403,7 @@
<div class="viewcode-block" id="PyHKey.__setitem__"><a class="viewcode-back" href="../../../registry.html#windows.winobject.registry.PyHKey.__setitem__">[docs]</a> <span class="k">def</span> <span class="nf">__setitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<div class="viewcode-block" id="PyHKey.__setitem__"><a class="viewcode-back" href="../../../registry.html#windows.winobject.registry.PyHKey.__setitem__">[docs]</a> <span class="k">def</span> <span class="fm">__setitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">rtype</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">basestring</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">int_types</span><span class="p">)):</span>
<span class="n">value</span><span class="p">,</span> <span class="n">rtype</span> <span class="o">=</span> <span class="n">value</span>
@@ -414,7 +417,7 @@
<span class="k">class</span> <span class="nc">DummyPHKEY</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">phkey</span><span class="p">,</span> <span class="n">name</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">phkey</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">phkey</span> <span class="o">=</span> <span class="n">phkey</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
@@ -439,7 +442,7 @@
<span class="s2">&quot;HKEY_USERS&quot;</span> <span class="p">:</span> <span class="n">HKEY_USERS</span>
<span class="p">}</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sam</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">KEY_READ</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">sam</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">KEY_READ</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sam</span> <span class="o">=</span> <span class="n">sam</span>
<div class="viewcode-block" id="Registry.reopen"><a class="viewcode-back" href="../../../registry.html#windows.winobject.registry.Registry.reopen">[docs]</a> <span class="nd">@classmethod</span>
@@ -450,7 +453,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">sam</span><span class="p">)</span></div>
<div class="viewcode-block" id="Registry.__call__"><a class="viewcode-back" href="../../../registry.html#windows.winobject.registry.Registry.__call__">[docs]</a> <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">sam</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<div class="viewcode-block" id="Registry.__call__"><a class="viewcode-back" href="../../../registry.html#windows.winobject.registry.Registry.__call__">[docs]</a> <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">sam</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Get a registry key::</span>
<span class="sd"> registry(r&quot;HKEY_LOCAL_MACHINE\\Software&quot;)</span>
@@ -504,13 +507,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+74 -36
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.winobject.service &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.winobject.service &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -40,16 +43,16 @@
<span></span><span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">namedtuple</span>
<span class="kn">from</span> <span class="nn">contextlib</span> <span class="k">import</span> <span class="n">contextmanager</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">namedtuple</span>
<span class="kn">from</span> <span class="nn">contextlib</span> <span class="kn">import</span> <span class="n">contextmanager</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">utils</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">utils</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="kn">import</span> <span class="n">int_types</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</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">security</span>
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="kn">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">security</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="kn">import</span> <span class="n">basestring</span>
<span class="c1"># TODO: RM :)</span>
<span class="n">ServiceStatus</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s2">&quot;ServiceStatus&quot;</span><span class="p">,</span> <span class="p">[</span><span class="s2">&quot;type&quot;</span><span class="p">,</span> <span class="s2">&quot;state&quot;</span><span class="p">,</span> <span class="s2">&quot;control_accepted&quot;</span><span class="p">,</span> <span class="s2">&quot;flags&quot;</span><span class="p">])</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">``type`` might be one of:</span>
@@ -77,20 +80,36 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="k">class</span> <span class="nc">ServiceManager</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="n">_close_function</span> <span class="o">=</span> <span class="nb">staticmethod</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">CloseServiceHandle</span><span class="p">)</span>
<div class="viewcode-block" id="ServiceManager"><a class="viewcode-back" href="../../../service.html#windows.winobject.service.ServiceManager">[docs]</a><span class="k">class</span> <span class="nc">ServiceManager</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="sd">&quot;&quot;&quot;An object to query, list and explore services&quot;&quot;&quot;</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">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">OpenSCManagerA</span><span class="p">(</span><span class="n">dwDesiredAccess</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">MAXIMUM_ALLOWED</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">open_service</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">access</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">MAXIMUM_ALLOWED</span><span class="p">):</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">OpenServiceA</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">name</span><span class="p">,</span> <span class="n">access</span><span class="p">)</span> <span class="c1"># Check service exists :)</span>
<span class="k">def</span> <span class="nf">get_service</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">access</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">MAXIMUM_ALLOWED</span><span class="p">):</span>
<span class="n">handle</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">open_service</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">access</span><span class="p">)</span>
<span class="k">return</span> <span class="n">NewService</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">handle</span><span class="o">=</span><span class="n">handle</span><span class="p">)</span>
<div class="viewcode-block" id="ServiceManager.get_service"><a class="viewcode-back" href="../../../service.html#windows.winobject.service.ServiceManager.get_service">[docs]</a> <span class="k">def</span> <span class="nf">get_service</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">access</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">MAXIMUM_ALLOWED</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Get a service by its name/index or a list of services via a slice</span>
<span class="sd"> :return: :class:`Service` or [:class:`Service`] -- A :class:`Service` or list of :class:`Service`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">int_types</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">enumerate_services</span><span class="p">()[</span><span class="n">key</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="nb">slice</span><span class="p">):</span>
<span class="c1"># Get service list</span>
<span class="n">servlist</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">enumerate_services</span><span class="p">()</span>
<span class="c1"># Extract indexes matching the slice</span>
<span class="n">indexes</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">indices</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">servlist</span><span class="p">))</span>
<span class="k">return</span> <span class="p">[</span><span class="n">servlist</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span> <span class="k">for</span> <span class="n">idx</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="o">*</span><span class="n">indexes</span><span class="p">)]</span>
<span class="c1"># Retrieve service by its name</span>
<span class="n">handle</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">open_service</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">access</span><span class="p">)</span>
<span class="k">return</span> <span class="n">Service</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="n">handle</span><span class="p">)</span></div>
<span class="fm">__getitem__</span> <span class="o">=</span> <span class="n">get_service</span>
<span class="sd">&quot;&quot;&quot;Get a service by its name/index or a list of services via a slice</span>
<span class="sd"> :return: :class:`Service` or [:class:`Service`] -- A :class:`Service` or list of :class:`Service`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">get_service_display_name</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="c1"># This API is strange..</span>
@@ -102,6 +121,9 @@
<span class="k">return</span> <span class="n">result</span><span class="o">.</span><span class="n">value</span>
<span class="k">def</span> <span class="nf">_enumerate_services_generator</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The generator code behind __iter__.</span>
<span class="sd"> Allow to iter over the services on the system</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">size_needed</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">nb_services</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">counter</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
@@ -121,20 +143,23 @@
<span class="n">services_array</span> <span class="o">=</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ENUM_SERVICE_STATUS_PROCESSA</span> <span class="o">*</span> <span class="n">nb_services</span><span class="o">.</span><span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">from_buffer</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span>
<span class="k">for</span> <span class="n">service_info</span> <span class="ow">in</span> <span class="n">services_array</span><span class="p">:</span>
<span class="n">shandle</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">open_service</span><span class="p">(</span><span class="n">service_info</span><span class="o">.</span><span class="n">lpServiceName</span><span class="p">)</span>
<span class="k">yield</span> <span class="n">NewService</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">shandle</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">service_info</span><span class="o">.</span><span class="n">lpServiceName</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="n">service_info</span><span class="o">.</span><span class="n">lpDisplayName</span><span class="p">)</span>
<span class="k">yield</span> <span class="n">Service</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">shandle</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">service_info</span><span class="o">.</span><span class="n">lpServiceName</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="n">service_info</span><span class="o">.</span><span class="n">lpDisplayName</span><span class="p">)</span>
<span class="k">return</span>
<span class="fm">__iter__</span> <span class="o">=</span> <span class="n">_enumerate_services_generator</span>
<span class="sd">&quot;&quot;&quot;Iter over the services on the system</span>
<span class="sd"> :yield: :class:`Service`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">enumerate_services</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_enumerate_services_generator</span><span class="p">())</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_enumerate_services_generator</span><span class="p">())</span></div>
<span class="k">class</span> <span class="nc">NewService</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SC_HANDLE</span><span class="p">):</span>
<span class="c1"># close_function = windows.winproxy.CloseServiceHandle</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">NewService</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">handle</span><span class="p">)</span>
<div class="viewcode-block" id="Service"><a class="viewcode-back" href="../../../service.html#windows.winobject.service.Service">[docs]</a><span class="k">class</span> <span class="nc">Service</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SC_HANDLE</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent a service on the system&quot;&quot;&quot;</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">handle</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">Service</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">handle</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
<span class="sd">&quot;&quot;&quot;The name of the service</span>
@@ -153,12 +178,16 @@
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">status</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The status of the service</span>
<span class="sd"> :type: :class:`~windows.generated_def.winstructs.SERVICE_STATUS_PROCESS`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">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">SERVICE_STATUS_PROCESS</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">DWORD</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">QueryServiceStatusEx</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SC_STATUS_PROCESS_INFO</span><span class="p">,</span> <span class="n">buffer</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">LPBYTE</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">buffer</span><span class="p">),</span> <span class="n">size_needed</span><span class="p">)</span>
<span class="k">return</span> <span class="n">buffer</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
<span class="nd">@property</span> <span class="c1"># Can change if service is started/stopped when the object exist</span>
<span class="k">def</span> <span class="nf">process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The process running the service (if any)</span>
@@ -172,27 +201,36 @@
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">security_descriptor</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The security descriptor of the service</span>
<span class="sd"> :type: :class:`~windows.security.SecurityDescriptor`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">security</span><span class="o">.</span><span class="n">SecurityDescriptor</span><span class="o">.</span><span class="n">from_service</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">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<div class="viewcode-block" id="Service.start"><a class="viewcode-back" href="../../../service.html#windows.winobject.service.Service.start">[docs]</a> <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</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="sd">&quot;&quot;&quot;Start the service</span>
<span class="sd"> :param args: a list of :class:`str`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">nbelt</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">if</span> <span class="n">args</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">anybuff</span><span class="p">):</span>
<span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">args</span><span class="p">]</span>
<span class="n">nbelt</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
<span class="n">args</span> <span class="o">=</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">LPCSTR</span> <span class="o">*</span> <span class="p">(</span><span class="n">nbelt</span><span class="p">))(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">StartServiceA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nbelt</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">StartServiceA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nbelt</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<div class="viewcode-block" id="Service.stop"><a class="viewcode-back" href="../../../service.html#windows.winobject.service.Service.stop">[docs]</a> <span class="k">def</span> <span class="nf">stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Stop the service&quot;&quot;&quot;</span>
<span class="n">status</span> <span class="o">=</span> <span class="n">SERVICE_STATUS</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">ControlService</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SERVICE_CONTROL_STOP</span><span class="p">,</span> <span class="n">status</span><span class="p">)</span>
<span class="k">return</span> <span class="n">status</span>
<span class="k">return</span> <span class="n">status</span></div>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&quot;&quot;&lt;</span><span class="si">{0}</span><span class="s2"> &quot;</span><span class="si">{1}</span><span class="s2">&quot; </span><span class="si">{2}</span><span class="s2">&gt;&quot;&quot;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</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="bp">self</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">state</span><span class="p">)</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&quot;&quot;&lt;</span><span class="si">{0}</span><span class="s2"> &quot;</span><span class="si">{1}</span><span class="s2">&quot; </span><span class="si">{2!r}</span><span class="s2">&gt;&quot;&quot;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</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="bp">self</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">state</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CloseServiceHandle</span><span class="p">(</span><span class="bp">self</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="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CloseServiceHandle</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
</pre></div>
</div>
@@ -225,13 +263,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+46 -25
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.winobject.system &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.winobject.system &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -43,29 +46,30 @@
<span class="kn">import</span> <span class="nn">struct</span>
<span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">utils</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">utils</span>
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">process</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">network</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">registry</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">exception</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">service</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">volume</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">wmi</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">object_manager</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">handle</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">event_log</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">event_trace</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">task_scheduler</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">system_module</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">bits</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">process</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">network</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">registry</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">exception</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">service</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">volume</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">wmi</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">object_manager</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">device_manager</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">handle</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">event_log</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">event_trace</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">task_scheduler</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">system_module</span>
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="kn">import</span> <span class="n">bits</span>
<span class="kn">from</span> <span class="nn">windows.dbgprint</span> <span class="k">import</span> <span class="n">dbgprint</span>
<span class="kn">from</span> <span class="nn">windows.dbgprint</span> <span class="kn">import</span> <span class="n">dbgprint</span>
<div class="viewcode-block" id="System"><a class="viewcode-back" href="../../../windows.html#windows.winobject.system.System">[docs]</a><span class="k">class</span> <span class="nc">System</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The state of the current ``Windows`` system ``Python`` is running on&quot;&quot;&quot;</span>
@@ -102,9 +106,10 @@
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
<span class="k">def</span> <span class="nf">services</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The list of services</span>
<span class="sd">&quot;&quot;&quot;An object to query, list and explore services</span>
<span class="sd"> :type: [:class:`~windows.winobject.service.ServiceA`] -- A list of Service&quot;&quot;&quot;</span>
<span class="sd"> :type: :class:`~windows.winobject.service.ServiceManager`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">service</span><span class="o">.</span><span class="n">ServiceManager</span><span class="p">()</span>
<span class="nd">@property</span>
@@ -144,10 +149,18 @@
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
<span class="k">def</span> <span class="nf">event_log</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;An object to open Event channel/publisher and evtx file</span>
<span class="sd"> :type: :class:`~windows.winobject.event_log.EvtlogManager`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">event_log</span><span class="o">.</span><span class="n">EvtlogManager</span><span class="p">()</span>
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
<span class="k">def</span> <span class="nf">etw</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;An object to interact with ETW (Event Tracing for Windows)</span>
<span class="sd"> :type: :class:`~windows.winobject.event_trace.EtwManager`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">event_trace</span><span class="o">.</span><span class="n">EtwManager</span><span class="p">()</span>
@@ -174,6 +187,14 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winobject</span><span class="o">.</span><span class="n">object_manager</span><span class="o">.</span><span class="n">ObjectManager</span><span class="p">()</span>
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
<span class="k">def</span> <span class="nf">device_manager</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;An object to query the device&amp;driver configured on the computer.</span>
<span class="sd"> :type: :class:`~windows.winobject.device_manager.DeviceManager`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winobject</span><span class="o">.</span><span class="n">device_manager</span><span class="o">.</span><span class="n">DeviceManager</span><span class="p">()</span>
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
<span class="k">def</span> <span class="nf">bits</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">bits</span><span class="o">.</span><span class="n">create_manager</span><span class="p">()</span>
@@ -542,13 +563,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.winobject.system_module &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.winobject.system_module &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -51,7 +54,7 @@
<span class="sd">&quot;&quot;&quot;The name of the system module: alias for ``ImageName``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ImageName</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&quot;&quot;&lt;</span><span class="si">{0}</span><span class="s2"> name=&quot;</span><span class="si">{1}</span><span class="s2">&quot; base=</span><span class="si">{2:#x}</span><span class="s2">&gt;&quot;&quot;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ImageName</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">Base</span><span class="p">)</span></div>
@@ -122,13 +125,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.winobject.task_scheduler &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.winobject.task_scheduler &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -93,10 +96,10 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">items_generator</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__iter__</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">items_generator</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">):</span> <span class="c1"># Allow subclasses to only overwrite &#39;get_item&#39; to rewrite both behavior</span>
<span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">):</span> <span class="c1"># Allow subclasses to only overwrite &#39;get_item&#39; to rewrite both behavior</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_item</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
<span class="c1"># Need to-do the doc=xx tricks to have the documentation in the &#39;AbstractAction&#39; subclasses</span>
@@ -206,26 +209,68 @@
<span class="n">ITEM_TYPE</span> <span class="o">=</span> <span class="n">Trigger</span></div>
<span class="k">class</span> <span class="nc">TaskRegistrationInfo</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">IRegistrationInfo</span><span class="p">):</span>
<div class="viewcode-block" id="TaskRegistrationInfo"><a class="viewcode-back" href="../../../task_scheduler.html#windows.winobject.task_scheduler.TaskRegistrationInfo">[docs]</a><span class="k">class</span> <span class="nc">TaskRegistrationInfo</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">IRegistrationInfo</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Provides the administrative information that can be used to describe the task.</span>
<span class="sd"> This information includes details such as a description of the task,</span>
<span class="sd"> the author of the task, the date the task is registered,</span>
<span class="sd"> and the security descriptor of the task.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">author</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">&quot;get_Author&quot;</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The author of the task&quot;&quot;&quot;</span>
<span class="n">description</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">&quot;get_Description&quot;</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The description of the task&quot;&quot;&quot;</span>
<span class="n">date</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">&quot;get_Date&quot;</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The registration date of the task&quot;&quot;&quot;</span>
<span class="n">source</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">&quot;get_Source&quot;</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;Where the task originated from.</span>
<span class="sd"> For example, a task may originate from a component, service, application, or user.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">documentation</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">&quot;get_Documentation&quot;</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;Any additional documentation for the task&quot;&quot;&quot;</span>
<span class="n">uri</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">&quot;get_URI&quot;</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;the URI of the task.&quot;&quot;&quot;</span>
<span class="n">version</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">&quot;get_Version&quot;</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The version number of the task.&quot;&quot;&quot;</span>
<span class="c1"># Return WindowsError: [Error -2147467263] Not implemented</span>
<span class="n">xml</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">&quot;get_XmlText&quot;</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
<span class="c1"># security_descriptor = generate_simple_getter(&quot;get_SecurityDescriptor&quot;, gdef.BSTR)</span>
<span class="c1"># xml = generate_simple_getter(&quot;get_XmlText&quot;, gdef.BSTR)</span>
<span class="n">sddl</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">&quot;get_SecurityDescriptor&quot;</span><span class="p">,</span> <span class="n">windows</span><span class="o">.</span><span class="n">com</span><span class="o">.</span><span class="n">Variant</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">security_descriptor</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">sddl</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sddl</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">sddl</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">security</span><span class="o">.</span><span class="n">SecurityDescriptor</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">sddl</span><span class="p">)</span></div>
<div class="viewcode-block" id="TaskPrincipal"><a class="viewcode-back" href="../../../task_scheduler.html#windows.winobject.task_scheduler.TaskPrincipal">[docs]</a><span class="k">class</span> <span class="nc">TaskPrincipal</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">IPrincipal</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Provides the security credentials for a principal.</span>
<span class="sd"> These security credentials define the security context for the tasks that are associated with the principal.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">class</span> <span class="nc">TaskPrincipal</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">IPrincipal</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">&quot;get_DisplayName&quot;</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The name of the principal&quot;&quot;&quot;</span>
<span class="nb">id</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">&quot;get_Id&quot;</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;the identifier of the principal.&quot;&quot;&quot;</span>
<span class="n">user_id</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">&quot;get_UserId&quot;</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;the user identifier that is required to run the task&quot;&quot;&quot;</span>
<span class="n">group_id</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">&quot;get_GroupId&quot;</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;the user group that is required to run the task&quot;&quot;&quot;</span>
<span class="n">run_level</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">&quot;get_RunLevel&quot;</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">TASK_RUNLEVEL_TYPE</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;the privilege level that is required to run the tasks</span>
<span class="sd"> :type: :class:`~windows.generated_def.winstructs.TASK_RUNLEVEL_TYPE`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logon_type</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">&quot;get_LogonType&quot;</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">TASK_LOGON_TYPE</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot; logon method that is required to run the task</span>
<span class="sd"> :type: :class:`~windows.generated_def.winstructs.TASK_LOGON_TYPE`</span>
<span class="sd"> &quot;&quot;&quot;</span></div>
<div class="viewcode-block" id="TaskDefinition"><a class="viewcode-back" href="../../../task_scheduler.html#windows.winobject.task_scheduler.TaskDefinition">[docs]</a><span class="k">class</span> <span class="nc">TaskDefinition</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ITaskDefinition</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The definition of a task&quot;&quot;&quot;</span>
@@ -241,7 +286,18 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">registration_info</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">&quot;get_RegistrationInfo&quot;</span><span class="p">,</span> <span class="n">TaskRegistrationInfo</span><span class="p">,</span> <span class="n">extract_value</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The registration information of the task</span>
<span class="sd"> :type: :class:`TaskRegistrationInfo`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">principal</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">&quot;get_Principal&quot;</span><span class="p">,</span> <span class="n">TaskPrincipal</span><span class="p">,</span> <span class="n">extract_value</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The principal that provides the security credentials for the task.</span>
<span class="sd"> These security credentials define the security context for the tasks that are associated with the principal.</span>
<span class="sd"> :type: :class:`TaskPrincipal`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">xml</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">&quot;get_XmlText&quot;</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;The XML representig the task definition</span>
@@ -292,7 +348,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">GetSecurityDescriptor</span><span class="p">(</span><span class="n">secinfo</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>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&quot;&quot;&lt;</span><span class="si">{0}</span><span class="s2"> &quot;</span><span class="si">{1}</span><span class="s2">&quot; at </span><span class="si">{2:#x}</span><span class="s2">&gt;&quot;&quot;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</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="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span></div>
@@ -420,7 +476,7 @@
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&quot;&quot;&lt;</span><span class="si">{0}</span><span class="s2"> &quot;</span><span class="si">{1}</span><span class="s2">&quot; at </span><span class="si">{2:#x}</span><span class="s2">&gt;&quot;&quot;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span></div>
@@ -497,13 +553,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+21 -15
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.winobject.token &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.winobject.token &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -41,9 +44,10 @@
<span class="kn">import</span> <span class="nn">functools</span>
<span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">utils</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">utils</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</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="c1"># import windows.security # at the end of this file (loop import)</span>
<span class="n">bltn_type</span> <span class="o">=</span> <span class="nb">type</span>
@@ -85,7 +89,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="p">[</span><span class="n">g</span><span class="o">.</span><span class="n">Sid</span> <span class="k">for</span> <span class="n">g</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_groups</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">{0}</span><span class="s2"> count=</span><span class="si">{1}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">GroupCount</span><span class="p">)</span></div>
<span class="n">TokenGroupsType</span> <span class="o">=</span> <span class="n">TokenGroups</span> <span class="c1"># Prevent confusion with token.TokenGroups</span>
@@ -127,7 +131,7 @@
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<div class="viewcode-block" id="TokenPrivileges.__getitem__"><a class="viewcode-back" href="../../../token.html#windows.winobject.token.TokenPrivileges.__getitem__">[docs]</a> <span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<div class="viewcode-block" id="TokenPrivileges.__getitem__"><a class="viewcode-back" href="../../../token.html#windows.winobject.token.TokenPrivileges.__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="sd">&quot;&quot;&quot;Retrieve the attribute value for privilege ``name``</span>
<span class="sd"> :raises: KeyError if privilege ``name`` not in the TokenPrivileges</span>
@@ -138,7 +142,7 @@
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="k">return</span> <span class="n">priv</span><span class="o">.</span><span class="n">Attributes</span></div>
<div class="viewcode-block" id="TokenPrivileges.__setitem__"><a class="viewcode-back" href="../../../token.html#windows.winobject.token.TokenPrivileges.__setitem__">[docs]</a> <span class="k">def</span> <span class="nf">__setitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<div class="viewcode-block" id="TokenPrivileges.__setitem__"><a class="viewcode-back" href="../../../token.html#windows.winobject.token.TokenPrivileges.__setitem__">[docs]</a> <span class="k">def</span> <span class="fm">__setitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Set the attribute value for privilege ``name``</span>
<span class="sd"> :raises: KeyError if privilege ``name`` not in the TokenPrivileges</span>
@@ -201,7 +205,7 @@
<span class="n">array_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">VALUE_ARRAY_PTR_BY_TYPE</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">ValueType</span><span class="p">]</span>
<span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span> <span class="n">array_name</span><span class="p">)[:</span><span class="bp">self</span><span class="o">.</span><span class="n">ValueCount</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&quot;&quot;&lt;</span><span class="si">{0}</span><span class="s2"> name=&quot;</span><span class="si">{1}</span><span class="s2">&quot;&gt;&quot;&quot;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span></div>
@@ -215,7 +219,7 @@
<span class="sd"> see `[MSDN] TOKEN_INFORMATION_CLASS &lt;https://docs.microsoft.com/en-us/windows/desktop/api/winnt/ne-winnt-_token_information_class&gt;`_</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</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">handle</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_handle</span> <span class="o">=</span> <span class="n">handle</span>
<span class="k">def</span> <span class="nf">_get_required_token_information_size</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">infos_class</span><span class="p">):</span>
@@ -347,7 +351,6 @@
<span class="sd"> :type: :class:`windows.security.Acl`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">window.security</span> <span class="c1"># Beuk move token.py &amp; in a security/ directory ?</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_token_infomations</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">TokenDefaultDacl</span><span class="p">,</span> <span class="n">windows</span><span class="o">.</span><span class="n">security</span><span class="o">.</span><span class="n">PAcl</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="c1"># def source(self): (tok.TokenSource) ??</span>
@@ -650,13 +653,16 @@
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{0}</span><span class="s2"> has no privilege &lt;</span><span class="si">{1}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">adjust_privileges</span><span class="p">(</span><span class="n">privs</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">flag_repr</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">Flag</span><span class="o">.</span><span class="fm">__repr__</span>
<span class="n">tid_int</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TokenStatistics</span><span class="o">.</span><span class="n">TokenId</span><span class="p">)</span>
<span class="n">toktype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span>
<span class="k">if</span> <span class="n">toktype</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">TokenPrimary</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">{0}</span><span class="s2"> TokenId=</span><span class="si">{1:#x}</span><span class="s2"> Type=</span><span class="si">{2}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">tid_int</span><span class="p">,</span> <span class="n">flag_repr</span><span class="p">(</span><span class="n">toktype</span><span class="p">))</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">{0}</span><span class="s2"> TokenId=</span><span class="si">{1:#x}</span><span class="s2"> Type=</span><span class="si">{2}</span><span class="s2"> ImpersonationLevel=</span><span class="si">{3}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">tid_int</span><span class="p">,</span> <span class="n">flag_repr</span><span class="p">(</span><span class="n">toktype</span><span class="p">),</span> <span class="n">flag_repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">impersonation_level</span><span class="p">))</span></div>
<span class="kn">import</span> <span class="nn">windows.security</span>
</pre></div>
</div>
@@ -689,13 +695,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+14 -11
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.winobject.volume &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.winobject.volume &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -40,11 +43,11 @@
<span></span><span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</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="k">import</span> <span class="o">*</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="k">import</span> <span class="n">AutoHandle</span>
<span class="kn">from</span> <span class="nn">windows.utils</span> <span class="kn">import</span> <span class="n">AutoHandle</span>
<span class="kn">import</span> <span class="nn">sys</span>
@@ -53,7 +56,7 @@
<span class="n">DRIVE_TYPE</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">DRIVE_UNKNOWN</span><span class="p">,</span> <span class="n">DRIVE_NO_ROOT_DIR</span><span class="p">,</span> <span class="n">DRIVE_REMOVABLE</span><span class="p">,</span>
<span class="n">DRIVE_FIXED</span><span class="p">,</span> <span class="n">DRIVE_REMOTE</span><span class="p">,</span> <span class="n">DRIVE_CDROM</span><span class="p">,</span> <span class="n">DRIVE_RAMDISK</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__init__</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="k">def</span> <span class="fm">__init__</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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
<span class="nd">@property</span>
@@ -100,7 +103,7 @@
<span class="n">gdef</span><span class="o">.</span><span class="n">FILE_SHARE_READ</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">OPEN_EXISTING</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FILE_FLAG_BACKUP_SEMANTICS</span> <span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">return</span> <span class="n">handle</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&quot;&quot;&lt;</span><span class="si">{0}</span><span class="s2"> &quot;</span><span class="si">{1}</span><span class="s2">&quot; (</span><span class="si">{2}</span><span class="s2">)&gt;&quot;&quot;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</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="bp">self</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">name</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">enum_logical_drive</span><span class="p">():</span>
@@ -157,13 +160,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+22 -19
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.winobject.wmi &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.winobject.wmi &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -41,16 +44,16 @@
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">struct</span>
<span class="kn">import</span> <span class="nn">functools</span>
<span class="kn">from</span> <span class="nn">functools</span> <span class="k">import</span> <span class="n">partial</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">namedtuple</span>
<span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">partial</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">namedtuple</span>
<span class="kn">from</span> <span class="nn">ctypes.wintypes</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">ctypes.wintypes</span> <span class="kn">import</span> <span class="o">*</span>
<span class="kn">import</span> <span class="nn">windows.com</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="k">import</span> <span class="o">*</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.pycompat</span> <span class="k">import</span> <span class="n">basestring</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="kn">import</span> <span class="n">basestring</span>
<span class="c1"># Common error check for all WMI COM interfaces</span>
<span class="c1"># This &#39;just&#39; add the corresponding &#39;WBEMSTATUS&#39; to the hresult error code</span>
@@ -212,7 +215,7 @@
<span class="c1">## Make it callable like any class :D</span>
<span class="fm">__call__</span> <span class="o">=</span> <span class="n">spawn_instance</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</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="p">:</span>
<span class="k">return</span> <span class="s2">&quot;&quot;&quot;&lt;</span><span class="si">{0}</span><span class="s2"> (NULL)&gt;&quot;&quot;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">genus</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">WBEM_GENUS_CLASS</span><span class="p">:</span>
@@ -247,7 +250,7 @@
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">obj</span></div>
<div class="viewcode-block" id="WmiEnumeration.__iter__"><a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiEnumeration.__iter__">[docs]</a> <span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<div class="viewcode-block" id="WmiEnumeration.__iter__"><a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiEnumeration.__iter__">[docs]</a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return an iterator with ``DEFAULT_TIMEOUT``&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">iter_timeout</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_TIMEOUT</span><span class="p">)</span></div>
@@ -269,7 +272,7 @@
<div class="viewcode-block" id="WmiCallResult"><a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiCallResult">[docs]</a><span class="k">class</span> <span class="nc">WmiCallResult</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">IWbemCallResult</span><span class="p">,</span> <span class="n">WmiComInterface</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The result of a WMI call/query. Real result value type depends of the context&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">result_type</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">namespace_name</span><span class="o">=</span><span class="kc">None</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">result_type</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">namespace_name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">result_type</span> <span class="o">=</span> <span class="n">result_type</span>
<span class="bp">self</span><span class="o">.</span><span class="n">namespace_name</span> <span class="o">=</span> <span class="n">namespace_name</span>
@@ -319,7 +322,7 @@
<span class="n">DEFAULT_ENUM_FLAGS</span> <span class="o">=</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">WBEM_FLAG_RETURN_IMMEDIATELY</span> <span class="o">|</span>
<span class="n">WBEM_FLAG_FORWARD_ONLY</span><span class="p">)</span> <span class="c1">#: The defauls flags used for enumeration. ``(WBEM_FLAG_RETURN_IMMEDIATELY | WBEM_FLAG_FORWARD_ONLY)``</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">namespace</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">namespace</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">namespace</span>
<div class="viewcode-block" id="WmiNamespace.connect"><a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiNamespace.connect">[docs]</a> <span class="nd">@classmethod</span>
@@ -463,7 +466,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">ExecMethod</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">inparam</span><span class="p">,</span> <span class="n">outparam</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span>
<span class="k">return</span> <span class="n">outparam</span> <span class="ow">or</span> <span class="n">result</span></div>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">null</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="bp">self</span> <span class="k">else</span> <span class="s2">&quot; (NULL)&quot;</span>
<span class="k">return</span> <span class="s2">&quot;&quot;&quot;&lt;</span><span class="si">{0}</span><span class="s2"> &quot;</span><span class="si">{1}</span><span class="s2">&quot;</span><span class="si">{2}</span><span class="s2">&gt;&quot;&quot;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</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="n">null</span><span class="p">)</span></div>
@@ -476,7 +479,7 @@
<span class="sd"> &lt;WmiNamespace &quot;root\SecurityCenter2&quot;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">DEFAULT_NAMESPACE</span> <span class="o">=</span> <span class="s2">&quot;root</span><span class="se">\\</span><span class="s2">cimv2&quot;</span> <span class="c1">#: The default namespace for :func:`select` &amp; :func:`query`</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</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="c1"># Someone is going to use wmi: let&#39;s init com !</span>
<span class="n">windows</span><span class="o">.</span><span class="n">com</span><span class="o">.</span><span class="n">init</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">wmi_requester_by_namespace</span> <span class="o">=</span> <span class="p">{}</span>
@@ -504,11 +507,11 @@
<span class="k">def</span> <span class="nf">_open_wmi_requester</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">namespace</span><span class="p">):</span>
<span class="k">return</span> <span class="n">WmiNamespace</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">namespace</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__missing__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__missing__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
<span class="bp">self</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_open_wmi_requester</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">object</span><span class="o">.</span><span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
</pre></div>
@@ -542,13 +545,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+15 -12
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.winproxy.apiproxy &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.winproxy.apiproxy &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -41,8 +44,8 @@
<span class="kn">import</span> <span class="nn">functools</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">.error</span> <span class="k">import</span> <span class="n">ExportNotFound</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="k">import</span> <span class="n">is_py3</span>
<span class="kn">from</span> <span class="nn">.error</span> <span class="kn">import</span> <span class="n">ExportNotFound</span>
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="kn">import</span> <span class="n">is_py3</span>
<span class="c1"># Utils</span>
<div class="viewcode-block" id="is_implemented"><a class="viewcode-back" href="../../../winproxy.html#windows.winproxy.is_implemented">[docs]</a><span class="k">def</span> <span class="nf">is_implemented</span><span class="p">(</span><span class="n">apiproxy</span><span class="p">):</span>
@@ -69,12 +72,12 @@
<span class="k">class</span> <span class="nc">NeededParameterType</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="n">_inst</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">def</span> <span class="nf">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_inst</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">_inst</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">NeededParameterType</span><span class="p">,</span> <span class="bp">cls</span><span class="p">)</span><span class="o">.</span><span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_inst</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;NeededParameter&quot;</span>
<span class="n">NeededParameter</span> <span class="o">=</span> <span class="n">NeededParameterType</span><span class="p">()</span>
@@ -83,7 +86,7 @@
<span class="k">class</span> <span class="nc">ApiProxy</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="n">APIDLL</span> <span class="o">=</span> <span class="kc">None</span>
<span class="sd">&quot;&quot;&quot;Create a python wrapper around a kernel32 function&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">error_check</span><span class="o">=</span><span class="n">sentinel</span><span class="p">,</span> <span class="n">deffunc_module</span><span class="o">=</span><span class="kc">None</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">func_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">error_check</span><span class="o">=</span><span class="n">sentinel</span><span class="p">,</span> <span class="n">deffunc_module</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">deffunc_module</span> <span class="o">=</span> <span class="n">deffunc_module</span> <span class="k">if</span> <span class="n">deffunc_module</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">gdef</span><span class="o">.</span><span class="n">winfuncs</span>
<span class="bp">self</span><span class="o">.</span><span class="n">func_name</span> <span class="o">=</span> <span class="n">func_name</span>
<span class="k">if</span> <span class="n">error_check</span> <span class="ow">is</span> <span class="n">sentinel</span><span class="p">:</span>
@@ -92,7 +95,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">error_check</span> <span class="o">=</span> <span class="n">error_check</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cprototyped</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">python_proxy</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">python_proxy</span><span class="p">):</span>
<span class="c1"># Use the name of the sub-function if None was given</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">func_name</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">func_name</span> <span class="o">=</span> <span class="n">python_proxy</span><span class="o">.</span><span class="vm">__name__</span>
@@ -191,13 +194,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+15 -12
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.winproxy.error &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.winproxy.error &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -40,12 +43,12 @@
<span></span><span class="kn">import</span> <span class="nn">ctypes</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.ntstatus</span> <span class="k">import</span> <span class="n">NtStatusException</span>
<span class="kn">from</span> <span class="nn">windows.generated_def.ntstatus</span> <span class="kn">import</span> <span class="n">NtStatusException</span>
<span class="c1"># ApiProxy stuff</span>
<span class="k">class</span> <span class="nc">ExportNotFound</span><span class="p">(</span><span class="ne">RuntimeError</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func_name</span><span class="p">,</span> <span class="n">api_name</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">func_name</span><span class="p">,</span> <span class="n">api_name</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">func_name</span> <span class="o">=</span> <span class="n">func_name</span>
<span class="bp">self</span><span class="o">.</span><span class="n">api_name</span> <span class="o">=</span> <span class="n">api_name</span>
<span class="nb">super</span><span class="p">(</span><span class="n">ExportNotFound</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;Function </span><span class="si">{0}</span><span class="s2"> not found into </span><span class="si">{1}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="n">api_name</span><span class="p">))</span>
@@ -53,7 +56,7 @@
<span class="c1"># PFW Winproxy Exception type</span>
<div class="viewcode-block" id="WinproxyError"><a class="viewcode-back" href="../../../winproxy.html#windows.winproxy.WinproxyError">[docs]</a><span class="k">class</span> <span class="nc">WinproxyError</span><span class="p">(</span><span class="ne">WindowsError</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">func_name</span><span class="p">,</span> <span class="n">error_code</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">func_name</span><span class="p">,</span> <span class="n">error_code</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="n">win_error</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">WinError</span><span class="p">(</span><span class="n">error_code</span><span class="p">)</span> <span class="c1">#GetLastError by default</span>
<span class="n">api_error</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">WinproxyError</span><span class="p">,</span> <span class="bp">cls</span><span class="p">)</span><span class="o">.</span><span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">)</span>
<span class="n">api_error</span><span class="o">.</span><span class="n">api_name</span> <span class="o">=</span> <span class="n">func_name</span>
@@ -62,13 +65,13 @@
<span class="n">api_error</span><span class="o">.</span><span class="n">args</span> <span class="o">=</span> <span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="n">win_error</span><span class="o">.</span><span class="n">winerror</span><span class="p">,</span> <span class="n">win_error</span><span class="o">.</span><span class="n">strerror</span><span class="p">)</span>
<span class="k">return</span> <span class="n">api_error</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func_name</span><span class="p">,</span> <span class="n">error_code</span><span class="o">=</span><span class="kc">None</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">func_name</span><span class="p">,</span> <span class="n">error_code</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">WinproxyError</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">func_name</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="si">{0}</span><span class="s2">: </span><span class="si">{1}</span><span class="s2">&quot;</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">api_name</span><span class="p">,</span> <span class="nb">super</span><span class="p">(</span><span class="n">WinproxyError</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__repr__</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="si">{0}</span><span class="s2">: </span><span class="si">{1}</span><span class="s2">&quot;</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">api_name</span><span class="p">,</span> <span class="nb">super</span><span class="p">(</span><span class="n">WinproxyError</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__str__</span><span class="p">())</span></div>
@@ -148,13 +151,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+14 -11
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>windows.wintrust &#8212; PythonForWindows 0.5 documentation</title>
<title>windows.wintrust &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
</head><body>
@@ -26,7 +29,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
@@ -40,10 +43,10 @@
<span></span><span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">struct</span>
<span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">namedtuple</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">namedtuple</span>
<span class="kn">from</span> <span class="nn">windows</span> <span class="kn">import</span> <span class="n">winproxy</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="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">windows.generated_def.winstructs</span> <span class="kn">import</span> <span class="o">*</span>
@@ -105,7 +108,7 @@
<span class="n">win_trust_data</span><span class="o">.</span><span class="n">pPolicyCallbackData</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">win_trust_data</span><span class="o">.</span><span class="n">pSIPClientData</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">win_trust_data</span><span class="o">.</span><span class="n">dwUIChoice</span> <span class="o">=</span> <span class="n">WTD_UI_NONE</span>
<span class="n">win_trust_data</span><span class="o">.</span><span class="n">fdwRevocationChecks</span> <span class="o">=</span> <span class="n">WTD_REVOKE_NONE</span>
<span class="c1"># win_trust_data.fdwRevocationChecks = WTD_REVOKE_NONE</span>
<span class="n">win_trust_data</span><span class="o">.</span><span class="n">fdwRevocationChecks</span> <span class="o">=</span> <span class="n">WTD_REVOKE_WHOLECHAIN</span>
<span class="n">win_trust_data</span><span class="o">.</span><span class="n">dwUnionChoice</span> <span class="o">=</span> <span class="n">WTD_CHOICE_FILE</span>
<span class="n">win_trust_data</span><span class="o">.</span><span class="n">dwStateAction</span> <span class="o">=</span> <span class="n">WTD_STATEACTION_VERIFY</span>
@@ -159,7 +162,7 @@
<span class="k">raise</span>
<span class="k">return</span> <span class="n">buffer</span>
<span class="k">def</span> <span class="nf">get_file_hash2</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">get_file_hash2</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span> <span class="c1">#POC: name/API will change/disapear</span>
<span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s2">&quot;rb&quot;</span><span class="p">)</span>
<span class="n">handle</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">get_handle_from_file</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
@@ -260,13 +263,13 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+129 -2
View File
@@ -7,6 +7,12 @@
See sample :ref:`sample_debugger`
.. note::
If you are interrested by symbols (PDB) handling, go to subsection :ref:`debug_symbols_module`.
You can also look at the symbols-related samples: :ref:`sample_symbols`
:class:`Debugger`
"""""""""""""""""
@@ -24,6 +30,18 @@ This means that those methods see the original ``current_process`` memory access
.. automethod:: __init__
:class:`SymbolDebugger`
"""""""""""""""""""""""
.. note::
See sample :ref:`sample_symbol_debugger`
.. autoclass:: SymbolDebugger
:show-inheritance:
:members:
:no-inherited-members:
:class:`LocalDebugger`
""""""""""""""""""""""
@@ -43,7 +61,6 @@ There is not much documentation for now as the code might change soon.
:members:
:class:`Breakpoint`
"""""""""""""""""""
@@ -99,4 +116,114 @@ When a breakpoint is hit, its ``trigger`` function is called with the debugger a
.. note::
See sample :ref:`sample_debugger_bp_functionbp`
See sample :ref:`sample_debugger_bp_functionbp`
.. _debug_symbols_module:
:mod:`windows.debug.symbols` -- Using symbols
"""""""""""""""""""""""""""""""""""""""""""""
.. module:: windows.debug.symbols
The :mod:`windows.debug.symbols` module provide classes to load PDB and resolve name/address.
In its current state, this module does not handle types.
.. note::
See samples :ref:`sample_symbols`
Configuration
'''''''''''''
In order to be able to automatically download PDB and parse remote ``_NT_SYMBOL_PATH``, a debug version of the DLL `dbghelp.dll` must be used.
(See `MSDN: DbgHelp Versions <https://docs.microsoft.com/en-us/windows/win32/debug/dbghelp-versions>`_)
As it is NOT recommended to replace ``system32/dbghelp.dll``, its path must be provided to PythonForWindows.
This path must be provided before any call to the ``dbghelp.dll`` APIs.
Also, the ``symsrv.dll`` DLL should be present in the same directory as ``dbghelp.dll`` (See `SymSrv Installation <https://docs.microsoft.com/en-us/windows/win32/debug/using-symsrv#installation>`_)
There is 2 ways to pass this information to ``PythonForWindows``:
* Using the function :func:`set_dbghelp_path`
* Using the environment variable ``PFW_DBGHELP_PATH``
* If this variable exists it will simply trigger a call to ``set_dbghelp_path(PFW_DBGHELP_PATH)``
If the given path is a directory, the final path will be computer as ``path\<current_process_bitness>\dbghelp.dll``.
This allow to use the same script (or environment variable) transparently in bot 32b & 64b python interpreters.
.. note::
For example, on my computer my setup is done through the environment variable: ``PFW_DBGHELP_PATH=D:\pysym\bin``
This directory have the following layout:
| $ tree /A /F %PFW_DBGHELP_PATH%
| D:\\PYSYM\\BIN
| \| symsrv.yes
| \|
| +\\-\\-\\-32
| \| dbghelp.dll
| \| symsrv.dll
| \|
| \\\\-\\-\\-64
| dbghelp.dll
| symsrv.dll
Helpers
'''''''
.. autofunction:: set_dbghelp_path
.. autoclass:: SymbolEngine
:members:
:class:`VirtualSymbolHandler`
'''''''''''''''''''''''''''''
.. autoclass:: VirtualSymbolHandler
:show-inheritance:
:members:
:inherited-members:
:special-members: __getitem__
:class:`ProcessSymbolHandler`
'''''''''''''''''''''''''''''
.. autoclass:: ProcessSymbolHandler
:show-inheritance:
:members:
:inherited-members:
:special-members: __getitem__
:class:`SymbolModule`
'''''''''''''''''''''
.. autoclass:: SymbolModule
:show-inheritance:
:members:
:inherited-members:
:class:`SymbolInfo`
'''''''''''''''''''
.. autoclass:: SymbolInfo
:show-inheritance:
:members:
.. autoclass:: SymbolInfoA
:show-inheritance:
:members:
:inherited-members: displacement
:special-members: __str__, __int__
.. py:attribute:: displacement
The displacement between the addresse and the start of the symbol (name)
+121
View File
@@ -0,0 +1,121 @@
Device Manager
==============
.. module:: windows.winobject.device_manager
The :class:`DeviceManager` instance is accessible via :py:attr:`windows.system.device_manager
<windows.winobject.system.System.device_manager>`
.. note::
See sample at :ref:`sample_device_manager`
DeviceManager
"""""""""""""
.. autoclass:: DeviceManager
:members:
DeviceClass
"""""""""""
.. autoclass:: DeviceClass
:members:
:no-inherited-members:
DeviceInformationSet
""""""""""""""""""""
.. autoclass:: DeviceInformationSet
:members:
:special-members: __iter__
DeviceInstance
""""""""""""""
.. autoclass:: DeviceInstance
:members:
LogicalConfiguration
""""""""""""""""""""
.. autoclass:: LogicalConfiguration
:members:
ResourceDescriptor
""""""""""""""""""
.. autoclass:: ResourceDescriptor
:members:
Concrete ResourceDescriptor
'''''''''''''''''''''''''''
ResourceNoType
------------------
.. autoclass:: ResourceNoType
MemoryResource
--------------
.. autoclass:: MemoryResource
IoResource
----------
.. autoclass:: IoResource
DmaResource
-----------
.. autoclass:: DmaResource
IrqResource
-----------
.. autoclass:: IrqResource
BusNumberResource
-----------------
.. autoclass:: BusNumberResource
MemLargeResource
----------------
.. autoclass:: MemLargeResource
ClassSpecificResource
---------------------
.. autoclass:: ClassSpecificResource
DevicePrivateResource
---------------------
.. autoclass:: DevicePrivateResource
MfCardConfigResource
--------------------
.. autoclass:: MfCardConfigResource
PcCardConfigResource
--------------------
.. autoclass:: PcCardConfigResource
+48
View File
@@ -0,0 +1,48 @@
ETW -- Event Tracing for Windows
================================
.. module:: windows.winobject.event_trace
The :class:`EtwManager` instance is accessible via :py:attr:`windows.system.etw
<windows.winobject.system.System.etw>`
.. note::
This code is the result of my research on ``ETW`` that lead to this presentation `ETW for the lazy reverser (FR) <https://www.rump.beer/2019/slides/etw_lazy_reverser.pdf>`_
.. note::
See sample :ref:`sample_etw`
EtwManager
""""""""""
.. autoclass:: EtwManager
:members:
Tracing Events
""""""""""""""
EtwTrace
''''''''
.. autoclass:: EtwTrace
:members:
EventTraceProperties
''''''''''''''''''''
.. autoclass:: EventTraceProperties
:members:
EventRecord
'''''''''''
.. autoclass:: EventRecord
:members:
+3
View File
@@ -10,6 +10,9 @@ I have tried to offer some abstraction without completly hidding the some underl
The current API may need some works to provide simpler/highter level API in the future.
The :class:`EvtlogManager` instance is accessible via :py:attr:`windows.system.event_log
<windows.winobject.system.System.event_log>`
For now, the best thing to do is look at the sample:
.. note::
+8 -4
View File
@@ -34,15 +34,19 @@ You can install PythonForWindows using the ``setup.py`` at the root of the proje
python setup.py install
In its current state the project only support Python2 and
``setup.py`` will raise an :class:`NotImplementedError` if launched from python3.
.. warning::
PythonForWindows is not available on Pypi for now and thus cannot be directly installed using ``pip``.
Python3
^^^^^^^
python3 support is still in beta.
All the tests pass on master, but I did not test it heavily on real case.
Do not hesitate report bugs and issues.
Documentation
"""""""""""""
+1 -1
View File
@@ -32,4 +32,4 @@ KernelObject
.. autoclass:: KernelObject
:members:
:undoc-members:
:special-members: __getitem__, __iter__
:special-members: __getitem__,__iter__
+2 -2
View File
@@ -64,7 +64,7 @@ Example:
>>> client = windows.rpc.find_alpc_endpoint_and_connect(UAC_UIID)
>>> client
<windows.rpc.client.RPCClient object at 0x046A1470>
>>> client.alpc_client.portname
>>> client.alpc_client.port_name
'\\RPC Control\\LRPC-c30c67fef2afa1612b'
>>> iid = client.bind(UAC_UIID)
>>> iid
@@ -230,4 +230,4 @@ NDR STREAM
>>> x.data
'CCCC'
>>> hex(ndr.NdrLong.unpack(x))
'0x43434343'
'0x43434343'
+108
View File
@@ -92,6 +92,20 @@ Output
.. literalinclude:: samples_output\system.txt
.. _sample_services_demo:
Services
""""""""
.. literalinclude:: ..\..\samples\service\service_demo.py
Output
.. literalinclude:: samples_output\service_service_demo.txt
.. _sample_network_exploration:
:class:`Network` - socket exploration
@@ -162,6 +176,27 @@ Output
.. literalinclude:: samples_output\object_manager_findobj.txt
.. _sample_device_manager:
Device manager
""""""""""""""
.. literalinclude:: ..\..\samples\device_manager\device_manager.py
Output
.. literalinclude:: samples_output\device_manager_device_manager.txt
Enumerate devices
'''''''''''''''''
.. literalinclude:: ..\..\samples\device_manager\enum_devices.py
.. literalinclude:: samples_output\device_manager_enum_devices.txt
.. _sample_wintrust:
``windows.wintrust``
@@ -309,6 +344,18 @@ Ouput
.. literalinclude:: samples_output\test_code.txt
.. _sample_symbol_debugger:
:class:`SymbolDebugger`
'''''''''''''''''''''''
.. literalinclude:: ..\..\samples\debug\symbol_debugger.py
Output
.. literalinclude:: samples_output\debug_symbol_debugger.txt
.. _sample_local_debugger:
@@ -357,6 +404,43 @@ Ouput::
I AM LOADING <C:\Windows\system32\ole32.dll>
.. _sample_symbols:
Symbols
"""""""
VirtualSymbolHandler
''''''''''''''''''''
.. literalinclude:: ..\..\samples\debug\symbols\virtsymdemo.py
Output
.. literalinclude:: samples_output\debug_symbol_virtsymdemo.txt
ProcessSymbolHandler
''''''''''''''''''''
.. literalinclude:: ..\..\samples\debug\symbols\processsymdemo.py
Output
.. literalinclude:: samples_output\debug_symbol_processsymdemo.txt
Symbol search
'''''''''''''
.. literalinclude:: ..\..\samples\debug\symbols\symsearch.py
Output
.. literalinclude:: samples_output\debug_symbol_symsearch.txt
.. _wmi_samples:
WMI
@@ -585,3 +669,27 @@ Query SACL
Output
.. literalinclude:: samples_output\security_query_sacl.txt
.. _sample_etw:
ETW (Event Tracing for Windows)
"""""""""""""""""""""""""""""""
Trace processing
''''''''''''''''
.. literalinclude:: ..\..\samples\etw\uac_trace.py
Output
.. literalinclude:: samples_output\etw_uac_trace.txt
Enumeration
'''''''''''
.. literalinclude:: ..\..\samples\etw\etw_enumeration.py
Output
.. literalinclude:: samples_output\etw_etw_enumeration.txt
+14 -6
View File
@@ -1,19 +1,27 @@
Service
=======
The list of services is accessible via :py:attr:`windows.system.services
The services manager is accessible via :py:attr:`windows.system.services
<windows.winobject.system.System.services>`
.. note::
See sample :ref:`sample_system`
See sample :ref:`sample_system` & :ref:`sample_services_demo`
.. module:: windows.winobject.service
.. autoclass:: ServiceStatus
:exclude-members: count, index
.. autoclass:: ServiceA
ServiceManager
""""""""""""""
.. autoclass:: ServiceManager
:show-inheritance:
:inherited-members:
:special-members: __getitem__, __iter__
Service
"""""""
.. autoclass:: Service
:inherited-members:
+13
View File
@@ -44,6 +44,19 @@ TaskDefinition
:show-inheritance:
:special-members: __getitem__, __delitem__, __call__
TaskPrincipal
'''''''''''''
.. autoclass:: TaskPrincipal
:show-inheritance:
TaskRegistrationInfo
''''''''''''''''''''
.. autoclass:: TaskRegistrationInfo
:show-inheritance:
Action
""""""
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1,7 +1,7 @@
.. currentmodule:: windows.generated_def
WinError
------
--------
.. autodata:: FACILITY_NULL
.. autodata:: FACILITY_RPC
.. autodata:: FACILITY_DISPATCH
+3 -1
View File
@@ -20,5 +20,7 @@ This sections describes them by group of relation.
handle.rst
system_module.rst
object_manager.rst
device_manager.rst
task_scheduler.rst
evtlog.rst
evtlog.rst
etw.rst
File diff suppressed because it is too large Load Diff
+12 -1
View File
@@ -4,7 +4,7 @@
*
* Sphinx stylesheet -- basic theme.
*
* :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
* :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
@@ -81,6 +81,10 @@ div.sphinxsidebar input {
font-size: 1em;
}
div.sphinxsidebar #searchbox form.search {
overflow: hidden;
}
div.sphinxsidebar #searchbox input[type="text"] {
float: left;
width: 80%;
@@ -427,6 +431,13 @@ table.field-list td, table.field-list th {
hyphens: manual;
}
/* -- hlist styles ---------------------------------------------------------- */
table.hlist td {
vertical-align: top;
}
/* -- other body styles ----------------------------------------------------- */
ol.arabic {
+1 -1
View File
@@ -4,7 +4,7 @@
*
* Sphinx stylesheet -- classic theme.
*
* :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
* :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
+5 -3
View File
@@ -4,7 +4,7 @@
*
* Sphinx JavaScript utilities for all documentation.
*
* :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
* :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
@@ -150,7 +150,9 @@ var Documentation = {
this.fixFirefoxAnchorBug();
this.highlightSearchWords();
this.initIndexTable();
if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) {
this.initOnKeyListeners();
}
},
/**
@@ -310,4 +312,4 @@ _ = Documentation.gettext;
$(document).ready(function() {
Documentation.init();
});
});
+3 -2
View File
@@ -1,9 +1,10 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
VERSION: '0.5',
VERSION: '0.6',
LANGUAGE: 'None',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
SOURCELINK_SUFFIX: '.txt',
NAVIGATION_WITH_KEYS: false,
};
+297
View File
@@ -0,0 +1,297 @@
/*
* language_data.js
* ~~~~~~~~~~~~~~~~
*
* This script contains the language-specific data used by searchtools.js,
* namely the list of stopwords, stemmer, scorer and splitter.
*
* :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
/* Non-minified version JS is _stemmer.js if file is provided */
/**
* Porter Stemmer
*/
var Stemmer = function() {
var step2list = {
ational: 'ate',
tional: 'tion',
enci: 'ence',
anci: 'ance',
izer: 'ize',
bli: 'ble',
alli: 'al',
entli: 'ent',
eli: 'e',
ousli: 'ous',
ization: 'ize',
ation: 'ate',
ator: 'ate',
alism: 'al',
iveness: 'ive',
fulness: 'ful',
ousness: 'ous',
aliti: 'al',
iviti: 'ive',
biliti: 'ble',
logi: 'log'
};
var step3list = {
icate: 'ic',
ative: '',
alize: 'al',
iciti: 'ic',
ical: 'ic',
ful: '',
ness: ''
};
var c = "[^aeiou]"; // consonant
var v = "[aeiouy]"; // vowel
var C = c + "[^aeiouy]*"; // consonant sequence
var V = v + "[aeiou]*"; // vowel sequence
var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
var s_v = "^(" + C + ")?" + v; // vowel in stem
this.stemWord = function (w) {
var stem;
var suffix;
var firstch;
var origword = w;
if (w.length < 3)
return w;
var re;
var re2;
var re3;
var re4;
firstch = w.substr(0,1);
if (firstch == "y")
w = firstch.toUpperCase() + w.substr(1);
// Step 1a
re = /^(.+?)(ss|i)es$/;
re2 = /^(.+?)([^s])s$/;
if (re.test(w))
w = w.replace(re,"$1$2");
else if (re2.test(w))
w = w.replace(re2,"$1$2");
// Step 1b
re = /^(.+?)eed$/;
re2 = /^(.+?)(ed|ing)$/;
if (re.test(w)) {
var fp = re.exec(w);
re = new RegExp(mgr0);
if (re.test(fp[1])) {
re = /.$/;
w = w.replace(re,"");
}
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1];
re2 = new RegExp(s_v);
if (re2.test(stem)) {
w = stem;
re2 = /(at|bl|iz)$/;
re3 = new RegExp("([^aeiouylsz])\\1$");
re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re2.test(w))
w = w + "e";
else if (re3.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
else if (re4.test(w))
w = w + "e";
}
}
// Step 1c
re = /^(.+?)y$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(s_v);
if (re.test(stem))
w = stem + "i";
}
// Step 2
re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step2list[suffix];
}
// Step 3
re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step3list[suffix];
}
// Step 4
re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
re2 = /^(.+?)(s|t)(ion)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
if (re.test(stem))
w = stem;
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1] + fp[2];
re2 = new RegExp(mgr1);
if (re2.test(stem))
w = stem;
}
// Step 5
re = /^(.+?)e$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
re2 = new RegExp(meq1);
re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
w = stem;
}
re = /ll$/;
re2 = new RegExp(mgr1);
if (re.test(w) && re2.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
// and turn initial Y back to y
if (firstch == "y")
w = firstch.toLowerCase() + w.substr(1);
return w;
}
}
var splitChars = (function() {
var result = {};
var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
var i, j, start, end;
for (i = 0; i < singles.length; i++) {
result[singles[i]] = true;
}
var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
[722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
[1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
[1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
[1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
[2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
[2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
[2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
[2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
[2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
[2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
[2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
[3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
[3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
[3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
[3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
[3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
[3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
[4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
[4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
[4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
[4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
[5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
[6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
[6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
[6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
[6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
[7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
[7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
[8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
[8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
[8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
[10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
[11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
[12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
[12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
[12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
[19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
[42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
[42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
[43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
[43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
[43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
[43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
[44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
[57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
[64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
[65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
[65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
for (i = 0; i < ranges.length; i++) {
start = ranges[i][0];
end = ranges[i][1];
for (j = start; j <= end; j++) {
result[j] = true;
}
}
return result;
})();
function splitQuery(query) {
var result = [];
var start = -1;
for (var i = 0; i < query.length; i++) {
if (splitChars[query.charCodeAt(i)]) {
if (start !== -1) {
result.push(query.slice(start, i));
start = -1;
}
} else if (start === -1) {
start = i;
}
}
if (start !== -1) {
result.push(query.slice(start));
}
return result;
}
+34 -314
View File
@@ -1,331 +1,52 @@
/*
* searchtools.js_t
* searchtools.js
* ~~~~~~~~~~~~~~~~
*
* Sphinx JavaScript utilities for the full-text search.
*
* :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
* :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
if (!Scorer) {
/**
* Simple result scoring code.
*/
var Scorer = {
// Implement the following function to further tweak the score for each result
// The function takes a result array [filename, title, anchor, descr, score]
// and returns the new score.
/*
score: function(result) {
return result[4];
},
*/
/* Non-minified version JS is _stemmer.js if file is provided */
/**
* Porter Stemmer
*/
var Stemmer = function() {
// query matches the full name of an object
objNameMatch: 11,
// or matches in the last dotted part of the object name
objPartialMatch: 6,
// Additive scores depending on the priority of the object
objPrio: {0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5}, // used to be unimportantResults
// Used when the priority is not in the mapping.
objPrioDefault: 0,
var step2list = {
ational: 'ate',
tional: 'tion',
enci: 'ence',
anci: 'ance',
izer: 'ize',
bli: 'ble',
alli: 'al',
entli: 'ent',
eli: 'e',
ousli: 'ous',
ization: 'ize',
ation: 'ate',
ator: 'ate',
alism: 'al',
iveness: 'ive',
fulness: 'ful',
ousness: 'ous',
aliti: 'al',
iviti: 'ive',
biliti: 'ble',
logi: 'log'
// query found in title
title: 15,
// query found in terms
term: 5
};
}
var step3list = {
icate: 'ic',
ative: '',
alize: 'al',
iciti: 'ic',
ical: 'ic',
ful: '',
ness: ''
};
var c = "[^aeiou]"; // consonant
var v = "[aeiouy]"; // vowel
var C = c + "[^aeiouy]*"; // consonant sequence
var V = v + "[aeiou]*"; // vowel sequence
var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
var s_v = "^(" + C + ")?" + v; // vowel in stem
this.stemWord = function (w) {
var stem;
var suffix;
var firstch;
var origword = w;
if (w.length < 3)
return w;
var re;
var re2;
var re3;
var re4;
firstch = w.substr(0,1);
if (firstch == "y")
w = firstch.toUpperCase() + w.substr(1);
// Step 1a
re = /^(.+?)(ss|i)es$/;
re2 = /^(.+?)([^s])s$/;
if (re.test(w))
w = w.replace(re,"$1$2");
else if (re2.test(w))
w = w.replace(re2,"$1$2");
// Step 1b
re = /^(.+?)eed$/;
re2 = /^(.+?)(ed|ing)$/;
if (re.test(w)) {
var fp = re.exec(w);
re = new RegExp(mgr0);
if (re.test(fp[1])) {
re = /.$/;
w = w.replace(re,"");
}
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1];
re2 = new RegExp(s_v);
if (re2.test(stem)) {
w = stem;
re2 = /(at|bl|iz)$/;
re3 = new RegExp("([^aeiouylsz])\\1$");
re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re2.test(w))
w = w + "e";
else if (re3.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
else if (re4.test(w))
w = w + "e";
}
}
// Step 1c
re = /^(.+?)y$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(s_v);
if (re.test(stem))
w = stem + "i";
}
// Step 2
re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step2list[suffix];
}
// Step 3
re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step3list[suffix];
}
// Step 4
re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
re2 = /^(.+?)(s|t)(ion)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
if (re.test(stem))
w = stem;
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1] + fp[2];
re2 = new RegExp(mgr1);
if (re2.test(stem))
w = stem;
}
// Step 5
re = /^(.+?)e$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
re2 = new RegExp(meq1);
re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
w = stem;
}
re = /ll$/;
re2 = new RegExp(mgr1);
if (re.test(w) && re2.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
// and turn initial Y back to y
if (firstch == "y")
w = firstch.toLowerCase() + w.substr(1);
return w;
if (!splitQuery) {
function splitQuery(query) {
return query.split(/\s+/);
}
}
/**
* Simple result scoring code.
*/
var Scorer = {
// Implement the following function to further tweak the score for each result
// The function takes a result array [filename, title, anchor, descr, score]
// and returns the new score.
/*
score: function(result) {
return result[4];
},
*/
// query matches the full name of an object
objNameMatch: 11,
// or matches in the last dotted part of the object name
objPartialMatch: 6,
// Additive scores depending on the priority of the object
objPrio: {0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5}, // used to be unimportantResults
// Used when the priority is not in the mapping.
objPrioDefault: 0,
// query found in title
title: 15,
// query found in terms
term: 5
};
var splitChars = (function() {
var result = {};
var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
var i, j, start, end;
for (i = 0; i < singles.length; i++) {
result[singles[i]] = true;
}
var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
[722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
[1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
[1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
[1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
[2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
[2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
[2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
[2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
[2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
[2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
[2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
[3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
[3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
[3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
[3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
[3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
[3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
[4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
[4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
[4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
[4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
[5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
[6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
[6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
[6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
[6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
[7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
[7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
[8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
[8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
[8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
[10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
[11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
[12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
[12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
[12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
[19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
[42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
[42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
[43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
[43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
[43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
[43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
[44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
[57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
[64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
[65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
[65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
for (i = 0; i < ranges.length; i++) {
start = ranges[i][0];
end = ranges[i][1];
for (j = start; j <= end; j++) {
result[j] = true;
}
}
return result;
})();
function splitQuery(query) {
var result = [];
var start = -1;
for (var i = 0; i < query.length; i++) {
if (splitChars[query.charCodeAt(i)]) {
if (start !== -1) {
result.push(query.slice(start, i));
start = -1;
}
} else if (start === -1) {
start = i;
}
}
if (start !== -1) {
result.push(query.slice(start));
}
return result;
}
/**
* Search Module
*/
@@ -417,7 +138,6 @@ var Search = {
*/
query : function(query) {
var i;
var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
// stem the searchterms and add them to the correct list
var stemmer = new Stemmer();
@@ -758,4 +478,4 @@ var Search = {
$(document).ready(function() {
Search.init();
});
});
+1 -1
View File
@@ -16,7 +16,7 @@
* Once the browser is closed the cookie is deleted and the position
* reset to the default (expanded).
*
* :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
* :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
+1 -1
View File
@@ -4,7 +4,7 @@
*
* sphinx.websupport utilities for all documentation.
*
* :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
* :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
+16 -7
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>12. windows.alpc Advanced Local Procedure Call &#8212; PythonForWindows 0.5 documentation</title>
<title>12. windows.alpc Advanced Local Procedure Call &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="13. windows.rpc ALPC-based Windows RPC" href="rpc.html" />
@@ -34,7 +37,7 @@
<li class="right" >
<a href="crypto.html" title="11. windows.crypto CryptoAPI"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
@@ -321,6 +324,12 @@ ALPC messages over an ALPC port and the classes representing these messages.</p>
</table>
</dd></dl>
<dl class="attribute">
<dt id="windows.alpc.AlpcClient.port_name">
<code class="descname">port_name</code><em class="property"> = None</em><a class="headerlink" href="#windows.alpc.AlpcClient.port_name" title="Permalink to this definition"></a></dt>
<dd><p>The name of the ALPC port the client is connect to.</p>
</dd></dl>
<dl class="method">
<dt id="windows.alpc.AlpcClient.recv">
<code class="descname">recv</code><span class="sig-paren">(</span><em>receive_msg=None</em>, <em>flags=0</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.alpc.AlpcClient.recv" title="Permalink to this definition"></a></dt>
@@ -492,7 +501,7 @@ ALPC messages over an ALPC port and the classes representing these messages.</p>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">12. <code class="docutils literal notranslate"><span class="pre">windows.alpc</span></code> Advanced Local Procedure Call</a><ul>
<li><a class="reference internal" href="#alpc-message">12.1. ALPC Message</a></li>
@@ -546,12 +555,12 @@ ALPC messages over an ALPC port and the classes representing these messages.</p>
<li class="right" >
<a href="crypto.html" title="11. windows.crypto CryptoAPI"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+10 -7
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>10. windows.com - Component Object Model &#8212; PythonForWindows 0.5 documentation</title>
<title>10. windows.com - Component Object Model &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="11. windows.crypto CryptoAPI" href="crypto.html" />
@@ -34,7 +37,7 @@
<li class="right" >
<a href="debug.html" title="9. windows.debug Debugging"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
@@ -134,7 +137,7 @@ You can then use the instance to call whatever method you need.</p>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">10. <code class="docutils literal notranslate"><span class="pre">windows.com</span></code> - Component Object Model</a><ul>
<li><a class="reference internal" href="#using-a-com-interface">10.1. Using a COM interface</a></li>
@@ -188,12 +191,12 @@ You can then use the instance to call whatever method you need.</p>
<li class="right" >
<a href="debug.html" title="9. windows.debug Debugging"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+16 -7
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>11. windows.crypto CryptoAPI &#8212; PythonForWindows 0.5 documentation</title>
<title>11. windows.crypto CryptoAPI &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="12. windows.alpc Advanced Local Procedure Call" href="alpc.html" />
@@ -34,7 +37,7 @@
<li class="right" >
<a href="com.html" title="10. windows.com - Component Object Model"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
@@ -507,6 +510,12 @@ See <a class="reference external" href="https://msdn.microsoft.com/en-us/library
<dd><p>The list of <a class="reference internal" href="#windows.crypto.Certificate" title="windows.crypto.Certificate"><code class="xref py py-class docutils literal notranslate"><span class="pre">Certificate</span></code></a> embded in the message</p>
</dd></dl>
<dl class="classmethod">
<dt id="windows.crypto.CryptMessage.from_buffer">
<em class="property">classmethod </em><code class="descname">from_buffer</code><span class="sig-paren">(</span><em>object</em>, <em>offset=0</em><span class="sig-paren">)</span> &#x2192; C instance<a class="reference internal" href="_modules/windows/crypto/cryptmsg.html#CryptMessage.from_buffer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.crypto.CryptMessage.from_buffer" title="Permalink to this definition"></a></dt>
<dd><p>create a C instance from a writeable buffer</p>
</dd></dl>
<dl class="method">
<dt id="windows.crypto.CryptMessage.get_cert">
<code class="descname">get_cert</code><span class="sig-paren">(</span><em>index=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/crypto/cryptmsg.html#CryptMessage.get_cert"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.crypto.CryptMessage.get_cert" title="Permalink to this definition"></a></dt>
@@ -680,7 +689,7 @@ See <a class="reference external" href="https://msdn.microsoft.com/en-us/library
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">11. <code class="docutils literal notranslate"><span class="pre">windows.crypto</span></code> CryptoAPI</a><ul>
<li><a class="reference internal" href="#encryption">11.1. Encryption</a><ul>
@@ -751,12 +760,12 @@ See <a class="reference external" href="https://msdn.microsoft.com/en-us/library
<li class="right" >
<a href="com.html" title="10. windows.com - Component Object Model"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+733 -11
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>9. windows.debug Debugging &#8212; PythonForWindows 0.5 documentation</title>
<title>9. windows.debug Debugging &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="10. windows.com - Component Object Model" href="com.html" />
@@ -34,7 +37,7 @@
<li class="right" >
<a href="wintrust.html" title="8. windows.wintrust Checking signature"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
@@ -49,6 +52,11 @@
<p class="first admonition-title">Note</p>
<p class="last">See sample <a class="reference internal" href="sample.html#sample-debugger"><span class="std std-ref">Debugging</span></a></p>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p>If you are interrested by symbols (PDB) handling, go to subsection <a class="reference internal" href="#debug-symbols-module"><span class="std std-ref">windows.debug.symbols Using symbols</span></a>.</p>
<p class="last">You can also look at the symbols-related samples: <a class="reference internal" href="sample.html#sample-symbols"><span class="std std-ref">Symbols</span></a></p>
</div>
<div class="section" id="debugger">
<h2>9.1. <a class="reference internal" href="#windows.debug.Debugger" title="windows.debug.Debugger"><code class="xref py py-class docutils literal notranslate"><span class="pre">Debugger</span></code></a><a class="headerlink" href="#debugger" title="Permalink to this headline"></a></h2>
<p>The <a class="reference internal" href="#windows.debug.Debugger" title="windows.debug.Debugger"><code class="xref py py-class docutils literal notranslate"><span class="pre">Debugger</span></code></a> is the base class to perform the debugging of a remote process.
@@ -360,9 +368,26 @@ and <code class="docutils literal notranslate"><span class="pre">DBG_EXCEPTION_N
</dd></dl>
</div>
<div class="section" id="symboldebugger">
<h2>9.2. <a class="reference internal" href="#windows.debug.SymbolDebugger" title="windows.debug.SymbolDebugger"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolDebugger</span></code></a><a class="headerlink" href="#symboldebugger" title="Permalink to this headline"></a></h2>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">See sample <a class="reference internal" href="sample.html#sample-symbol-debugger"><span class="std std-ref">SymbolDebugger</span></a></p>
</div>
<dl class="class">
<dt id="windows.debug.SymbolDebugger">
<em class="property">class </em><code class="descclassname">windows.debug.</code><code class="descname">SymbolDebugger</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/symboldbg.html#SymbolDebugger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.SymbolDebugger" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">windows.debug.debugger.Debugger</span></code></p>
<p>A debugger using the symbol API (hence PDB) for name resolution.
To use PDB, a correct version of dbghelp should be configured as well as <code class="docutils literal notranslate"><span class="pre">_NT_SYMBOL_PATH</span></code>.
(See <a class="reference internal" href="#debug-symbols-module"><span class="std std-ref">windows.debug.symbols Using symbols</span></a>)</p>
<p>This debugger add a <code class="docutils literal notranslate"><span class="pre">current_resolver</span></code> variable (A <a class="reference internal" href="#windows.debug.symbols.ProcessSymbolHandler" title="windows.debug.symbols.ProcessSymbolHandler"><code class="xref py py-class docutils literal notranslate"><span class="pre">ProcessSymbolHandler</span></code></a>) for the <code class="docutils literal notranslate"><span class="pre">current_process</span></code>.</p>
</dd></dl>
</div>
<div class="section" id="localdebugger">
<h2>9.2. <a class="reference internal" href="#windows.debug.LocalDebugger" title="windows.debug.LocalDebugger"><code class="xref py py-class docutils literal notranslate"><span class="pre">LocalDebugger</span></code></a><a class="headerlink" href="#localdebugger" title="Permalink to this headline"></a></h2>
<h2>9.3. <a class="reference internal" href="#windows.debug.LocalDebugger" title="windows.debug.LocalDebugger"><code class="xref py py-class docutils literal notranslate"><span class="pre">LocalDebugger</span></code></a><a class="headerlink" href="#localdebugger" title="Permalink to this headline"></a></h2>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">See sample <a class="reference internal" href="sample.html#sample-local-debugger"><span class="std std-ref">LocalDebugger</span></a></p>
@@ -423,7 +448,7 @@ It is based on <code class="xref py py-func docutils literal notranslate"><span
</div>
<div class="section" id="breakpoint">
<h2>9.3. <a class="reference internal" href="#windows.debug.Breakpoint" title="windows.debug.Breakpoint"><code class="xref py py-class docutils literal notranslate"><span class="pre">Breakpoint</span></code></a><a class="headerlink" href="#breakpoint" title="Permalink to this headline"></a></h2>
<h2>9.4. <a class="reference internal" href="#windows.debug.Breakpoint" title="windows.debug.Breakpoint"><code class="xref py py-class docutils literal notranslate"><span class="pre">Breakpoint</span></code></a><a class="headerlink" href="#breakpoint" title="Permalink to this headline"></a></h2>
<p>Standard breakpoints types expect an address as argument.</p>
<p>An address can be:</p>
<blockquote>
@@ -506,6 +531,12 @@ It is based on <code class="xref py py-func docutils literal notranslate"><span
<dd><p>Setup a breakpoint at the return address of the function, this breakpoint will call <a class="reference internal" href="#windows.debug.FunctionCallBP.ret_trigger" title="windows.debug.FunctionCallBP.ret_trigger"><code class="xref py py-func docutils literal notranslate"><span class="pre">ret_trigger()</span></code></a></p>
</dd></dl>
<dl class="method">
<dt id="windows.debug.FunctionCallBP.get_ret_addr">
<code class="descname">get_ret_addr</code><span class="sig-paren">(</span><em>dbg</em>, <em>exception</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/breakpoints.html#FunctionCallBP.get_ret_addr"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.FunctionCallBP.get_ret_addr" title="Permalink to this definition"></a></dt>
<dd><p>Get the return address of the current target, only valid in the trigger() function.</p>
</dd></dl>
<dl class="method">
<dt id="windows.debug.FunctionCallBP.ret_trigger">
<code class="descname">ret_trigger</code><span class="sig-paren">(</span><em>dbg</em>, <em>exception</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/breakpoints.html#FunctionCallBP.ret_trigger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.FunctionCallBP.ret_trigger" title="Permalink to this definition"></a></dt>
@@ -556,6 +587,12 @@ It is based on <code class="xref py py-func docutils literal notranslate"><span
<dd><p>Extracts the functions parameters in an <code class="xref py py-class docutils literal notranslate"><span class="pre">OrderedDict</span></code></p>
</dd></dl>
<dl class="method">
<dt id="windows.debug.FunctionBP.get_ret_addr">
<code class="descname">get_ret_addr</code><span class="sig-paren">(</span><em>dbg</em>, <em>exception</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.debug.FunctionBP.get_ret_addr" title="Permalink to this definition"></a></dt>
<dd><p>Get the return address of the current target, only valid in the trigger() function.</p>
</dd></dl>
<dl class="method">
<dt id="windows.debug.FunctionBP.ret_trigger">
<code class="descname">ret_trigger</code><span class="sig-paren">(</span><em>dbg</em>, <em>exception</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.debug.FunctionBP.ret_trigger" title="Permalink to this definition"></a></dt>
@@ -573,6 +610,681 @@ It is based on <code class="xref py py-func docutils literal notranslate"><span
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">See sample <a class="reference internal" href="sample.html#sample-debugger-bp-functionbp"><span class="std std-ref">windows.debug.FunctionBP</span></a></p>
</div>
</div>
<div class="section" id="module-windows.debug.symbols">
<span id="windows-debug-symbols-using-symbols"></span><span id="debug-symbols-module"></span><h2>9.5. <a class="reference internal" href="#module-windows.debug.symbols" title="windows.debug.symbols"><code class="xref py py-mod docutils literal notranslate"><span class="pre">windows.debug.symbols</span></code></a> Using symbols<a class="headerlink" href="#module-windows.debug.symbols" title="Permalink to this headline"></a></h2>
<p>The <a class="reference internal" href="#module-windows.debug.symbols" title="windows.debug.symbols"><code class="xref py py-mod docutils literal notranslate"><span class="pre">windows.debug.symbols</span></code></a> module provide classes to load PDB and resolve name/address.
In its current state, this module does not handle types.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">See samples <a class="reference internal" href="sample.html#sample-symbols"><span class="std std-ref">Symbols</span></a></p>
</div>
<div class="section" id="configuration">
<h3>9.5.1. Configuration<a class="headerlink" href="#configuration" title="Permalink to this headline"></a></h3>
<p>In order to be able to automatically download PDB and parse remote <code class="docutils literal notranslate"><span class="pre">_NT_SYMBOL_PATH</span></code>, a debug version of the DLL <cite>dbghelp.dll</cite> must be used.
(See <a class="reference external" href="https://docs.microsoft.com/en-us/windows/win32/debug/dbghelp-versions">MSDN: DbgHelp Versions</a>)</p>
<p>As it is NOT recommended to replace <code class="docutils literal notranslate"><span class="pre">system32/dbghelp.dll</span></code>, its path must be provided to PythonForWindows.
This path must be provided before any call to the <code class="docutils literal notranslate"><span class="pre">dbghelp.dll</span></code> APIs.
Also, the <code class="docutils literal notranslate"><span class="pre">symsrv.dll</span></code> DLL should be present in the same directory as <code class="docutils literal notranslate"><span class="pre">dbghelp.dll</span></code> (See <a class="reference external" href="https://docs.microsoft.com/en-us/windows/win32/debug/using-symsrv#installation">SymSrv Installation</a>)</p>
<p>There is 2 ways to pass this information to <code class="docutils literal notranslate"><span class="pre">PythonForWindows</span></code>:</p>
<blockquote>
<div><ul class="simple">
<li>Using the function <a class="reference internal" href="#windows.debug.symbols.set_dbghelp_path" title="windows.debug.symbols.set_dbghelp_path"><code class="xref py py-func docutils literal notranslate"><span class="pre">set_dbghelp_path()</span></code></a></li>
<li><dl class="first docutils">
<dt>Using the environment variable <code class="docutils literal notranslate"><span class="pre">PFW_DBGHELP_PATH</span></code></dt>
<dd><ul class="first last">
<li>If this variable exists it will simply trigger a call to <code class="docutils literal notranslate"><span class="pre">set_dbghelp_path(PFW_DBGHELP_PATH)</span></code></li>
</ul>
</dd>
</dl>
</li>
</ul>
</div></blockquote>
<p>If the given path is a directory, the final path will be computer as <code class="docutils literal notranslate"><span class="pre">path\&lt;current_process_bitness&gt;\dbghelp.dll</span></code>.
This allow to use the same script (or environment variable) transparently in bot 32b &amp; 64b python interpreters.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p>For example, on my computer my setup is done through the environment variable: <code class="docutils literal notranslate"><span class="pre">PFW_DBGHELP_PATH=D:\pysym\bin</span></code></p>
<p>This directory have the following layout:</p>
<blockquote class="last">
<div><div class="line-block">
<div class="line">$ tree /A /F %PFW_DBGHELP_PATH%</div>
<div class="line-block">
<div class="line">D:\PYSYM\BIN</div>
<div class="line">| symsrv.yes</div>
<div class="line">|</div>
<div class="line">+---32</div>
<div class="line">| dbghelp.dll</div>
<div class="line">| symsrv.dll</div>
<div class="line">|</div>
<div class="line">\---64</div>
<div class="line-block">
<div class="line">dbghelp.dll</div>
<div class="line">symsrv.dll</div>
</div>
</div>
</div>
</div></blockquote>
</div>
</div>
<div class="section" id="helpers">
<h3>9.5.2. Helpers<a class="headerlink" href="#helpers" title="Permalink to this headline"></a></h3>
<dl class="function">
<dt id="windows.debug.symbols.set_dbghelp_path">
<code class="descclassname">windows.debug.symbols.</code><code class="descname">set_dbghelp_path</code><span class="sig-paren">(</span><em>path</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/symbols.html#set_dbghelp_path"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.symbols.set_dbghelp_path" title="Permalink to this definition"></a></dt>
<dd><p>Set the path of the <code class="docutils literal notranslate"><span class="pre">dbghelp.dll</span></code> file to use. It allow to configure a different version of the DLL handling PDB downloading.</p>
<p>If <code class="docutils literal notranslate"><span class="pre">path</span></code> is a directory, the final <code class="docutils literal notranslate"><span class="pre">dbghelp.dll</span></code> will be computed as
<code class="docutils literal notranslate"><span class="pre">path\&lt;current_process_bitness&gt;\dbghelp.dll</span></code>.</p>
<p>This allow to use the same script transparently in both 32b &amp; 64b python interpreters.</p>
</dd></dl>
<dl class="class">
<dt id="windows.debug.symbols.SymbolEngine">
<em class="property">class </em><code class="descclassname">windows.debug.symbols.</code><code class="descname">SymbolEngine</code><a class="reference internal" href="_modules/windows/debug/symbols.html#SymbolEngine"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.symbols.SymbolEngine" title="Permalink to this definition"></a></dt>
<dd><p>Represent the global symbol engine. Just a proxy to get/set global engine options</p>
<p>Its instance can be accessed using <code class="docutils literal notranslate"><span class="pre">windows.debug.symbols.engine</span></code></p>
<p>Exemple:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">windows</span><span class="o">.</span><span class="n">debug</span><span class="o">.</span><span class="n">symbols</span><span class="o">.</span><span class="n">engine</span><span class="o">.</span><span class="n">options</span>
<span class="go">6L</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">windows</span><span class="o">.</span><span class="n">debug</span><span class="o">.</span><span class="n">symbols</span><span class="o">.</span><span class="n">engine</span><span class="o">.</span><span class="n">options</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SYMOPT_UNDNAME</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">windows</span><span class="o">.</span><span class="n">debug</span><span class="o">.</span><span class="n">symbols</span><span class="o">.</span><span class="n">engine</span><span class="o">.</span><span class="n">options</span>
<span class="go">2L</span>
</pre></div>
</div>
<dl class="attribute">
<dt id="windows.debug.symbols.SymbolEngine.options">
<code class="descname">options</code><a class="headerlink" href="#windows.debug.symbols.SymbolEngine.options" title="Permalink to this definition"></a></dt>
<dd><p>The options of the Symbol engine
(<a class="reference external" href="https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/nf-dbghelp-symsetoptions#parameters">see options</a>)</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Default options are: <code class="docutils literal notranslate"><span class="pre">gdef.SYMOPT_DEFERRED_LOADS</span> <span class="pre">+</span> <span class="pre">gdef.SYMOPT_UNDNAME</span></code></p>
</div>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="virtualsymbolhandler">
<h3>9.5.3. <a class="reference internal" href="#windows.debug.symbols.VirtualSymbolHandler" title="windows.debug.symbols.VirtualSymbolHandler"><code class="xref py py-class docutils literal notranslate"><span class="pre">VirtualSymbolHandler</span></code></a><a class="headerlink" href="#virtualsymbolhandler" title="Permalink to this headline"></a></h3>
<dl class="class">
<dt id="windows.debug.symbols.VirtualSymbolHandler">
<em class="property">class </em><code class="descclassname">windows.debug.symbols.</code><code class="descname">VirtualSymbolHandler</code><span class="sig-paren">(</span><em>search_path=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/symbols.html#VirtualSymbolHandler"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.symbols.VirtualSymbolHandler" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">windows.debug.symbols.SymbolHandler</span></code></p>
<p>A SymbolHandler where its handle is not a valid process handle
Allow to create/resolve symbol in a virtual process
But all API needing a real process handle will fail</p>
<dl class="method">
<dt id="windows.debug.symbols.VirtualSymbolHandler.__getitem__">
<code class="descname">__getitem__</code><span class="sig-paren">(</span><em>name_or_addr</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.debug.symbols.VirtualSymbolHandler.__getitem__" title="Permalink to this definition"></a></dt>
<dd><p>Resolve <code class="docutils literal notranslate"><span class="pre">name_or_addr</span></code>.</p>
<p>If its an int -&gt; Return the <a class="reference internal" href="#windows.debug.symbols.SymbolInfo" title="windows.debug.symbols.SymbolInfo"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolInfo</span></code></a> at the address.
If its a string -&gt; Return the <a class="reference internal" href="#windows.debug.symbols.SymbolInfo" title="windows.debug.symbols.SymbolInfo"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolInfo</span></code></a> corresponding to the symbol name</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><a class="reference internal" href="#windows.debug.symbols.SymbolInfo" title="windows.debug.symbols.SymbolInfo"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolInfo</span></code></a></td>
</tr>
</tbody>
</table>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last"><code class="docutils literal notranslate"><span class="pre">__getitem__</span></code> is an alias for <code class="docutils literal notranslate"><span class="pre">resolve()</span></code></p>
</div>
<p>Exemple:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">debug</span><span class="o">.</span><span class="n">symbols</span><span class="o">.</span><span class="n">VirtualSymbolHandler</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">mod</span> <span class="o">=</span> <span class="n">sh</span><span class="o">.</span><span class="n">load_file</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;c:\windows\system32\kernelbase.dll&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">mod</span>
<span class="go">&lt;SymbolModule name=&quot;kernelbase&quot; type=SymPdb pdb=&quot;wkernelbase.pdb&quot; addr=0x10000000&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span><span class="o">.</span><span class="n">resolve</span><span class="p">(</span><span class="s2">&quot;kernelbase!CreateFileInternal&quot;</span><span class="p">)</span>
<span class="go">&lt;SymbolInfoA name=&quot;CreateFileInternal&quot; addr=0x100f2120 tag=SymTagFunction&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span><span class="p">[</span><span class="mh">0x100f2042</span><span class="p">]</span>
<span class="go">&lt;SymbolInfoA name=&quot;ReadFile&quot; addr=0x100f1ee0 displacement=0x162 tag=SymTagFunction&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">str</span><span class="p">(</span><span class="n">sh</span><span class="p">[</span><span class="mh">0x100f2042</span><span class="p">])</span>
<span class="go">&#39;kernelbase!ReadFile+0x162&#39;</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="windows.debug.symbols.VirtualSymbolHandler.load">
<code class="descname">load</code><span class="sig-paren">(</span><em>path</em>, <em>name=None</em>, <em>addr=0</em>, <em>size=0</em>, <em>data=None</em>, <em>flags=0</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.debug.symbols.VirtualSymbolHandler.load" title="Permalink to this definition"></a></dt>
<dd><p>An alias for <a class="reference internal" href="#windows.debug.symbols.VirtualSymbolHandler.load_file" title="windows.debug.symbols.VirtualSymbolHandler.load_file"><code class="xref py py-func docutils literal notranslate"><span class="pre">VirtualSymbolHandler.load_file()</span></code></a></p>
</dd></dl>
<dl class="method">
<dt id="windows.debug.symbols.VirtualSymbolHandler.load_file">
<code class="descname">load_file</code><span class="sig-paren">(</span><em>path</em>, <em>name=None</em>, <em>addr=0</em>, <em>size=0</em>, <em>data=None</em>, <em>flags=0</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.debug.symbols.VirtualSymbolHandler.load_file" title="Permalink to this definition"></a></dt>
<dd><p>Load the module <code class="docutils literal notranslate"><span class="pre">path</span></code> at <code class="docutils literal notranslate"><span class="pre">addr</span></code></p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><a class="reference internal" href="#windows.debug.symbols.SymbolModule" title="windows.debug.symbols.SymbolModule"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolModule</span></code></a> The loaded module</td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="method">
<dt id="windows.debug.symbols.VirtualSymbolHandler.load_module">
<code class="descname">load_module</code><span class="sig-paren">(</span><em>file_handle=None</em>, <em>path=None</em>, <em>name=None</em>, <em>addr=0</em>, <em>size=0</em>, <em>data=None</em>, <em>flags=0</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.debug.symbols.VirtualSymbolHandler.load_module" title="Permalink to this definition"></a></dt>
<dd><p>Load a module at a given <code class="docutils literal notranslate"><span class="pre">addr</span></code>. The module to load can be pass via a <code class="docutils literal notranslate"><span class="pre">file_handle</span></code>
or the direct <code class="docutils literal notranslate"><span class="pre">path</span></code> of the file to load.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><a class="reference internal" href="#windows.debug.symbols.SymbolModule" title="windows.debug.symbols.SymbolModule"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolModule</span></code></a> The loaded module</td>
</tr>
</tbody>
</table>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">The logic of <code class="docutils literal notranslate"><span class="pre">SymLoadModuleEx</span></code> seems somewhat strange about the naming of the loaded module.
A custom module <code class="docutils literal notranslate"><span class="pre">name</span></code> is only taken into account if the file is passed via a File handle.
To make it more intuitive, if this function is call with a <code class="docutils literal notranslate"><span class="pre">path</span></code> and <code class="docutils literal notranslate"><span class="pre">name</span></code> and no <code class="docutils literal notranslate"><span class="pre">file_handle</span></code>,
it will open the path and directly call <code class="docutils literal notranslate"><span class="pre">SymLoadModuleEx</span></code> with a file handle and a name.</p>
</div>
</dd></dl>
<dl class="attribute">
<dt id="windows.debug.symbols.VirtualSymbolHandler.modules">
<code class="descname">modules</code><a class="headerlink" href="#windows.debug.symbols.VirtualSymbolHandler.modules" title="Permalink to this definition"></a></dt>
<dd><p>The list of loaded modules</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">[<a class="reference internal" href="#windows.debug.symbols.SymbolModule" title="windows.debug.symbols.SymbolModule"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolModule</span></code></a>] A list of modules</td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="method">
<dt id="windows.debug.symbols.VirtualSymbolHandler.refresh">
<code class="descname">refresh</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/symbols.html#VirtualSymbolHandler.refresh"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.symbols.VirtualSymbolHandler.refresh" title="Permalink to this definition"></a></dt>
<dd><p>Do nothing for a <a class="reference internal" href="#windows.debug.symbols.VirtualSymbolHandler" title="windows.debug.symbols.VirtualSymbolHandler"><code class="xref py py-class docutils literal notranslate"><span class="pre">VirtualSymbolHandler</span></code></a></p>
</dd></dl>
<dl class="method">
<dt id="windows.debug.symbols.VirtualSymbolHandler.resolve">
<code class="descname">resolve</code><span class="sig-paren">(</span><em>name_or_addr</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.debug.symbols.VirtualSymbolHandler.resolve" title="Permalink to this definition"></a></dt>
<dd><p>Resolve <code class="docutils literal notranslate"><span class="pre">name_or_addr</span></code>.</p>
<p>If its an int -&gt; Return the <a class="reference internal" href="#windows.debug.symbols.SymbolInfo" title="windows.debug.symbols.SymbolInfo"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolInfo</span></code></a> at the address.
If its a string -&gt; Return the <a class="reference internal" href="#windows.debug.symbols.SymbolInfo" title="windows.debug.symbols.SymbolInfo"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolInfo</span></code></a> corresponding to the symbol name</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><a class="reference internal" href="#windows.debug.symbols.SymbolInfo" title="windows.debug.symbols.SymbolInfo"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolInfo</span></code></a></td>
</tr>
</tbody>
</table>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last"><code class="docutils literal notranslate"><span class="pre">__getitem__</span></code> is an alias for <code class="docutils literal notranslate"><span class="pre">resolve()</span></code></p>
</div>
<p>Exemple:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">debug</span><span class="o">.</span><span class="n">symbols</span><span class="o">.</span><span class="n">VirtualSymbolHandler</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">mod</span> <span class="o">=</span> <span class="n">sh</span><span class="o">.</span><span class="n">load_file</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;c:\windows\system32\kernelbase.dll&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">mod</span>
<span class="go">&lt;SymbolModule name=&quot;kernelbase&quot; type=SymPdb pdb=&quot;wkernelbase.pdb&quot; addr=0x10000000&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span><span class="o">.</span><span class="n">resolve</span><span class="p">(</span><span class="s2">&quot;kernelbase!CreateFileInternal&quot;</span><span class="p">)</span>
<span class="go">&lt;SymbolInfoA name=&quot;CreateFileInternal&quot; addr=0x100f2120 tag=SymTagFunction&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span><span class="p">[</span><span class="mh">0x100f2042</span><span class="p">]</span>
<span class="go">&lt;SymbolInfoA name=&quot;ReadFile&quot; addr=0x100f1ee0 displacement=0x162 tag=SymTagFunction&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">str</span><span class="p">(</span><span class="n">sh</span><span class="p">[</span><span class="mh">0x100f2042</span><span class="p">])</span>
<span class="go">&#39;kernelbase!ReadFile+0x162&#39;</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="windows.debug.symbols.VirtualSymbolHandler.search">
<code class="descname">search</code><span class="sig-paren">(</span><em>mask</em>, <em>mod=0</em>, <em>tag=0</em>, <em>options=SYMSEARCH_ALLITEMS(0x8)</em>, <em>callback=None</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.debug.symbols.VirtualSymbolHandler.search" title="Permalink to this definition"></a></dt>
<dd><p>Search the symbols matching <code class="docutils literal notranslate"><span class="pre">mask</span></code> (<code class="docutils literal notranslate"><span class="pre">Windbg</span></code> like).</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">[<a class="reference internal" href="#windows.debug.symbols.SymbolInfo" title="windows.debug.symbols.SymbolInfo"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolInfo</span></code></a>] A list of <a class="reference internal" href="#windows.debug.symbols.SymbolInfo" title="windows.debug.symbols.SymbolInfo"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolInfo</span></code></a></td>
</tr>
</tbody>
</table>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">debug</span><span class="o">.</span><span class="n">symbols</span><span class="o">.</span><span class="n">VirtualSymbolHandler</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">mod</span> <span class="o">=</span> <span class="n">sh</span><span class="o">.</span><span class="n">load_file</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;c:\windows\system32\kernelbase.dll&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s2">&quot;kernelbase!CreateFile*&quot;</span><span class="p">)</span>
<span class="go">[&lt;SymbolInfoA name=&quot;CreateFileInternal&quot; addr=0x100f2120 tag=SymTagFunction&gt;,</span>
<span class="go"> &lt;SymbolInfoA name=&quot;CreateFileMoniker&quot; addr=0x10117d80 tag=SymTagFunction&gt;,</span>
<span class="go"> &lt;SymbolInfoA name=&quot;CreateFile2&quot; addr=0x1011e690 tag=SymTagFunction&gt;,</span>
<span class="go"> ...]</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="windows.debug.symbols.VirtualSymbolHandler.unload">
<code class="descname">unload</code><span class="sig-paren">(</span><em>addr</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.debug.symbols.VirtualSymbolHandler.unload" title="Permalink to this definition"></a></dt>
<dd><p>Unload the module at <code class="docutils literal notranslate"><span class="pre">addr</span></code></p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="processsymbolhandler">
<h3>9.5.4. <a class="reference internal" href="#windows.debug.symbols.ProcessSymbolHandler" title="windows.debug.symbols.ProcessSymbolHandler"><code class="xref py py-class docutils literal notranslate"><span class="pre">ProcessSymbolHandler</span></code></a><a class="headerlink" href="#processsymbolhandler" title="Permalink to this headline"></a></h3>
<dl class="class">
<dt id="windows.debug.symbols.ProcessSymbolHandler">
<em class="property">class </em><code class="descclassname">windows.debug.symbols.</code><code class="descname">ProcessSymbolHandler</code><span class="sig-paren">(</span><em>process</em>, <em>search_path=None</em>, <em>invade_process=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/symbols.html#ProcessSymbolHandler"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.symbols.ProcessSymbolHandler" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">windows.debug.symbols.SymbolHandler</span></code></p>
<dl class="method">
<dt id="windows.debug.symbols.ProcessSymbolHandler.__getitem__">
<code class="descname">__getitem__</code><span class="sig-paren">(</span><em>name_or_addr</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.debug.symbols.ProcessSymbolHandler.__getitem__" title="Permalink to this definition"></a></dt>
<dd><p>Resolve <code class="docutils literal notranslate"><span class="pre">name_or_addr</span></code>.</p>
<p>If its an int -&gt; Return the <a class="reference internal" href="#windows.debug.symbols.SymbolInfo" title="windows.debug.symbols.SymbolInfo"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolInfo</span></code></a> at the address.
If its a string -&gt; Return the <a class="reference internal" href="#windows.debug.symbols.SymbolInfo" title="windows.debug.symbols.SymbolInfo"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolInfo</span></code></a> corresponding to the symbol name</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><a class="reference internal" href="#windows.debug.symbols.SymbolInfo" title="windows.debug.symbols.SymbolInfo"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolInfo</span></code></a></td>
</tr>
</tbody>
</table>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last"><code class="docutils literal notranslate"><span class="pre">__getitem__</span></code> is an alias for <code class="docutils literal notranslate"><span class="pre">resolve()</span></code></p>
</div>
<p>Exemple:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">debug</span><span class="o">.</span><span class="n">symbols</span><span class="o">.</span><span class="n">VirtualSymbolHandler</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">mod</span> <span class="o">=</span> <span class="n">sh</span><span class="o">.</span><span class="n">load_file</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;c:\windows\system32\kernelbase.dll&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">mod</span>
<span class="go">&lt;SymbolModule name=&quot;kernelbase&quot; type=SymPdb pdb=&quot;wkernelbase.pdb&quot; addr=0x10000000&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span><span class="o">.</span><span class="n">resolve</span><span class="p">(</span><span class="s2">&quot;kernelbase!CreateFileInternal&quot;</span><span class="p">)</span>
<span class="go">&lt;SymbolInfoA name=&quot;CreateFileInternal&quot; addr=0x100f2120 tag=SymTagFunction&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span><span class="p">[</span><span class="mh">0x100f2042</span><span class="p">]</span>
<span class="go">&lt;SymbolInfoA name=&quot;ReadFile&quot; addr=0x100f1ee0 displacement=0x162 tag=SymTagFunction&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">str</span><span class="p">(</span><span class="n">sh</span><span class="p">[</span><span class="mh">0x100f2042</span><span class="p">])</span>
<span class="go">&#39;kernelbase!ReadFile+0x162&#39;</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="windows.debug.symbols.ProcessSymbolHandler.load">
<code class="descname">load</code><span class="sig-paren">(</span><em>name</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/symbols.html#ProcessSymbolHandler.load"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.symbols.ProcessSymbolHandler.load" title="Permalink to this definition"></a></dt>
<dd><p>Load the <a class="reference internal" href="#windows.debug.symbols.SymbolModule" title="windows.debug.symbols.SymbolModule"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolModule</span></code></a> associated with the loaded module <code class="docutils literal notranslate"><span class="pre">name</span></code> (as found in the PEB)</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><a class="reference internal" href="#windows.debug.symbols.SymbolModule" title="windows.debug.symbols.SymbolModule"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolModule</span></code></a></td>
</tr>
</tbody>
</table>
<p>Exemple:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">debug</span><span class="o">.</span><span class="n">symbols</span><span class="o">.</span><span class="n">ProcessSymbolHandler</span><span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">test</span><span class="o">.</span><span class="n">pop_proc_64</span><span class="p">())</span>
<span class="go">&lt;windows.debug.symbols.ProcessSymbolHandler object at 0x033A2C30&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span>
<span class="go">&lt;windows.debug.symbols.ProcessSymbolHandler object at 0x033A2C30&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="s2">&quot;kernelbase.dll&quot;</span><span class="p">)</span>
<span class="go">&lt;SymbolModule name=&quot;kernelbase&quot; type=SymDeferred pdb=&quot;&quot; addr=0x7ffb5b090000&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span><span class="p">[</span><span class="s2">&quot;kernelbase!CreateProcessA&quot;</span><span class="p">]</span>
<span class="go">&lt;SymbolInfoA name=&quot;CreateProcessA&quot; start=0x7ffb5b2371f0 tag=SymTagPublicSymbol&gt;</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="windows.debug.symbols.ProcessSymbolHandler.load_file">
<code class="descname">load_file</code><span class="sig-paren">(</span><em>path</em>, <em>name=None</em>, <em>addr=0</em>, <em>size=0</em>, <em>data=None</em>, <em>flags=0</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.debug.symbols.ProcessSymbolHandler.load_file" title="Permalink to this definition"></a></dt>
<dd><p>Load the module <code class="docutils literal notranslate"><span class="pre">path</span></code> at <code class="docutils literal notranslate"><span class="pre">addr</span></code></p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><a class="reference internal" href="#windows.debug.symbols.SymbolModule" title="windows.debug.symbols.SymbolModule"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolModule</span></code></a> The loaded module</td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="method">
<dt id="windows.debug.symbols.ProcessSymbolHandler.load_module">
<code class="descname">load_module</code><span class="sig-paren">(</span><em>file_handle=None</em>, <em>path=None</em>, <em>name=None</em>, <em>addr=0</em>, <em>size=0</em>, <em>data=None</em>, <em>flags=0</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.debug.symbols.ProcessSymbolHandler.load_module" title="Permalink to this definition"></a></dt>
<dd><p>Load a module at a given <code class="docutils literal notranslate"><span class="pre">addr</span></code>. The module to load can be pass via a <code class="docutils literal notranslate"><span class="pre">file_handle</span></code>
or the direct <code class="docutils literal notranslate"><span class="pre">path</span></code> of the file to load.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><a class="reference internal" href="#windows.debug.symbols.SymbolModule" title="windows.debug.symbols.SymbolModule"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolModule</span></code></a> The loaded module</td>
</tr>
</tbody>
</table>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">The logic of <code class="docutils literal notranslate"><span class="pre">SymLoadModuleEx</span></code> seems somewhat strange about the naming of the loaded module.
A custom module <code class="docutils literal notranslate"><span class="pre">name</span></code> is only taken into account if the file is passed via a File handle.
To make it more intuitive, if this function is call with a <code class="docutils literal notranslate"><span class="pre">path</span></code> and <code class="docutils literal notranslate"><span class="pre">name</span></code> and no <code class="docutils literal notranslate"><span class="pre">file_handle</span></code>,
it will open the path and directly call <code class="docutils literal notranslate"><span class="pre">SymLoadModuleEx</span></code> with a file handle and a name.</p>
</div>
</dd></dl>
<dl class="attribute">
<dt id="windows.debug.symbols.ProcessSymbolHandler.modules">
<code class="descname">modules</code><a class="headerlink" href="#windows.debug.symbols.ProcessSymbolHandler.modules" title="Permalink to this definition"></a></dt>
<dd><p>The list of loaded modules</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">[<a class="reference internal" href="#windows.debug.symbols.SymbolModule" title="windows.debug.symbols.SymbolModule"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolModule</span></code></a>] A list of modules</td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="method">
<dt id="windows.debug.symbols.ProcessSymbolHandler.refresh">
<code class="descname">refresh</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/symbols.html#ProcessSymbolHandler.refresh"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.symbols.ProcessSymbolHandler.refresh" title="Permalink to this definition"></a></dt>
<dd><p>Update the list of loaded modules to match the modules present in the target process</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p>This function only call <a class="reference external" href="https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/nf-dbghelp-symrefreshmodulelist">SymRefreshModuleList</a> for now.
It seems that this function do not handle refreshing a 64b target from a 32b python</p>
<p class="last">Also, on a 32b target from a 64b python it seems to only load symbols for the 64b modules (ntdll + syswow dll)</p>
</div>
<p>Exemple:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">debug</span><span class="o">.</span><span class="n">symbols</span><span class="o">.</span><span class="n">ProcessSymbolHandler</span><span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">test</span><span class="o">.</span><span class="n">pop_proc_64</span><span class="p">())</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span><span class="o">.</span><span class="n">modules</span>
<span class="go">[]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span><span class="o">.</span><span class="n">refresh</span><span class="p">()</span>
<span class="go">44</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span><span class="o">.</span><span class="n">modules</span>
<span class="go">[&lt;SymbolModule name=&quot;notepad&quot; type=SymDeferred pdb=&quot;&quot; addr=0x7ff772b80000&gt;,</span>
<span class="go"> &lt;SymbolModule name=&quot;ntdll&quot; type=SymDeferred pdb=&quot;&quot; addr=0x7ffb5d860000&gt;,</span>
<span class="go"> &lt;SymbolModule name=&quot;KERNEL32&quot; type=SymDeferred pdb=&quot;&quot; addr=0x7ffb5bb90000&gt;,</span>
<span class="go"> &lt;SymbolModule name=&quot;KERNELBASE&quot; type=SymDeferred pdb=&quot;&quot; addr=0x7ffb5b090000&gt;,</span>
<span class="go"> ...]</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="windows.debug.symbols.ProcessSymbolHandler.resolve">
<code class="descname">resolve</code><span class="sig-paren">(</span><em>name_or_addr</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.debug.symbols.ProcessSymbolHandler.resolve" title="Permalink to this definition"></a></dt>
<dd><p>Resolve <code class="docutils literal notranslate"><span class="pre">name_or_addr</span></code>.</p>
<p>If its an int -&gt; Return the <a class="reference internal" href="#windows.debug.symbols.SymbolInfo" title="windows.debug.symbols.SymbolInfo"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolInfo</span></code></a> at the address.
If its a string -&gt; Return the <a class="reference internal" href="#windows.debug.symbols.SymbolInfo" title="windows.debug.symbols.SymbolInfo"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolInfo</span></code></a> corresponding to the symbol name</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><a class="reference internal" href="#windows.debug.symbols.SymbolInfo" title="windows.debug.symbols.SymbolInfo"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolInfo</span></code></a></td>
</tr>
</tbody>
</table>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last"><code class="docutils literal notranslate"><span class="pre">__getitem__</span></code> is an alias for <code class="docutils literal notranslate"><span class="pre">resolve()</span></code></p>
</div>
<p>Exemple:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">debug</span><span class="o">.</span><span class="n">symbols</span><span class="o">.</span><span class="n">VirtualSymbolHandler</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">mod</span> <span class="o">=</span> <span class="n">sh</span><span class="o">.</span><span class="n">load_file</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;c:\windows\system32\kernelbase.dll&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">mod</span>
<span class="go">&lt;SymbolModule name=&quot;kernelbase&quot; type=SymPdb pdb=&quot;wkernelbase.pdb&quot; addr=0x10000000&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span><span class="o">.</span><span class="n">resolve</span><span class="p">(</span><span class="s2">&quot;kernelbase!CreateFileInternal&quot;</span><span class="p">)</span>
<span class="go">&lt;SymbolInfoA name=&quot;CreateFileInternal&quot; addr=0x100f2120 tag=SymTagFunction&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span><span class="p">[</span><span class="mh">0x100f2042</span><span class="p">]</span>
<span class="go">&lt;SymbolInfoA name=&quot;ReadFile&quot; addr=0x100f1ee0 displacement=0x162 tag=SymTagFunction&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">str</span><span class="p">(</span><span class="n">sh</span><span class="p">[</span><span class="mh">0x100f2042</span><span class="p">])</span>
<span class="go">&#39;kernelbase!ReadFile+0x162&#39;</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="windows.debug.symbols.ProcessSymbolHandler.search">
<code class="descname">search</code><span class="sig-paren">(</span><em>mask</em>, <em>mod=0</em>, <em>tag=0</em>, <em>options=SYMSEARCH_ALLITEMS(0x8)</em>, <em>callback=None</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.debug.symbols.ProcessSymbolHandler.search" title="Permalink to this definition"></a></dt>
<dd><p>Search the symbols matching <code class="docutils literal notranslate"><span class="pre">mask</span></code> (<code class="docutils literal notranslate"><span class="pre">Windbg</span></code> like).</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">[<a class="reference internal" href="#windows.debug.symbols.SymbolInfo" title="windows.debug.symbols.SymbolInfo"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolInfo</span></code></a>] A list of <a class="reference internal" href="#windows.debug.symbols.SymbolInfo" title="windows.debug.symbols.SymbolInfo"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolInfo</span></code></a></td>
</tr>
</tbody>
</table>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">debug</span><span class="o">.</span><span class="n">symbols</span><span class="o">.</span><span class="n">VirtualSymbolHandler</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">mod</span> <span class="o">=</span> <span class="n">sh</span><span class="o">.</span><span class="n">load_file</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;c:\windows\system32\kernelbase.dll&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s2">&quot;kernelbase!CreateFile*&quot;</span><span class="p">)</span>
<span class="go">[&lt;SymbolInfoA name=&quot;CreateFileInternal&quot; addr=0x100f2120 tag=SymTagFunction&gt;,</span>
<span class="go"> &lt;SymbolInfoA name=&quot;CreateFileMoniker&quot; addr=0x10117d80 tag=SymTagFunction&gt;,</span>
<span class="go"> &lt;SymbolInfoA name=&quot;CreateFile2&quot; addr=0x1011e690 tag=SymTagFunction&gt;,</span>
<span class="go"> ...]</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="windows.debug.symbols.ProcessSymbolHandler.unload">
<code class="descname">unload</code><span class="sig-paren">(</span><em>addr</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.debug.symbols.ProcessSymbolHandler.unload" title="Permalink to this definition"></a></dt>
<dd><p>Unload the module at <code class="docutils literal notranslate"><span class="pre">addr</span></code></p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="symbolmodule">
<h3>9.5.5. <a class="reference internal" href="#windows.debug.symbols.SymbolModule" title="windows.debug.symbols.SymbolModule"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolModule</span></code></a><a class="headerlink" href="#symbolmodule" title="Permalink to this headline"></a></h3>
<dl class="class">
<dt id="windows.debug.symbols.SymbolModule">
<em class="property">class </em><code class="descclassname">windows.debug.symbols.</code><code class="descname">SymbolModule</code><span class="sig-paren">(</span><em>resolver</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/symbols.html#SymbolModule"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.symbols.SymbolModule" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="winstructs_generated.html#windows.generated_def.winstructs._IMAGEHLP_MODULE64" title="windows.generated_def.winstructs._IMAGEHLP_MODULE64"><code class="xref py py-class docutils literal notranslate"><span class="pre">windows.generated_def.winstructs._IMAGEHLP_MODULE64</span></code></a></p>
<p>Represent a loaded symbol module
(see <a class="reference external" href="https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/ns-dbghelp-imagehlp_module64">MSDN IMAGEHLP_MODULE64</a>)</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">This represent a module in the <code class="docutils literal notranslate"><span class="pre">symbol</span> <span class="pre">space</span></code> for symbol resolution.
This can be completly virtual (particularly in the case of <a class="reference internal" href="#windows.debug.symbols.VirtualSymbolHandler" title="windows.debug.symbols.VirtualSymbolHandler"><code class="xref py py-class docutils literal notranslate"><span class="pre">VirtualSymbolHandler</span></code></a></p>
</div>
<dl class="attribute">
<dt id="windows.debug.symbols.SymbolModule.addr">
<code class="descname">addr</code><a class="headerlink" href="#windows.debug.symbols.SymbolModule.addr" title="Permalink to this definition"></a></dt>
<dd><p>The load address of the module</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.debug.symbols.SymbolModule.name">
<code class="descname">name</code><a class="headerlink" href="#windows.debug.symbols.SymbolModule.name" title="Permalink to this definition"></a></dt>
<dd><p>The name of the module</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.debug.symbols.SymbolModule.path">
<code class="descname">path</code><a class="headerlink" href="#windows.debug.symbols.SymbolModule.path" title="Permalink to this definition"></a></dt>
<dd><p>The full path and file name of the file from which symbols were loaded.</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.debug.symbols.SymbolModule.pdb">
<code class="descname">pdb</code><a class="headerlink" href="#windows.debug.symbols.SymbolModule.pdb" title="Permalink to this definition"></a></dt>
<dd><p>The local path of the loaded PDB if present</p>
<dl class="docutils">
<dt>Exemple:</dt>
<dd><div class="first last highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">debug</span><span class="o">.</span><span class="n">symbols</span><span class="o">.</span><span class="n">VirtualSymbolHandler</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">mod</span> <span class="o">=</span> <span class="n">sh</span><span class="o">.</span><span class="n">load_file</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;c:\windows\system32\kernelbase.dll&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">mod</span><span class="o">.</span><span class="n">pdb</span>
<span class="go">&#39;d:\symbols\wkernelbase.pdb\017FA9C5278235B7E6BFBA74A9A5AAD91\wkernelbase.pdb&#39;</span>
</pre></div>
</div>
</dd>
</dl>
</dd></dl>
<dl class="attribute">
<dt id="windows.debug.symbols.SymbolModule.type">
<code class="descname">type</code><a class="headerlink" href="#windows.debug.symbols.SymbolModule.type" title="Permalink to this definition"></a></dt>
<dd><p>The type of module (<a class="reference internal" href="winstructs_generated.html#windows.generated_def.winstructs.SYM_TYPE" title="windows.generated_def.winstructs.SYM_TYPE"><code class="xref py py-class docutils literal notranslate"><span class="pre">SYM_TYPE</span></code></a>),
which can be one of:</p>
<blockquote>
<div><table border="1" class="docutils">
<colgroup>
<col width="14%" />
<col width="86%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td>SymCoff</td>
<td>COFF symbols.</td>
</tr>
<tr class="row-even"><td>SymCv</td>
<td>CodeView symbols.</td>
</tr>
<tr class="row-odd"><td>SymDeferred</td>
<td>Symbol loading deferred.</td>
</tr>
<tr class="row-even"><td>SymDia</td>
<td>DIA symbols.</td>
</tr>
<tr class="row-odd"><td>SymExport</td>
<td>Symbols generated from a DLL export table.</td>
</tr>
<tr class="row-even"><td>SymNone</td>
<td>No symbols are loaded.</td>
</tr>
<tr class="row-odd"><td>SymPdb</td>
<td>PDB symbols.</td>
</tr>
<tr class="row-even"><td>SymSym</td>
<td>.sym file.</td>
</tr>
<tr class="row-odd"><td>SymVirtual</td>
<td>The virtual module created by SymLoadModuleEx with SLMFLAG_VIRTUAL.</td>
</tr>
</tbody>
</table>
</div></blockquote>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="symbolinfo">
<h3>9.5.6. <a class="reference internal" href="#windows.debug.symbols.SymbolInfo" title="windows.debug.symbols.SymbolInfo"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolInfo</span></code></a><a class="headerlink" href="#symbolinfo" title="Permalink to this headline"></a></h3>
<dl class="attribute">
<dt id="windows.debug.symbols.SymbolInfo">
<code class="descclassname">windows.debug.symbols.</code><code class="descname">SymbolInfo</code><a class="headerlink" href="#windows.debug.symbols.SymbolInfo" title="Permalink to this definition"></a></dt>
<dd><p>alias of <a class="reference internal" href="#windows.debug.symbols.SymbolInfoA" title="windows.debug.symbols.SymbolInfoA"><code class="xref py py-class docutils literal notranslate"><span class="pre">windows.debug.symbols.SymbolInfoA</span></code></a></p>
</dd></dl>
<dl class="class">
<dt id="windows.debug.symbols.SymbolInfoA">
<em class="property">class </em><code class="descclassname">windows.debug.symbols.</code><code class="descname">SymbolInfoA</code><a class="reference internal" href="_modules/windows/debug/symbols.html#SymbolInfoA"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.symbols.SymbolInfoA" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="winstructs_generated.html#windows.generated_def.winstructs._SYMBOL_INFO" title="windows.generated_def.winstructs._SYMBOL_INFO"><code class="xref py py-class docutils literal notranslate"><span class="pre">windows.generated_def.winstructs._SYMBOL_INFO</span></code></a>, <code class="xref py py-class docutils literal notranslate"><span class="pre">windows.debug.symbols.SymbolInfoBase</span></code></p>
<p>Represent a Symbol.
This class in based on the class <a class="reference external" href="https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/ns-dbghelp-symbol_info">SYMBOL_INFO</a>
with the handling on displacement embeded into it.s</p>
<p>Exemple:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">sh</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">debug</span><span class="o">.</span><span class="n">symbols</span><span class="o">.</span><span class="n">VirtualSymbolHandler</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">mod</span> <span class="o">=</span> <span class="n">sh</span><span class="o">.</span><span class="n">load_file</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;c:\windows\system32\kernelbase.dll&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sym1</span> <span class="o">=</span> <span class="n">sh</span><span class="p">[</span><span class="s2">&quot;kernelbase!CreateFileW&quot;</span><span class="p">]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sym2</span> <span class="o">=</span> <span class="n">sh</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">sym1</span><span class="p">)</span> <span class="o">+</span> <span class="mi">3</span><span class="p">]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sym2</span>
<span class="go">&lt;SymbolInfoA name=&quot;CreateFileW&quot; start=0x100f20b0 displacement=0x3 tag=SymTagPublicSymbol&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">hex</span><span class="p">(</span><span class="n">sym2</span><span class="o">.</span><span class="n">start</span><span class="p">)</span>
<span class="go">&#39;0x100f20b0L&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">hex</span><span class="p">(</span><span class="n">sym2</span><span class="o">.</span><span class="n">addr</span><span class="p">)</span>
<span class="go">&#39;0x100f20b3L&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">hex</span><span class="p">(</span><span class="n">sym2</span><span class="o">.</span><span class="n">displacement</span><span class="p">)</span>
<span class="go">&#39;0x3L&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">str</span><span class="p">(</span><span class="n">sym2</span><span class="p">)</span>
<span class="go">&#39;kernelbase!CreateFileW+0x3&#39;</span>
</pre></div>
</div>
<dl class="attribute">
<dt id="windows.debug.symbols.SymbolInfoA.displacement">
<code class="descname">displacement</code><a class="headerlink" href="#windows.debug.symbols.SymbolInfoA.displacement" title="Permalink to this definition"></a></dt>
<dd><p>The displacement between the addresse and the start of the symbol (name)</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.debug.symbols.SymbolInfoA.CHAR_TYPE">
<code class="descname">CHAR_TYPE</code><a class="headerlink" href="#windows.debug.symbols.SymbolInfoA.CHAR_TYPE" title="Permalink to this definition"></a></dt>
<dd><p>alias of <a class="reference external" href="https://docs.python.org/2.7/library/ctypes.html#ctypes.c_char" title="(in Python v2.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">ctypes.c_char</span></code></a></p>
</dd></dl>
<dl class="method">
<dt id="windows.debug.symbols.SymbolInfoA.__int__">
<code class="descname">__int__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#windows.debug.symbols.SymbolInfoA.__int__" title="Permalink to this definition"></a></dt>
<dd><p>An alias for <code class="docutils literal notranslate"><span class="pre">addr</span></code></p>
</dd></dl>
<dl class="method">
<dt id="windows.debug.symbols.SymbolInfoA.__str__">
<code class="descname">__str__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#windows.debug.symbols.SymbolInfoA.__str__" title="Permalink to this definition"></a></dt>
<dd><p>The fullname of the symbol in the windbg format <code class="docutils literal notranslate"><span class="pre">mod!sym+displacement</span></code></p>
</dd></dl>
<dl class="attribute">
<dt id="windows.debug.symbols.SymbolInfoA.addr">
<code class="descname">addr</code><a class="headerlink" href="#windows.debug.symbols.SymbolInfoA.addr" title="Permalink to this definition"></a></dt>
<dd><p>The address of the symbol</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.debug.symbols.SymbolInfoA.fullname">
<code class="descname">fullname</code><a class="headerlink" href="#windows.debug.symbols.SymbolInfoA.fullname" title="Permalink to this definition"></a></dt>
<dd><p>The fullname of the symbol in the windbg format <code class="docutils literal notranslate"><span class="pre">mod!sym+displacement</span></code></p>
</dd></dl>
<dl class="attribute">
<dt id="windows.debug.symbols.SymbolInfoA.module">
<code class="descname">module</code><a class="headerlink" href="#windows.debug.symbols.SymbolInfoA.module" title="Permalink to this definition"></a></dt>
<dd><p>The module containing the symbol</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference internal" href="#windows.debug.symbols.SymbolModule" title="windows.debug.symbols.SymbolModule"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymbolModule</span></code></a></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="attribute">
<dt id="windows.debug.symbols.SymbolInfoA.name">
<code class="descname">name</code><a class="headerlink" href="#windows.debug.symbols.SymbolInfoA.name" title="Permalink to this definition"></a></dt>
<dd><p>The name of the symbol</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.debug.symbols.SymbolInfoA.start">
<code class="descname">start</code><a class="headerlink" href="#windows.debug.symbols.SymbolInfoA.start" title="Permalink to this definition"></a></dt>
<dd><p>The address of the start of the symbol
If the symbol include a displacement, it is not taken into account</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.debug.symbols.SymbolInfoA.tag">
<code class="descname">tag</code><a class="headerlink" href="#windows.debug.symbols.SymbolInfoA.tag" title="Permalink to this definition"></a></dt>
<dd><p>The Tag of the module</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference internal" href="winstructs_generated.html#windows.generated_def.winstructs.SymTagEnum" title="windows.generated_def.winstructs.SymTagEnum"><code class="xref py py-class docutils literal notranslate"><span class="pre">SymTagEnum</span></code></a></td>
</tr>
</tbody>
</table>
</dd></dl>
</dd></dl>
</div>
</div>
</div>
@@ -583,12 +1295,22 @@ It is based on <code class="xref py py-func docutils literal notranslate"><span
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">9. <code class="docutils literal notranslate"><span class="pre">windows.debug</span></code> Debugging</a><ul>
<li><a class="reference internal" href="#debugger">9.1. <code class="docutils literal notranslate"><span class="pre">Debugger</span></code></a></li>
<li><a class="reference internal" href="#localdebugger">9.2. <code class="docutils literal notranslate"><span class="pre">LocalDebugger</span></code></a></li>
<li><a class="reference internal" href="#breakpoint">9.3. <code class="docutils literal notranslate"><span class="pre">Breakpoint</span></code></a></li>
<li><a class="reference internal" href="#symboldebugger">9.2. <code class="docutils literal notranslate"><span class="pre">SymbolDebugger</span></code></a></li>
<li><a class="reference internal" href="#localdebugger">9.3. <code class="docutils literal notranslate"><span class="pre">LocalDebugger</span></code></a></li>
<li><a class="reference internal" href="#breakpoint">9.4. <code class="docutils literal notranslate"><span class="pre">Breakpoint</span></code></a></li>
<li><a class="reference internal" href="#module-windows.debug.symbols">9.5. <code class="docutils literal notranslate"><span class="pre">windows.debug.symbols</span></code> Using symbols</a><ul>
<li><a class="reference internal" href="#configuration">9.5.1. Configuration</a></li>
<li><a class="reference internal" href="#helpers">9.5.2. Helpers</a></li>
<li><a class="reference internal" href="#virtualsymbolhandler">9.5.3. <code class="docutils literal notranslate"><span class="pre">VirtualSymbolHandler</span></code></a></li>
<li><a class="reference internal" href="#processsymbolhandler">9.5.4. <code class="docutils literal notranslate"><span class="pre">ProcessSymbolHandler</span></code></a></li>
<li><a class="reference internal" href="#symbolmodule">9.5.5. <code class="docutils literal notranslate"><span class="pre">SymbolModule</span></code></a></li>
<li><a class="reference internal" href="#symbolinfo">9.5.6. <code class="docutils literal notranslate"><span class="pre">SymbolInfo</span></code></a></li>
</ul>
</li>
</ul>
</li>
</ul>
@@ -637,12 +1359,12 @@ It is based on <code class="xref py py-func docutils literal notranslate"><span
<li class="right" >
<a href="wintrust.html" title="8. windows.wintrust Checking signature"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+748
View File
@@ -0,0 +1,748 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>2.14. Device Manager &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="2.15. Task scheduler" href="task_scheduler.html" />
<link rel="prev" title="2.13. Object Manager Kernel objects" href="object_manager.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="task_scheduler.html" title="2.15. Task scheduler"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="object_manager.html" title="2.13. Object Manager Kernel objects"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="winobject.html" accesskey="U">2. The <code class="docutils literal notranslate"><span class="pre">windows</span></code> objects</a> &#187;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="module-windows.winobject.device_manager">
<span id="device-manager"></span><h1>2.14. Device Manager<a class="headerlink" href="#module-windows.winobject.device_manager" title="Permalink to this headline"></a></h1>
<p>The <a class="reference internal" href="#windows.winobject.device_manager.DeviceManager" title="windows.winobject.device_manager.DeviceManager"><code class="xref py py-class docutils literal notranslate"><span class="pre">DeviceManager</span></code></a> instance is accessible via <a class="reference internal" href="windows.html#windows.winobject.system.System.device_manager" title="windows.winobject.system.System.device_manager"><code class="xref py py-attr docutils literal notranslate"><span class="pre">windows.system.device_manager</span></code></a></p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">See sample at <a class="reference internal" href="sample.html#sample-device-manager"><span class="std std-ref">Device manager</span></a></p>
</div>
<div class="section" id="devicemanager">
<h2>2.14.1. DeviceManager<a class="headerlink" href="#devicemanager" title="Permalink to this headline"></a></h2>
<dl class="class">
<dt id="windows.winobject.device_manager.DeviceManager">
<em class="property">class </em><code class="descclassname">windows.winobject.device_manager.</code><code class="descname">DeviceManager</code><a class="reference internal" href="_modules/windows/winobject/device_manager.html#DeviceManager"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.device_manager.DeviceManager" title="Permalink to this definition"></a></dt>
<dd><p>Represent the device manager</p>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceManager.classes">
<code class="descname">classes</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceManager.classes" title="Permalink to this definition"></a></dt>
<dd><p>The list of installed device classes.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">[<a class="reference internal" href="#windows.winobject.device_manager.DeviceClass" title="windows.winobject.device_manager.DeviceClass"><code class="xref py py-class docutils literal notranslate"><span class="pre">DeviceClass</span></code></a>] A list of <a class="reference internal" href="#windows.winobject.device_manager.DeviceClass" title="windows.winobject.device_manager.DeviceClass"><code class="xref py py-class docutils literal notranslate"><span class="pre">DeviceClass</span></code></a></td>
</tr>
</tbody>
</table>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="deviceclass">
<h2>2.14.2. DeviceClass<a class="headerlink" href="#deviceclass" title="Permalink to this headline"></a></h2>
<dl class="class">
<dt id="windows.winobject.device_manager.DeviceClass">
<em class="property">class </em><code class="descclassname">windows.winobject.device_manager.</code><code class="descname">DeviceClass</code><a class="reference internal" href="_modules/windows/winobject/device_manager.html#DeviceClass"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.device_manager.DeviceClass" title="Permalink to this definition"></a></dt>
<dd><p>A Device class, which is mainly a <code class="xref py py-class docutils literal notranslate"><span class="pre">GUID</span></code> with additional attributes</p>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceClass.devices">
<code class="descname">devices</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceClass.devices" title="Permalink to this definition"></a></dt>
<dd><p>The set of devices of the current class.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference internal" href="#windows.winobject.device_manager.DeviceInformationSet" title="windows.winobject.device_manager.DeviceInformationSet"><code class="xref py py-class docutils literal notranslate"><span class="pre">DeviceInformationSet</span></code></a></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceClass.name">
<code class="descname">name</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceClass.name" title="Permalink to this definition"></a></dt>
<dd><p>The name of the device class</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="deviceinformationset">
<h2>2.14.3. DeviceInformationSet<a class="headerlink" href="#deviceinformationset" title="Permalink to this headline"></a></h2>
<dl class="class">
<dt id="windows.winobject.device_manager.DeviceInformationSet">
<em class="property">class </em><code class="descclassname">windows.winobject.device_manager.</code><code class="descname">DeviceInformationSet</code><a class="reference internal" href="_modules/windows/winobject/device_manager.html#DeviceInformationSet"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.device_manager.DeviceInformationSet" title="Permalink to this definition"></a></dt>
<dd><p>A device instances, can be itered to retrieve the underliyings <a class="reference internal" href="#windows.winobject.device_manager.DeviceInstance" title="windows.winobject.device_manager.DeviceInstance"><code class="xref py py-class docutils literal notranslate"><span class="pre">DeviceInstance</span></code></a></p>
<dl class="method">
<dt id="windows.winobject.device_manager.DeviceInformationSet.enum_device_interface">
<code class="descname">enum_device_interface</code><span class="sig-paren">(</span><em>index</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/device_manager.html#DeviceInformationSet.enum_device_interface"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.device_manager.DeviceInformationSet.enum_device_interface" title="Permalink to this definition"></a></dt>
<dd><p>Not Implemented Yet</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInformationSet.value">
<code class="descname">value</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInformationSet.value" title="Permalink to this definition"></a></dt>
<dd><p>current value</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="deviceinstance">
<h2>2.14.4. DeviceInstance<a class="headerlink" href="#deviceinstance" title="Permalink to this headline"></a></h2>
<dl class="class">
<dt id="windows.winobject.device_manager.DeviceInstance">
<em class="property">class </em><code class="descclassname">windows.winobject.device_manager.</code><code class="descname">DeviceInstance</code><span class="sig-paren">(</span><em>information_set=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/device_manager.html#DeviceInstance"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance" title="Permalink to this definition"></a></dt>
<dd><p>An instance of a Device.</p>
<p>The properties are from the page <a class="reference external" href="https://docs.microsoft.com/en-us/windows/win32/api/setupapi/nf-setupapi-setupdigetdeviceregistrypropertya#spdrp_address">https://docs.microsoft.com/en-us/windows/win32/api/setupapi/nf-setupapi-setupdigetdeviceregistrypropertya#spdrp_address</a></p>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.address">
<code class="descname">address</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.address" title="Permalink to this definition"></a></dt>
<dd><p>The devices address.</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.allocated_configuration">
<code class="descname">allocated_configuration</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.allocated_configuration" title="Permalink to this definition"></a></dt>
<dd><p>The allocated configuration of the device.
(<a class="reference external" href="https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/hardware-resources#logical-configuration-types-for-resource-lists">https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/hardware-resources#logical-configuration-types-for-resource-lists</a>)</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference internal" href="#windows.winobject.device_manager.LogicalConfiguration" title="windows.winobject.device_manager.LogicalConfiguration"><code class="xref py py-class docutils literal notranslate"><span class="pre">LogicalConfiguration</span></code></a></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.boot_configuration">
<code class="descname">boot_configuration</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.boot_configuration" title="Permalink to this definition"></a></dt>
<dd><p>The boot configuration of the device.
(<a class="reference external" href="https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/hardware-resources#logical-configuration-types-for-resource-lists">https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/hardware-resources#logical-configuration-types-for-resource-lists</a>)</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference internal" href="#windows.winobject.device_manager.LogicalConfiguration" title="windows.winobject.device_manager.LogicalConfiguration"><code class="xref py py-class docutils literal notranslate"><span class="pre">LogicalConfiguration</span></code></a></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.bus_number">
<code class="descname">bus_number</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.bus_number" title="Permalink to this definition"></a></dt>
<dd><p>The devices bus number.</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.bus_type">
<code class="descname">bus_type</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.bus_type" title="Permalink to this definition"></a></dt>
<dd><p>The function retrieves the GUID for the devices bus type.</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.capabilites">
<code class="descname">capabilites</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.capabilites" title="Permalink to this definition"></a></dt>
<dd><p>The device capabilites
(<a class="reference external" href="https://docs.microsoft.com/en-us/windows/win32/api/setupapi/nf-setupapi-setupdigetdeviceregistrypropertya#spdrp_capabilities">https://docs.microsoft.com/en-us/windows/win32/api/setupapi/nf-setupapi-setupdigetdeviceregistrypropertya#spdrp_capabilities</a>)</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.description">
<code class="descname">description</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.description" title="Permalink to this definition"></a></dt>
<dd><p>The description of the device</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.device_object_name">
<code class="descname">device_object_name</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.device_object_name" title="Permalink to this definition"></a></dt>
<dd><p>The function retrieves a string that contains the name that is associated with the devices PDO.</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.driver">
<code class="descname">driver</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.driver" title="Permalink to this definition"></a></dt>
<dd><p>The driver of the device
<a class="reference external" href="https://docs.microsoft.com/en-us/windows/win32/api/setupapi/nf-setupapi-setupdigetdeviceregistrypropertya#spdrp_driver">https://docs.microsoft.com/en-us/windows/win32/api/setupapi/nf-setupapi-setupdigetdeviceregistrypropertya#spdrp_driver</a></p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.enumerator_name">
<code class="descname">enumerator_name</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.enumerator_name" title="Permalink to this definition"></a></dt>
<dd><p>The enumerator name of the devices
(<a class="reference external" href="https://docs.microsoft.com/en-us/windows/win32/api/setupapi/nf-setupapi-setupdigetdeviceregistrypropertya#spdrp_enumerator_name">https://docs.microsoft.com/en-us/windows/win32/api/setupapi/nf-setupapi-setupdigetdeviceregistrypropertya#spdrp_enumerator_name</a>)</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.hardware_id">
<code class="descname">hardware_id</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.hardware_id" title="Permalink to this definition"></a></dt>
<dd><p>The list of hardware IDs for the device.
(<a class="reference external" href="https://docs.microsoft.com/en-us/windows/win32/api/setupapi/nf-setupapi-setupdigetdeviceregistrypropertya#spdrp_hardwareid">https://docs.microsoft.com/en-us/windows/win32/api/setupapi/nf-setupapi-setupdigetdeviceregistrypropertya#spdrp_hardwareid</a>)</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.location_information">
<code class="descname">location_information</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.location_information" title="Permalink to this definition"></a></dt>
<dd><p>The hardware location of a device.</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.location_paths">
<code class="descname">location_paths</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.location_paths" title="Permalink to this definition"></a></dt>
<dd><p>A list of strings that represents the location of the device in the device tree.</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.lower_filters">
<code class="descname">lower_filters</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.lower_filters" title="Permalink to this definition"></a></dt>
<dd><p>A list of string that contains the names of a devices lower filter drivers.</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.manufacturer">
<code class="descname">manufacturer</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.manufacturer" title="Permalink to this definition"></a></dt>
<dd><p>The name of the device manufacturer.</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.name">
<code class="descname">name</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.name" title="Permalink to this definition"></a></dt>
<dd><p>The name of the device</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.raw_security_descriptor">
<code class="descname">raw_security_descriptor</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.raw_security_descriptor" title="Permalink to this definition"></a></dt>
<dd><p>The raw (binary) security descriptor of the device</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.security_descriptor">
<code class="descname">security_descriptor</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.security_descriptor" title="Permalink to this definition"></a></dt>
<dd><p>The security descriptor of the device.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference internal" href="security.html#windows.security.SecurityDescriptor" title="windows.security.SecurityDescriptor"><code class="xref py py-class docutils literal notranslate"><span class="pre">SecurityDescriptor</span></code></a></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.service_name">
<code class="descname">service_name</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.service_name" title="Permalink to this definition"></a></dt>
<dd><p>The name of the service for the device
(<a class="reference external" href="https://docs.microsoft.com/en-us/windows/win32/api/setupapi/nf-setupapi-setupdigetdeviceregistrypropertya#spdrp_service">https://docs.microsoft.com/en-us/windows/win32/api/setupapi/nf-setupapi-setupdigetdeviceregistrypropertya#spdrp_service</a>)</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.type">
<code class="descname">type</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.type" title="Permalink to this definition"></a></dt>
<dd><p>The type of device
(<a class="reference external" href="https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/specifying-device-types">https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/specifying-device-types</a>)</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.ui_number">
<code class="descname">ui_number</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.ui_number" title="Permalink to this definition"></a></dt>
<dd><p>Retrieves a DWORD value set to the value of the UINumber member of the devices</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DeviceInstance.upper_filters">
<code class="descname">upper_filters</code><a class="headerlink" href="#windows.winobject.device_manager.DeviceInstance.upper_filters" title="Permalink to this definition"></a></dt>
<dd><p>A list of string that contains the names of a devices upper filter drivers.</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="logicalconfiguration">
<h2>2.14.5. LogicalConfiguration<a class="headerlink" href="#logicalconfiguration" title="Permalink to this headline"></a></h2>
<dl class="class">
<dt id="windows.winobject.device_manager.LogicalConfiguration">
<em class="property">class </em><code class="descclassname">windows.winobject.device_manager.</code><code class="descname">LogicalConfiguration</code><a class="reference internal" href="_modules/windows/winobject/device_manager.html#LogicalConfiguration"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.device_manager.LogicalConfiguration" title="Permalink to this definition"></a></dt>
<dd><p>Logical Configuration of a Device instance</p>
<dl class="attribute">
<dt id="windows.winobject.device_manager.LogicalConfiguration.resources">
<code class="descname">resources</code><a class="headerlink" href="#windows.winobject.device_manager.LogicalConfiguration.resources" title="Permalink to this definition"></a></dt>
<dd><p>The list of resources in the current logical configuration</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">[<a class="reference internal" href="#windows.winobject.device_manager.ResourceDescriptor" title="windows.winobject.device_manager.ResourceDescriptor"><code class="xref py py-class docutils literal notranslate"><span class="pre">ResourceDescriptor</span></code></a>] A list of [<a class="reference internal" href="#windows.winobject.device_manager.ResourceDescriptor" title="windows.winobject.device_manager.ResourceDescriptor"><code class="xref py py-class docutils literal notranslate"><span class="pre">ResourceDescriptor</span></code></a>]</td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.LogicalConfiguration.value">
<code class="descname">value</code><a class="headerlink" href="#windows.winobject.device_manager.LogicalConfiguration.value" title="Permalink to this definition"></a></dt>
<dd><p>current value</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="resourcedescriptor">
<h2>2.14.6. ResourceDescriptor<a class="headerlink" href="#resourcedescriptor" title="Permalink to this headline"></a></h2>
<dl class="class">
<dt id="windows.winobject.device_manager.ResourceDescriptor">
<em class="property">class </em><code class="descclassname">windows.winobject.device_manager.</code><code class="descname">ResourceDescriptor</code><span class="sig-paren">(</span><em>handle</em>, <em>type</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/device_manager.html#ResourceDescriptor"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.device_manager.ResourceDescriptor" title="Permalink to this definition"></a></dt>
<dd><p>Describe a resource allocated or reserved by a device instance.
This class is a base class, all resources returned by <a class="reference internal" href="#windows.winobject.device_manager.LogicalConfiguration" title="windows.winobject.device_manager.LogicalConfiguration"><code class="xref py py-class docutils literal notranslate"><span class="pre">LogicalConfiguration</span></code></a> should be one of the following:</p>
<blockquote>
<div><ul class="simple">
<li><a class="reference internal" href="#windows.winobject.device_manager.ResourceNoType" title="windows.winobject.device_manager.ResourceNoType"><code class="xref py py-class docutils literal notranslate"><span class="pre">ResourceNoType</span></code></a></li>
<li><a class="reference internal" href="#windows.winobject.device_manager.MemoryResource" title="windows.winobject.device_manager.MemoryResource"><code class="xref py py-class docutils literal notranslate"><span class="pre">MemoryResource</span></code></a></li>
<li><a class="reference internal" href="#windows.winobject.device_manager.IoResource" title="windows.winobject.device_manager.IoResource"><code class="xref py py-class docutils literal notranslate"><span class="pre">IoResource</span></code></a></li>
<li><a class="reference internal" href="#windows.winobject.device_manager.DmaResource" title="windows.winobject.device_manager.DmaResource"><code class="xref py py-class docutils literal notranslate"><span class="pre">DmaResource</span></code></a></li>
<li><a class="reference internal" href="#windows.winobject.device_manager.IrqResource" title="windows.winobject.device_manager.IrqResource"><code class="xref py py-class docutils literal notranslate"><span class="pre">IrqResource</span></code></a></li>
<li><a class="reference internal" href="#windows.winobject.device_manager.BusNumberResource" title="windows.winobject.device_manager.BusNumberResource"><code class="xref py py-class docutils literal notranslate"><span class="pre">BusNumberResource</span></code></a></li>
<li><a class="reference internal" href="#windows.winobject.device_manager.MemLargeResource" title="windows.winobject.device_manager.MemLargeResource"><code class="xref py py-class docutils literal notranslate"><span class="pre">MemLargeResource</span></code></a></li>
<li><a class="reference internal" href="#windows.winobject.device_manager.ClassSpecificResource" title="windows.winobject.device_manager.ClassSpecificResource"><code class="xref py py-class docutils literal notranslate"><span class="pre">ClassSpecificResource</span></code></a></li>
<li><a class="reference internal" href="#windows.winobject.device_manager.DevicePrivateResource" title="windows.winobject.device_manager.DevicePrivateResource"><code class="xref py py-class docutils literal notranslate"><span class="pre">DevicePrivateResource</span></code></a></li>
<li><a class="reference internal" href="#windows.winobject.device_manager.MfCardConfigResource" title="windows.winobject.device_manager.MfCardConfigResource"><code class="xref py py-class docutils literal notranslate"><span class="pre">MfCardConfigResource</span></code></a></li>
<li><a class="reference internal" href="#windows.winobject.device_manager.PcCardConfigResource" title="windows.winobject.device_manager.PcCardConfigResource"><code class="xref py py-class docutils literal notranslate"><span class="pre">PcCardConfigResource</span></code></a></li>
</ul>
</div></blockquote>
<dl class="attribute">
<dt id="windows.winobject.device_manager.ResourceDescriptor.rawdata">
<code class="descname">rawdata</code><a class="headerlink" href="#windows.winobject.device_manager.ResourceDescriptor.rawdata" title="Permalink to this definition"></a></dt>
<dd><p>The raw data describing the resource</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.ResourceDescriptor.value">
<code class="descname">value</code><a class="headerlink" href="#windows.winobject.device_manager.ResourceDescriptor.value" title="Permalink to this definition"></a></dt>
<dd><p>current value</p>
</dd></dl>
</dd></dl>
<div class="section" id="concrete-resourcedescriptor">
<h3>2.14.6.1. Concrete ResourceDescriptor<a class="headerlink" href="#concrete-resourcedescriptor" title="Permalink to this headline"></a></h3>
<div class="section" id="resourcenotype">
<h4>2.14.6.1.1. ResourceNoType<a class="headerlink" href="#resourcenotype" title="Permalink to this headline"></a></h4>
<dl class="class">
<dt id="windows.winobject.device_manager.ResourceNoType">
<em class="property">class </em><code class="descclassname">windows.winobject.device_manager.</code><code class="descname">ResourceNoType</code><span class="sig-paren">(</span><em>handle</em>, <em>type</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/device_manager.html#ResourceNoType"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.device_manager.ResourceNoType" title="Permalink to this definition"></a></dt>
<dd><dl class="attribute">
<dt id="windows.winobject.device_manager.ResourceNoType.rawdata">
<code class="descname">rawdata</code><a class="headerlink" href="#windows.winobject.device_manager.ResourceNoType.rawdata" title="Permalink to this definition"></a></dt>
<dd><p>The raw data describing the resource</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.ResourceNoType.value">
<code class="descname">value</code><a class="headerlink" href="#windows.winobject.device_manager.ResourceNoType.value" title="Permalink to this definition"></a></dt>
<dd><p>current value</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="memoryresource">
<h4>2.14.6.1.2. MemoryResource<a class="headerlink" href="#memoryresource" title="Permalink to this headline"></a></h4>
<dl class="class">
<dt id="windows.winobject.device_manager.MemoryResource">
<em class="property">class </em><code class="descclassname">windows.winobject.device_manager.</code><code class="descname">MemoryResource</code><span class="sig-paren">(</span><em>handle</em>, <em>type</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/device_manager.html#MemoryResource"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.device_manager.MemoryResource" title="Permalink to this definition"></a></dt>
<dd><p>A resource of type MEM_RESOURCE</p>
<dl class="attribute">
<dt id="windows.winobject.device_manager.MemoryResource.DATA_TYPE">
<code class="descname">DATA_TYPE</code><a class="headerlink" href="#windows.winobject.device_manager.MemoryResource.DATA_TYPE" title="Permalink to this definition"></a></dt>
<dd><p>alias of <a class="reference internal" href="winstructs_generated.html#windows.generated_def.winstructs.Mem_Resource_s" title="windows.generated_def.winstructs.Mem_Resource_s"><code class="xref py py-class docutils literal notranslate"><span class="pre">windows.generated_def.winstructs.Mem_Resource_s</span></code></a></p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.MemoryResource.rawdata">
<code class="descname">rawdata</code><a class="headerlink" href="#windows.winobject.device_manager.MemoryResource.rawdata" title="Permalink to this definition"></a></dt>
<dd><p>The raw data describing the resource</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.MemoryResource.value">
<code class="descname">value</code><a class="headerlink" href="#windows.winobject.device_manager.MemoryResource.value" title="Permalink to this definition"></a></dt>
<dd><p>current value</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="ioresource">
<h4>2.14.6.1.3. IoResource<a class="headerlink" href="#ioresource" title="Permalink to this headline"></a></h4>
<dl class="class">
<dt id="windows.winobject.device_manager.IoResource">
<em class="property">class </em><code class="descclassname">windows.winobject.device_manager.</code><code class="descname">IoResource</code><span class="sig-paren">(</span><em>handle</em>, <em>type</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/device_manager.html#IoResource"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.device_manager.IoResource" title="Permalink to this definition"></a></dt>
<dd><p>A resource of type IO_RESOURCE</p>
<dl class="attribute">
<dt id="windows.winobject.device_manager.IoResource.DATA_TYPE">
<code class="descname">DATA_TYPE</code><a class="headerlink" href="#windows.winobject.device_manager.IoResource.DATA_TYPE" title="Permalink to this definition"></a></dt>
<dd><p>alias of <a class="reference internal" href="winstructs_generated.html#windows.generated_def.winstructs.IO_Resource_s" title="windows.generated_def.winstructs.IO_Resource_s"><code class="xref py py-class docutils literal notranslate"><span class="pre">windows.generated_def.winstructs.IO_Resource_s</span></code></a></p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.IoResource.rawdata">
<code class="descname">rawdata</code><a class="headerlink" href="#windows.winobject.device_manager.IoResource.rawdata" title="Permalink to this definition"></a></dt>
<dd><p>The raw data describing the resource</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.IoResource.value">
<code class="descname">value</code><a class="headerlink" href="#windows.winobject.device_manager.IoResource.value" title="Permalink to this definition"></a></dt>
<dd><p>current value</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="dmaresource">
<h4>2.14.6.1.4. DmaResource<a class="headerlink" href="#dmaresource" title="Permalink to this headline"></a></h4>
<dl class="class">
<dt id="windows.winobject.device_manager.DmaResource">
<em class="property">class </em><code class="descclassname">windows.winobject.device_manager.</code><code class="descname">DmaResource</code><span class="sig-paren">(</span><em>handle</em>, <em>type</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/device_manager.html#DmaResource"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.device_manager.DmaResource" title="Permalink to this definition"></a></dt>
<dd><p>A resource of type DMA_RESOURCE</p>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DmaResource.DATA_TYPE">
<code class="descname">DATA_TYPE</code><a class="headerlink" href="#windows.winobject.device_manager.DmaResource.DATA_TYPE" title="Permalink to this definition"></a></dt>
<dd><p>alias of <a class="reference internal" href="winstructs_generated.html#windows.generated_def.winstructs.DMA_Resource_s" title="windows.generated_def.winstructs.DMA_Resource_s"><code class="xref py py-class docutils literal notranslate"><span class="pre">windows.generated_def.winstructs.DMA_Resource_s</span></code></a></p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DmaResource.rawdata">
<code class="descname">rawdata</code><a class="headerlink" href="#windows.winobject.device_manager.DmaResource.rawdata" title="Permalink to this definition"></a></dt>
<dd><p>The raw data describing the resource</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DmaResource.value">
<code class="descname">value</code><a class="headerlink" href="#windows.winobject.device_manager.DmaResource.value" title="Permalink to this definition"></a></dt>
<dd><p>current value</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="irqresource">
<h4>2.14.6.1.5. IrqResource<a class="headerlink" href="#irqresource" title="Permalink to this headline"></a></h4>
<dl class="class">
<dt id="windows.winobject.device_manager.IrqResource">
<em class="property">class </em><code class="descclassname">windows.winobject.device_manager.</code><code class="descname">IrqResource</code><span class="sig-paren">(</span><em>handle</em>, <em>type</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/device_manager.html#IrqResource"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.device_manager.IrqResource" title="Permalink to this definition"></a></dt>
<dd><p>A resource of type IRQ_RESOURCE</p>
<dl class="attribute">
<dt id="windows.winobject.device_manager.IrqResource.DATA_TYPE">
<code class="descname">DATA_TYPE</code><a class="headerlink" href="#windows.winobject.device_manager.IrqResource.DATA_TYPE" title="Permalink to this definition"></a></dt>
<dd><p>alias of <a class="reference internal" href="winstructs_generated.html#windows.generated_def.winstructs.IRQ_Resource_32_s" title="windows.generated_def.winstructs.IRQ_Resource_32_s"><code class="xref py py-class docutils literal notranslate"><span class="pre">windows.generated_def.winstructs.IRQ_Resource_32_s</span></code></a></p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.IrqResource.rawdata">
<code class="descname">rawdata</code><a class="headerlink" href="#windows.winobject.device_manager.IrqResource.rawdata" title="Permalink to this definition"></a></dt>
<dd><p>The raw data describing the resource</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.IrqResource.value">
<code class="descname">value</code><a class="headerlink" href="#windows.winobject.device_manager.IrqResource.value" title="Permalink to this definition"></a></dt>
<dd><p>current value</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="busnumberresource">
<h4>2.14.6.1.6. BusNumberResource<a class="headerlink" href="#busnumberresource" title="Permalink to this headline"></a></h4>
<dl class="class">
<dt id="windows.winobject.device_manager.BusNumberResource">
<em class="property">class </em><code class="descclassname">windows.winobject.device_manager.</code><code class="descname">BusNumberResource</code><span class="sig-paren">(</span><em>handle</em>, <em>type</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/device_manager.html#BusNumberResource"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.device_manager.BusNumberResource" title="Permalink to this definition"></a></dt>
<dd><p>A resource of type BUSNUMBER_RESOURCE</p>
<dl class="attribute">
<dt id="windows.winobject.device_manager.BusNumberResource.DATA_TYPE">
<code class="descname">DATA_TYPE</code><a class="headerlink" href="#windows.winobject.device_manager.BusNumberResource.DATA_TYPE" title="Permalink to this definition"></a></dt>
<dd><p>alias of <a class="reference internal" href="winstructs_generated.html#windows.generated_def.winstructs.BusNumber_Resource_s" title="windows.generated_def.winstructs.BusNumber_Resource_s"><code class="xref py py-class docutils literal notranslate"><span class="pre">windows.generated_def.winstructs.BusNumber_Resource_s</span></code></a></p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.BusNumberResource.rawdata">
<code class="descname">rawdata</code><a class="headerlink" href="#windows.winobject.device_manager.BusNumberResource.rawdata" title="Permalink to this definition"></a></dt>
<dd><p>The raw data describing the resource</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.BusNumberResource.value">
<code class="descname">value</code><a class="headerlink" href="#windows.winobject.device_manager.BusNumberResource.value" title="Permalink to this definition"></a></dt>
<dd><p>current value</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="memlargeresource">
<h4>2.14.6.1.7. MemLargeResource<a class="headerlink" href="#memlargeresource" title="Permalink to this headline"></a></h4>
<dl class="class">
<dt id="windows.winobject.device_manager.MemLargeResource">
<em class="property">class </em><code class="descclassname">windows.winobject.device_manager.</code><code class="descname">MemLargeResource</code><span class="sig-paren">(</span><em>handle</em>, <em>type</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/device_manager.html#MemLargeResource"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.device_manager.MemLargeResource" title="Permalink to this definition"></a></dt>
<dd><p>A resource of type MEM_LARGE_RESOURCE</p>
<dl class="attribute">
<dt id="windows.winobject.device_manager.MemLargeResource.DATA_TYPE">
<code class="descname">DATA_TYPE</code><a class="headerlink" href="#windows.winobject.device_manager.MemLargeResource.DATA_TYPE" title="Permalink to this definition"></a></dt>
<dd><p>alias of <a class="reference internal" href="winstructs_generated.html#windows.generated_def.winstructs.Mem_Large_Resource_s" title="windows.generated_def.winstructs.Mem_Large_Resource_s"><code class="xref py py-class docutils literal notranslate"><span class="pre">windows.generated_def.winstructs.Mem_Large_Resource_s</span></code></a></p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.MemLargeResource.rawdata">
<code class="descname">rawdata</code><a class="headerlink" href="#windows.winobject.device_manager.MemLargeResource.rawdata" title="Permalink to this definition"></a></dt>
<dd><p>The raw data describing the resource</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.MemLargeResource.value">
<code class="descname">value</code><a class="headerlink" href="#windows.winobject.device_manager.MemLargeResource.value" title="Permalink to this definition"></a></dt>
<dd><p>current value</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="classspecificresource">
<h4>2.14.6.1.8. ClassSpecificResource<a class="headerlink" href="#classspecificresource" title="Permalink to this headline"></a></h4>
<dl class="class">
<dt id="windows.winobject.device_manager.ClassSpecificResource">
<em class="property">class </em><code class="descclassname">windows.winobject.device_manager.</code><code class="descname">ClassSpecificResource</code><span class="sig-paren">(</span><em>handle</em>, <em>type</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/device_manager.html#ClassSpecificResource"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.device_manager.ClassSpecificResource" title="Permalink to this definition"></a></dt>
<dd><p>A resource of type CS_RESOURCE</p>
<dl class="attribute">
<dt id="windows.winobject.device_manager.ClassSpecificResource.DATA_TYPE">
<code class="descname">DATA_TYPE</code><a class="headerlink" href="#windows.winobject.device_manager.ClassSpecificResource.DATA_TYPE" title="Permalink to this definition"></a></dt>
<dd><p>alias of <a class="reference internal" href="winstructs_generated.html#windows.generated_def.winstructs.CS_Resource_s" title="windows.generated_def.winstructs.CS_Resource_s"><code class="xref py py-class docutils literal notranslate"><span class="pre">windows.generated_def.winstructs.CS_Resource_s</span></code></a></p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.ClassSpecificResource.rawdata">
<code class="descname">rawdata</code><a class="headerlink" href="#windows.winobject.device_manager.ClassSpecificResource.rawdata" title="Permalink to this definition"></a></dt>
<dd><p>The raw data describing the resource</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.ClassSpecificResource.value">
<code class="descname">value</code><a class="headerlink" href="#windows.winobject.device_manager.ClassSpecificResource.value" title="Permalink to this definition"></a></dt>
<dd><p>current value</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="deviceprivateresource">
<h4>2.14.6.1.9. DevicePrivateResource<a class="headerlink" href="#deviceprivateresource" title="Permalink to this headline"></a></h4>
<dl class="class">
<dt id="windows.winobject.device_manager.DevicePrivateResource">
<em class="property">class </em><code class="descclassname">windows.winobject.device_manager.</code><code class="descname">DevicePrivateResource</code><span class="sig-paren">(</span><em>handle</em>, <em>type</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/device_manager.html#DevicePrivateResource"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.device_manager.DevicePrivateResource" title="Permalink to this definition"></a></dt>
<dd><p>A device private resource
(<a class="reference external" href="https://docs.microsoft.com/en-us/windows-hardware/drivers/install/devprivate-resource">https://docs.microsoft.com/en-us/windows-hardware/drivers/install/devprivate-resource</a>)</p>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DevicePrivateResource.rawdata">
<code class="descname">rawdata</code><a class="headerlink" href="#windows.winobject.device_manager.DevicePrivateResource.rawdata" title="Permalink to this definition"></a></dt>
<dd><p>The raw data describing the resource</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.DevicePrivateResource.value">
<code class="descname">value</code><a class="headerlink" href="#windows.winobject.device_manager.DevicePrivateResource.value" title="Permalink to this definition"></a></dt>
<dd><p>current value</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="mfcardconfigresource">
<h4>2.14.6.1.10. MfCardConfigResource<a class="headerlink" href="#mfcardconfigresource" title="Permalink to this headline"></a></h4>
<dl class="class">
<dt id="windows.winobject.device_manager.MfCardConfigResource">
<em class="property">class </em><code class="descclassname">windows.winobject.device_manager.</code><code class="descname">MfCardConfigResource</code><span class="sig-paren">(</span><em>handle</em>, <em>type</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/device_manager.html#MfCardConfigResource"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.device_manager.MfCardConfigResource" title="Permalink to this definition"></a></dt>
<dd><p>A resource of type MFCARD_RESOURCE</p>
<dl class="attribute">
<dt id="windows.winobject.device_manager.MfCardConfigResource.DATA_TYPE">
<code class="descname">DATA_TYPE</code><a class="headerlink" href="#windows.winobject.device_manager.MfCardConfigResource.DATA_TYPE" title="Permalink to this definition"></a></dt>
<dd><p>alias of <a class="reference internal" href="winstructs_generated.html#windows.generated_def.winstructs.MfCard_Resource_s" title="windows.generated_def.winstructs.MfCard_Resource_s"><code class="xref py py-class docutils literal notranslate"><span class="pre">windows.generated_def.winstructs.MfCard_Resource_s</span></code></a></p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.MfCardConfigResource.rawdata">
<code class="descname">rawdata</code><a class="headerlink" href="#windows.winobject.device_manager.MfCardConfigResource.rawdata" title="Permalink to this definition"></a></dt>
<dd><p>The raw data describing the resource</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.MfCardConfigResource.value">
<code class="descname">value</code><a class="headerlink" href="#windows.winobject.device_manager.MfCardConfigResource.value" title="Permalink to this definition"></a></dt>
<dd><p>current value</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="pccardconfigresource">
<h4>2.14.6.1.11. PcCardConfigResource<a class="headerlink" href="#pccardconfigresource" title="Permalink to this headline"></a></h4>
<dl class="class">
<dt id="windows.winobject.device_manager.PcCardConfigResource">
<em class="property">class </em><code class="descclassname">windows.winobject.device_manager.</code><code class="descname">PcCardConfigResource</code><span class="sig-paren">(</span><em>handle</em>, <em>type</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/device_manager.html#PcCardConfigResource"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.device_manager.PcCardConfigResource" title="Permalink to this definition"></a></dt>
<dd><p>A resource of type PCCARD_RESOURCE</p>
<dl class="attribute">
<dt id="windows.winobject.device_manager.PcCardConfigResource.DATA_TYPE">
<code class="descname">DATA_TYPE</code><a class="headerlink" href="#windows.winobject.device_manager.PcCardConfigResource.DATA_TYPE" title="Permalink to this definition"></a></dt>
<dd><p>alias of <a class="reference internal" href="winstructs_generated.html#windows.generated_def.winstructs.PcCard_Resource_s" title="windows.generated_def.winstructs.PcCard_Resource_s"><code class="xref py py-class docutils literal notranslate"><span class="pre">windows.generated_def.winstructs.PcCard_Resource_s</span></code></a></p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.PcCardConfigResource.rawdata">
<code class="descname">rawdata</code><a class="headerlink" href="#windows.winobject.device_manager.PcCardConfigResource.rawdata" title="Permalink to this definition"></a></dt>
<dd><p>The raw data describing the resource</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.device_manager.PcCardConfigResource.value">
<code class="descname">value</code><a class="headerlink" href="#windows.winobject.device_manager.PcCardConfigResource.value" title="Permalink to this definition"></a></dt>
<dd><p>current value</p>
</dd></dl>
</dd></dl>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">2.14. Device Manager</a><ul>
<li><a class="reference internal" href="#devicemanager">2.14.1. DeviceManager</a></li>
<li><a class="reference internal" href="#deviceclass">2.14.2. DeviceClass</a></li>
<li><a class="reference internal" href="#deviceinformationset">2.14.3. DeviceInformationSet</a></li>
<li><a class="reference internal" href="#deviceinstance">2.14.4. DeviceInstance</a></li>
<li><a class="reference internal" href="#logicalconfiguration">2.14.5. LogicalConfiguration</a></li>
<li><a class="reference internal" href="#resourcedescriptor">2.14.6. ResourceDescriptor</a><ul>
<li><a class="reference internal" href="#concrete-resourcedescriptor">2.14.6.1. Concrete ResourceDescriptor</a><ul>
<li><a class="reference internal" href="#resourcenotype">2.14.6.1.1. ResourceNoType</a></li>
<li><a class="reference internal" href="#memoryresource">2.14.6.1.2. MemoryResource</a></li>
<li><a class="reference internal" href="#ioresource">2.14.6.1.3. IoResource</a></li>
<li><a class="reference internal" href="#dmaresource">2.14.6.1.4. DmaResource</a></li>
<li><a class="reference internal" href="#irqresource">2.14.6.1.5. IrqResource</a></li>
<li><a class="reference internal" href="#busnumberresource">2.14.6.1.6. BusNumberResource</a></li>
<li><a class="reference internal" href="#memlargeresource">2.14.6.1.7. MemLargeResource</a></li>
<li><a class="reference internal" href="#classspecificresource">2.14.6.1.8. ClassSpecificResource</a></li>
<li><a class="reference internal" href="#deviceprivateresource">2.14.6.1.9. DevicePrivateResource</a></li>
<li><a class="reference internal" href="#mfcardconfigresource">2.14.6.1.10. MfCardConfigResource</a></li>
<li><a class="reference internal" href="#pccardconfigresource">2.14.6.1.11. PcCardConfigResource</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="object_manager.html"
title="previous chapter">2.13. Object Manager Kernel objects</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="task_scheduler.html"
title="next chapter">2.15. Task scheduler</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/device_manager.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="task_scheduler.html" title="2.15. Task scheduler"
>next</a> |</li>
<li class="right" >
<a href="object_manager.html" title="2.13. Object Manager Kernel objects"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="winobject.html" >2. The <code class="docutils literal notranslate"><span class="pre">windows</span></code> objects</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+354
View File
@@ -0,0 +1,354 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>2.17. ETW Event Tracing for Windows &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="3. windows.native_exec Native Code Execution" href="native_exec.html" />
<link rel="prev" title="2.16. Event Log" href="evtlog.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="native_exec.html" title="3. windows.native_exec Native Code Execution"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="evtlog.html" title="2.16. Event Log"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="winobject.html" accesskey="U">2. The <code class="docutils literal notranslate"><span class="pre">windows</span></code> objects</a> &#187;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="module-windows.winobject.event_trace">
<span id="etw-event-tracing-for-windows"></span><h1>2.17. ETW Event Tracing for Windows<a class="headerlink" href="#module-windows.winobject.event_trace" title="Permalink to this headline"></a></h1>
<p>The <a class="reference internal" href="#windows.winobject.event_trace.EtwManager" title="windows.winobject.event_trace.EtwManager"><code class="xref py py-class docutils literal notranslate"><span class="pre">EtwManager</span></code></a> instance is accessible via <a class="reference internal" href="windows.html#windows.winobject.system.System.etw" title="windows.winobject.system.System.etw"><code class="xref py py-attr docutils literal notranslate"><span class="pre">windows.system.etw</span></code></a></p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">This code is the result of my research on <code class="docutils literal notranslate"><span class="pre">ETW</span></code> that lead to this presentation <a class="reference external" href="https://www.rump.beer/2019/slides/etw_lazy_reverser.pdf">ETW for the lazy reverser (FR)</a></p>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">See sample <a class="reference internal" href="sample.html#sample-etw"><span class="std std-ref">ETW (Event Tracing for Windows)</span></a></p>
</div>
<div class="section" id="etwmanager">
<h2>2.17.1. EtwManager<a class="headerlink" href="#etwmanager" title="Permalink to this headline"></a></h2>
<dl class="class">
<dt id="windows.winobject.event_trace.EtwManager">
<em class="property">class </em><code class="descclassname">windows.winobject.event_trace.</code><code class="descname">EtwManager</code><a class="reference internal" href="_modules/windows/winobject/event_trace.html#EtwManager"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_trace.EtwManager" title="Permalink to this definition"></a></dt>
<dd><p>An object to query ETW session/providers and open new trace</p>
<dl class="method">
<dt id="windows.winobject.event_trace.EtwManager.open_trace">
<code class="descname">open_trace</code><span class="sig-paren">(</span><em>name=None</em>, <em>logfile=None</em>, <em>guid=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_trace.html#EtwManager.open_trace"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_trace.EtwManager.open_trace" title="Permalink to this definition"></a></dt>
<dd><p>Open a new ETW Trace</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><a class="reference internal" href="#windows.winobject.event_trace.EtwTrace" title="windows.winobject.event_trace.EtwTrace"><code class="xref py py-class docutils literal notranslate"><span class="pre">EtwTrace</span></code></a></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.event_trace.EtwManager.providers">
<code class="descname">providers</code><a class="headerlink" href="#windows.winobject.event_trace.EtwManager.providers" title="Permalink to this definition"></a></dt>
<dd><p>The list of currently existing ETW providers.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">[<code class="xref py py-class docutils literal notranslate"><span class="pre">TraceProvider</span></code>] A list of ETW providers</td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.event_trace.EtwManager.sessions">
<code class="descname">sessions</code><a class="headerlink" href="#windows.winobject.event_trace.EtwManager.sessions" title="Permalink to this definition"></a></dt>
<dd><p>The list of currently active ETW session.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">[<a class="reference internal" href="#windows.winobject.event_trace.EventTraceProperties" title="windows.winobject.event_trace.EventTraceProperties"><code class="xref py py-class docutils literal notranslate"><span class="pre">EventTraceProperties</span></code></a>] A list of <a class="reference internal" href="#windows.winobject.event_trace.EventTraceProperties" title="windows.winobject.event_trace.EventTraceProperties"><code class="xref py py-class docutils literal notranslate"><span class="pre">EventTraceProperties</span></code></a></td>
</tr>
</tbody>
</table>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="tracing-events">
<h2>2.17.2. Tracing Events<a class="headerlink" href="#tracing-events" title="Permalink to this headline"></a></h2>
<div class="section" id="etwtrace">
<h3>2.17.2.1. EtwTrace<a class="headerlink" href="#etwtrace" title="Permalink to this headline"></a></h3>
<dl class="class">
<dt id="windows.winobject.event_trace.EtwTrace">
<em class="property">class </em><code class="descclassname">windows.winobject.event_trace.</code><code class="descname">EtwTrace</code><span class="sig-paren">(</span><em>name</em>, <em>logfile=None</em>, <em>guid=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_trace.html#EtwTrace"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_trace.EtwTrace" title="Permalink to this definition"></a></dt>
<dd><p>Represent an ETW Trace for tracing/processing events</p>
<dl class="method">
<dt id="windows.winobject.event_trace.EtwTrace.enable">
<code class="descname">enable</code><span class="sig-paren">(</span><em>guid</em>, <em>flags=255</em>, <em>level=255</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_trace.html#EtwTrace.enable"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_trace.EtwTrace.enable" title="Permalink to this definition"></a></dt>
<dd><p>Enable the specified event trace provider.</p>
</dd></dl>
<dl class="method">
<dt id="windows.winobject.event_trace.EtwTrace.enable_ex">
<code class="descname">enable_ex</code><span class="sig-paren">(</span><em>guid</em>, <em>flags=255</em>, <em>level=255</em>, <em>any_keyword=4294967295L</em>, <em>all_keyword=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_trace.html#EtwTrace.enable_ex"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_trace.EtwTrace.enable_ex" title="Permalink to this definition"></a></dt>
<dd><p>Enable the specified event trace provider.</p>
</dd></dl>
<dl class="method">
<dt id="windows.winobject.event_trace.EtwTrace.exists">
<code class="descname">exists</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_trace.html#EtwTrace.exists"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_trace.EtwTrace.exists" title="Permalink to this definition"></a></dt>
<dd><p>Return <code class="docutils literal notranslate"><span class="pre">True</span></code> if the trace already exist (based on its name)</p>
</dd></dl>
<dl class="method">
<dt id="windows.winobject.event_trace.EtwTrace.flush">
<code class="descname">flush</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_trace.html#EtwTrace.flush"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_trace.EtwTrace.flush" title="Permalink to this definition"></a></dt>
<dd><p>Flush the trace</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.event_trace.EtwTrace.guid">
<code class="descname">guid</code><em class="property"> = None</em><a class="headerlink" href="#windows.winobject.event_trace.EtwTrace.guid" title="Permalink to this definition"></a></dt>
<dd><p>The guid of the trace</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.event_trace.EtwTrace.logfile">
<code class="descname">logfile</code><em class="property"> = None</em><a class="headerlink" href="#windows.winobject.event_trace.EtwTrace.logfile" title="Permalink to this definition"></a></dt>
<dd><p>The logging file of the trace (<code class="docutils literal notranslate"><span class="pre">None</span></code> means real time trace)</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.event_trace.EtwTrace.name">
<code class="descname">name</code><em class="property"> = None</em><a class="headerlink" href="#windows.winobject.event_trace.EtwTrace.name" title="Permalink to this definition"></a></dt>
<dd><p>The name of the trace</p>
</dd></dl>
<dl class="method">
<dt id="windows.winobject.event_trace.EtwTrace.process">
<code class="descname">process</code><span class="sig-paren">(</span><em>callback</em>, <em>begin=None</em>, <em>end=None</em>, <em>context=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_trace.html#EtwTrace.process"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_trace.EtwTrace.process" title="Permalink to this definition"></a></dt>
<dd><p>Process the event retrieved by the trace.
This function will call <code class="docutils literal notranslate"><span class="pre">callback</span></code> with any <a class="reference internal" href="#windows.winobject.event_trace.EventRecord" title="windows.winobject.event_trace.EventRecord"><code class="xref py py-class docutils literal notranslate"><span class="pre">EventRecord</span></code></a> in the trace.
<code class="docutils literal notranslate"><span class="pre">begin/end</span></code> allow to filter and only process events in a given timeframe.</p>
<div class="admonition warning">
<p class="first admonition-title">Warning</p>
<p>If the trace if <code class="docutils literal notranslate"><span class="pre">REALTIME</span></code> (no logfile) this function will hang/process new event until the trace is stopped.</p>
<p class="last">Using <code class="docutils literal notranslate"><span class="pre">logman</span> <span class="pre">-ets</span> <span class="pre">stop</span> <span class="pre">TRACE_NAME</span></code> for exemple.</p>
</div>
</dd></dl>
<dl class="method">
<dt id="windows.winobject.event_trace.EtwTrace.start">
<code class="descname">start</code><span class="sig-paren">(</span><em>flags=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_trace.html#EtwTrace.start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_trace.EtwTrace.start" title="Permalink to this definition"></a></dt>
<dd><p>Start the tracing</p>
</dd></dl>
<dl class="method">
<dt id="windows.winobject.event_trace.EtwTrace.stop">
<code class="descname">stop</code><span class="sig-paren">(</span><em>soft=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_trace.html#EtwTrace.stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_trace.EtwTrace.stop" title="Permalink to this definition"></a></dt>
<dd><p>stop the tracing.</p>
<p><code class="docutils literal notranslate"><span class="pre">soft</span></code> will allow to stop a non-existing trace that do not exists/run.
This allow for simpler script that stop/start some EtwTrace.</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="eventtraceproperties">
<h3>2.17.2.2. EventTraceProperties<a class="headerlink" href="#eventtraceproperties" title="Permalink to this headline"></a></h3>
<dl class="class">
<dt id="windows.winobject.event_trace.EventTraceProperties">
<em class="property">class </em><code class="descclassname">windows.winobject.event_trace.</code><code class="descname">EventTraceProperties</code><a class="reference internal" href="_modules/windows/winobject/event_trace.html#EventTraceProperties"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_trace.EventTraceProperties" title="Permalink to this definition"></a></dt>
<dd><p>Represent an Event Trace session that may exist or now. (<a class="reference external" href="https://docs.microsoft.com/en-us/windows/win32/api/evntrace/ns-evntrace-event_trace_properties">https://docs.microsoft.com/en-us/windows/win32/api/evntrace/ns-evntrace-event_trace_properties</a>)</p>
<p>This class is widly used by <a class="reference internal" href="#windows.winobject.event_trace.EtwTrace" title="windows.winobject.event_trace.EtwTrace"><code class="xref py py-class docutils literal notranslate"><span class="pre">EtwTrace</span></code></a></p>
<dl class="classmethod">
<dt id="windows.winobject.event_trace.EventTraceProperties.create">
<em class="property">classmethod </em><code class="descname">create</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_trace.html#EventTraceProperties.create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_trace.EventTraceProperties.create" title="Permalink to this definition"></a></dt>
<dd><p>Initialize a new <a class="reference internal" href="#windows.winobject.event_trace.EventTraceProperties" title="windows.winobject.event_trace.EventTraceProperties"><code class="xref py py-class docutils literal notranslate"><span class="pre">EventTraceProperties</span></code></a></p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.event_trace.EventTraceProperties.guid">
<code class="descname">guid</code><a class="headerlink" href="#windows.winobject.event_trace.EventTraceProperties.guid" title="Permalink to this definition"></a></dt>
<dd><p>The GUID of the Event Trace session (see <code class="docutils literal notranslate"><span class="pre">Wnode.Guid</span></code>)</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.event_trace.EventTraceProperties.id">
<code class="descname">id</code><a class="headerlink" href="#windows.winobject.event_trace.EventTraceProperties.id" title="Permalink to this definition"></a></dt>
<dd><p>The LoggerId if the session (see <code class="docutils literal notranslate"><span class="pre">Wnode.HistoricalContext</span></code>)</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.event_trace.EventTraceProperties.logfile">
<code class="descname">logfile</code><a class="headerlink" href="#windows.winobject.event_trace.EventTraceProperties.logfile" title="Permalink to this definition"></a></dt>
<dd><p>The logfile associated with the session</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.event_trace.EventTraceProperties.name">
<code class="descname">name</code><a class="headerlink" href="#windows.winobject.event_trace.EventTraceProperties.name" title="Permalink to this definition"></a></dt>
<dd><p>The name of the session</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="eventrecord">
<h3>2.17.2.3. EventRecord<a class="headerlink" href="#eventrecord" title="Permalink to this headline"></a></h3>
<dl class="class">
<dt id="windows.winobject.event_trace.EventRecord">
<em class="property">class </em><code class="descclassname">windows.winobject.event_trace.</code><code class="descname">EventRecord</code><a class="reference internal" href="_modules/windows/winobject/event_trace.html#EventRecord"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_trace.EventRecord" title="Permalink to this definition"></a></dt>
<dd><dl class="attribute">
<dt id="windows.winobject.event_trace.EventRecord.guid">
<code class="descname">guid</code><a class="headerlink" href="#windows.winobject.event_trace.EventRecord.guid" title="Permalink to this definition"></a></dt>
<dd><p>Guid of the Event</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.event_trace.EventRecord.id">
<code class="descname">id</code><a class="headerlink" href="#windows.winobject.event_trace.EventRecord.id" title="Permalink to this definition"></a></dt>
<dd><p>ID of the Event</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.event_trace.EventRecord.pid">
<code class="descname">pid</code><a class="headerlink" href="#windows.winobject.event_trace.EventRecord.pid" title="Permalink to this definition"></a></dt>
<dd><p>Process ID that provided the event</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.event_trace.EventRecord.tid">
<code class="descname">tid</code><a class="headerlink" href="#windows.winobject.event_trace.EventRecord.tid" title="Permalink to this definition"></a></dt>
<dd><p>Thread ID that provided the event</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.event_trace.EventRecord.user_data">
<code class="descname">user_data</code><a class="headerlink" href="#windows.winobject.event_trace.EventRecord.user_data" title="Permalink to this definition"></a></dt>
<dd><p>Event specific data</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2.7/library/functions.html#str" title="(in Python v2.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a></td>
</tr>
</tbody>
</table>
</dd></dl>
</dd></dl>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">2.17. ETW Event Tracing for Windows</a><ul>
<li><a class="reference internal" href="#etwmanager">2.17.1. EtwManager</a></li>
<li><a class="reference internal" href="#tracing-events">2.17.2. Tracing Events</a><ul>
<li><a class="reference internal" href="#etwtrace">2.17.2.1. EtwTrace</a></li>
<li><a class="reference internal" href="#eventtraceproperties">2.17.2.2. EventTraceProperties</a></li>
<li><a class="reference internal" href="#eventrecord">2.17.2.3. EventRecord</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="evtlog.html"
title="previous chapter">2.16. Event Log</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="native_exec.html"
title="next chapter">3. <code class="docutils literal notranslate"><span class="pre">windows.native_exec</span></code> Native Code Execution</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/etw.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="native_exec.html" title="3. windows.native_exec Native Code Execution"
>next</a> |</li>
<li class="right" >
<a href="evtlog.html" title="2.16. Event Log"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="winobject.html" >2. The <code class="docutils literal notranslate"><span class="pre">windows</span></code> objects</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+102 -45
View File
@@ -6,18 +6,21 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>2.15. Event Log &#8212; PythonForWindows 0.5 documentation</title>
<title>2.16. Event Log &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="3. windows.native_exec Native Code Execution" href="native_exec.html" />
<link rel="prev" title="2.14. Task scheduler" href="task_scheduler.html" />
<link rel="next" title="2.17. ETW Event Tracing for Windows" href="etw.html" />
<link rel="prev" title="2.15. Task scheduler" href="task_scheduler.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
@@ -29,12 +32,12 @@
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="native_exec.html" title="3. windows.native_exec Native Code Execution"
<a href="etw.html" title="2.17. ETW Event Tracing for Windows"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="task_scheduler.html" title="2.14. Task scheduler"
<a href="task_scheduler.html" title="2.15. Task scheduler"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="winobject.html" accesskey="U">2. The <code class="docutils literal notranslate"><span class="pre">windows</span></code> objects</a> &#187;</li>
</ul>
</div>
@@ -45,10 +48,11 @@
<div class="body" role="main">
<div class="section" id="module-windows.winobject.event_log">
<span id="event-log"></span><h1>2.15. Event Log<a class="headerlink" href="#module-windows.winobject.event_log" title="Permalink to this headline"></a></h1>
<span id="event-log"></span><h1>2.16. Event Log<a class="headerlink" href="#module-windows.winobject.event_log" title="Permalink to this headline"></a></h1>
<p>Some part of the Event Log WINAPI are not straightforward.</p>
<p>I have tried to offer some abstraction without completly hidding the some underlying subtilities (for now).</p>
<p>The current API may need some works to provide simpler/highter level API in the future.</p>
<p>The <a class="reference internal" href="#windows.winobject.event_log.EvtlogManager" title="windows.winobject.event_log.EvtlogManager"><code class="xref py py-class docutils literal notranslate"><span class="pre">EvtlogManager</span></code></a> instance is accessible via <a class="reference internal" href="windows.html#windows.winobject.system.System.event_log" title="windows.winobject.system.System.event_log"><code class="xref py py-attr docutils literal notranslate"><span class="pre">windows.system.event_log</span></code></a></p>
<p>For now, the best thing to do is look at the sample:</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
@@ -59,7 +63,7 @@
<p class="last">This API have not been tested on real case yet and may be subject to changes.</p>
</div>
<div class="section" id="evtlogmanager">
<h2>2.15.1. EvtlogManager<a class="headerlink" href="#evtlogmanager" title="Permalink to this headline"></a></h2>
<h2>2.16.1. EvtlogManager<a class="headerlink" href="#evtlogmanager" title="Permalink to this headline"></a></h2>
<dl class="class">
<dt id="windows.winobject.event_log.EvtlogManager">
<em class="property">class </em><code class="descclassname">windows.winobject.event_log.</code><code class="descname">EvtlogManager</code><a class="reference internal" href="_modules/windows/winobject/event_log.html#EvtlogManager"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_log.EvtlogManager" title="Permalink to this definition"></a></dt>
@@ -131,9 +135,9 @@
</div>
<div class="section" id="channel">
<h2>2.15.2. Channel<a class="headerlink" href="#channel" title="Permalink to this headline"></a></h2>
<h2>2.16.2. Channel<a class="headerlink" href="#channel" title="Permalink to this headline"></a></h2>
<div class="section" id="evtchannel">
<h3>2.15.2.1. EvtChannel<a class="headerlink" href="#evtchannel" title="Permalink to this headline"></a></h3>
<h3>2.16.2.1. EvtChannel<a class="headerlink" href="#evtchannel" title="Permalink to this headline"></a></h3>
<dl class="class">
<dt id="windows.winobject.event_log.EvtChannel">
<em class="property">class </em><code class="descclassname">windows.winobject.event_log.</code><code class="descname">EvtChannel</code><span class="sig-paren">(</span><em>name</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_log.html#EvtChannel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_log.EvtChannel" title="Permalink to this definition"></a></dt>
@@ -211,7 +215,7 @@
</div>
<div class="section" id="channelconfig">
<h3>2.15.2.2. ChannelConfig<a class="headerlink" href="#channelconfig" title="Permalink to this headline"></a></h3>
<h3>2.16.2.2. ChannelConfig<a class="headerlink" href="#channelconfig" title="Permalink to this headline"></a></h3>
<dl class="class">
<dt id="windows.winobject.event_log.ChannelConfig">
<em class="property">class </em><code class="descclassname">windows.winobject.event_log.</code><code class="descname">ChannelConfig</code><span class="sig-paren">(</span><em>handle</em>, <em>name=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_log.html#ChannelConfig"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_log.ChannelConfig" title="Permalink to this definition"></a></dt>
@@ -251,9 +255,9 @@
</div>
</div>
<div class="section" id="publisher">
<h2>2.15.3. Publisher<a class="headerlink" href="#publisher" title="Permalink to this headline"></a></h2>
<h2>2.16.3. Publisher<a class="headerlink" href="#publisher" title="Permalink to this headline"></a></h2>
<div class="section" id="evtpublisher">
<h3>2.15.3.1. EvtPublisher<a class="headerlink" href="#evtpublisher" title="Permalink to this headline"></a></h3>
<h3>2.16.3.1. EvtPublisher<a class="headerlink" href="#evtpublisher" title="Permalink to this headline"></a></h3>
<dl class="class">
<dt id="windows.winobject.event_log.EvtPublisher">
<em class="property">class </em><code class="descclassname">windows.winobject.event_log.</code><code class="descname">EvtPublisher</code><span class="sig-paren">(</span><em>name</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_log.html#EvtPublisher"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_log.EvtPublisher" title="Permalink to this definition"></a></dt>
@@ -276,7 +280,7 @@
</div>
<div class="section" id="publishermetadata">
<h3>2.15.3.2. PublisherMetadata<a class="headerlink" href="#publishermetadata" title="Permalink to this headline"></a></h3>
<h3>2.16.3.2. PublisherMetadata<a class="headerlink" href="#publishermetadata" title="Permalink to this headline"></a></h3>
<dl class="class">
<dt id="windows.winobject.event_log.PublisherMetadata">
<em class="property">class </em><code class="descclassname">windows.winobject.event_log.</code><code class="descname">PublisherMetadata</code><span class="sig-paren">(</span><em>handle</em>, <em>name=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_log.html#PublisherMetadata"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_log.PublisherMetadata" title="Permalink to this definition"></a></dt>
@@ -520,7 +524,7 @@
</div>
</div>
<div class="section" id="evtfile">
<h2>2.15.4. EvtFile<a class="headerlink" href="#evtfile" title="Permalink to this headline"></a></h2>
<h2>2.16.4. EvtFile<a class="headerlink" href="#evtfile" title="Permalink to this headline"></a></h2>
<dl class="class">
<dt id="windows.winobject.event_log.EvtFile">
<em class="property">class </em><code class="descclassname">windows.winobject.event_log.</code><code class="descname">EvtFile</code><span class="sig-paren">(</span><em>name</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_log.html#EvtFile"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_log.EvtFile" title="Permalink to this definition"></a></dt>
@@ -598,13 +602,19 @@
</div>
<div class="section" id="event">
<h2>2.15.5. Event<a class="headerlink" href="#event" title="Permalink to this headline"></a></h2>
<h2>2.16.5. Event<a class="headerlink" href="#event" title="Permalink to this headline"></a></h2>
<div class="section" id="evtevent">
<h3>2.15.5.1. EvtEvent<a class="headerlink" href="#evtevent" title="Permalink to this headline"></a></h3>
<h3>2.16.5.1. EvtEvent<a class="headerlink" href="#evtevent" title="Permalink to this headline"></a></h3>
<dl class="class">
<dt id="windows.winobject.event_log.EvtEvent">
<em class="property">class </em><code class="descclassname">windows.winobject.event_log.</code><code class="descname">EvtEvent</code><span class="sig-paren">(</span><em>handle=0</em>, <em>channel=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_log.html#EvtEvent"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_log.EvtEvent" title="Permalink to this definition"></a></dt>
<dd><p>An Event log</p>
<dl class="attribute">
<dt id="windows.winobject.event_log.EvtEvent.computer">
<code class="descname">computer</code><a class="headerlink" href="#windows.winobject.event_log.EvtEvent.computer" title="Permalink to this definition"></a></dt>
<dd><p>The computer that generated the event</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.event_log.EvtEvent.data">
<code class="descname">data</code><a class="headerlink" href="#windows.winobject.event_log.EvtEvent.data" title="Permalink to this definition"></a></dt>
@@ -622,7 +632,13 @@
<dl class="attribute">
<dt id="windows.winobject.event_log.EvtEvent.date">
<code class="descname">date</code><a class="headerlink" href="#windows.winobject.event_log.EvtEvent.date" title="Permalink to this definition"></a></dt>
<dd><p>Event.time_created as a datetime</p>
<dd><p><code class="docutils literal notranslate"><span class="pre">Event.time_created</span></code> as a :class:<code class="docutils literal notranslate"><span class="pre">datetime</span></code></p>
</dd></dl>
<dl class="method">
<dt id="windows.winobject.event_log.EvtEvent.event_values">
<code class="descname">event_values</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_log.html#EvtEvent.event_values"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_log.EvtEvent.event_values" title="Permalink to this definition"></a></dt>
<dd><p>The values of the event in a list</p>
</dd></dl>
<dl class="attribute">
@@ -663,6 +679,12 @@
<dd><p>The process ID of the Event</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.event_log.EvtEvent.provider">
<code class="descname">provider</code><a class="headerlink" href="#windows.winobject.event_log.EvtEvent.provider" title="Permalink to this definition"></a></dt>
<dd><p>The provider of the event</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.event_log.EvtEvent.tid">
<code class="descname">tid</code><a class="headerlink" href="#windows.winobject.event_log.EvtEvent.tid" title="Permalink to this definition"></a></dt>
@@ -675,6 +697,12 @@
<dd><p>The creation time of the Event</p>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.event_log.EvtEvent.user">
<code class="descname">user</code><a class="headerlink" href="#windows.winobject.event_log.EvtEvent.user" title="Permalink to this definition"></a></dt>
<dd><p>The User ID associated with the Event</p>
</dd></dl>
<dl class="method">
<dt id="windows.winobject.event_log.EvtEvent.value">
<code class="descname">value</code><span class="sig-paren">(</span><em>name</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_log.html#EvtEvent.value"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_log.EvtEvent.value" title="Permalink to this definition"></a></dt>
@@ -693,7 +721,7 @@
</div>
<div class="section" id="eventmetadata">
<h3>2.15.5.2. EventMetadata<a class="headerlink" href="#eventmetadata" title="Permalink to this headline"></a></h3>
<h3>2.16.5.2. EventMetadata<a class="headerlink" href="#eventmetadata" title="Permalink to this headline"></a></h3>
<dl class="class">
<dt id="windows.winobject.event_log.EventMetadata">
<em class="property">class </em><code class="descclassname">windows.winobject.event_log.</code><code class="descname">EventMetadata</code><a class="reference internal" href="_modules/windows/winobject/event_log.html#EventMetadata"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_log.EventMetadata" title="Permalink to this definition"></a></dt>
@@ -770,7 +798,7 @@ Retrieved by parsing <a class="reference internal" href="#windows.winobject.even
</div>
<div class="section" id="evtquery">
<h3>2.15.5.3. EvtQuery<a class="headerlink" href="#evtquery" title="Permalink to this headline"></a></h3>
<h3>2.16.5.3. EvtQuery<a class="headerlink" href="#evtquery" title="Permalink to this headline"></a></h3>
<dl class="class">
<dt id="windows.winobject.event_log.EvtQuery">
<em class="property">class </em><code class="descclassname">windows.winobject.event_log.</code><code class="descname">EvtQuery</code><span class="sig-paren">(</span><em>handle=0</em>, <em>channel=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_log.html#EvtQuery"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_log.EvtQuery" title="Permalink to this definition"></a></dt>
@@ -809,6 +837,35 @@ Retrieved by parsing <a class="reference internal" href="#windows.winobject.even
<dd><p>Return the next <a class="reference internal" href="#windows.winobject.event_log.EvtEvent" title="windows.winobject.event_log.EvtEvent"><code class="xref py py-class docutils literal notranslate"><span class="pre">EvtEvent</span></code></a> matching the query</p>
</dd></dl>
<dl class="method">
<dt id="windows.winobject.event_log.EvtQuery.seek">
<code class="descname">seek</code><span class="sig-paren">(</span><em>position</em>, <em>seek_flags=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_log.html#EvtQuery.seek"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_log.EvtQuery.seek" title="Permalink to this definition"></a></dt>
<dd><p>Seek to <code class="docutils literal notranslate"><span class="pre">position</span></code>.
<code class="docutils literal notranslate"><span class="pre">seek_flags</span></code> can be one of:</p>
<blockquote>
<div><ul class="simple">
<li><code class="docutils literal notranslate"><span class="pre">None</span></code></li>
<li><code class="docutils literal notranslate"><span class="pre">EvtSeekRelativeToFirst</span></code></li>
<li><code class="docutils literal notranslate"><span class="pre">EvtSeekRelativeToLast</span></code></li>
<li><code class="docutils literal notranslate"><span class="pre">EvtSeekRelativeToBookmark</span></code></li>
</ul>
</div></blockquote>
<p>If <code class="docutils literal notranslate"><span class="pre">seek_flags</span></code> is None:</p>
<blockquote>
<div><ul class="simple">
<li><code class="docutils literal notranslate"><span class="pre">position</span> <span class="pre">&gt;=</span> <span class="pre">0</span></code> will use <code class="docutils literal notranslate"><span class="pre">EvtSeekRelativeToFirst</span></code></li>
<li><dl class="first docutils">
<dt><code class="docutils literal notranslate"><span class="pre">position</span> <span class="pre">&lt;</span> <span class="pre">0</span></code> will use <code class="docutils literal notranslate"><span class="pre">EvtSeekRelativeToLast</span></code> and with <code class="docutils literal notranslate"><span class="pre">position+1</span></code></dt>
<dd><ul class="first last">
<li>This allow retrieve the <code class="docutils literal notranslate"><span class="pre">position</span></code> lasts events</li>
</ul>
</dd>
</dl>
</li>
</ul>
</div></blockquote>
</dd></dl>
<dl class="attribute">
<dt id="windows.winobject.event_log.EvtQuery.value">
<code class="descname">value</code><a class="headerlink" href="#windows.winobject.event_log.EvtQuery.value" title="Permalink to this definition"></a></dt>
@@ -820,7 +877,7 @@ Retrieved by parsing <a class="reference internal" href="#windows.winobject.even
</div>
</div>
<div class="section" id="todo">
<h2>2.15.6. TODO<a class="headerlink" href="#todo" title="Permalink to this headline"></a></h2>
<h2>2.16.6. TODO<a class="headerlink" href="#todo" title="Permalink to this headline"></a></h2>
<dl class="class">
<dt id="windows.winobject.event_log.PropertyArray">
<em class="property">class </em><code class="descclassname">windows.winobject.event_log.</code><code class="descname">PropertyArray</code><a class="reference internal" href="_modules/windows/winobject/event_log.html#PropertyArray"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_log.PropertyArray" title="Permalink to this definition"></a></dt>
@@ -842,38 +899,38 @@ Retrieved by parsing <a class="reference internal" href="#windows.winobject.even
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">2.15. Event Log</a><ul>
<li><a class="reference internal" href="#evtlogmanager">2.15.1. EvtlogManager</a></li>
<li><a class="reference internal" href="#channel">2.15.2. Channel</a><ul>
<li><a class="reference internal" href="#evtchannel">2.15.2.1. EvtChannel</a></li>
<li><a class="reference internal" href="#channelconfig">2.15.2.2. ChannelConfig</a></li>
<li><a class="reference internal" href="#">2.16. Event Log</a><ul>
<li><a class="reference internal" href="#evtlogmanager">2.16.1. EvtlogManager</a></li>
<li><a class="reference internal" href="#channel">2.16.2. Channel</a><ul>
<li><a class="reference internal" href="#evtchannel">2.16.2.1. EvtChannel</a></li>
<li><a class="reference internal" href="#channelconfig">2.16.2.2. ChannelConfig</a></li>
</ul>
</li>
<li><a class="reference internal" href="#publisher">2.15.3. Publisher</a><ul>
<li><a class="reference internal" href="#evtpublisher">2.15.3.1. EvtPublisher</a></li>
<li><a class="reference internal" href="#publishermetadata">2.15.3.2. PublisherMetadata</a></li>
<li><a class="reference internal" href="#publisher">2.16.3. Publisher</a><ul>
<li><a class="reference internal" href="#evtpublisher">2.16.3.1. EvtPublisher</a></li>
<li><a class="reference internal" href="#publishermetadata">2.16.3.2. PublisherMetadata</a></li>
</ul>
</li>
<li><a class="reference internal" href="#evtfile">2.15.4. EvtFile</a></li>
<li><a class="reference internal" href="#event">2.15.5. Event</a><ul>
<li><a class="reference internal" href="#evtevent">2.15.5.1. EvtEvent</a></li>
<li><a class="reference internal" href="#eventmetadata">2.15.5.2. EventMetadata</a></li>
<li><a class="reference internal" href="#evtquery">2.15.5.3. EvtQuery</a></li>
<li><a class="reference internal" href="#evtfile">2.16.4. EvtFile</a></li>
<li><a class="reference internal" href="#event">2.16.5. Event</a><ul>
<li><a class="reference internal" href="#evtevent">2.16.5.1. EvtEvent</a></li>
<li><a class="reference internal" href="#eventmetadata">2.16.5.2. EventMetadata</a></li>
<li><a class="reference internal" href="#evtquery">2.16.5.3. EvtQuery</a></li>
</ul>
</li>
<li><a class="reference internal" href="#todo">2.15.6. TODO</a></li>
<li><a class="reference internal" href="#todo">2.16.6. TODO</a></li>
</ul>
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="task_scheduler.html"
title="previous chapter">2.14. Task scheduler</a></p>
title="previous chapter">2.15. Task scheduler</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="native_exec.html"
title="next chapter">3. <code class="docutils literal notranslate"><span class="pre">windows.native_exec</span></code> Native Code Execution</a></p>
<p class="topless"><a href="etw.html"
title="next chapter">2.17. ETW Event Tracing for Windows</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
@@ -907,18 +964,18 @@ Retrieved by parsing <a class="reference internal" href="#windows.winobject.even
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="native_exec.html" title="3. windows.native_exec Native Code Execution"
<a href="etw.html" title="2.17. ETW Event Tracing for Windows"
>next</a> |</li>
<li class="right" >
<a href="task_scheduler.html" title="2.14. Task scheduler"
<a href="task_scheduler.html" title="2.15. Task scheduler"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="winobject.html" >2. The <code class="docutils literal notranslate"><span class="pre">windows</span></code> objects</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+10 -7
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>2.5. Exception and Context related structures &#8212; PythonForWindows 0.5 documentation</title>
<title>2.5. Exception and Context related structures &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="2.6. Registry" href="registry.html" />
@@ -34,7 +37,7 @@
<li class="right" >
<a href="token.html" title="2.4. Token"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="winobject.html" accesskey="U">2. The <code class="docutils literal notranslate"><span class="pre">windows</span></code> objects</a> &#187;</li>
</ul>
</div>
@@ -576,7 +579,7 @@ Most of the structures are the Windows structure with a prefix <code class="docu
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">2.5. Exception and Context related structures</a><ul>
<li><a class="reference internal" href="#exception-records">2.5.1. Exception Records</a></li>
@@ -632,13 +635,13 @@ Most of the structures are the Windows structure with a prefix <code class="docu
<li class="right" >
<a href="token.html" title="2.4. Token"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="winobject.html" >2. The <code class="docutils literal notranslate"><span class="pre">windows</span></code> objects</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+11 -8
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>14. windows.generated_def generated Windows defines and structures &#8212; PythonForWindows 0.5 documentation</title>
<title>14. windows.generated_def generated Windows defines and structures &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="14.1. WinDef" href="windef_generated.html" />
@@ -34,7 +37,7 @@
<li class="right" >
<a href="rpc.html" title="13. windows.rpc ALPC-based Windows RPC"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
@@ -80,7 +83,7 @@
<div class="section" id="example">
<h2>14.6. Example<a class="headerlink" href="#example" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">windows.generated_def</span>
<span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="kn">as</span> <span class="nn">gdef</span>
<span class="gp">&gt;&gt;&gt; </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="gp">&gt;&gt;&gt; </span><span class="n">gdef</span>
<span class="go">&lt;module &#39;windows.generated_def&#39; from &#39;c:\users\hakril\documents\work\pythonforwindows\windows\generated_def\__init__.pyc&#39;&gt;</span>
@@ -123,7 +126,7 @@
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">14. <code class="docutils literal notranslate"><span class="pre">windows.generated_def</span></code> generated Windows defines and structures</a><ul>
<li><a class="reference internal" href="#example">14.6. Example</a></li>
@@ -175,12 +178,12 @@
<li class="right" >
<a href="rpc.html" title="13. windows.rpc ALPC-based Windows RPC"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+1976 -73
View File
File diff suppressed because it is too large Load Diff
+9 -6
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>2.11. Handle Processes handles &#8212; PythonForWindows 0.5 documentation</title>
<title>2.11. Handle Processes handles &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="2.12. System Module Loaded kernel modules" href="system_module.html" />
@@ -34,7 +37,7 @@
<li class="right" >
<a href="wmi.html" title="2.10. WMI Make request to WMI"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="winobject.html" accesskey="U">2. The <code class="docutils literal notranslate"><span class="pre">windows</span></code> objects</a> &#187;</li>
</ul>
</div>
@@ -170,13 +173,13 @@
<li class="right" >
<a href="wmi.html" title="2.10. WMI Make request to WMI"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="winobject.html" >2. The <code class="docutils literal notranslate"><span class="pre">windows</span></code> objects</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+17 -14
View File
@@ -6,18 +6,21 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>15. IAT hooking &#8212; PythonForWindows 0.5 documentation</title>
<title>15. IAT hooking &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="16. Early Work In Progress" href="wip.html" />
<link rel="prev" title="14.5. Windef" href="winerror_generated.html" />
<link rel="prev" title="14.5. WinError" href="winerror_generated.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
@@ -32,9 +35,9 @@
<a href="wip.html" title="16. Early Work In Progress"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="winerror_generated.html" title="14.5. Windef"
<a href="winerror_generated.html" title="14.5. WinError"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
@@ -61,7 +64,7 @@
<p>You just need to use the function <a class="reference internal" href="process.html#windows.pe_parse.IATEntry.set_hook" title="windows.pe_parse.IATEntry.set_hook"><code class="xref py py-func docutils literal notranslate"><span class="pre">windows.pe_parse.IATEntry.set_hook()</span></code></a></p>
<p>Putting a hook:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">windows</span>
<span class="kn">from</span> <span class="nn">windows.hooks</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">windows.hooks</span> <span class="kn">import</span> <span class="o">*</span>
<span class="nd">@CreateFileACallback</span>
<span class="k">def</span> <span class="nf">createfile_callback</span><span class="p">(</span><span class="n">lpFileName</span><span class="p">,</span> <span class="n">dwDesiredAccess</span><span class="p">,</span> <span class="n">dwShareMode</span><span class="p">,</span> <span class="n">lpSecurityAttributes</span><span class="p">,</span> <span class="n">dwCreationDisposition</span><span class="p">,</span> <span class="n">dwFlagsAndAttributes</span><span class="p">,</span> <span class="n">hTemplateFile</span><span class="p">,</span> <span class="n">real_function</span><span class="p">):</span>
@@ -108,7 +111,7 @@
<blockquote>
<div><ul>
<li><p class="first">Giving the type manualy using the decorator <a class="reference internal" href="#windows.hooks.Callback" title="windows.hooks.Callback"><code class="xref py py-class docutils literal notranslate"><span class="pre">windows.hooks.Callback</span></code></a>:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">windows.hooks</span> <span class="k">import</span> <span class="o">*</span>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">windows.hooks</span> <span class="kn">import</span> <span class="o">*</span>
<span class="c1"># First type is return type, others are parameters types</span>
<span class="nd">@Callback</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulong</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">exit_callback</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">real_function</span><span class="p">):</span>
@@ -121,7 +124,7 @@
</div>
</li>
<li><p class="first">Using the <cite>Callback</cite> decorator generated from known functions:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">windows.hooks</span> <span class="k">import</span> <span class="o">*</span>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">windows.hooks</span> <span class="kn">import</span> <span class="o">*</span>
<span class="c1"># Decorator name is always API_NAME + &quot;CallBack&quot;</span>
<span class="nd">@CreateFileACallback</span>
<span class="k">def</span> <span class="nf">createfile_callback</span><span class="p">(</span><span class="n">lpFileName</span><span class="p">,</span> <span class="n">dwDesiredAccess</span><span class="p">,</span> <span class="n">dwShareMode</span><span class="p">,</span> <span class="n">lpSecurityAttributes</span><span class="p">,</span> <span class="n">dwCreationDisposition</span><span class="p">,</span> <span class="n">dwFlagsAndAttributes</span><span class="p">,</span> <span class="n">hTemplateFile</span><span class="p">,</span> <span class="n">real_function</span><span class="p">):</span>
@@ -175,7 +178,7 @@
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">15. IAT hooking</a><ul>
<li><a class="reference internal" href="#putting-an-iat-hook">15.1. Putting an IAT hook</a></li>
@@ -191,7 +194,7 @@
<h4>Previous topic</h4>
<p class="topless"><a href="winerror_generated.html"
title="previous chapter">14.5. Windef</a></p>
title="previous chapter">14.5. WinError</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="wip.html"
title="next chapter">16. Early Work In Progress</a></p>
@@ -231,14 +234,14 @@
<a href="wip.html" title="16. Early Work In Progress"
>next</a> |</li>
<li class="right" >
<a href="winerror_generated.html" title="14.5. Windef"
<a href="winerror_generated.html" title="14.5. WinError"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+44 -28
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Welcome to PythonForWindowss documentation! &#8212; PythonForWindows 0.5 documentation</title>
<title>Welcome to PythonForWindowss documentation! &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="1. The windows module" href="windows.html" />
@@ -30,7 +33,7 @@
<li class="right" >
<a href="windows.html" title="1. The windows module"
accesskey="N">next</a> |</li>
<li class="nav-item nav-item-0"><a href="#">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="#">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
@@ -60,13 +63,17 @@ I am always glad to have feedbacks from people using this project.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">install</span>
</pre></div>
</div>
<p>In its current state the project only support Python2 and
<code class="docutils literal notranslate"><span class="pre">setup.py</span></code> will raise an <code class="xref py py-class docutils literal notranslate"><span class="pre">NotImplementedError</span></code> if launched from python3.</p>
<div class="admonition warning">
<p class="first admonition-title">Warning</p>
<p class="last">PythonForWindows is not available on Pypi for now and thus cannot be directly installed using <code class="docutils literal notranslate"><span class="pre">pip</span></code>.</p>
</div>
</div>
<div class="section" id="python3">
<h4>Python3<a class="headerlink" href="#python3" title="Permalink to this headline"></a></h4>
<p>python3 support is still in beta.
All the tests pass on master, but I did not test it heavily on real case.
Do not hesitate report bugs and issues.</p>
</div>
</div>
</div>
<div class="section" id="documentation">
@@ -91,8 +98,10 @@ I am always glad to have feedbacks from people using this project.</p>
<li class="toctree-l2"><a class="reference internal" href="handle.html">2.11. Handle Processes handles</a></li>
<li class="toctree-l2"><a class="reference internal" href="system_module.html">2.12. System Module Loaded kernel modules</a></li>
<li class="toctree-l2"><a class="reference internal" href="object_manager.html">2.13. Object Manager Kernel objects</a></li>
<li class="toctree-l2"><a class="reference internal" href="task_scheduler.html">2.14. Task scheduler</a></li>
<li class="toctree-l2"><a class="reference internal" href="evtlog.html">2.15. Event Log</a></li>
<li class="toctree-l2"><a class="reference internal" href="device_manager.html">2.14. Device Manager</a></li>
<li class="toctree-l2"><a class="reference internal" href="task_scheduler.html">2.15. Task scheduler</a></li>
<li class="toctree-l2"><a class="reference internal" href="evtlog.html">2.16. Event Log</a></li>
<li class="toctree-l2"><a class="reference internal" href="etw.html">2.17. ETW Event Tracing for Windows</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="native_exec.html">3. <code class="docutils literal notranslate"><span class="pre">windows.native_exec</span></code> Native Code Execution</a><ul>
@@ -132,8 +141,10 @@ I am always glad to have feedbacks from people using this project.</p>
</li>
<li class="toctree-l1"><a class="reference internal" href="debug.html">9. <code class="docutils literal notranslate"><span class="pre">windows.debug</span></code> Debugging</a><ul>
<li class="toctree-l2"><a class="reference internal" href="debug.html#debugger">9.1. <code class="docutils literal notranslate"><span class="pre">Debugger</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="debug.html#localdebugger">9.2. <code class="docutils literal notranslate"><span class="pre">LocalDebugger</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="debug.html#breakpoint">9.3. <code class="docutils literal notranslate"><span class="pre">Breakpoint</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="debug.html#symboldebugger">9.2. <code class="docutils literal notranslate"><span class="pre">SymbolDebugger</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="debug.html#localdebugger">9.3. <code class="docutils literal notranslate"><span class="pre">LocalDebugger</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="debug.html#breakpoint">9.4. <code class="docutils literal notranslate"><span class="pre">Breakpoint</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="debug.html#module-windows.debug.symbols">9.5. <code class="docutils literal notranslate"><span class="pre">windows.debug.symbols</span></code> Using symbols</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="com.html">10. <code class="docutils literal notranslate"><span class="pre">windows.com</span></code> - Component Object Model</a><ul>
@@ -185,21 +196,25 @@ I am always glad to have feedbacks from people using this project.</p>
<li class="toctree-l2"><a class="reference internal" href="sample.html#processes">18.1. Processes</a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#token">18.2. Token</a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-system">18.3. <code class="docutils literal notranslate"><span class="pre">windows.system</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#network-socket-exploration">18.4. <code class="docutils literal notranslate"><span class="pre">Network</span></code> - socket exploration</a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#registry">18.5. <code class="docutils literal notranslate"><span class="pre">Registry</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#scheduled-tasks">18.6. Scheduled tasks</a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#event-log">18.7. Event Log</a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#object-manager">18.8. Object manager</a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-wintrust">18.9. <code class="docutils literal notranslate"><span class="pre">windows.wintrust</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#vectoredexception">18.10. <code class="docutils literal notranslate"><span class="pre">VectoredException()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#debugging">18.11. Debugging</a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#wmi">18.12. WMI</a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-com">18.13. <code class="docutils literal notranslate"><span class="pre">windows.com</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-crypto">18.14. <code class="docutils literal notranslate"><span class="pre">windows.crypto</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-alpc">18.15. <code class="docutils literal notranslate"><span class="pre">windows.alpc</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-rpc">18.16. <code class="docutils literal notranslate"><span class="pre">windows.rpc</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-pipe">18.17. <code class="docutils literal notranslate"><span class="pre">windows.pipe</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-security">18.18. <code class="docutils literal notranslate"><span class="pre">windows.security</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#services">18.4. Services</a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#network-socket-exploration">18.5. <code class="docutils literal notranslate"><span class="pre">Network</span></code> - socket exploration</a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#registry">18.6. <code class="docutils literal notranslate"><span class="pre">Registry</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#scheduled-tasks">18.7. Scheduled tasks</a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#event-log">18.8. Event Log</a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#object-manager">18.9. Object manager</a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#device-manager">18.10. Device manager</a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-wintrust">18.11. <code class="docutils literal notranslate"><span class="pre">windows.wintrust</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#vectoredexception">18.12. <code class="docutils literal notranslate"><span class="pre">VectoredException()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#debugging">18.13. Debugging</a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#symbols">18.14. Symbols</a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#wmi">18.15. WMI</a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-com">18.16. <code class="docutils literal notranslate"><span class="pre">windows.com</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-crypto">18.17. <code class="docutils literal notranslate"><span class="pre">windows.crypto</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-alpc">18.18. <code class="docutils literal notranslate"><span class="pre">windows.alpc</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-rpc">18.19. <code class="docutils literal notranslate"><span class="pre">windows.rpc</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-pipe">18.20. <code class="docutils literal notranslate"><span class="pre">windows.pipe</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-security">18.21. <code class="docutils literal notranslate"><span class="pre">windows.security</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sample.html#etw-event-tracing-for-windows">18.22. ETW (Event Tracing for Windows)</a></li>
</ul>
</li>
</ul>
@@ -221,12 +236,13 @@ I am always glad to have feedbacks from people using this project.</p>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="#">Table Of Contents</a></h3>
<h3><a href="#">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Welcome to PythonForWindowss documentation!</a><ul>
<li><a class="reference internal" href="#description">Description</a><ul>
<li><a class="reference internal" href="#installation">Installation</a><ul>
<li><a class="reference internal" href="#installing-using-setup-py">Installing using setup.py</a></li>
<li><a class="reference internal" href="#python3">Python3</a></li>
</ul>
</li>
</ul>
@@ -275,12 +291,12 @@ I am always glad to have feedbacks from people using this project.</p>
<li class="right" >
<a href="windows.html" title="1. The windows module"
>next</a> |</li>
<li class="nav-item nav-item-0"><a href="#">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="#">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+10 -7
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>17. Internals &#8212; PythonForWindows 0.5 documentation</title>
<title>17. Internals &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="18. Samples of code" href="sample.html" />
@@ -34,7 +37,7 @@
<li class="right" >
<a href="wip.html" title="16. Early Work In Progress"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
@@ -201,7 +204,7 @@ With these information we are able to know</p>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">17. Internals</a><ul>
<li><a class="reference internal" href="#module-windows.remotectypes">17.1. remotectypes.py</a></li>
@@ -254,12 +257,12 @@ With these information we are able to know</p>
<li class="right" >
<a href="wip.html" title="16. Early Work In Progress"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+15 -12
View File
@@ -6,18 +6,21 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>3. windows.native_exec Native Code Execution &#8212; PythonForWindows 0.5 documentation</title>
<title>3. windows.native_exec Native Code Execution &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="4. windows.winproxy Windows API" href="winproxy.html" />
<link rel="prev" title="2.15. Event Log" href="evtlog.html" />
<link rel="prev" title="2.17. ETW Event Tracing for Windows" href="etw.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
@@ -32,9 +35,9 @@
<a href="winproxy.html" title="4. windows.winproxy Windows API"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="evtlog.html" title="2.15. Event Log"
<a href="etw.html" title="2.17. ETW Event Tracing for Windows"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
@@ -493,7 +496,7 @@ the end of your <code class="xref py py-class docutils literal notranslate"><spa
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">3. <code class="docutils literal notranslate"><span class="pre">windows.native_exec</span></code> Native Code Execution</a><ul>
<li><a class="reference internal" href="#module-windows.native_exec.cpuid">3.1. <code class="docutils literal notranslate"><span class="pre">windows.native_exec.cpuid</span></code> Interface to native CPUID</a></li>
@@ -505,8 +508,8 @@ the end of your <code class="xref py py-class docutils literal notranslate"><spa
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="evtlog.html"
title="previous chapter">2.15. Event Log</a></p>
<p class="topless"><a href="etw.html"
title="previous chapter">2.17. ETW Event Tracing for Windows</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="winproxy.html"
title="next chapter">4. <code class="docutils literal notranslate"><span class="pre">windows.winproxy</span></code> Windows API</a></p>
@@ -546,14 +549,14 @@ the end of your <code class="xref py py-class docutils literal notranslate"><spa
<a href="winproxy.html" title="4. windows.winproxy Windows API"
>next</a> |</li>
<li class="right" >
<a href="evtlog.html" title="2.15. Event Log"
<a href="etw.html" title="2.17. ETW Event Tracing for Windows"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+10 -7
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>2.7. Network &#8212; PythonForWindows 0.5 documentation</title>
<title>2.7. Network &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="2.8. Service" href="service.html" />
@@ -34,7 +37,7 @@
<li class="right" >
<a href="registry.html" title="2.6. Registry"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="winobject.html" accesskey="U">2. The <code class="docutils literal notranslate"><span class="pre">windows</span></code> objects</a> &#187;</li>
</ul>
</div>
@@ -549,7 +552,7 @@ Equals <code class="docutils literal notranslate"><span class="pre">remote_port<
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">2.7. Network</a><ul>
<li><a class="reference internal" href="#connections">2.7.1. Connections</a></li>
@@ -602,13 +605,13 @@ Equals <code class="docutils literal notranslate"><span class="pre">remote_port<
<li class="right" >
<a href="registry.html" title="2.6. Registry"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="winobject.html" >2. The <code class="docutils literal notranslate"><span class="pre">windows</span></code> objects</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+9 -6
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>14.2. Ntstatus &#8212; PythonForWindows 0.5 documentation</title>
<title>14.2. Ntstatus &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="14.3. Winstructs" href="winstructs_generated.html" />
@@ -34,7 +37,7 @@
<li class="right" >
<a href="windef_generated.html" title="14.1. WinDef"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="generated.html" accesskey="U">14. <code class="docutils literal notranslate"><span class="pre">windows.generated_def</span></code> generated Windows defines and structures</a> &#187;</li>
</ul>
</div>
@@ -9068,13 +9071,13 @@
<li class="right" >
<a href="windef_generated.html" title="14.1. WinDef"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="generated.html" >14. <code class="docutils literal notranslate"><span class="pre">windows.generated_def</span></code> generated Windows defines and structures</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+15 -12
View File
@@ -6,17 +6,20 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>2.13. Object Manager Kernel objects &#8212; PythonForWindows 0.5 documentation</title>
<title>2.13. Object Manager Kernel objects &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="2.14. Task scheduler" href="task_scheduler.html" />
<link rel="next" title="2.14. Device Manager" href="device_manager.html" />
<link rel="prev" title="2.12. System Module Loaded kernel modules" href="system_module.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
@@ -29,12 +32,12 @@
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="task_scheduler.html" title="2.14. Task scheduler"
<a href="device_manager.html" title="2.14. Device Manager"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="system_module.html" title="2.12. System Module Loaded kernel modules"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="winobject.html" accesskey="U">2. The <code class="docutils literal notranslate"><span class="pre">windows</span></code> objects</a> &#187;</li>
</ul>
</div>
@@ -250,7 +253,7 @@ code <a class="reference internal" href="ntstatus_generated.html#windows.generat
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">2.13. Object Manager Kernel objects</a><ul>
<li><a class="reference internal" href="#objectmanager">2.13.1. ObjectManager</a></li>
@@ -263,8 +266,8 @@ code <a class="reference internal" href="ntstatus_generated.html#windows.generat
<p class="topless"><a href="system_module.html"
title="previous chapter">2.12. System Module Loaded kernel modules</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="task_scheduler.html"
title="next chapter">2.14. Task scheduler</a></p>
<p class="topless"><a href="device_manager.html"
title="next chapter">2.14. Device Manager</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
@@ -298,18 +301,18 @@ code <a class="reference internal" href="ntstatus_generated.html#windows.generat
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="task_scheduler.html" title="2.14. Task scheduler"
<a href="device_manager.html" title="2.14. Device Manager"
>next</a> |</li>
<li class="right" >
<a href="system_module.html" title="2.12. System Module Loaded kernel modules"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="winobject.html" >2. The <code class="docutils literal notranslate"><span class="pre">windows</span></code> objects</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+10 -7
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>6. windows.pipe Inter-Process Communication &#8212; PythonForWindows 0.5 documentation</title>
<title>6. windows.pipe Inter-Process Communication &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="7. windows.utils Windows Utilities" href="utils.html" />
@@ -34,7 +37,7 @@
<li class="right" >
<a href="security.html" title="5. windows.security Security Descriptor &amp; related"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
@@ -181,7 +184,7 @@
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">6. <code class="docutils literal notranslate"><span class="pre">windows.pipe</span></code> Inter-Process Communication</a><ul>
<li><a class="reference internal" href="#helper-functions">6.1. Helper functions</a></li>
@@ -234,12 +237,12 @@
<li class="right" >
<a href="security.html" title="5. windows.security Security Descriptor &amp; related"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+10 -7
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>2.1. Processes and Threads &#8212; PythonForWindows 0.5 documentation</title>
<title>2.1. Processes and Threads &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="2.4. Token" href="token.html" />
@@ -34,7 +37,7 @@
<li class="right" >
<a href="winobject.html" title="2. The windows objects"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="winobject.html" accesskey="U">2. The <code class="docutils literal notranslate"><span class="pre">windows</span></code> objects</a> &#187;</li>
</ul>
</div>
@@ -1771,7 +1774,7 @@ You MUST keep a reference to the hook while the hook is enabled.</p>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">2.1. Processes and Threads</a><ul>
<li><a class="reference internal" href="#currentprocess">2.1.1. CurrentProcess</a></li>
@@ -1840,13 +1843,13 @@ You MUST keep a reference to the hook while the hook is enabled.</p>
<li class="right" >
<a href="winobject.html" title="2. The windows objects"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="winobject.html" >2. The <code class="docutils literal notranslate"><span class="pre">windows</span></code> objects</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+24 -6
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Python Module Index &#8212; PythonForWindows 0.5 documentation</title>
<title>Python Module Index &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -29,7 +32,7 @@
<li class="right" >
<a href="#" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
@@ -80,6 +83,11 @@
<td>&#160;&#160;&#160;
<a href="debug.html#module-windows.debug"><code class="xref">windows.debug</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="debug.html#module-windows.debug.symbols"><code class="xref">windows.debug.symbols</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
@@ -160,11 +168,21 @@
<td>&#160;&#160;&#160;
<a href="utils.html#module-windows.utils"><code class="xref">windows.utils</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="device_manager.html#module-windows.winobject.device_manager"><code class="xref">windows.winobject.device_manager</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="evtlog.html#module-windows.winobject.event_log"><code class="xref">windows.winobject.event_log</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="etw.html#module-windows.winobject.event_trace"><code class="xref">windows.winobject.event_trace</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
@@ -268,12 +286,12 @@
<li class="right" >
<a href="#" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+10 -7
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>2.6. Registry &#8212; PythonForWindows 0.5 documentation</title>
<title>2.6. Registry &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="2.7. Network" href="network.html" />
@@ -34,7 +37,7 @@
<li class="right" >
<a href="exception.html" title="2.5. Exception and Context related structures"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="winobject.html" accesskey="U">2. The <code class="docutils literal notranslate"><span class="pre">windows</span></code> objects</a> &#187;</li>
</ul>
</div>
@@ -254,7 +257,7 @@
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">2.6. Registry</a><ul>
<li><a class="reference internal" href="#id1">2.6.1. Registry</a></li>
@@ -308,13 +311,13 @@
<li class="right" >
<a href="exception.html" title="2.5. Exception and Context related structures"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="winobject.html" >2. The <code class="docutils literal notranslate"><span class="pre">windows</span></code> objects</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+19 -10
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>13. windows.rpc ALPC-based Windows RPC &#8212; PythonForWindows 0.5 documentation</title>
<title>13. windows.rpc ALPC-based Windows RPC &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="14. windows.generated_def generated Windows defines and structures" href="generated.html" />
@@ -34,7 +37,7 @@
<li class="right" >
<a href="alpc.html" title="12. windows.alpc Advanced Local Procedure Call"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
@@ -71,6 +74,12 @@
<dt id="windows.rpc.RPCClient">
<em class="property">class </em><code class="descclassname">windows.rpc.</code><code class="descname">RPCClient</code><span class="sig-paren">(</span><em>port</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/client.html#RPCClient"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.RPCClient" title="Permalink to this definition"></a></dt>
<dd><p>A client for RPC-over-ALPC able to bind to interface and perform calls using NDR32 marshalling</p>
<dl class="attribute">
<dt id="windows.rpc.RPCClient.alpc_client">
<code class="descname">alpc_client</code><em class="property"> = None</em><a class="headerlink" href="#windows.rpc.RPCClient.alpc_client" title="Permalink to this definition"></a></dt>
<dd><p>The <a class="reference internal" href="alpc.html#windows.alpc.AlpcClient" title="windows.alpc.AlpcClient"><code class="xref py py-class docutils literal notranslate"><span class="pre">windows.alpc.AlpcClient</span></code></a> used to communicate with the server</p>
</dd></dl>
<dl class="method">
<dt id="windows.rpc.RPCClient.bind">
<code class="descname">bind</code><span class="sig-paren">(</span><em>IID_str</em>, <em>version=(1</em>, <em>0)</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/client.html#RPCClient.bind"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.RPCClient.bind" title="Permalink to this definition"></a></dt>
@@ -222,7 +231,7 @@ Can be used to craft request without directly sending it</p>
<span class="gp">&gt;&gt;&gt; </span><span class="n">client</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">rpc</span><span class="o">.</span><span class="n">find_alpc_endpoint_and_connect</span><span class="p">(</span><span class="n">UAC_UIID</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">client</span>
<span class="go">&lt;windows.rpc.client.RPCClient object at 0x046A1470&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">client</span><span class="o">.</span><span class="n">alpc_client</span><span class="o">.</span><span class="n">portname</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">client</span><span class="o">.</span><span class="n">alpc_client</span><span class="o">.</span><span class="n">port_name</span>
<span class="go">&#39;\\RPC Control\\LRPC-c30c67fef2afa1612b&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">iid</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">UAC_UIID</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">iid</span>
@@ -264,7 +273,7 @@ Can be used to craft request without directly sending it</p>
</dd></dl>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="kn">as</span> <span class="nn">gdef</span>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </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="gp">&gt;&gt;&gt; </span><span class="n">sid</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">get_known_sid</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">WinLocalSystemSid</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sid</span>
<span class="go">c_void_p(78304040)</span>
@@ -342,7 +351,7 @@ Can be used to craft request without directly sending it</p>
<dl class="class">
<dt id="windows.rpc.ndr.NdrShort">
<em class="property">class </em><code class="descclassname">windows.rpc.ndr.</code><code class="descname">NdrShort</code><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrShort"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrShort" title="Permalink to this definition"></a></dt>
<dd><div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="k">import</span> <span class="n">ndr</span>
<dd><div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="kn">import</span> <span class="n">ndr</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span> <span class="o">=</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrShort</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="mh">0x0102</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span>
<span class="go">&#39;\x02\x01&#39;</span>
@@ -484,7 +493,7 @@ an attribute <code class="docutils literal notranslate"><span class="pre">MEMBER
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">13. <code class="docutils literal notranslate"><span class="pre">windows.rpc</span></code> ALPC-based Windows RPC</a><ul>
<li><a class="reference internal" href="#rpcclient">13.1. RPCClient</a></li>
@@ -545,12 +554,12 @@ an attribute <code class="docutils literal notranslate"><span class="pre">MEMBER
<li class="right" >
<a href="alpc.html" title="12. windows.alpc Advanced Local Procedure Call"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+885 -134
View File
File diff suppressed because it is too large Load Diff
+10 -6
View File
@@ -6,14 +6,18 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Search &#8212; PythonForWindows 0.5 documentation</title>
<title>Search &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<script type="text/javascript" src="_static/searchtools.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="#" />
@@ -34,7 +38,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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
@@ -85,12 +89,12 @@
<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 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>
+1 -1
View File
File diff suppressed because one or more lines are too long
+11 -8
View File
@@ -6,14 +6,17 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>5. windows.security Security Descriptor &amp; related &#8212; PythonForWindows 0.5 documentation</title>
<title>5. windows.security Security Descriptor &amp; related &#8212; PythonForWindows 0.6 documentation</title>
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/mbasic.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="6. windows.pipe Inter-Process Communication" href="pipe.html" />
@@ -34,7 +37,7 @@
<li class="right" >
<a href="winproxy.html" title="4. windows.winproxy Windows API"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
@@ -211,7 +214,7 @@ Binary security descriptor can be found in the registry for example</p>
<dl class="attribute">
<dt id="windows.security.SecurityDescriptor.sacl">
<code class="descname">sacl</code><a class="headerlink" href="#windows.security.SecurityDescriptor.sacl" title="Permalink to this definition"></a></dt>
<dd><p>The SACL of the security descriptor. You may need special attention to retrieve it (see <code class="xref any docutils literal notranslate"><span class="pre">DEFAULT_SECURITY_INFORMATION</span></code>)</p>
<dd><p>The SACL of the security descriptor. You may need special attention to retrieve it (see <code class="xref py py-class docutils literal notranslate"><span class="pre">DEFAULT_SECURITY_INFORMATION</span></code>)</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
@@ -1950,7 +1953,7 @@ You should not need to instanciate/use them directly.</p>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">5. <code class="docutils literal notranslate"><span class="pre">windows.security</span></code> Security Descriptor &amp; related</a><ul>
<li><a class="reference internal" href="#token">5.1. Token</a></li>
@@ -2038,12 +2041,12 @@ You should not need to instanciate/use them directly.</p>
<li class="right" >
<a href="winproxy.html" title="4. windows.winproxy Windows API"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> &#187;</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.6 documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.5.
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More