Files
hakril-PythonForWindows/docs/build/html/_modules/windows/winproxy.html
T
2018-08-03 10:10:31 +02:00

2125 lines
387 KiB
HTML

<!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.winproxy &#8212; PythonForWindows 0.4 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" />
<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>
<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.4 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.winproxy</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">functools</span>
<span class="kn">import</span> <span class="nn">windows</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">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">import</span> <span class="nn">windows.generated_def.winfuncs</span> <span class="k">as</span> <span class="nn">winfuncs</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.dbgprint</span> <span class="k">import</span> <span class="n">dbgprint</span>
<span class="c1">## winfuncs helpers</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">winfunc</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return :obj:`True` if DLL/Api can be found&quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">winfunc</span><span class="o">.</span><span class="n">force_resolution</span><span class="p">()</span>
<span class="k">except</span> <span class="n">ExportNotFound</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="kc">True</span></div>
<span class="k">def</span> <span class="nf">get_target</span><span class="p">(</span><span class="n">winfunc</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;POC for new hook&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">winfunc</span><span class="o">.</span><span class="n">target_dll</span><span class="p">,</span> <span class="n">winfunc</span><span class="o">.</span><span class="n">target_func</span>
<span class="c1"># Rip-of windows.utils: should be removed from the other place ?</span>
<span class="k">def</span> <span class="nf">_get_func_addr</span><span class="p">(</span><span class="n">dll_name</span><span class="p">,</span> <span class="n">func_name</span><span class="p">):</span>
<span class="c1"># Load the DLL</span>
<span class="n">windll</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">WinDLL</span><span class="p">(</span><span class="n">dll_name</span><span class="p">)</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">windll</span><span class="p">,</span> <span class="n">func_name</span><span class="p">),</span> <span class="n">PVOID</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
<div class="viewcode-block" id="resolve"><a class="viewcode-back" href="../../winproxy.html#windows.winproxy.resolve">[docs]</a><span class="k">def</span> <span class="nf">resolve</span><span class="p">(</span><span class="n">winfunc</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Resolve the address of ``winfunc``. Might raise if ``winfunc`` is not implemented&quot;&quot;&quot;</span>
<span class="n">winfunc</span><span class="o">.</span><span class="n">force_resolution</span><span class="p">()</span>
<span class="k">return</span> <span class="n">_get_func_addr</span><span class="p">(</span><span class="o">*</span><span class="n">get_target</span><span class="p">(</span><span class="n">winfunc</span><span class="p">))</span></div>
<div class="viewcode-block" id="Kernel32Error"><a class="viewcode-back" href="../../winproxy.html#windows.winproxy.Kernel32Error">[docs]</a><span class="k">class</span> <span class="nc">Kernel32Error</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">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">api_error</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">Kernel32Error</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>
<span class="n">api_error</span><span class="o">.</span><span class="n">winerror</span> <span class="o">=</span> <span class="n">win_error</span><span class="o">.</span><span class="n">winerror</span>
<span class="n">api_error</span><span class="o">.</span><span class="n">strerror</span> <span class="o">=</span> <span class="n">win_error</span><span class="o">.</span><span class="n">strerror</span>
<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">__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">Kernel32Error</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">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">Kernel32Error</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>
<span class="k">class</span> <span class="nc">IphlpapiError</span><span class="p">(</span><span class="n">Kernel32Error</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">code</span><span class="p">,</span> <span class="n">strerror</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">code</span><span class="p">)</span>
<span class="n">api_error</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">Kernel32Error</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>
<span class="n">api_error</span><span class="o">.</span><span class="n">winerror</span> <span class="o">=</span> <span class="n">win_error</span><span class="o">.</span><span class="n">winerror</span>
<span class="k">if</span> <span class="n">strerror</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">api_error</span><span class="o">.</span><span class="n">strerror</span> <span class="o">=</span> <span class="n">strerror</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">api_error</span><span class="o">.</span><span class="n">strerror</span> <span class="o">=</span> <span class="n">win_error</span><span class="o">.</span><span class="n">strerror</span>
<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">api_error</span><span class="o">.</span><span class="n">winerror</span><span class="p">,</span> <span class="n">api_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">code</span><span class="p">,</span> <span class="n">strerror</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">pass</span>
<span class="c1"># Error check method</span>
<span class="k">def</span> <span class="nf">no_error_check</span><span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="n">result</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Nothing special&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">args</span>
<span class="k">def</span> <span class="nf">minus_one_error_check</span><span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="n">result</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
<span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">Kernel32Error</span><span class="p">(</span><span class="n">func_name</span><span class="p">)</span>
<span class="k">return</span> <span class="n">args</span>
<span class="k">def</span> <span class="nf">zero_is_fail_error_check</span><span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="n">result</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;raise Kernel32Error if result is 0&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">Kernel32Error</span><span class="p">(</span><span class="n">func_name</span><span class="p">)</span>
<span class="k">return</span> <span class="n">args</span>
<span class="k">def</span> <span class="nf">should_return_zero_check</span><span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="n">result</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;raise Kernel32Error if result is NOT 0&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">result</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">Kernel32Error</span><span class="p">(</span><span class="n">func_name</span><span class="p">)</span>
<span class="k">return</span> <span class="n">args</span>
<span class="k">def</span> <span class="nf">iphlpapi_error_check</span><span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="n">result</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;raise IphlpapiError if result is NOT 0&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">result</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">IphlpapiError</span><span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span>
<span class="k">return</span> <span class="n">args</span>
<span class="k">def</span> <span class="nf">error_ntstatus</span><span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="n">result</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
<span class="k">if</span> <span class="n">result</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">NtStatusException</span><span class="p">(</span><span class="n">result</span> <span class="o">&amp;</span> <span class="mh">0xffffffff</span><span class="p">)</span>
<span class="k">return</span> <span class="n">args</span>
<span class="k">def</span> <span class="nf">valid_handle_check</span><span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="n">result</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
<span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">INVALID_HANDLE_VALUE</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">Kernel32Error</span><span class="p">(</span><span class="n">func_name</span><span class="p">)</span>
<span class="k">return</span> <span class="n">args</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="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>
<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="p">,</span> <span class="n">error_check</span><span class="o">=</span><span class="kc">None</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">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="kc">None</span><span class="p">:</span>
<span class="n">error_check</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_error_check</span>
<span class="bp">self</span><span class="o">.</span><span class="n">error_check</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">wraps</span><span class="p">(</span><span class="n">error_check</span><span class="p">)(</span><span class="n">functools</span><span class="o">.</span><span class="n">partial</span><span class="p">(</span><span class="n">error_check</span><span class="p">,</span> <span class="n">func_name</span><span class="p">))</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="p">):</span>
<span class="n">prototype</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">deffunc_module</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="s2">&quot;Prototype&quot;</span><span class="p">)</span>
<span class="n">params</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">deffunc_module</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="s2">&quot;Params&quot;</span><span class="p">)</span>
<span class="n">python_proxy</span><span class="o">.</span><span class="n">prototype</span> <span class="o">=</span> <span class="n">prototype</span>
<span class="n">python_proxy</span><span class="o">.</span><span class="n">params</span> <span class="o">=</span> <span class="n">params</span>
<span class="n">python_proxy</span><span class="o">.</span><span class="n">errcheck</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_check</span>
<span class="n">python_proxy</span><span class="o">.</span><span class="n">target_dll</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">APIDLL</span>
<span class="n">python_proxy</span><span class="o">.</span><span class="n">target_func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func_name</span>
<span class="c1"># Give access to the &#39;ApiProxy&#39; object from the function</span>
<span class="n">python_proxy</span><span class="o">.</span><span class="n">proxy</span> <span class="o">=</span> <span class="bp">self</span>
<span class="n">params_name</span> <span class="o">=</span> <span class="p">[</span><span class="n">param</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">params</span><span class="p">]</span>
<span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_check</span><span class="o">.</span><span class="vm">__doc__</span><span class="p">):</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">python_proxy</span><span class="o">.</span><span class="vm">__doc__</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">doc</span> <span class="k">if</span> <span class="n">doc</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="n">python_proxy</span><span class="o">.</span><span class="vm">__doc__</span> <span class="o">=</span> <span class="n">doc</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Errcheck:</span><span class="se">\n</span><span class="s2"> &quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_check</span><span class="o">.</span><span class="vm">__doc__</span>
<span class="k">def</span> <span class="nf">generate_ctypes_function</span><span class="p">():</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">c_prototyped</span> <span class="o">=</span> <span class="n">prototype</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">func_name</span><span class="p">,</span> <span class="nb">getattr</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="bp">self</span><span class="o">.</span><span class="n">APIDLL</span><span class="p">)),</span> <span class="n">params</span><span class="p">)</span>
<span class="k">except</span> <span class="p">(</span><span class="ne">AttributeError</span><span class="p">,</span> <span class="ne">WindowsError</span><span class="p">):</span>
<span class="k">raise</span> <span class="n">ExportNotFound</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">func_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">APIDLL</span><span class="p">)</span>
<span class="n">c_prototyped</span><span class="o">.</span><span class="n">errcheck</span> <span class="o">=</span> <span class="bp">self</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="n">c_prototyped</span>
<span class="k">def</span> <span class="nf">perform_call</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">params_name</span><span class="p">)</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="nb">print</span><span class="p">(</span><span class="s2">&quot;ERROR:&quot;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Expected params: </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">params_name</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Just Got params: </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">args</span><span class="p">))</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;I do not have all parameters: how is that possible ?&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">param_name</span><span class="p">,</span> <span class="n">param_value</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">params_name</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
<span class="k">if</span> <span class="n">param_value</span> <span class="ow">is</span> <span class="n">NeededParameter</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{0}</span><span class="s2">: Missing Mandatory parameter &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="o">.</span><span class="n">func_name</span><span class="p">,</span> <span class="n">param_name</span><span class="p">))</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cprototyped</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">generate_ctypes_function</span><span class="p">()</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cprototyped</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
<span class="nb">setattr</span><span class="p">(</span><span class="n">python_proxy</span><span class="p">,</span> <span class="s2">&quot;ctypes_function&quot;</span><span class="p">,</span> <span class="n">perform_call</span><span class="p">)</span>
<span class="nb">setattr</span><span class="p">(</span><span class="n">python_proxy</span><span class="p">,</span> <span class="s2">&quot;force_resolution&quot;</span><span class="p">,</span> <span class="n">generate_ctypes_function</span><span class="p">)</span>
<span class="k">return</span> <span class="n">python_proxy</span>
<span class="k">class</span> <span class="nc">Kernel32Proxy</span><span class="p">(</span><span class="n">ApiProxy</span><span class="p">):</span>
<span class="n">APIDLL</span> <span class="o">=</span> <span class="s2">&quot;kernel32&quot;</span>
<span class="n">default_error_check</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">zero_is_fail_error_check</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">Advapi32Proxy</span><span class="p">(</span><span class="n">ApiProxy</span><span class="p">):</span>
<span class="n">APIDLL</span> <span class="o">=</span> <span class="s2">&quot;advapi32&quot;</span>
<span class="n">default_error_check</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">zero_is_fail_error_check</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">IphlpapiProxy</span><span class="p">(</span><span class="n">ApiProxy</span><span class="p">):</span>
<span class="n">APIDLL</span> <span class="o">=</span> <span class="s2">&quot;iphlpapi&quot;</span>
<span class="n">default_error_check</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">iphlpapi_error_check</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">NtdllProxy</span><span class="p">(</span><span class="n">ApiProxy</span><span class="p">):</span>
<span class="n">APIDLL</span> <span class="o">=</span> <span class="s2">&quot;ntdll&quot;</span>
<span class="n">default_error_check</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">should_return_zero_check</span><span class="p">)</span> <span class="c1"># Setup to: error_ntstatus ?</span>
<span class="k">class</span> <span class="nc">WinTrustProxy</span><span class="p">(</span><span class="n">ApiProxy</span><span class="p">):</span>
<span class="n">APIDLL</span> <span class="o">=</span> <span class="s2">&quot;wintrust&quot;</span>
<span class="n">default_error_check</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">no_error_check</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">Ole32Proxy</span><span class="p">(</span><span class="n">ApiProxy</span><span class="p">):</span>
<span class="n">APIDLL</span> <span class="o">=</span> <span class="s2">&quot;ole32&quot;</span>
<span class="n">default_error_check</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">no_error_check</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">PsapiProxy</span><span class="p">(</span><span class="n">ApiProxy</span><span class="p">):</span>
<span class="n">APIDLL</span> <span class="o">=</span> <span class="s2">&quot;psapi&quot;</span>
<span class="n">default_error_check</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">zero_is_fail_error_check</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">User32Proxy</span><span class="p">(</span><span class="n">ApiProxy</span><span class="p">):</span>
<span class="n">APIDLL</span> <span class="o">=</span> <span class="s2">&quot;user32&quot;</span>
<span class="n">default_error_check</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">zero_is_fail_error_check</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">VersionProxy</span><span class="p">(</span><span class="n">ApiProxy</span><span class="p">):</span>
<span class="n">APIDLL</span> <span class="o">=</span> <span class="s2">&quot;version&quot;</span>
<span class="n">default_error_check</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">zero_is_fail_error_check</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">Crypt32Proxy</span><span class="p">(</span><span class="n">ApiProxy</span><span class="p">):</span>
<span class="n">APIDLL</span> <span class="o">=</span> <span class="s2">&quot;crypt32&quot;</span>
<span class="n">default_error_check</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">zero_is_fail_error_check</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">CryptUIProxy</span><span class="p">(</span><span class="n">ApiProxy</span><span class="p">):</span>
<span class="n">APIDLL</span> <span class="o">=</span> <span class="s2">&quot;cryptui&quot;</span>
<span class="n">default_error_check</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">zero_is_fail_error_check</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">Shell32Proxy</span><span class="p">(</span><span class="n">ApiProxy</span><span class="p">):</span>
<span class="n">APIDLL</span> <span class="o">=</span> <span class="s2">&quot;shell32&quot;</span>
<span class="n">default_error_check</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">zero_is_fail_error_check</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">Ktmw32Proxy</span><span class="p">(</span><span class="n">ApiProxy</span><span class="p">):</span>
<span class="n">APIDLL</span> <span class="o">=</span> <span class="s2">&quot;Ktmw32&quot;</span>
<span class="n">default_error_check</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">zero_is_fail_error_check</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">WevtapiProxy</span><span class="p">(</span><span class="n">ApiProxy</span><span class="p">):</span>
<span class="n">APIDLL</span> <span class="o">=</span> <span class="s2">&quot;Wevtapi&quot;</span>
<span class="n">default_error_check</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">zero_is_fail_error_check</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">ShlwapiProxy</span><span class="p">(</span><span class="n">ApiProxy</span><span class="p">):</span>
<span class="n">APIDLL</span> <span class="o">=</span> <span class="s2">&quot;Shlwapi&quot;</span>
<span class="n">default_error_check</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">zero_is_fail_error_check</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">OleaccProxy</span><span class="p">(</span><span class="n">ApiProxy</span><span class="p">):</span>
<span class="n">APIDLL</span> <span class="o">=</span> <span class="s2">&quot;Oleacc&quot;</span>
<span class="n">default_error_check</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">should_return_zero_check</span><span class="p">)</span>
<span class="c1">#class OptionalExport(object):</span>
<span class="c1"># &quot;&quot;&quot;used &#39;around&#39; a Proxy decorator</span>
<span class="c1"># Should be used for export that are not available everywhere (ntdll internals | 32/64 bits stuff)</span>
<span class="c1"># If the export is not found the function will be None</span>
<span class="c1">#</span>
<span class="c1"># Example:</span>
<span class="c1"># @OptionalExport(NtdllProxy(&#39;NtWow64ReadVirtualMemory64&#39;))</span>
<span class="c1"># def NtWow64ReadVirtualMemory64(...)</span>
<span class="c1"># ...</span>
<span class="c1"># &quot;&quot;&quot;</span>
<span class="c1"># def __init__(self, subdecorator):</span>
<span class="c1"># self.subdecorator = subdecorator</span>
<span class="c1">#</span>
<span class="c1"># def __call__(self, f):</span>
<span class="c1"># try:</span>
<span class="c1"># x = self.subdecorator(f)</span>
<span class="c1"># x.force_resolution()</span>
<span class="c1"># return x</span>
<span class="c1"># except ExportNotFound as e:</span>
<span class="c1"># dbgprint(&quot;Export &lt;{e.func_name}&gt; not found in &lt;{e.api_name}&gt;&quot;.format(e=e), &quot;EXPORTNOTFOUND&quot;)</span>
<span class="c1"># return None</span>
<span class="k">class</span> <span class="nc">TransparentApiProxy</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">DLLNAME</span><span class="p">,</span> <span class="n">target_func</span><span class="p">,</span> <span class="n">error_check</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">target_dll</span> <span class="o">=</span> <span class="n">DLLNAME</span>
<span class="bp">self</span><span class="o">.</span><span class="n">target_func</span> <span class="o">=</span> <span class="n">target_func</span>
<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">_ctypes_function</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">prototype</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">winfuncs</span><span class="p">,</span> <span class="n">target_func</span> <span class="o">+</span> <span class="s2">&quot;Prototype&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">params</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">winfuncs</span><span class="p">,</span> <span class="n">target_func</span> <span class="o">+</span> <span class="s2">&quot;Params&quot;</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="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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ctypes_function</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">force_resolution</span><span class="p">()</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ctypes_function</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="nf">force_resolution</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">c_prototyped</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">prototype</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">target_func</span><span class="p">,</span> <span class="nb">getattr</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="bp">self</span><span class="o">.</span><span class="n">target_dll</span><span class="p">)),</span> <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">ExportNotFound</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target_func</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">target_dll</span><span class="p">)</span>
<span class="n">c_prototyped</span><span class="o">.</span><span class="n">errcheck</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">wraps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_check</span><span class="p">)(</span><span class="n">functools</span><span class="o">.</span><span class="n">partial</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_check</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">target_func</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_ctypes_function</span> <span class="o">=</span> <span class="n">c_prototyped</span>
<span class="n">TransparentKernel32Proxy</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">func_name</span><span class="p">,</span> <span class="n">error_check</span><span class="o">=</span><span class="n">zero_is_fail_error_check</span><span class="p">:</span> <span class="n">TransparentApiProxy</span><span class="p">(</span><span class="s2">&quot;kernel32&quot;</span><span class="p">,</span> <span class="n">func_name</span><span class="p">,</span> <span class="n">error_check</span><span class="p">)</span>
<span class="n">TransparentUser32Proxy</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">func_name</span><span class="p">,</span> <span class="n">error_check</span><span class="o">=</span><span class="n">zero_is_fail_error_check</span><span class="p">:</span> <span class="n">TransparentApiProxy</span><span class="p">(</span><span class="s2">&quot;user32&quot;</span><span class="p">,</span> <span class="n">func_name</span><span class="p">,</span> <span class="n">error_check</span><span class="p">)</span>
<span class="n">TransparentAdvapi32Proxy</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">func_name</span><span class="p">,</span> <span class="n">error_check</span><span class="o">=</span><span class="n">zero_is_fail_error_check</span><span class="p">:</span> <span class="n">TransparentApiProxy</span><span class="p">(</span><span class="s2">&quot;advapi32&quot;</span><span class="p">,</span> <span class="n">func_name</span><span class="p">,</span> <span class="n">error_check</span><span class="p">)</span>
<span class="n">TransparentIphlpapiProxy</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">func_name</span><span class="p">,</span> <span class="n">error_check</span><span class="o">=</span><span class="n">iphlpapi_error_check</span><span class="p">:</span> <span class="n">TransparentApiProxy</span><span class="p">(</span><span class="s2">&quot;iphlpapi&quot;</span><span class="p">,</span> <span class="n">func_name</span><span class="p">,</span> <span class="n">error_check</span><span class="p">)</span>
<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">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">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>
<span class="n">ExitProcess</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;ExitProcess&quot;</span><span class="p">)</span>
<span class="n">TerminateProcess</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;TerminateProcess&quot;</span><span class="p">)</span>
<span class="n">CloseHandle</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;CloseHandle&quot;</span><span class="p">)</span>
<span class="n">GetProcAddress</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetProcAddress&quot;</span><span class="p">)</span>
<span class="n">LoadLibraryA</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;LoadLibraryA&quot;</span><span class="p">)</span>
<span class="n">LoadLibraryW</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;LoadLibraryW&quot;</span><span class="p">)</span>
<span class="n">GetLastError</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetLastError&quot;</span><span class="p">,</span> <span class="n">no_error_check</span><span class="p">)</span>
<span class="n">GetCurrentProcess</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetCurrentProcess&quot;</span><span class="p">)</span>
<span class="n">GetCurrentProcessorNumber</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetCurrentProcessorNumber&quot;</span><span class="p">,</span> <span class="n">no_error_check</span><span class="p">)</span>
<span class="n">GetCurrentThread</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetCurrentThread&quot;</span><span class="p">)</span>
<span class="n">AllocConsole</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;AllocConsole&quot;</span><span class="p">)</span>
<span class="n">FreeConsole</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;FreeConsole&quot;</span><span class="p">)</span>
<span class="n">GetStdHandle</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetStdHandle&quot;</span><span class="p">)</span>
<span class="n">SetStdHandle</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;SetStdHandle&quot;</span><span class="p">)</span>
<span class="n">GetCurrentThreadId</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetCurrentThreadId&quot;</span><span class="p">)</span>
<span class="n">TerminateThread</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;TerminateThread&quot;</span><span class="p">)</span>
<span class="n">ExitThread</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;ExitThread&quot;</span><span class="p">)</span>
<span class="n">SuspendThread</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;SuspendThread&quot;</span><span class="p">,</span> <span class="n">minus_one_error_check</span><span class="p">)</span>
<span class="n">ResumeThread</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;ResumeThread&quot;</span><span class="p">,</span> <span class="n">minus_one_error_check</span><span class="p">)</span>
<span class="n">GetThreadId</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetThreadId&quot;</span><span class="p">)</span>
<span class="n">VirtualQueryEx</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;VirtualQueryEx&quot;</span><span class="p">)</span>
<span class="n">GetExitCodeThread</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetExitCodeThread&quot;</span><span class="p">)</span>
<span class="n">GetExitCodeProcess</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetExitCodeProcess&quot;</span><span class="p">)</span>
<span class="n">GetProcessId</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetProcessId&quot;</span><span class="p">)</span>
<span class="n">lstrcmpA</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;lstrcmpA&quot;</span><span class="p">)</span>
<span class="n">lstrcmpW</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;lstrcmpW&quot;</span><span class="p">)</span>
<span class="n">GetVersionExA</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetVersionExA&quot;</span><span class="p">)</span>
<span class="n">GetVersionExW</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetVersionExW&quot;</span><span class="p">)</span>
<span class="n">GetComputerNameA</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetComputerNameA&quot;</span><span class="p">)</span>
<span class="n">GetComputerNameW</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetComputerNameW&quot;</span><span class="p">)</span>
<span class="n">LocalFree</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;LocalFree&quot;</span><span class="p">,</span> <span class="n">should_return_zero_check</span><span class="p">)</span>
<span class="n">Wow64DisableWow64FsRedirection</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;Wow64DisableWow64FsRedirection&quot;</span><span class="p">)</span>
<span class="n">Wow64RevertWow64FsRedirection</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;Wow64RevertWow64FsRedirection&quot;</span><span class="p">)</span>
<span class="n">Wow64EnableWow64FsRedirection</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;Wow64EnableWow64FsRedirection&quot;</span><span class="p">)</span>
<span class="n">Wow64GetThreadContext</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;Wow64GetThreadContext&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CreateFile_error_check</span><span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="n">result</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;raise Kernel32Error if result is NOT 0&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">INVALID_HANDLE_VALUE</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">Kernel32Error</span><span class="p">(</span><span class="n">func_name</span><span class="p">)</span>
<span class="k">return</span> <span class="n">args</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;CreateFileA&quot;</span><span class="p">,</span> <span class="n">error_check</span><span class="o">=</span><span class="n">CreateFile_error_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CreateFileA</span><span class="p">(</span><span class="n">lpFileName</span><span class="p">,</span> <span class="n">dwDesiredAccess</span><span class="o">=</span><span class="n">GENERIC_READ</span><span class="p">,</span> <span class="n">dwShareMode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">lpSecurityAttributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dwCreationDisposition</span><span class="o">=</span><span class="n">OPEN_EXISTING</span><span class="p">,</span> <span class="n">dwFlagsAndAttributes</span><span class="o">=</span><span class="n">FILE_ATTRIBUTE_NORMAL</span><span class="p">,</span> <span class="n">hTemplateFile</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CreateFileA</span><span class="o">.</span><span class="n">ctypes_function</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="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;CreateFileW&quot;</span><span class="p">,</span> <span class="n">error_check</span><span class="o">=</span><span class="n">CreateFile_error_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CreateFileW</span><span class="p">(</span><span class="n">lpFileName</span><span class="p">,</span> <span class="n">dwDesiredAccess</span><span class="o">=</span><span class="n">GENERIC_READ</span><span class="p">,</span> <span class="n">dwShareMode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">lpSecurityAttributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dwCreationDisposition</span><span class="o">=</span><span class="n">OPEN_EXISTING</span><span class="p">,</span> <span class="n">dwFlagsAndAttributes</span><span class="o">=</span><span class="n">FILE_ATTRIBUTE_NORMAL</span><span class="p">,</span> <span class="n">hTemplateFile</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CreateFileA</span><span class="o">.</span><span class="n">ctypes_function</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="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;VirtualAlloc&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">VirtualAlloc</span><span class="p">(</span><span class="n">lpAddress</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">dwSize</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">flAllocationType</span><span class="o">=</span><span class="n">MEM_COMMIT</span><span class="p">,</span> <span class="n">flProtect</span><span class="o">=</span><span class="n">PAGE_EXECUTE_READWRITE</span><span class="p">):</span>
<span class="k">return</span> <span class="n">VirtualAlloc</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpAddress</span><span class="p">,</span> <span class="n">dwSize</span><span class="p">,</span> <span class="n">flAllocationType</span><span class="p">,</span> <span class="n">flProtect</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;VirtualFree&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">VirtualFree</span><span class="p">(</span><span class="n">lpAddress</span><span class="p">,</span> <span class="n">dwSize</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">dwFreeType</span><span class="o">=</span><span class="n">MEM_RELEASE</span><span class="p">):</span>
<span class="k">return</span> <span class="n">VirtualFree</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpAddress</span><span class="p">,</span> <span class="n">dwSize</span><span class="p">,</span> <span class="n">dwFreeType</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;VirtualAllocEx&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">VirtualAllocEx</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpAddress</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">dwSize</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">flAllocationType</span><span class="o">=</span><span class="n">MEM_COMMIT</span><span class="p">,</span> <span class="n">flProtect</span><span class="o">=</span><span class="n">PAGE_EXECUTE_READWRITE</span><span class="p">):</span>
<span class="k">return</span> <span class="n">VirtualAllocEx</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpAddress</span><span class="p">,</span> <span class="n">dwSize</span><span class="p">,</span> <span class="n">flAllocationType</span><span class="p">,</span> <span class="n">flProtect</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;VirtualFreeEx&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">VirtualFreeEx</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpAddress</span><span class="p">,</span> <span class="n">dwSize</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">dwFreeType</span><span class="o">=</span><span class="n">MEM_RELEASE</span><span class="p">):</span>
<span class="k">return</span> <span class="n">VirtualFreeEx</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpAddress</span><span class="p">,</span> <span class="n">dwSize</span><span class="p">,</span> <span class="n">dwFreeType</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;CreateThread&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CreateThread</span><span class="p">(</span><span class="n">lpThreadAttributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dwStackSize</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">lpStartAddress</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">lpParameter</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">dwCreationFlags</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">lpThreadId</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CreateThread</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpThreadAttributes</span><span class="p">,</span> <span class="n">dwStackSize</span><span class="p">,</span> <span class="n">lpStartAddress</span><span class="p">,</span> <span class="n">lpParameter</span><span class="p">,</span> <span class="n">dwCreationFlags</span><span class="p">,</span> <span class="n">lpThreadId</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;CreateRemoteThread&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CreateRemoteThread</span><span class="p">(</span><span class="n">hProcess</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">lpThreadAttributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dwStackSize</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
<span class="n">lpStartAddress</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">lpParameter</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">dwCreationFlags</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">lpThreadId</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CreateRemoteThread</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpThreadAttributes</span><span class="p">,</span> <span class="n">dwStackSize</span><span class="p">,</span> <span class="n">lpStartAddress</span><span class="p">,</span> <span class="n">lpParameter</span><span class="p">,</span> <span class="n">dwCreationFlags</span><span class="p">,</span> <span class="n">lpThreadId</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;VirtualProtect&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">VirtualProtect</span><span class="p">(</span><span class="n">lpAddress</span><span class="p">,</span> <span class="n">dwSize</span><span class="p">,</span> <span class="n">flNewProtect</span><span class="p">,</span> <span class="n">lpflOldProtect</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">lpflOldProtect</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">lpflOldProtect</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">DWORD</span><span class="p">())</span>
<span class="k">return</span> <span class="n">VirtualProtect</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpAddress</span><span class="p">,</span> <span class="n">dwSize</span><span class="p">,</span> <span class="n">flNewProtect</span><span class="p">,</span> <span class="n">lpflOldProtect</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;VirtualProtectEx&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">VirtualProtectEx</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpAddress</span><span class="p">,</span> <span class="n">dwSize</span><span class="p">,</span> <span class="n">flNewProtect</span><span class="p">,</span> <span class="n">lpflOldProtect</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">lpflOldProtect</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">lpflOldProtect</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">DWORD</span><span class="p">())</span>
<span class="k">return</span> <span class="n">VirtualProtectEx</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpAddress</span><span class="p">,</span> <span class="n">dwSize</span><span class="p">,</span> <span class="n">flNewProtect</span><span class="p">,</span> <span class="n">lpflOldProtect</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;CreateProcessA&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CreateProcessA</span><span class="p">(</span><span class="n">lpApplicationName</span><span class="p">,</span> <span class="n">lpCommandLine</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpProcessAttributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpThreadAttributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">bInheritHandles</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">dwCreationFlags</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">lpEnvironment</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpCurrentDirectory</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpStartupInfo</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpProcessInformation</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">lpStartupInfo</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">StartupInfo</span> <span class="o">=</span> <span class="n">STARTUPINFOA</span><span class="p">()</span>
<span class="n">StartupInfo</span><span class="o">.</span><span class="n">cb</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">StartupInfo</span><span class="p">)</span>
<span class="n">StartupInfo</span><span class="o">.</span><span class="n">dwFlags</span> <span class="o">=</span> <span class="n">STARTF_USESHOWWINDOW</span>
<span class="n">StartupInfo</span><span class="o">.</span><span class="n">wShowWindow</span> <span class="o">=</span> <span class="n">SW_HIDE</span>
<span class="n">lpStartupInfo</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">StartupInfo</span><span class="p">)</span>
<span class="k">if</span> <span class="n">lpProcessInformation</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">lpProcessInformation</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">PROCESS_INFORMATION</span><span class="p">())</span>
<span class="k">return</span> <span class="n">CreateProcessA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpApplicationName</span><span class="p">,</span> <span class="n">lpCommandLine</span><span class="p">,</span> <span class="n">lpProcessAttributes</span><span class="p">,</span> <span class="n">lpThreadAttributes</span><span class="p">,</span> <span class="n">bInheritHandles</span><span class="p">,</span> <span class="n">dwCreationFlags</span><span class="p">,</span> <span class="n">lpEnvironment</span><span class="p">,</span> <span class="n">lpCurrentDirectory</span><span class="p">,</span> <span class="n">lpStartupInfo</span><span class="p">,</span> <span class="n">lpProcessInformation</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;CreateProcessW&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CreateProcessW</span><span class="p">(</span><span class="n">lpApplicationName</span><span class="p">,</span> <span class="n">lpCommandLine</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpProcessAttributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpThreadAttributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">bInheritHandles</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">dwCreationFlags</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">lpEnvironment</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpCurrentDirectory</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpStartupInfo</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpProcessInformation</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">lpStartupInfo</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">StartupInfo</span> <span class="o">=</span> <span class="n">STARTUPINFOW</span><span class="p">()</span>
<span class="n">StartupInfo</span><span class="o">.</span><span class="n">cb</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">StartupInfo</span><span class="p">)</span>
<span class="n">StartupInfo</span><span class="o">.</span><span class="n">dwFlags</span> <span class="o">=</span> <span class="n">STARTF_USESHOWWINDOW</span>
<span class="n">StartupInfo</span><span class="o">.</span><span class="n">wShowWindow</span> <span class="o">=</span> <span class="n">SW_HIDE</span>
<span class="n">lpStartupInfo</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">StartupInfo</span><span class="p">)</span>
<span class="k">if</span> <span class="n">lpProcessInformation</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">lpProcessInformation</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">PROCESS_INFORMATION</span><span class="p">())</span>
<span class="k">return</span> <span class="n">CreateProcessW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpApplicationName</span><span class="p">,</span> <span class="n">lpCommandLine</span><span class="p">,</span> <span class="n">lpProcessAttributes</span><span class="p">,</span> <span class="n">lpThreadAttributes</span><span class="p">,</span> <span class="n">bInheritHandles</span><span class="p">,</span> <span class="n">dwCreationFlags</span><span class="p">,</span> <span class="n">lpEnvironment</span><span class="p">,</span> <span class="n">lpCurrentDirectory</span><span class="p">,</span> <span class="n">lpStartupInfo</span><span class="p">,</span> <span class="n">lpProcessInformation</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetThreadContext&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetThreadContext</span><span class="p">(</span><span class="n">hThread</span><span class="p">,</span> <span class="n">lpContext</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">lpContext</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">Context</span> <span class="o">=</span> <span class="n">CONTEXT</span><span class="p">()</span>
<span class="n">context</span><span class="o">.</span><span class="n">ContextFlags</span> <span class="o">=</span> <span class="n">CONTEXT_FULL</span> <span class="o">|</span> <span class="n">CONTEXT_DEBUG_REGISTERS</span>
<span class="n">lpContext</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">Context</span><span class="p">)</span>
<span class="k">return</span> <span class="n">GetThreadContext</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hThread</span><span class="p">,</span> <span class="n">lpContext</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;SetThreadContext&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">SetThreadContext</span><span class="p">(</span><span class="n">hThread</span><span class="p">,</span> <span class="n">lpContext</span><span class="p">):</span>
<span class="k">return</span> <span class="n">SetThreadContext</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hThread</span><span class="p">,</span> <span class="n">lpContext</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;Wow64SetThreadContext&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">Wow64SetThreadContext</span><span class="p">(</span><span class="n">hThread</span><span class="p">,</span> <span class="n">lpContext</span><span class="p">):</span>
<span class="k">return</span> <span class="n">Wow64SetThreadContext</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hThread</span><span class="p">,</span> <span class="n">lpContext</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;OpenThread&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">OpenThread</span><span class="p">(</span><span class="n">dwDesiredAccess</span><span class="o">=</span><span class="n">THREAD_ALL_ACCESS</span><span class="p">,</span> <span class="n">bInheritHandle</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">dwThreadId</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">return</span> <span class="n">OpenThread</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">dwDesiredAccess</span><span class="p">,</span> <span class="n">bInheritHandle</span><span class="p">,</span> <span class="n">dwThreadId</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;OpenProcess&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">OpenProcess</span><span class="p">(</span><span class="n">dwDesiredAccess</span><span class="o">=</span><span class="n">PROCESS_ALL_ACCESS</span><span class="p">,</span> <span class="n">bInheritHandle</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">dwProcessId</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">return</span> <span class="n">OpenProcess</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">dwDesiredAccess</span><span class="p">,</span> <span class="n">bInheritHandle</span><span class="p">,</span> <span class="n">dwProcessId</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;ReadProcessMemory&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">ReadProcessMemory</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpBaseAddress</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">nSize</span><span class="p">,</span> <span class="n">lpNumberOfBytesRead</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">return</span> <span class="n">ReadProcessMemory</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpBaseAddress</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">nSize</span><span class="p">,</span> <span class="n">lpNumberOfBytesRead</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;WriteProcessMemory&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">WriteProcessMemory</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpBaseAddress</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">nSize</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpNumberOfBytesWritten</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Computer nSize with len(lpBuffer) if not given&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">nSize</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">nSize</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpBuffer</span><span class="p">)</span>
<span class="k">return</span> <span class="n">WriteProcessMemory</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpBaseAddress</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">nSize</span><span class="p">,</span> <span class="n">lpNumberOfBytesWritten</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetProcessTimes&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetProcessTimes</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpCreationTime</span><span class="p">,</span> <span class="n">lpExitTime</span><span class="p">,</span> <span class="n">lpKernelTime</span><span class="p">,</span> <span class="n">lpUserTime</span><span class="p">):</span>
<span class="k">return</span> <span class="n">GetProcessTimes</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpCreationTime</span><span class="p">,</span> <span class="n">lpExitTime</span><span class="p">,</span> <span class="n">lpKernelTime</span><span class="p">,</span> <span class="n">lpUserTime</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s1">&#39;SetThreadAffinityMask&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">SetThreadAffinityMask</span><span class="p">(</span><span class="n">hThread</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dwThreadAffinityMask</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;If hThread is not given, it will be the current thread&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">hThread</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">hThread</span> <span class="o">=</span> <span class="n">GetCurrentThread</span><span class="p">()</span>
<span class="k">return</span> <span class="n">SetThreadAffinityMask</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hThread</span><span class="p">,</span> <span class="n">dwThreadAffinityMask</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;CreateToolhelp32Snapshot&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CreateToolhelp32Snapshot</span><span class="p">(</span><span class="n">dwFlags</span><span class="p">,</span> <span class="n">th32ProcessID</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CreateToolhelp32Snapshot</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">dwFlags</span><span class="p">,</span> <span class="n">th32ProcessID</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;Thread32First&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">Thread32First</span><span class="p">(</span><span class="n">hSnapshot</span><span class="p">,</span> <span class="n">lpte</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Set byref(lpte) if needed&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">lpte</span><span class="p">)</span> <span class="o">==</span> <span class="n">THREADENTRY32</span><span class="p">:</span>
<span class="n">lpte</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">lpte</span><span class="p">)</span>
<span class="k">return</span> <span class="n">Thread32First</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hSnapshot</span><span class="p">,</span> <span class="n">lpte</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;Thread32Next&quot;</span><span class="p">,</span> <span class="n">no_error_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">Thread32Next</span><span class="p">(</span><span class="n">hSnapshot</span><span class="p">,</span> <span class="n">lpte</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Set byref(lpte) if needed&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">lpte</span><span class="p">)</span> <span class="o">==</span> <span class="n">THREADENTRY32</span><span class="p">:</span>
<span class="n">lpte</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">lpte</span><span class="p">)</span>
<span class="k">return</span> <span class="n">Thread32Next</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hSnapshot</span><span class="p">,</span> <span class="n">lpte</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;Process32First&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">Process32First</span><span class="p">(</span><span class="n">hSnapshot</span><span class="p">,</span> <span class="n">lpte</span><span class="p">):</span>
<span class="k">return</span> <span class="n">Process32First</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hSnapshot</span><span class="p">,</span> <span class="n">lpte</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;Process32Next&quot;</span><span class="p">,</span> <span class="n">no_error_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">Process32Next</span><span class="p">(</span><span class="n">hSnapshot</span><span class="p">,</span> <span class="n">lpte</span><span class="p">):</span>
<span class="k">return</span> <span class="n">Process32Next</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hSnapshot</span><span class="p">,</span> <span class="n">lpte</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetPriorityClass&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetPriorityClass</span><span class="p">(</span><span class="n">hProcess</span><span class="p">):</span>
<span class="k">return</span> <span class="n">GetPriorityClass</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;SetPriorityClass&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">SetPriorityClass</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">dwPriorityClass</span><span class="p">):</span>
<span class="k">return</span> <span class="n">SetPriorityClass</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">dwPriorityClass</span><span class="p">)</span>
<span class="n">PROCESS_MITIGATION_STUCTS</span> <span class="o">=</span> <span class="p">(</span><span class="n">PROCESS_MITIGATION_ASLR_POLICY</span><span class="p">,</span>
<span class="n">PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY</span><span class="p">,</span>
<span class="n">PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY</span><span class="p">,</span>
<span class="n">PROCESS_MITIGATION_DEP_POLICY</span><span class="p">,</span>
<span class="n">PROCESS_MITIGATION_DYNAMIC_CODE_POLICY</span><span class="p">,</span>
<span class="n">PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY</span><span class="p">,</span>
<span class="n">PROCESS_MITIGATION_IMAGE_LOAD_POLICY</span><span class="p">,</span>
<span class="n">PROCESS_MITIGATION_POLICY</span><span class="p">,</span>
<span class="n">PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY</span><span class="p">,</span>
<span class="n">PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetProcessMitigationPolicy&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetProcessMitigationPolicy</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">MitigationPolicy</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">dwLength</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">dwLength</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">dwLength</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">lpBuffer</span><span class="p">)</span>
<span class="k">return</span> <span class="n">GetProcessMitigationPolicy</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">MitigationPolicy</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">dwLength</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;SetProcessMitigationPolicy&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">SetProcessMitigationPolicy</span><span class="p">(</span><span class="n">MitigationPolicy</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">dwLength</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">dwLength</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">dwLength</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">lpBuffer</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">lpBuffer</span><span class="p">,</span> <span class="n">PROCESS_MITIGATION_STUCTS</span><span class="p">):</span>
<span class="n">lpBuffer</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">lpBuffer</span><span class="p">)</span>
<span class="k">return</span> <span class="n">SetProcessMitigationPolicy</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">MitigationPolicy</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">dwLength</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;OpenEventA&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">OpenEventA</span><span class="p">(</span><span class="n">dwDesiredAccess</span><span class="p">,</span> <span class="n">bInheritHandle</span><span class="p">,</span> <span class="n">lpName</span><span class="p">):</span>
<span class="k">return</span> <span class="n">OpenEventA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">dwDesiredAccess</span><span class="p">,</span> <span class="n">bInheritHandle</span><span class="p">,</span> <span class="n">lpName</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;OpenEventW&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">OpenEventW</span><span class="p">(</span><span class="n">dwDesiredAccess</span><span class="p">,</span> <span class="n">bInheritHandle</span><span class="p">,</span> <span class="n">lpName</span><span class="p">):</span>
<span class="k">return</span> <span class="n">OpenEventA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">dwDesiredAccess</span><span class="p">,</span> <span class="n">bInheritHandle</span><span class="p">,</span> <span class="n">lpName</span><span class="p">)</span>
<span class="c1"># File stuff</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;ReadFile&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">ReadFile</span><span class="p">(</span><span class="n">hFile</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">nNumberOfBytesToRead</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpNumberOfBytesRead</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpOverlapped</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">nNumberOfBytesToRead</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">nNumberOfBytesToRead</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpBuffer</span><span class="p">)</span>
<span class="k">if</span> <span class="n">lpOverlapped</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">lpNumberOfBytesRead</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">lpNumberOfBytesRead</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">DWORD</span><span class="p">())</span>
<span class="k">return</span> <span class="n">ReadFile</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hFile</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">nNumberOfBytesToRead</span><span class="p">,</span> <span class="n">lpNumberOfBytesRead</span><span class="p">,</span> <span class="n">lpOverlapped</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;WriteFile&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">WriteFile</span><span class="p">(</span><span class="n">hFile</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">nNumberOfBytesToWrite</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpNumberOfBytesWritten</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpOverlapped</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">nNumberOfBytesToWrite</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">nNumberOfBytesToWrite</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpBuffer</span><span class="p">)</span>
<span class="k">if</span> <span class="n">lpOverlapped</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">lpNumberOfBytesWritten</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">lpNumberOfBytesWritten</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">DWORD</span><span class="p">())</span>
<span class="k">return</span> <span class="n">WriteFile</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hFile</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">nNumberOfBytesToWrite</span><span class="p">,</span> <span class="n">lpNumberOfBytesWritten</span><span class="p">,</span> <span class="n">lpOverlapped</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;Sleep&quot;</span><span class="p">,</span> <span class="n">no_error_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">Sleep</span><span class="p">(</span><span class="n">dwMilliseconds</span><span class="p">):</span>
<span class="k">return</span> <span class="n">Sleep</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">dwMilliseconds</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;SleepEx&quot;</span><span class="p">,</span> <span class="n">no_error_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">SleepEx</span><span class="p">(</span><span class="n">dwMilliseconds</span><span class="p">,</span> <span class="n">bAlertable</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="k">return</span> <span class="n">SleepEx</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">dwMilliseconds</span><span class="p">,</span> <span class="n">bAlertable</span><span class="p">)</span>
<span class="c1"># Exception stuff</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;AddVectoredContinueHandler&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">AddVectoredContinueHandler</span><span class="p">(</span><span class="n">FirstHandler</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">VectoredHandler</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">return</span> <span class="n">AddVectoredContinueHandler</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">FirstHandler</span><span class="p">,</span> <span class="n">VectoredHandler</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;AddVectoredExceptionHandler&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">AddVectoredExceptionHandler</span><span class="p">(</span><span class="n">FirstHandler</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">VectoredHandler</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">return</span> <span class="n">AddVectoredExceptionHandler</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">FirstHandler</span><span class="p">,</span> <span class="n">VectoredHandler</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;RemoveVectoredExceptionHandler&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">RemoveVectoredExceptionHandler</span><span class="p">(</span><span class="n">Handler</span><span class="p">):</span>
<span class="k">return</span> <span class="n">RemoveVectoredExceptionHandler</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">Handler</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;WaitForSingleObject&quot;</span><span class="p">,</span> <span class="n">should_return_zero_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">WaitForSingleObject</span><span class="p">(</span><span class="n">hHandle</span><span class="p">,</span> <span class="n">dwMilliseconds</span><span class="o">=</span><span class="n">INFINITE</span><span class="p">):</span>
<span class="k">return</span> <span class="n">WaitForSingleObject</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hHandle</span><span class="p">,</span> <span class="n">dwMilliseconds</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;DeviceIoControl&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">DeviceIoControl</span><span class="p">(</span><span class="n">hDevice</span><span class="p">,</span> <span class="n">dwIoControlCode</span><span class="p">,</span> <span class="n">lpInBuffer</span><span class="p">,</span> <span class="n">nInBufferSize</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpOutBuffer</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">nOutBufferSize</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpBytesReturned</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpOverlapped</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">nInBufferSize</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">nInBufferSize</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpInBuffer</span><span class="p">)</span>
<span class="k">if</span> <span class="n">nOutBufferSize</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">nOutBufferSize</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpOutBuffer</span><span class="p">)</span>
<span class="k">if</span> <span class="n">lpBytesReturned</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># Some windows check 0 / others does not</span>
<span class="n">lpBytesReturned</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">DWORD</span><span class="p">())</span>
<span class="k">return</span> <span class="n">DeviceIoControl</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hDevice</span><span class="p">,</span> <span class="n">dwIoControlCode</span><span class="p">,</span> <span class="n">lpInBuffer</span><span class="p">,</span> <span class="n">nInBufferSize</span><span class="p">,</span> <span class="n">lpOutBuffer</span><span class="p">,</span> <span class="n">nOutBufferSize</span><span class="p">,</span> <span class="n">lpBytesReturned</span><span class="p">,</span> <span class="n">lpOverlapped</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;CreateFileMappingA&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CreateFileMappingA</span><span class="p">(</span><span class="n">hFile</span><span class="p">,</span> <span class="n">lpFileMappingAttributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">flProtect</span><span class="o">=</span><span class="n">PAGE_READWRITE</span><span class="p">,</span> <span class="n">dwMaximumSizeHigh</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">dwMaximumSizeLow</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">lpName</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CreateFileMappingA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hFile</span><span class="p">,</span> <span class="n">lpFileMappingAttributes</span><span class="p">,</span> <span class="n">flProtect</span><span class="p">,</span> <span class="n">dwMaximumSizeHigh</span><span class="p">,</span> <span class="n">dwMaximumSizeLow</span><span class="p">,</span> <span class="n">lpName</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;CreateFileMappingW&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CreateFileMappingW</span><span class="p">(</span><span class="n">hFile</span><span class="p">,</span> <span class="n">lpFileMappingAttributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">flProtect</span><span class="o">=</span><span class="n">PAGE_READWRITE</span><span class="p">,</span> <span class="n">dwMaximumSizeHigh</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">dwMaximumSizeLow</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">lpName</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CreateFileMappingW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hFile</span><span class="p">,</span> <span class="n">lpFileMappingAttributes</span><span class="p">,</span> <span class="n">flProtect</span><span class="p">,</span> <span class="n">dwMaximumSizeHigh</span><span class="p">,</span> <span class="n">dwMaximumSizeLow</span><span class="p">,</span> <span class="n">lpName</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;MapViewOfFile&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">MapViewOfFile</span><span class="p">(</span><span class="n">hFileMappingObject</span><span class="p">,</span> <span class="n">dwDesiredAccess</span><span class="o">=</span><span class="n">FILE_MAP_ALL_ACCESS</span><span class="p">,</span> <span class="n">dwFileOffsetHigh</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">dwFileOffsetLow</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">dwNumberOfBytesToMap</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">return</span> <span class="n">MapViewOfFile</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hFileMappingObject</span><span class="p">,</span> <span class="n">dwDesiredAccess</span><span class="p">,</span> <span class="n">dwFileOffsetHigh</span><span class="p">,</span> <span class="n">dwFileOffsetLow</span><span class="p">,</span> <span class="n">dwNumberOfBytesToMap</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;DuplicateHandle&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">DuplicateHandle</span><span class="p">(</span><span class="n">hSourceProcessHandle</span><span class="p">,</span> <span class="n">hSourceHandle</span><span class="p">,</span> <span class="n">hTargetProcessHandle</span><span class="p">,</span> <span class="n">lpTargetHandle</span><span class="p">,</span> <span class="n">dwDesiredAccess</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">bInheritHandle</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">dwOptions</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="k">return</span> <span class="n">DuplicateHandle</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hSourceProcessHandle</span><span class="p">,</span> <span class="n">hSourceHandle</span><span class="p">,</span> <span class="n">hTargetProcessHandle</span><span class="p">,</span> <span class="n">lpTargetHandle</span><span class="p">,</span> <span class="n">dwDesiredAccess</span><span class="p">,</span> <span class="n">bInheritHandle</span><span class="p">,</span> <span class="n">dwOptions</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetLongPathNameA&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetLongPathNameA</span><span class="p">(</span><span class="n">lpszShortPath</span><span class="p">,</span> <span class="n">lpszLongPath</span><span class="p">,</span> <span class="n">cchBuffer</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">cchBuffer</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">cchBuffer</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpszLongPath</span><span class="p">)</span>
<span class="k">return</span> <span class="n">GetLongPathNameA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpszShortPath</span><span class="p">,</span> <span class="n">lpszLongPath</span><span class="p">,</span> <span class="n">cchBuffer</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetLongPathNameW&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetLongPathNameW</span><span class="p">(</span><span class="n">lpszShortPath</span><span class="p">,</span> <span class="n">lpszLongPath</span><span class="p">,</span> <span class="n">cchBuffer</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">cchBuffer</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">cchBuffer</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpszLongPath</span><span class="p">)</span>
<span class="k">return</span> <span class="n">GetLongPathNameW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpszShortPath</span><span class="p">,</span> <span class="n">lpszLongPath</span><span class="p">,</span> <span class="n">cchBuffer</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetShortPathNameA&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetShortPathNameA</span><span class="p">(</span><span class="n">lpszLongPath</span><span class="p">,</span> <span class="n">lpszShortPath</span><span class="p">,</span> <span class="n">cchBuffer</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">cchBuffer</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">cchBuffer</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpszShortPath</span><span class="p">)</span>
<span class="k">return</span> <span class="n">GetShortPathNameA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpszLongPath</span><span class="p">,</span> <span class="n">lpszShortPath</span><span class="p">,</span> <span class="n">cchBuffer</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetShortPathNameW&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetShortPathNameW</span><span class="p">(</span><span class="n">lpszLongPath</span><span class="p">,</span> <span class="n">lpszShortPath</span><span class="p">,</span> <span class="n">cchBuffer</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">cchBuffer</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">cchBuffer</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpszShortPath</span><span class="p">)</span>
<span class="k">return</span> <span class="n">GetShortPathNameW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpszLongPath</span><span class="p">,</span> <span class="n">lpszShortPath</span><span class="p">,</span> <span class="n">cchBuffer</span><span class="p">)</span>
<span class="c1"># TODO: might be in another DLL depending of version</span>
<span class="c1"># Should handle this..</span>
<span class="k">def</span> <span class="nf">GetMappedFileNameWWrapper</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpv</span><span class="p">,</span> <span class="n">lpFilename</span><span class="p">,</span> <span class="n">nSize</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">nSize</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">nSize</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">lpFilename</span><span class="p">)</span>
<span class="k">return</span> <span class="n">GetMappedFileNameWWrapper</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpv</span><span class="p">,</span> <span class="n">lpFilename</span><span class="p">,</span> <span class="n">nSize</span><span class="p">)</span>
<span class="n">GetMappedFileNameW</span> <span class="o">=</span> <span class="n">Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetMappedFileNameW&quot;</span><span class="p">)(</span><span class="n">GetMappedFileNameWWrapper</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetMappedFileNameAWrapper</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpv</span><span class="p">,</span> <span class="n">lpFilename</span><span class="p">,</span> <span class="n">nSize</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">nSize</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">nSize</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">lpFilename</span><span class="p">)</span>
<span class="k">return</span> <span class="n">GetMappedFileNameAWrapper</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpv</span><span class="p">,</span> <span class="n">lpFilename</span><span class="p">,</span> <span class="n">nSize</span><span class="p">)</span>
<span class="n">GetMappedFileNameA</span> <span class="o">=</span> <span class="n">Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetMappedFileNameA&quot;</span><span class="p">)(</span><span class="n">GetMappedFileNameAWrapper</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">QueryWorkingSetWrapper</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">pv</span><span class="p">,</span> <span class="n">cb</span><span class="p">):</span>
<span class="k">return</span> <span class="n">QueryWorkingSet</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">pv</span><span class="p">,</span> <span class="n">cb</span><span class="p">)</span>
<span class="n">QueryWorkingSet</span> <span class="o">=</span> <span class="n">Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;QueryWorkingSet&quot;</span><span class="p">)(</span><span class="n">QueryWorkingSetWrapper</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">QueryWorkingSetExWrapper</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">pv</span><span class="p">,</span> <span class="n">cb</span><span class="p">):</span>
<span class="k">return</span> <span class="n">QueryWorkingSetEx</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">pv</span><span class="p">,</span> <span class="n">cb</span><span class="p">)</span>
<span class="n">QueryWorkingSetEx</span> <span class="o">=</span> <span class="n">Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;QueryWorkingSetEx&quot;</span><span class="p">)(</span><span class="n">QueryWorkingSetExWrapper</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">is_implemented</span><span class="p">(</span><span class="n">GetMappedFileNameA</span><span class="p">):</span>
<span class="n">GetMappedFileNameW</span> <span class="o">=</span> <span class="n">PsapiProxy</span><span class="p">(</span><span class="s2">&quot;GetMappedFileNameW&quot;</span><span class="p">)(</span><span class="n">GetMappedFileNameWWrapper</span><span class="p">)</span>
<span class="n">GetMappedFileNameA</span> <span class="o">=</span> <span class="n">PsapiProxy</span><span class="p">(</span><span class="s2">&quot;GetMappedFileNameA&quot;</span><span class="p">)(</span><span class="n">GetMappedFileNameAWrapper</span><span class="p">)</span>
<span class="n">QueryWorkingSet</span> <span class="o">=</span> <span class="n">PsapiProxy</span><span class="p">(</span><span class="s2">&quot;QueryWorkingSet&quot;</span><span class="p">)(</span><span class="n">QueryWorkingSetWrapper</span><span class="p">)</span>
<span class="n">QueryWorkingSetEx</span> <span class="o">=</span> <span class="n">PsapiProxy</span><span class="p">(</span><span class="s2">&quot;QueryWorkingSetEx&quot;</span><span class="p">)(</span><span class="n">QueryWorkingSetExWrapper</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetModuleBaseNameAWrapper</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">hModule</span><span class="p">,</span> <span class="n">lpBaseName</span><span class="p">,</span> <span class="n">nSize</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">nSize</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">nSize</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpBaseName</span><span class="p">)</span>
<span class="k">return</span> <span class="n">GetModuleBaseNameAWrapper</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">hModule</span><span class="p">,</span> <span class="n">lpBaseName</span><span class="p">,</span> <span class="n">nSize</span><span class="p">)</span>
<span class="n">GetModuleBaseNameA</span> <span class="o">=</span> <span class="n">Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetMappedFileNameA&quot;</span><span class="p">)(</span><span class="n">GetModuleBaseNameAWrapper</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetModuleBaseNameWWrapper</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">hModule</span><span class="p">,</span> <span class="n">lpBaseName</span><span class="p">,</span> <span class="n">nSize</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">nSize</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">nSize</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpBaseName</span><span class="p">)</span>
<span class="k">return</span> <span class="n">GetModuleBaseNameWWrapper</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">hModule</span><span class="p">,</span> <span class="n">lpBaseName</span><span class="p">,</span> <span class="n">nSize</span><span class="p">)</span>
<span class="n">GetModuleBaseNameA</span> <span class="o">=</span> <span class="n">Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetModuleBaseNameW&quot;</span><span class="p">)(</span><span class="n">GetModuleBaseNameWWrapper</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">is_implemented</span><span class="p">(</span><span class="n">GetModuleBaseNameA</span><span class="p">):</span>
<span class="n">GetModuleBaseNameA</span> <span class="o">=</span> <span class="n">PsapiProxy</span><span class="p">(</span><span class="s2">&quot;GetModuleBaseNameA&quot;</span><span class="p">)(</span><span class="n">GetModuleBaseNameAWrapper</span><span class="p">)</span>
<span class="n">GetModuleBaseNameW</span> <span class="o">=</span> <span class="n">PsapiProxy</span><span class="p">(</span><span class="s2">&quot;GetModuleBaseNameW&quot;</span><span class="p">)(</span><span class="n">GetModuleBaseNameWWrapper</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetProcessImageFileNameAWrapper</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpImageFileName</span><span class="p">,</span> <span class="n">nSize</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">nSize</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">nSize</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpImageFileName</span><span class="p">)</span>
<span class="k">return</span> <span class="n">GetProcessImageFileNameAWrapper</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpImageFileName</span><span class="p">,</span> <span class="n">nSize</span><span class="p">)</span>
<span class="n">GetProcessImageFileNameA</span> <span class="o">=</span> <span class="n">Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetProcessImageFileNameA&quot;</span><span class="p">)(</span><span class="n">GetProcessImageFileNameAWrapper</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetProcessImageFileNameWWrapper</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpImageFileName</span><span class="p">,</span> <span class="n">nSize</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">nSize</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">nSize</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpImageFileName</span><span class="p">)</span>
<span class="k">return</span> <span class="n">GetProcessImageFileNameWWrapper</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpImageFileName</span><span class="p">,</span> <span class="n">nSize</span><span class="p">)</span>
<span class="n">GetProcessImageFileNameW</span> <span class="o">=</span> <span class="n">Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetProcessImageFileNameW&quot;</span><span class="p">)(</span><span class="n">GetProcessImageFileNameWWrapper</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">is_implemented</span><span class="p">(</span><span class="n">GetProcessImageFileNameA</span><span class="p">):</span>
<span class="n">GetProcessImageFileNameA</span> <span class="o">=</span> <span class="n">PsapiProxy</span><span class="p">(</span><span class="s2">&quot;GetProcessImageFileNameA&quot;</span><span class="p">)(</span><span class="n">GetProcessImageFileNameAWrapper</span><span class="p">)</span>
<span class="n">GetProcessImageFileNameW</span> <span class="o">=</span> <span class="n">PsapiProxy</span><span class="p">(</span><span class="s2">&quot;GetProcessImageFileNameW&quot;</span><span class="p">)(</span><span class="n">GetProcessImageFileNameWWrapper</span><span class="p">)</span>
<span class="c1"># Debug API</span>
<span class="n">DebugBreak</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;DebugBreak&quot;</span><span class="p">)</span>
<span class="n">ContinueDebugEvent</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;ContinueDebugEvent&quot;</span><span class="p">)</span>
<span class="n">DebugActiveProcess</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;DebugActiveProcess&quot;</span><span class="p">)</span>
<span class="n">DebugActiveProcessStop</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;DebugActiveProcessStop&quot;</span><span class="p">)</span>
<span class="n">DebugSetProcessKillOnExit</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;DebugSetProcessKillOnExit&quot;</span><span class="p">)</span>
<span class="n">DebugBreakProcess</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;DebugBreakProcess&quot;</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;WaitForDebugEvent&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">WaitForDebugEvent</span><span class="p">(</span><span class="n">lpDebugEvent</span><span class="p">,</span> <span class="n">dwMilliseconds</span><span class="o">=</span><span class="n">INFINITE</span><span class="p">):</span>
<span class="k">return</span> <span class="n">WaitForDebugEvent</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpDebugEvent</span><span class="p">,</span> <span class="n">dwMilliseconds</span><span class="p">)</span>
<span class="c1"># Volumes stuff</span>
<span class="n">GetLogicalDriveStringsA</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetLogicalDriveStringsA&quot;</span><span class="p">)</span>
<span class="n">GetLogicalDriveStringsW</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetLogicalDriveStringsW&quot;</span><span class="p">)</span>
<span class="n">GetDriveTypeA</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetDriveTypeA&quot;</span><span class="p">)</span>
<span class="n">GetDriveTypeW</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetDriveTypeW&quot;</span><span class="p">)</span>
<span class="n">QueryDosDeviceA</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;QueryDosDeviceA&quot;</span><span class="p">)</span>
<span class="n">QueryDosDeviceW</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;QueryDosDeviceW&quot;</span><span class="p">)</span>
<span class="n">GetVolumeNameForVolumeMountPointA</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetVolumeNameForVolumeMountPointA&quot;</span><span class="p">)</span>
<span class="n">GetVolumeNameForVolumeMountPointW</span> <span class="o">=</span> <span class="n">TransparentKernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetVolumeNameForVolumeMountPointW&quot;</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetVolumeInformationA&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetVolumeInformationA</span><span class="p">(</span><span class="n">lpRootPathName</span><span class="p">,</span> <span class="n">lpVolumeNameBuffer</span><span class="p">,</span> <span class="n">nVolumeNameSize</span><span class="p">,</span> <span class="n">lpVolumeSerialNumber</span><span class="p">,</span> <span class="n">lpMaximumComponentLength</span><span class="p">,</span> <span class="n">lpFileSystemFlags</span><span class="p">,</span> <span class="n">lpFileSystemNameBuffer</span><span class="p">,</span> <span class="n">nFileSystemNameSize</span><span class="p">):</span>
<span class="k">if</span> <span class="n">nVolumeNameSize</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">lpVolumeNameBuffer</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">nVolumeNameSize</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpVolumeNameBuffer</span><span class="p">)</span>
<span class="k">if</span> <span class="n">nFileSystemNameSize</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">lpFileSystemNameBuffer</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">nFileSystemNameSize</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpFileSystemNameBuffer</span><span class="p">)</span>
<span class="k">return</span> <span class="n">GetVolumeInformationA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpRootPathName</span><span class="p">,</span> <span class="n">lpVolumeNameBuffer</span><span class="p">,</span> <span class="n">nVolumeNameSize</span><span class="p">,</span> <span class="n">lpVolumeSerialNumber</span><span class="p">,</span> <span class="n">lpMaximumComponentLength</span><span class="p">,</span> <span class="n">lpFileSystemFlags</span><span class="p">,</span> <span class="n">lpFileSystemNameBuffer</span><span class="p">,</span> <span class="n">nFileSystemNameSize</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetVolumeInformationW&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetVolumeInformationW</span><span class="p">(</span><span class="n">lpRootPathName</span><span class="p">,</span> <span class="n">lpVolumeNameBuffer</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">nVolumeNameSize</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">lpVolumeSerialNumber</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpMaximumComponentLength</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpFileSystemFlags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpFileSystemNameBuffer</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">nFileSystemNameSize</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="k">if</span> <span class="n">nVolumeNameSize</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">lpVolumeNameBuffer</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">nVolumeNameSize</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpVolumeNameBuffer</span><span class="p">)</span>
<span class="k">if</span> <span class="n">nFileSystemNameSize</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">lpFileSystemNameBuffer</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">nFileSystemNameSize</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpFileSystemNameBuffer</span><span class="p">)</span>
<span class="k">return</span> <span class="n">GetVolumeInformationW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpRootPathName</span><span class="p">,</span> <span class="n">lpVolumeNameBuffer</span><span class="p">,</span> <span class="n">nVolumeNameSize</span><span class="p">,</span> <span class="n">lpVolumeSerialNumber</span><span class="p">,</span> <span class="n">lpMaximumComponentLength</span><span class="p">,</span> <span class="n">lpFileSystemFlags</span><span class="p">,</span> <span class="n">lpFileSystemNameBuffer</span><span class="p">,</span> <span class="n">nFileSystemNameSize</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;FindFirstVolumeA&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">FindFirstVolumeA</span><span class="p">(</span><span class="n">lpszVolumeName</span><span class="p">,</span> <span class="n">cchBufferLength</span><span class="p">):</span>
<span class="k">if</span> <span class="n">cchBufferLength</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">cchBufferLength</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpszVolumeName</span><span class="p">)</span>
<span class="k">return</span> <span class="n">FindFirstVolumeA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpszVolumeName</span><span class="p">,</span> <span class="n">cchBufferLength</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;FindFirstVolumeW&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">FindFirstVolumeW</span><span class="p">(</span><span class="n">lpszVolumeName</span><span class="p">,</span> <span class="n">cchBufferLength</span><span class="p">):</span>
<span class="k">if</span> <span class="n">cchBufferLength</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">cchBufferLength</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpszVolumeName</span><span class="p">)</span>
<span class="k">return</span> <span class="n">FindFirstVolumeW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpszVolumeName</span><span class="p">,</span> <span class="n">cchBufferLength</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;FindNextVolumeA&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">FindNextVolumeA</span><span class="p">(</span><span class="n">hFindVolume</span><span class="p">,</span> <span class="n">lpszVolumeName</span><span class="p">,</span> <span class="n">cchBufferLength</span><span class="p">):</span>
<span class="k">if</span> <span class="n">cchBufferLength</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">cchBufferLength</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpszVolumeName</span><span class="p">)</span>
<span class="k">return</span> <span class="n">FindNextVolumeA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hFindVolume</span><span class="p">,</span> <span class="n">lpszVolumeName</span><span class="p">,</span> <span class="n">cchBufferLength</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;FindNextVolumeW&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">FindNextVolumeW</span><span class="p">(</span><span class="n">hFindVolume</span><span class="p">,</span> <span class="n">lpszVolumeName</span><span class="p">,</span> <span class="n">cchBufferLength</span><span class="p">):</span>
<span class="k">if</span> <span class="n">cchBufferLength</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">cchBufferLength</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpszVolumeName</span><span class="p">)</span>
<span class="k">return</span> <span class="n">FindNextVolumeW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hFindVolume</span><span class="p">,</span> <span class="n">lpszVolumeName</span><span class="p">,</span> <span class="n">cchBufferLength</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;SetConsoleCtrlHandler&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">SetConsoleCtrlHandler</span><span class="p">(</span><span class="n">HandlerRoutine</span><span class="p">,</span> <span class="n">Add</span><span class="p">):</span>
<span class="k">return</span> <span class="n">SetConsoleCtrlHandler</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">HandlerRoutine</span><span class="p">,</span> <span class="n">Add</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetProcessDEPPolicy&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetProcessDEPPolicy</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpFlags</span><span class="p">,</span> <span class="n">lpPermanent</span><span class="p">):</span>
<span class="k">return</span> <span class="n">GetProcessDEPPolicy</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpFlags</span><span class="p">,</span> <span class="n">lpPermanent</span><span class="p">)</span>
<span class="c1"># ProcThreadAttributeList</span>
<span class="k">def</span> <span class="nf">initializeprocthreadattributelist_error_check</span><span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="n">result</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
<span class="k">if</span> <span class="n">result</span><span class="p">:</span>
<span class="k">return</span> <span class="n">args</span>
<span class="n">error</span> <span class="o">=</span> <span class="n">GetLastError</span><span class="p">()</span>
<span class="k">if</span> <span class="n">error</span> <span class="o">==</span> <span class="n">ERROR_INSUFFICIENT_BUFFER</span> <span class="ow">and</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="n">args</span>
<span class="k">raise</span> <span class="n">Kernel32Error</span><span class="p">(</span><span class="n">func_name</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;InitializeProcThreadAttributeList&quot;</span><span class="p">,</span> <span class="n">initializeprocthreadattributelist_error_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">InitializeProcThreadAttributeList</span><span class="p">(</span><span class="n">lpAttributeList</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dwAttributeCount</span><span class="o">=</span><span class="n">NeededParameter</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">lpSize</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">return</span> <span class="n">InitializeProcThreadAttributeList</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpAttributeList</span><span class="p">,</span> <span class="n">dwAttributeCount</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">lpSize</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;UpdateProcThreadAttribute&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">UpdateProcThreadAttribute</span><span class="p">(</span><span class="n">lpAttributeList</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">Attribute</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">lpValue</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">cbSize</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">lpPreviousValue</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpReturnSize</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">return</span> <span class="n">UpdateProcThreadAttribute</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpAttributeList</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">lpValue</span><span class="p">,</span> <span class="n">cbSize</span><span class="p">,</span> <span class="n">lpPreviousValue</span><span class="p">,</span> <span class="n">lpReturnSize</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;DeleteProcThreadAttributeList&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">DeleteProcThreadAttributeList</span><span class="p">(</span><span class="n">lpAttributeList</span><span class="p">):</span>
<span class="k">return</span> <span class="n">DeleteProcThreadAttributeList</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpAttributeList</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetWindowsDirectoryA&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetWindowsDirectoryA</span><span class="p">(</span><span class="n">lpBuffer</span><span class="p">,</span> <span class="n">uSize</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">uSize</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">uSize</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">lpBuffer</span><span class="p">))</span>
<span class="k">return</span> <span class="n">GetWindowsDirectoryA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpBuffer</span><span class="p">,</span> <span class="n">uSize</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetWindowsDirectoryW&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetWindowsDirectoryW</span><span class="p">(</span><span class="n">lpBuffer</span><span class="p">,</span> <span class="n">uSize</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">uSize</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">uSize</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">lpBuffer</span><span class="p">))</span>
<span class="k">return</span> <span class="n">GetWindowsDirectoryW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpBuffer</span><span class="p">,</span> <span class="n">uSize</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;GetProductInfo&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetProductInfo</span><span class="p">(</span><span class="n">dwOSMajorVersion</span><span class="p">,</span> <span class="n">dwOSMinorVersion</span><span class="p">,</span> <span class="n">dwSpMajorVersion</span><span class="p">,</span> <span class="n">dwSpMinorVersion</span><span class="p">,</span> <span class="n">pdwReturnedProductType</span><span class="p">):</span>
<span class="k">return</span> <span class="n">GetProductInfo</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">dwOSMajorVersion</span><span class="p">,</span> <span class="n">dwOSMinorVersion</span><span class="p">,</span> <span class="n">dwSpMajorVersion</span><span class="p">,</span> <span class="n">dwSpMinorVersion</span><span class="p">,</span> <span class="n">pdwReturnedProductType</span><span class="p">)</span>
<span class="c1"># ### NTDLL #### #</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s1">&#39;NtReadVirtualMemory&#39;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtReadVirtualMemory</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpBaseAddress</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">nSize</span><span class="p">,</span> <span class="n">lpNumberOfBytesRead</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtReadVirtualMemory</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpBaseAddress</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">nSize</span><span class="p">,</span> <span class="n">lpNumberOfBytesRead</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s1">&#39;NtWow64ReadVirtualMemory64&#39;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtWow64ReadVirtualMemory64</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpBaseAddress</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">nSize</span><span class="p">,</span> <span class="n">lpNumberOfBytesRead</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtWow64ReadVirtualMemory64</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpBaseAddress</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">nSize</span><span class="p">,</span> <span class="n">lpNumberOfBytesRead</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s1">&#39;NtWriteVirtualMemory&#39;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtWriteVirtualMemory</span><span class="p">(</span><span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">BaseAddress</span><span class="p">,</span> <span class="n">Buffer</span><span class="p">,</span> <span class="n">NumberOfBytesToWrite</span><span class="p">,</span> <span class="n">NumberOfBytesWritten</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtWriteVirtualMemory</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">BaseAddress</span><span class="p">,</span> <span class="n">Buffer</span><span class="p">,</span> <span class="n">NumberOfBytesToWrite</span><span class="p">,</span> <span class="n">NumberOfBytesWritten</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s1">&#39;NtWow64WriteVirtualMemory64&#39;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtWow64WriteVirtualMemory64</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpBaseAddress</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">nSize</span><span class="p">,</span> <span class="n">lpNumberOfBytesWritten</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtWow64WriteVirtualMemory64</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProcess</span><span class="p">,</span> <span class="n">lpBaseAddress</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">nSize</span><span class="p">,</span> <span class="n">lpNumberOfBytesWritten</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">ntquerysysteminformation_error_check</span><span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="n">result</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
<span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="n">args</span>
<span class="c1"># Ignore STATUS_INFO_LENGTH_MISMATCH if SystemInformation is None</span>
<span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">STATUS_INFO_LENGTH_MISMATCH</span> <span class="ow">and</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="n">args</span>
<span class="k">raise</span> <span class="n">Kernel32Error</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{0}</span><span class="s2"> failed with NTStatus </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="nb">hex</span><span class="p">(</span><span class="n">result</span><span class="p">)))</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtCreateFile&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtCreateFile</span><span class="p">(</span><span class="n">FileHandle</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">,</span> <span class="n">IoStatusBlock</span><span class="p">,</span> <span class="n">AllocationSize</span><span class="p">,</span> <span class="n">FileAttributes</span><span class="p">,</span> <span class="n">ShareAccess</span><span class="p">,</span> <span class="n">CreateDisposition</span><span class="p">,</span> <span class="n">CreateOptions</span><span class="p">,</span> <span class="n">EaBuffer</span><span class="p">,</span> <span class="n">EaLength</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtCreateFile</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">FileHandle</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">,</span> <span class="n">IoStatusBlock</span><span class="p">,</span> <span class="n">AllocationSize</span><span class="p">,</span> <span class="n">FileAttributes</span><span class="p">,</span> <span class="n">ShareAccess</span><span class="p">,</span> <span class="n">CreateDisposition</span><span class="p">,</span> <span class="n">CreateOptions</span><span class="p">,</span> <span class="n">EaBuffer</span><span class="p">,</span> <span class="n">EaLength</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtGetContextThread&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtGetContextThread</span><span class="p">(</span><span class="n">hThread</span><span class="p">,</span> <span class="n">lpContext</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtGetContextThread</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hThread</span><span class="p">,</span> <span class="n">lpContext</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;LdrLoadDll&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">LdrLoadDll</span><span class="p">(</span><span class="n">PathToFile</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">ModuleFileName</span><span class="p">,</span> <span class="n">ModuleHandle</span><span class="p">):</span>
<span class="k">return</span> <span class="n">LdrLoadDll</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">PathToFile</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">ModuleFileName</span><span class="p">,</span> <span class="n">ModuleHandle</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s1">&#39;NtQuerySystemInformation&#39;</span><span class="p">,</span> <span class="n">ntquerysysteminformation_error_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtQuerySystemInformation</span><span class="p">(</span><span class="n">SystemInformationClass</span><span class="p">,</span> <span class="n">SystemInformation</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">SystemInformationLength</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">if</span> <span class="n">SystemInformation</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">SystemInformationLength</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">SystemInformationLength</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">SystemInformation</span><span class="p">)</span>
<span class="k">return</span> <span class="n">NtQuerySystemInformation</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">SystemInformationClass</span><span class="p">,</span> <span class="n">SystemInformation</span><span class="p">,</span> <span class="n">SystemInformationLength</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s1">&#39;NtQueryInformationProcess&#39;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtQueryInformationProcess</span><span class="p">(</span><span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">ProcessInformationClass</span><span class="p">,</span> <span class="n">ProcessInformation</span><span class="p">,</span> <span class="n">ProcessInformationLength</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">ProcessInformation</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">ProcessInformationLength</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">ProcessInformationLength</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">ProcessInformation</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">ProcessInformation</span><span class="p">)</span> <span class="o">==</span> <span class="n">PROCESS_BASIC_INFORMATION</span><span class="p">:</span>
<span class="n">ProcessInformation</span> <span class="o">=</span> <span class="n">byref</span><span class="p">(</span><span class="n">ProcessInformation</span><span class="p">)</span>
<span class="k">if</span> <span class="n">ReturnLength</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">ReturnLength</span> <span class="o">=</span> <span class="n">byref</span><span class="p">(</span><span class="n">ULONG</span><span class="p">())</span>
<span class="k">return</span> <span class="n">NtQueryInformationProcess</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">ProcessInformationClass</span><span class="p">,</span> <span class="n">ProcessInformation</span><span class="p">,</span> <span class="n">ProcessInformationLength</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s1">&#39;NtSetInformationProcess&#39;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtSetInformationProcess</span><span class="p">(</span><span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">ProcessInformationClass</span><span class="p">,</span> <span class="n">ProcessInformation</span><span class="p">,</span> <span class="n">ProcessInformationLength</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">ProcessInformationLength</span><span class="p">:</span>
<span class="n">ProcessInformationLength</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">ProcessInformation</span><span class="p">)</span>
<span class="k">return</span> <span class="n">NtSetInformationProcess</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">ProcessInformationClass</span><span class="p">,</span> <span class="n">ProcessInformation</span><span class="p">,</span> <span class="n">ProcessInformationLength</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s1">&#39;NtQueryInformationThread&#39;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtQueryInformationThread</span><span class="p">(</span><span class="n">ThreadHandle</span><span class="p">,</span> <span class="n">ThreadInformationClass</span><span class="p">,</span> <span class="n">ThreadInformation</span><span class="p">,</span> <span class="n">ThreadInformationLength</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">ReturnLength</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">ReturnLength</span> <span class="o">=</span> <span class="n">byref</span><span class="p">(</span><span class="n">ULONG</span><span class="p">())</span>
<span class="k">if</span> <span class="n">ThreadInformation</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">ThreadInformationLength</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">ThreadInformationLength</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">ThreadInformation</span><span class="p">)</span>
<span class="k">return</span> <span class="n">NtQueryInformationThread</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">ThreadHandle</span><span class="p">,</span> <span class="n">ThreadInformationClass</span><span class="p">,</span> <span class="n">ThreadInformation</span><span class="p">,</span> <span class="n">ThreadInformationLength</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s1">&#39;NtAllocateVirtualMemory&#39;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtAllocateVirtualMemory</span><span class="p">(</span><span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">BaseAddress</span><span class="p">,</span> <span class="n">ZeroBits</span><span class="p">,</span> <span class="n">RegionSize</span><span class="p">,</span> <span class="n">AllocationType</span><span class="p">,</span> <span class="n">Protect</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtAllocateVirtualMemory</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">BaseAddress</span><span class="p">,</span> <span class="n">ZeroBits</span><span class="p">,</span> <span class="n">RegionSize</span><span class="p">,</span> <span class="n">AllocationType</span><span class="p">,</span> <span class="n">Protect</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s1">&#39;NtFreeVirtualMemory&#39;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtFreeVirtualMemory</span><span class="p">(</span><span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">BaseAddress</span><span class="p">,</span> <span class="n">RegionSize</span><span class="p">,</span> <span class="n">FreeType</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtFreeVirtualMemory</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">BaseAddress</span><span class="p">,</span> <span class="n">RegionSize</span><span class="p">,</span> <span class="n">FreeType</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s1">&#39;NtProtectVirtualMemory&#39;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtProtectVirtualMemory</span><span class="p">(</span><span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">BaseAddress</span><span class="p">,</span> <span class="n">NumberOfBytesToProtect</span><span class="p">,</span> <span class="n">NewAccessProtection</span><span class="p">,</span> <span class="n">OldAccessProtection</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">OldAccessProtection</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">OldAccessProtection</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">()</span>
<span class="k">return</span> <span class="n">NtProtectVirtualMemory</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">BaseAddress</span><span class="p">,</span> <span class="n">NumberOfBytesToProtect</span><span class="p">,</span> <span class="n">NewAccessProtection</span><span class="p">,</span> <span class="n">OldAccessProtection</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s1">&#39;NtQueryVirtualMemory&#39;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtQueryVirtualMemory</span><span class="p">(</span><span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">BaseAddress</span><span class="p">,</span> <span class="n">MemoryInformationClass</span><span class="p">,</span> <span class="n">MemoryInformation</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">MemoryInformationLength</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">ReturnLength</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">ReturnLength</span> <span class="o">=</span> <span class="n">byref</span><span class="p">(</span><span class="n">ULONG</span><span class="p">())</span>
<span class="k">if</span> <span class="n">MemoryInformation</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">MemoryInformationLength</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">ProcessInformationLength</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">MemoryInformation</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">MemoryInformation</span><span class="p">)</span> <span class="o">==</span> <span class="n">MEMORY_BASIC_INFORMATION64</span><span class="p">:</span>
<span class="n">MemoryInformation</span> <span class="o">=</span> <span class="n">byref</span><span class="p">(</span><span class="n">MemoryInformation</span><span class="p">)</span>
<span class="k">return</span> <span class="n">NtQueryVirtualMemory</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">BaseAddress</span><span class="p">,</span> <span class="n">MemoryInformationClass</span><span class="p">,</span> <span class="n">MemoryInformation</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">MemoryInformationLength</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s1">&#39;NtQueryObject&#39;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtQueryObject</span><span class="p">(</span><span class="n">Handle</span><span class="p">,</span> <span class="n">ObjectInformationClass</span><span class="p">,</span> <span class="n">ObjectInformation</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ObjectInformationLength</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtQueryObject</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">Handle</span><span class="p">,</span> <span class="n">ObjectInformationClass</span><span class="p">,</span> <span class="n">ObjectInformation</span><span class="p">,</span> <span class="n">ObjectInformationLength</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s1">&#39;NtCreateThreadEx&#39;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtCreateThreadEx</span><span class="p">(</span><span class="n">ThreadHandle</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="o">=</span><span class="mh">0x1fffff</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">ProcessHandle</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">lpStartAddress</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">lpParameter</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">CreateSuspended</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">dwStackSize</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">Unknown1</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">Unknown2</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">Unknown</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="k">if</span> <span class="n">ThreadHandle</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">ThreadHandle</span> <span class="o">=</span> <span class="n">byref</span><span class="p">(</span><span class="n">HANDLE</span><span class="p">())</span>
<span class="k">return</span> <span class="n">NtCreateThreadEx</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">ThreadHandle</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">,</span> <span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">lpStartAddress</span><span class="p">,</span> <span class="n">lpParameter</span><span class="p">,</span> <span class="n">CreateSuspended</span><span class="p">,</span> <span class="n">dwStackSize</span><span class="p">,</span> <span class="n">Unknown1</span><span class="p">,</span> <span class="n">Unknown2</span><span class="p">,</span> <span class="n">Unknown3</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtSetContextThread&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtSetContextThread</span><span class="p">(</span><span class="n">hThread</span><span class="p">,</span> <span class="n">lpContext</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtSetContextThread</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hThread</span><span class="p">,</span> <span class="n">lpContext</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtOpenEvent&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtOpenEvent</span><span class="p">(</span><span class="n">EventHandle</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtOpenEvent</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">EventHandle</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtSetInformationFile&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtSetInformationFile</span><span class="p">(</span><span class="n">FileHandle</span><span class="p">,</span> <span class="n">IoStatusBlock</span><span class="p">,</span> <span class="n">FileInformation</span><span class="p">,</span> <span class="n">Length</span><span class="p">,</span> <span class="n">FileInformationClass</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtSetInformationFile</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">FileHandle</span><span class="p">,</span> <span class="n">IoStatusBlock</span><span class="p">,</span> <span class="n">FileInformation</span><span class="p">,</span> <span class="n">Length</span><span class="p">,</span> <span class="n">FileInformationClass</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtAlpcCreatePort&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtAlpcCreatePort</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">,</span> <span class="n">PortAttributes</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtAlpcCreatePort</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">,</span> <span class="n">PortAttributes</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtAlpcConnectPort&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtAlpcConnectPort</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">PortName</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">,</span> <span class="n">PortAttributes</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">RequiredServerSid</span><span class="p">,</span> <span class="n">ConnectionMessage</span><span class="p">,</span> <span class="n">BufferLength</span><span class="p">,</span> <span class="n">OutMessageAttributes</span><span class="p">,</span> <span class="n">InMessageAttributes</span><span class="p">,</span> <span class="n">Timeout</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtAlpcConnectPort</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">PortName</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">,</span> <span class="n">PortAttributes</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">RequiredServerSid</span><span class="p">,</span> <span class="n">ConnectionMessage</span><span class="p">,</span> <span class="n">BufferLength</span><span class="p">,</span> <span class="n">OutMessageAttributes</span><span class="p">,</span> <span class="n">InMessageAttributes</span><span class="p">,</span> <span class="n">Timeout</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtAlpcConnectPortEx&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtAlpcConnectPortEx</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">ConnectionPortObjectAttributes</span><span class="p">,</span> <span class="n">ClientPortObjectAttributes</span><span class="p">,</span> <span class="n">PortAttributes</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">ServerSecurityRequirements</span><span class="p">,</span> <span class="n">ConnectionMessage</span><span class="p">,</span> <span class="n">BufferLength</span><span class="p">,</span> <span class="n">OutMessageAttributes</span><span class="p">,</span> <span class="n">InMessageAttributes</span><span class="p">,</span> <span class="n">Timeout</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtAlpcConnectPortEx</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">ConnectionPortObjectAttributes</span><span class="p">,</span> <span class="n">ClientPortObjectAttributes</span><span class="p">,</span> <span class="n">PortAttributes</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">ServerSecurityRequirements</span><span class="p">,</span> <span class="n">ConnectionMessage</span><span class="p">,</span> <span class="n">BufferLength</span><span class="p">,</span> <span class="n">OutMessageAttributes</span><span class="p">,</span> <span class="n">InMessageAttributes</span><span class="p">,</span> <span class="n">Timeout</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtAlpcAcceptConnectPort&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtAlpcAcceptConnectPort</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">ConnectionPortHandle</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">,</span> <span class="n">PortAttributes</span><span class="p">,</span> <span class="n">PortContext</span><span class="p">,</span> <span class="n">ConnectionRequest</span><span class="p">,</span> <span class="n">ConnectionMessageAttributes</span><span class="p">,</span> <span class="n">AcceptConnection</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtAlpcAcceptConnectPort</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">ConnectionPortHandle</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">,</span> <span class="n">PortAttributes</span><span class="p">,</span> <span class="n">PortContext</span><span class="p">,</span> <span class="n">ConnectionRequest</span><span class="p">,</span> <span class="n">ConnectionMessageAttributes</span><span class="p">,</span> <span class="n">AcceptConnection</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtAlpcQueryInformation&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtAlpcQueryInformation</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">PortInformationClass</span><span class="p">,</span> <span class="n">PortInformation</span><span class="p">,</span> <span class="n">Length</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtAlpcQueryInformation</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">PortInformationClass</span><span class="p">,</span> <span class="n">PortInformation</span><span class="p">,</span> <span class="n">Length</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtAlpcDisconnectPort&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtAlpcDisconnectPort</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">Flags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtAlpcDisconnectPort</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">Flags</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtAlpcSendWaitReceivePort&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtAlpcSendWaitReceivePort</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">SendMessage</span><span class="p">,</span> <span class="n">SendMessageAttributes</span><span class="p">,</span> <span class="n">ReceiveMessage</span><span class="p">,</span> <span class="n">BufferLength</span><span class="p">,</span> <span class="n">ReceiveMessageAttributes</span><span class="p">,</span> <span class="n">Timeout</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtAlpcSendWaitReceivePort</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">SendMessage</span><span class="p">,</span> <span class="n">SendMessageAttributes</span><span class="p">,</span> <span class="n">ReceiveMessage</span><span class="p">,</span> <span class="n">BufferLength</span><span class="p">,</span> <span class="n">ReceiveMessageAttributes</span><span class="p">,</span> <span class="n">Timeout</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;AlpcInitializeMessageAttribute&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">AlpcInitializeMessageAttribute</span><span class="p">(</span><span class="n">AttributeFlags</span><span class="p">,</span> <span class="n">Buffer</span><span class="p">,</span> <span class="n">BufferSize</span><span class="p">,</span> <span class="n">RequiredBufferSize</span><span class="p">):</span>
<span class="k">return</span> <span class="n">AlpcInitializeMessageAttribute</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">AttributeFlags</span><span class="p">,</span> <span class="n">Buffer</span><span class="p">,</span> <span class="n">BufferSize</span><span class="p">,</span> <span class="n">RequiredBufferSize</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;AlpcGetMessageAttribute&quot;</span><span class="p">,</span> <span class="n">no_error_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">AlpcGetMessageAttribute</span><span class="p">(</span><span class="n">Buffer</span><span class="p">,</span> <span class="n">AttributeFlag</span><span class="p">):</span>
<span class="k">return</span> <span class="n">AlpcGetMessageAttribute</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">Buffer</span><span class="p">,</span> <span class="n">AttributeFlag</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtAlpcCreatePortSection&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtAlpcCreatePortSection</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">SectionHandle</span><span class="p">,</span> <span class="n">SectionSize</span><span class="p">,</span> <span class="n">AlpcSectionHandle</span><span class="p">,</span> <span class="n">ActualSectionSize</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtAlpcCreatePortSection</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">SectionHandle</span><span class="p">,</span> <span class="n">SectionSize</span><span class="p">,</span> <span class="n">AlpcSectionHandle</span><span class="p">,</span> <span class="n">ActualSectionSize</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtAlpcDeletePortSection&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtAlpcDeletePortSection</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">SectionHandle</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtAlpcDeletePortSection</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">SectionHandle</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtAlpcCreateSectionView&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtAlpcCreateSectionView</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">ViewAttributes</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtAlpcCreateSectionView</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">ViewAttributes</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtAlpcDeleteSectionView&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtAlpcDeleteSectionView</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">ViewBase</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtAlpcDeleteSectionView</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">ViewBase</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtAlpcQueryInformationMessage&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtAlpcQueryInformationMessage</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">PortMessage</span><span class="p">,</span> <span class="n">MessageInformationClass</span><span class="p">,</span> <span class="n">MessageInformation</span><span class="p">,</span> <span class="n">Length</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtAlpcQueryInformationMessage</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">PortMessage</span><span class="p">,</span> <span class="n">MessageInformationClass</span><span class="p">,</span> <span class="n">MessageInformation</span><span class="p">,</span> <span class="n">Length</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtOpenDirectoryObject&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtOpenDirectoryObject</span><span class="p">(</span><span class="n">DirectoryHandle</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtOpenDirectoryObject</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">DirectoryHandle</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtQueryDirectoryObject&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtQueryDirectoryObject</span><span class="p">(</span><span class="n">DirectoryHandle</span><span class="p">,</span> <span class="n">Buffer</span><span class="p">,</span> <span class="n">Length</span><span class="p">,</span> <span class="n">ReturnSingleEntry</span><span class="p">,</span> <span class="n">RestartScan</span><span class="p">,</span> <span class="n">Context</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtQueryDirectoryObject</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">DirectoryHandle</span><span class="p">,</span> <span class="n">Buffer</span><span class="p">,</span> <span class="n">Length</span><span class="p">,</span> <span class="n">ReturnSingleEntry</span><span class="p">,</span> <span class="n">RestartScan</span><span class="p">,</span> <span class="n">Context</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtQuerySymbolicLinkObject&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtQuerySymbolicLinkObject</span><span class="p">(</span><span class="n">LinkHandle</span><span class="p">,</span> <span class="n">LinkTarget</span><span class="p">,</span> <span class="n">ReturnedLength</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtQuerySymbolicLinkObject</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">LinkHandle</span><span class="p">,</span> <span class="n">LinkTarget</span><span class="p">,</span> <span class="n">ReturnedLength</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtOpenSymbolicLinkObject&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtOpenSymbolicLinkObject</span><span class="p">(</span><span class="n">LinkHandle</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtOpenSymbolicLinkObject</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">LinkHandle</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtQueryInformationFile&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtQueryInformationFile</span><span class="p">(</span><span class="n">FileHandle</span><span class="p">,</span> <span class="n">IoStatusBlock</span><span class="p">,</span> <span class="n">FileInformation</span><span class="p">,</span> <span class="n">Length</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">FileInformationClass</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">if</span> <span class="n">Length</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">Length</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">FileInformation</span><span class="p">)</span>
<span class="k">return</span> <span class="n">NtQueryInformationFile</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">FileHandle</span><span class="p">,</span> <span class="n">IoStatusBlock</span><span class="p">,</span> <span class="n">FileInformation</span><span class="p">,</span> <span class="n">Length</span><span class="p">,</span> <span class="n">FileInformationClass</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtQueryDirectoryFile&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtQueryDirectoryFile</span><span class="p">(</span><span class="n">FileHandle</span><span class="p">,</span> <span class="n">Event</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ApcRoutine</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ApcContext</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">IoStatusBlock</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">FileInformation</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">Length</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">FileInformationClass</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">ReturnSingleEntry</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">FileName</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">RestartScan</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">if</span> <span class="n">Length</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">Length</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">FileInformation</span><span class="p">)</span>
<span class="k">return</span> <span class="n">NtQueryDirectoryFile</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">FileHandle</span><span class="p">,</span> <span class="n">Event</span><span class="p">,</span> <span class="n">ApcRoutine</span><span class="p">,</span> <span class="n">ApcContext</span><span class="p">,</span> <span class="n">IoStatusBlock</span><span class="p">,</span> <span class="n">FileInformation</span><span class="p">,</span> <span class="n">Length</span><span class="p">,</span> <span class="n">FileInformationClass</span><span class="p">,</span> <span class="n">ReturnSingleEntry</span><span class="p">,</span> <span class="n">FileName</span><span class="p">,</span> <span class="n">RestartScan</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtQueryVolumeInformationFile&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtQueryVolumeInformationFile</span><span class="p">(</span><span class="n">FileHandle</span><span class="p">,</span> <span class="n">IoStatusBlock</span><span class="p">,</span> <span class="n">FsInformation</span><span class="p">,</span> <span class="n">Length</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">FsInformationClass</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">if</span> <span class="n">Length</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">Length</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">FsInformation</span><span class="p">)</span>
<span class="k">return</span> <span class="n">NtQueryVolumeInformationFile</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">FileHandle</span><span class="p">,</span> <span class="n">IoStatusBlock</span><span class="p">,</span> <span class="n">FsInformation</span><span class="p">,</span> <span class="n">Length</span><span class="p">,</span> <span class="n">FsInformationClass</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;RtlDecompressBuffer&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">RtlDecompressBuffer</span><span class="p">(</span><span class="n">CompressionFormat</span><span class="p">,</span> <span class="n">UncompressedBuffer</span><span class="p">,</span> <span class="n">UncompressedBufferSize</span><span class="p">,</span> <span class="n">CompressedBuffer</span><span class="p">,</span> <span class="n">CompressedBufferSize</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">FinalUncompressedSize</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">if</span> <span class="n">CompressedBufferSize</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">CompressedBufferSize</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">CompressedBuffer</span><span class="p">)</span>
<span class="k">return</span> <span class="n">RtlDecompressBuffer</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">CompressionFormat</span><span class="p">,</span> <span class="n">UncompressedBuffer</span><span class="p">,</span> <span class="n">UncompressedBufferSize</span><span class="p">,</span> <span class="n">CompressedBuffer</span><span class="p">,</span> <span class="n">CompressedBufferSize</span><span class="p">,</span> <span class="n">FinalUncompressedSize</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;RtlDecompressBufferEx&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">RtlDecompressBufferEx</span><span class="p">(</span><span class="n">CompressionFormat</span><span class="p">,</span> <span class="n">UncompressedBuffer</span><span class="p">,</span> <span class="n">UncompressedBufferSize</span><span class="p">,</span> <span class="n">CompressedBuffer</span><span class="p">,</span> <span class="n">CompressedBufferSize</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">FinalUncompressedSize</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">WorkSpace</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">if</span> <span class="n">CompressedBufferSize</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">CompressedBufferSize</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">CompressedBuffer</span><span class="p">)</span>
<span class="c1"># TODO: automatic &#39;WorkSpace&#39; size calc + allocation ?</span>
<span class="k">return</span> <span class="n">RtlDecompressBufferEx</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">CompressionFormat</span><span class="p">,</span> <span class="n">UncompressedBuffer</span><span class="p">,</span> <span class="n">UncompressedBufferSize</span><span class="p">,</span> <span class="n">CompressedBuffer</span><span class="p">,</span> <span class="n">CompressedBufferSize</span><span class="p">,</span> <span class="n">FinalUncompressedSize</span><span class="p">,</span> <span class="n">WorkSpace</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;RtlGetCompressionWorkSpaceSize&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">RtlGetCompressionWorkSpaceSize</span><span class="p">(</span><span class="n">CompressionFormatAndEngine</span><span class="p">,</span> <span class="n">CompressBufferWorkSpaceSize</span><span class="p">,</span> <span class="n">CompressFragmentWorkSpaceSize</span><span class="p">):</span>
<span class="k">return</span> <span class="n">RtlGetCompressionWorkSpaceSize</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">CompressionFormatAndEngine</span><span class="p">,</span> <span class="n">CompressBufferWorkSpaceSize</span><span class="p">,</span> <span class="n">CompressFragmentWorkSpaceSize</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;RtlDosPathNameToNtPathName_U&quot;</span><span class="p">,</span> <span class="n">zero_is_fail_error_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">RtlDosPathNameToNtPathName_U</span><span class="p">(</span><span class="n">DosName</span><span class="p">,</span> <span class="n">NtName</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">PartName</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">RelativeName</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">return</span> <span class="n">RtlDosPathNameToNtPathName_U</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">DosName</span><span class="p">,</span> <span class="n">NtName</span><span class="p">,</span> <span class="n">PartName</span><span class="p">,</span> <span class="n">RelativeName</span><span class="p">)</span>
<span class="c1"># Section stuff</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtCreateSection&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtCreateSection</span><span class="p">(</span><span class="n">SectionHandle</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">,</span> <span class="n">MaximumSize</span><span class="p">,</span> <span class="n">SectionPageProtection</span><span class="p">,</span> <span class="n">AllocationAttributes</span><span class="p">,</span> <span class="n">FileHandle</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtCreateSection</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">SectionHandle</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">,</span> <span class="n">MaximumSize</span><span class="p">,</span> <span class="n">SectionPageProtection</span><span class="p">,</span> <span class="n">AllocationAttributes</span><span class="p">,</span> <span class="n">FileHandle</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtOpenSection&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtOpenSection</span><span class="p">(</span><span class="n">SectionHandle</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtOpenSection</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">SectionHandle</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtMapViewOfSection&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtMapViewOfSection</span><span class="p">(</span><span class="n">SectionHandle</span><span class="p">,</span> <span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">BaseAddress</span><span class="p">,</span> <span class="n">ZeroBits</span><span class="p">,</span> <span class="n">CommitSize</span><span class="p">,</span> <span class="n">SectionOffset</span><span class="p">,</span> <span class="n">ViewSize</span><span class="p">,</span> <span class="n">InheritDisposition</span><span class="p">,</span> <span class="n">AllocationType</span><span class="p">,</span> <span class="n">Win32Protect</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtMapViewOfSection</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">SectionHandle</span><span class="p">,</span> <span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">BaseAddress</span><span class="p">,</span> <span class="n">ZeroBits</span><span class="p">,</span> <span class="n">CommitSize</span><span class="p">,</span> <span class="n">SectionOffset</span><span class="p">,</span> <span class="n">ViewSize</span><span class="p">,</span> <span class="n">InheritDisposition</span><span class="p">,</span> <span class="n">AllocationType</span><span class="p">,</span> <span class="n">Win32Protect</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtUnmapViewOfSection&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtUnmapViewOfSection</span><span class="p">(</span><span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">BaseAddress</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtUnmapViewOfSection</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">BaseAddress</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;RtlGetUnloadEventTraceEx&quot;</span><span class="p">,</span> <span class="n">no_error_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">RtlGetUnloadEventTraceEx</span><span class="p">(</span><span class="n">ElementSize</span><span class="p">,</span> <span class="n">ElementCount</span><span class="p">,</span> <span class="n">EventTrace</span><span class="p">):</span>
<span class="k">return</span> <span class="n">RtlGetUnloadEventTraceEx</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">ElementSize</span><span class="p">,</span> <span class="n">ElementCount</span><span class="p">,</span> <span class="n">EventTrace</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;TpCallbackSendAlpcMessageOnCompletion&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">TpCallbackSendAlpcMessageOnCompletion</span><span class="p">(</span><span class="n">TpHandle</span><span class="p">,</span> <span class="n">PortHandle</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">SendMessage</span><span class="p">):</span>
<span class="k">return</span> <span class="n">TpCallbackSendAlpcMessageOnCompletion</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">TpHandle</span><span class="p">,</span> <span class="n">PortHandle</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">SendMessage</span><span class="p">)</span>
<span class="c1"># low level registry</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtOpenKey&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtOpenKey</span><span class="p">(</span><span class="n">KeyHandle</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtOpenKey</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">KeyHandle</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtCreateKey&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtCreateKey</span><span class="p">(</span><span class="n">pKeyHandle</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">,</span> <span class="n">TitleIndex</span><span class="p">,</span> <span class="n">Class</span><span class="p">,</span> <span class="n">CreateOptions</span><span class="p">,</span> <span class="n">Disposition</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtCreateKey</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pKeyHandle</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="p">,</span> <span class="n">ObjectAttributes</span><span class="p">,</span> <span class="n">TitleIndex</span><span class="p">,</span> <span class="n">Class</span><span class="p">,</span> <span class="n">CreateOptions</span><span class="p">,</span> <span class="n">Disposition</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtSetValueKey&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtSetValueKey</span><span class="p">(</span><span class="n">KeyHandle</span><span class="p">,</span> <span class="n">ValueName</span><span class="p">,</span> <span class="n">TitleIndex</span><span class="p">,</span> <span class="n">Type</span><span class="p">,</span> <span class="n">Data</span><span class="p">,</span> <span class="n">DataSize</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtSetValueKey</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">KeyHandle</span><span class="p">,</span> <span class="n">ValueName</span><span class="p">,</span> <span class="n">TitleIndex</span><span class="p">,</span> <span class="n">Type</span><span class="p">,</span> <span class="n">Data</span><span class="p">,</span> <span class="n">DataSize</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtQueryValueKey&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtQueryValueKey</span><span class="p">(</span><span class="n">KeyHandle</span><span class="p">,</span> <span class="n">ValueName</span><span class="p">,</span> <span class="n">KeyValueInformationClass</span><span class="p">,</span> <span class="n">KeyValueInformation</span><span class="p">,</span> <span class="n">Length</span><span class="p">,</span> <span class="n">ResultLength</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtQueryValueKey</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">KeyHandle</span><span class="p">,</span> <span class="n">ValueName</span><span class="p">,</span> <span class="n">KeyValueInformationClass</span><span class="p">,</span> <span class="n">KeyValueInformation</span><span class="p">,</span> <span class="n">Length</span><span class="p">,</span> <span class="n">ResultLength</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtEnumerateValueKey&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtEnumerateValueKey</span><span class="p">(</span><span class="n">KeyHandle</span><span class="p">,</span> <span class="n">Index</span><span class="p">,</span> <span class="n">KeyValueInformationClass</span><span class="p">,</span> <span class="n">KeyValueInformation</span><span class="p">,</span> <span class="n">Length</span><span class="p">,</span> <span class="n">ResultLength</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NtEnumerateValueKey</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">KeyHandle</span><span class="p">,</span> <span class="n">Index</span><span class="p">,</span> <span class="n">KeyValueInformationClass</span><span class="p">,</span> <span class="n">KeyValueInformation</span><span class="p">,</span> <span class="n">Length</span><span class="p">,</span> <span class="n">ResultLength</span><span class="p">)</span>
<span class="nd">@NtdllProxy</span><span class="p">(</span><span class="s2">&quot;NtQueryLicenseValue&quot;</span><span class="p">,</span> <span class="n">error_ntstatus</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">NtQueryLicenseValue</span><span class="p">(</span><span class="n">Name</span><span class="p">,</span> <span class="n">Type</span><span class="p">,</span> <span class="n">Buffer</span><span class="p">,</span> <span class="n">Length</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">DataLength</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">if</span> <span class="n">Length</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">Buffer</span><span class="p">:</span>
<span class="n">Length</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span>
<span class="k">return</span> <span class="n">NtQueryLicenseValue</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">Name</span><span class="p">,</span> <span class="n">Type</span><span class="p">,</span> <span class="n">Buffer</span><span class="p">,</span> <span class="n">Length</span><span class="p">,</span> <span class="n">DataLength</span><span class="p">)</span>
<span class="c1"># Not exported</span>
<span class="c1"># @NtdllProxy(&quot;ApiSetResolveToHost&quot;)</span>
<span class="c1"># def ApiSetResolveToHost(Schema, FileNameIn, ParentName, Resolved, HostBinary):</span>
<span class="c1"># return ApiSetResolveToHost.ctypes_function(Schema, FileNameIn, ParentName, Resolved, HostBinary)</span>
<span class="c1"># ##### ADVAPI32 ####### #</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;OpenProcessToken&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">OpenProcessToken</span><span class="p">(</span><span class="n">ProcessHandle</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">TokenHandle</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;If ProcessHandle is None: take the current process&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">ProcessHandle</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">ProcessHandle</span> <span class="o">=</span> <span class="n">GetCurrentProcess</span><span class="p">()</span>
<span class="k">return</span> <span class="n">OpenProcessToken</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="p">,</span> <span class="n">TokenHandle</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;OpenThreadToken&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">OpenThreadToken</span><span class="p">(</span><span class="n">ThreadHandle</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="p">,</span> <span class="n">OpenAsSelf</span><span class="p">,</span> <span class="n">TokenHandle</span><span class="p">):</span>
<span class="k">return</span> <span class="n">OpenThreadToken</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">ThreadHandle</span><span class="p">,</span> <span class="n">DesiredAccess</span><span class="p">,</span> <span class="n">OpenAsSelf</span><span class="p">,</span> <span class="n">TokenHandle</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;SetThreadToken&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">SetThreadToken</span><span class="p">(</span><span class="n">Thread</span><span class="p">,</span> <span class="n">Token</span><span class="p">):</span>
<span class="k">return</span> <span class="n">SetThreadToken</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">Thread</span><span class="p">,</span> <span class="n">Token</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;DuplicateToken&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">DuplicateToken</span><span class="p">(</span><span class="n">ExistingTokenHandle</span><span class="p">,</span> <span class="n">ImpersonationLevel</span><span class="p">,</span> <span class="n">DuplicateTokenHandle</span><span class="p">):</span>
<span class="k">return</span> <span class="n">DuplicateToken</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">ExistingTokenHandle</span><span class="p">,</span> <span class="n">ImpersonationLevel</span><span class="p">,</span> <span class="n">DuplicateTokenHandle</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;DuplicateTokenEx&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">DuplicateTokenEx</span><span class="p">(</span><span class="n">hExistingToken</span><span class="p">,</span> <span class="n">dwDesiredAccess</span><span class="p">,</span> <span class="n">lpTokenAttributes</span><span class="p">,</span> <span class="n">ImpersonationLevel</span><span class="p">,</span> <span class="n">TokenType</span><span class="p">,</span> <span class="n">phNewToken</span><span class="p">):</span>
<span class="k">return</span> <span class="n">DuplicateTokenEx</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hExistingToken</span><span class="p">,</span> <span class="n">dwDesiredAccess</span><span class="p">,</span> <span class="n">lpTokenAttributes</span><span class="p">,</span> <span class="n">ImpersonationLevel</span><span class="p">,</span> <span class="n">TokenType</span><span class="p">,</span> <span class="n">phNewToken</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;LookupPrivilegeValueA&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">LookupPrivilegeValueA</span><span class="p">(</span><span class="n">lpSystemName</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpName</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">lpLuid</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">return</span> <span class="n">LookupPrivilegeValueA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpSystemName</span><span class="p">,</span> <span class="n">lpName</span><span class="p">,</span> <span class="n">lpLuid</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;LookupPrivilegeValueW&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">LookupPrivilegeValueW</span><span class="p">(</span><span class="n">lpSystemName</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpName</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">lpLuid</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">return</span> <span class="n">LookupPrivilegeValueW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpSystemName</span><span class="p">,</span> <span class="n">lpName</span><span class="p">,</span> <span class="n">lpLuid</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;LookupPrivilegeNameA&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">LookupPrivilegeNameA</span><span class="p">(</span><span class="n">lpSystemName</span><span class="p">,</span> <span class="n">lpLuid</span><span class="p">,</span> <span class="n">lpName</span><span class="p">,</span> <span class="n">cchName</span><span class="p">):</span>
<span class="k">return</span> <span class="n">LookupPrivilegeNameA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpSystemName</span><span class="p">,</span> <span class="n">lpLuid</span><span class="p">,</span> <span class="n">lpName</span><span class="p">,</span> <span class="n">cchName</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;LookupPrivilegeNameW&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">LookupPrivilegeNameW</span><span class="p">(</span><span class="n">lpSystemName</span><span class="p">,</span> <span class="n">lpLuid</span><span class="p">,</span> <span class="n">lpName</span><span class="p">,</span> <span class="n">cchName</span><span class="p">):</span>
<span class="k">return</span> <span class="n">LookupPrivilegeNameW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpSystemName</span><span class="p">,</span> <span class="n">lpLuid</span><span class="p">,</span> <span class="n">lpName</span><span class="p">,</span> <span class="n">cchName</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;AdjustTokenPrivileges&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">AdjustTokenPrivileges</span><span class="p">(</span><span class="n">TokenHandle</span><span class="p">,</span> <span class="n">DisableAllPrivileges</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">NewState</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">BufferLength</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">PreviousState</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">BufferLength</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">BufferLength</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">NewState</span><span class="p">)</span>
<span class="k">return</span> <span class="n">AdjustTokenPrivileges</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">TokenHandle</span><span class="p">,</span> <span class="n">DisableAllPrivileges</span><span class="p">,</span> <span class="n">NewState</span><span class="p">,</span> <span class="n">BufferLength</span><span class="p">,</span> <span class="n">PreviousState</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;LookupAccountSidA&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">LookupAccountSidA</span><span class="p">(</span><span class="n">lpSystemName</span><span class="p">,</span> <span class="n">lpSid</span><span class="p">,</span> <span class="n">lpName</span><span class="p">,</span> <span class="n">cchName</span><span class="p">,</span> <span class="n">lpReferencedDomainName</span><span class="p">,</span> <span class="n">cchReferencedDomainName</span><span class="p">,</span> <span class="n">peUse</span><span class="p">):</span>
<span class="k">return</span> <span class="n">LookupAccountSidA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpSystemName</span><span class="p">,</span> <span class="n">lpSid</span><span class="p">,</span> <span class="n">lpName</span><span class="p">,</span> <span class="n">cchName</span><span class="p">,</span> <span class="n">lpReferencedDomainName</span><span class="p">,</span> <span class="n">cchReferencedDomainName</span><span class="p">,</span> <span class="n">peUse</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;LookupAccountSidW&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">LookupAccountSidW</span><span class="p">(</span><span class="n">lpSystemName</span><span class="p">,</span> <span class="n">lpSid</span><span class="p">,</span> <span class="n">lpName</span><span class="p">,</span> <span class="n">cchName</span><span class="p">,</span> <span class="n">lpReferencedDomainName</span><span class="p">,</span> <span class="n">cchReferencedDomainName</span><span class="p">,</span> <span class="n">peUse</span><span class="p">):</span>
<span class="k">return</span> <span class="n">LookupAccountSidW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpSystemName</span><span class="p">,</span> <span class="n">lpSid</span><span class="p">,</span> <span class="n">lpName</span><span class="p">,</span> <span class="n">cchName</span><span class="p">,</span> <span class="n">lpReferencedDomainName</span><span class="p">,</span> <span class="n">cchReferencedDomainName</span><span class="p">,</span> <span class="n">peUse</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;CreateWellKnownSid&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CreateWellKnownSid</span><span class="p">(</span><span class="n">WellKnownSidType</span><span class="p">,</span> <span class="n">DomainSid</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pSid</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">cbSid</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CreateWellKnownSid</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">WellKnownSidType</span><span class="p">,</span> <span class="n">DomainSid</span><span class="p">,</span> <span class="n">pSid</span><span class="p">,</span> <span class="n">cbSid</span><span class="p">)</span>
<span class="c1"># Token stuff</span>
<span class="n">GetSidSubAuthorityCount</span> <span class="o">=</span> <span class="n">TransparentAdvapi32Proxy</span><span class="p">(</span><span class="s2">&quot;GetSidSubAuthorityCount&quot;</span><span class="p">)</span>
<span class="n">GetSidSubAuthority</span> <span class="o">=</span> <span class="n">TransparentAdvapi32Proxy</span><span class="p">(</span><span class="s2">&quot;GetSidSubAuthority&quot;</span><span class="p">)</span>
<span class="n">GetLengthSid</span> <span class="o">=</span> <span class="n">TransparentAdvapi32Proxy</span><span class="p">(</span><span class="s2">&quot;GetLengthSid&quot;</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;GetTokenInformation&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetTokenInformation</span><span class="p">(</span><span class="n">TokenHandle</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">TokenInformationClass</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">TokenInformation</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">TokenInformationLength</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">ReturnLength</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">ReturnLength</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">DWORD</span><span class="p">())</span>
<span class="k">return</span> <span class="n">GetTokenInformation</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">TokenHandle</span><span class="p">,</span> <span class="n">TokenInformationClass</span><span class="p">,</span> <span class="n">TokenInformation</span><span class="p">,</span> <span class="n">TokenInformationLength</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;SetTokenInformation&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">SetTokenInformation</span><span class="p">(</span><span class="n">TokenHandle</span><span class="p">,</span> <span class="n">TokenInformationClass</span><span class="p">,</span> <span class="n">TokenInformation</span><span class="p">,</span> <span class="n">TokenInformationLength</span><span class="p">):</span>
<span class="k">return</span> <span class="n">SetTokenInformation</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">TokenHandle</span><span class="p">,</span> <span class="n">TokenInformationClass</span><span class="p">,</span> <span class="n">TokenInformation</span><span class="p">,</span> <span class="n">TokenInformationLength</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;RegOpenKeyExA&#39;</span><span class="p">,</span> <span class="n">should_return_zero_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">RegOpenKeyExA</span><span class="p">(</span><span class="n">hKey</span><span class="p">,</span> <span class="n">lpSubKey</span><span class="p">,</span> <span class="n">ulOptions</span><span class="p">,</span> <span class="n">samDesired</span><span class="p">,</span> <span class="n">phkResult</span><span class="p">):</span>
<span class="k">return</span> <span class="n">RegOpenKeyExA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hKey</span><span class="p">,</span> <span class="n">lpSubKey</span><span class="p">,</span> <span class="n">ulOptions</span><span class="p">,</span> <span class="n">samDesired</span><span class="p">,</span> <span class="n">phkResult</span><span class="p">)</span>
<span class="c1"># Security stuff</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;GetNamedSecurityInfoA&#39;</span><span class="p">,</span> <span class="n">should_return_zero_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetNamedSecurityInfoA</span><span class="p">(</span><span class="n">pObjectName</span><span class="p">,</span> <span class="n">ObjectType</span><span class="p">,</span> <span class="n">SecurityInfo</span><span class="p">,</span> <span class="n">ppsidOwner</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ppsidGroup</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ppDacl</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ppSacl</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ppSecurityDescriptor</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">return</span> <span class="n">GetNamedSecurityInfoA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pObjectName</span><span class="p">,</span> <span class="n">ObjectType</span><span class="p">,</span> <span class="n">SecurityInfo</span><span class="p">,</span> <span class="n">ppsidOwner</span><span class="p">,</span> <span class="n">ppsidGroup</span><span class="p">,</span> <span class="n">ppDacl</span><span class="p">,</span> <span class="n">ppSacl</span><span class="p">,</span> <span class="n">ppSecurityDescriptor</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;GetNamedSecurityInfoW&#39;</span><span class="p">,</span> <span class="n">should_return_zero_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetNamedSecurityInfoW</span><span class="p">(</span><span class="n">pObjectName</span><span class="p">,</span> <span class="n">ObjectType</span><span class="p">,</span> <span class="n">SecurityInfo</span><span class="p">,</span> <span class="n">ppsidOwner</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ppsidGroup</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ppDacl</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ppSacl</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ppSecurityDescriptor</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">return</span> <span class="n">GetNamedSecurityInfoW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pObjectName</span><span class="p">,</span> <span class="n">ObjectType</span><span class="p">,</span> <span class="n">SecurityInfo</span><span class="p">,</span> <span class="n">ppsidOwner</span><span class="p">,</span> <span class="n">ppsidGroup</span><span class="p">,</span> <span class="n">ppDacl</span><span class="p">,</span> <span class="n">ppSacl</span><span class="p">,</span> <span class="n">ppSecurityDescriptor</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;GetSecurityInfo&#39;</span><span class="p">,</span> <span class="n">should_return_zero_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetSecurityInfo</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">ObjectType</span><span class="p">,</span> <span class="n">SecurityInfo</span><span class="p">,</span> <span class="n">ppsidOwner</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ppsidGroup</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ppDacl</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ppSacl</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ppSecurityDescriptor</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">return</span> <span class="n">GetSecurityInfo</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">ObjectType</span><span class="p">,</span> <span class="n">SecurityInfo</span><span class="p">,</span> <span class="n">ppsidOwner</span><span class="p">,</span> <span class="n">ppsidGroup</span><span class="p">,</span> <span class="n">ppDacl</span><span class="p">,</span> <span class="n">ppSacl</span><span class="p">,</span> <span class="n">ppSecurityDescriptor</span><span class="p">)</span>
<span class="c1"># Sid stuff</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;ConvertStringSidToSidA&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">ConvertStringSidToSidA</span><span class="p">(</span><span class="n">StringSid</span><span class="p">,</span> <span class="n">Sid</span><span class="p">):</span>
<span class="k">return</span> <span class="n">ConvertStringSidToSidA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">StringSid</span><span class="p">,</span> <span class="n">Sid</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;ConvertStringSidToSidW&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">ConvertStringSidToSidW</span><span class="p">(</span><span class="n">StringSid</span><span class="p">,</span> <span class="n">Sid</span><span class="p">):</span>
<span class="k">return</span> <span class="n">ConvertStringSidToSidW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">StringSid</span><span class="p">,</span> <span class="n">Sid</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;ConvertSidToStringSidA&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">ConvertSidToStringSidA</span><span class="p">(</span><span class="n">Sid</span><span class="p">,</span> <span class="n">StringSid</span><span class="p">):</span>
<span class="k">return</span> <span class="n">ConvertSidToStringSidA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">Sid</span><span class="p">,</span> <span class="n">StringSid</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;ConvertSidToStringSidW&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">ConvertSidToStringSidW</span><span class="p">(</span><span class="n">Sid</span><span class="p">,</span> <span class="n">StringSid</span><span class="p">):</span>
<span class="k">return</span> <span class="n">ConvertSidToStringSidW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">Sid</span><span class="p">,</span> <span class="n">StringSid</span><span class="p">)</span>
<span class="c1"># Registry stuff</span>
<span class="c1"># TODO: default values? which ones ?</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;RegOpenKeyExW&#39;</span><span class="p">,</span> <span class="n">should_return_zero_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">RegOpenKeyExW</span><span class="p">(</span><span class="n">hKey</span><span class="p">,</span> <span class="n">lpSubKey</span><span class="p">,</span> <span class="n">ulOptions</span><span class="p">,</span> <span class="n">samDesired</span><span class="p">,</span> <span class="n">phkResult</span><span class="p">):</span>
<span class="k">return</span> <span class="n">RegOpenKeyExW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hKey</span><span class="p">,</span> <span class="n">lpSubKey</span><span class="p">,</span> <span class="n">ulOptions</span><span class="p">,</span> <span class="n">samDesired</span><span class="p">,</span> <span class="n">phkResult</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;RegGetValueA&#39;</span><span class="p">,</span> <span class="n">should_return_zero_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">RegGetValueA</span><span class="p">(</span><span class="n">hkey</span><span class="p">,</span> <span class="n">lpSubKey</span><span class="p">,</span> <span class="n">lpValue</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pdwType</span><span class="p">,</span> <span class="n">pvData</span><span class="p">,</span> <span class="n">pcbData</span><span class="p">):</span>
<span class="k">return</span> <span class="n">RegGetValueA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hkey</span><span class="p">,</span> <span class="n">lpSubKey</span><span class="p">,</span> <span class="n">lpValue</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pdwType</span><span class="p">,</span> <span class="n">pvData</span><span class="p">,</span> <span class="n">pcbData</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;RegGetValueW&#39;</span><span class="p">,</span> <span class="n">should_return_zero_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">RegGetValueW</span><span class="p">(</span><span class="n">hkey</span><span class="p">,</span> <span class="n">lpSubKey</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpValue</span><span class="o">=</span><span class="n">NeededParameter</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">pdwType</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pvData</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pcbData</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">return</span> <span class="n">RegGetValueW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hkey</span><span class="p">,</span> <span class="n">lpSubKey</span><span class="p">,</span> <span class="n">lpValue</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pdwType</span><span class="p">,</span> <span class="n">pvData</span><span class="p">,</span> <span class="n">pcbData</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;RegQueryValueExA&#39;</span><span class="p">,</span> <span class="n">should_return_zero_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">RegQueryValueExA</span><span class="p">(</span><span class="n">hKey</span><span class="p">,</span> <span class="n">lpValueName</span><span class="p">,</span> <span class="n">lpReserved</span><span class="p">,</span> <span class="n">lpType</span><span class="p">,</span> <span class="n">lpData</span><span class="p">,</span> <span class="n">lpcbData</span><span class="p">):</span>
<span class="k">return</span> <span class="n">RegQueryValueExA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hKey</span><span class="p">,</span> <span class="n">lpValueName</span><span class="p">,</span> <span class="n">lpReserved</span><span class="p">,</span> <span class="n">lpType</span><span class="p">,</span> <span class="n">lpData</span><span class="p">,</span> <span class="n">lpcbData</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;RegQueryValueExW&#39;</span><span class="p">,</span> <span class="n">should_return_zero_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">RegQueryValueExW</span><span class="p">(</span><span class="n">hKey</span><span class="p">,</span> <span class="n">lpValueName</span><span class="p">,</span> <span class="n">lpReserved</span><span class="p">,</span> <span class="n">lpType</span><span class="p">,</span> <span class="n">lpData</span><span class="p">,</span> <span class="n">lpcbData</span><span class="p">):</span>
<span class="k">return</span> <span class="n">RegQueryValueExA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hKey</span><span class="p">,</span> <span class="n">lpValueName</span><span class="p">,</span> <span class="n">lpReserved</span><span class="p">,</span> <span class="n">lpType</span><span class="p">,</span> <span class="n">lpData</span><span class="p">,</span> <span class="n">lpcbData</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;RegCloseKey&#39;</span><span class="p">,</span> <span class="n">should_return_zero_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">RegCloseKey</span><span class="p">(</span><span class="n">hKey</span><span class="p">):</span>
<span class="k">return</span> <span class="n">RegCloseKey</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hKey</span><span class="p">)</span>
<span class="c1"># Services</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;OpenSCManagerA&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">OpenSCManagerA</span><span class="p">(</span><span class="n">lpMachineName</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpDatabaseName</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dwDesiredAccess</span><span class="o">=</span><span class="n">SC_MANAGER_ALL_ACCESS</span><span class="p">):</span>
<span class="k">return</span> <span class="n">OpenSCManagerA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpMachineName</span><span class="p">,</span> <span class="n">lpDatabaseName</span><span class="p">,</span> <span class="n">dwDesiredAccess</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;OpenSCManagerW&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">OpenSCManagerW</span><span class="p">(</span><span class="n">lpMachineName</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpDatabaseName</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dwDesiredAccess</span><span class="o">=</span><span class="n">SC_MANAGER_ALL_ACCESS</span><span class="p">):</span>
<span class="k">return</span> <span class="n">OpenSCManagerW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpMachineName</span><span class="p">,</span> <span class="n">lpDatabaseName</span><span class="p">,</span> <span class="n">dwDesiredAccess</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;EnumServicesStatusExA&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EnumServicesStatusExA</span><span class="p">(</span><span class="n">hSCManager</span><span class="p">,</span> <span class="n">InfoLevel</span><span class="p">,</span> <span class="n">dwServiceType</span><span class="p">,</span> <span class="n">dwServiceState</span><span class="p">,</span> <span class="n">lpServices</span><span class="p">,</span> <span class="n">cbBufSize</span><span class="p">,</span> <span class="n">pcbBytesNeeded</span><span class="p">,</span> <span class="n">lpServicesReturned</span><span class="p">,</span> <span class="n">lpResumeHandle</span><span class="p">,</span> <span class="n">pszGroupName</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EnumServicesStatusExA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hSCManager</span><span class="p">,</span> <span class="n">InfoLevel</span><span class="p">,</span> <span class="n">dwServiceType</span><span class="p">,</span> <span class="n">dwServiceState</span><span class="p">,</span> <span class="n">lpServices</span><span class="p">,</span> <span class="n">cbBufSize</span><span class="p">,</span> <span class="n">pcbBytesNeeded</span><span class="p">,</span> <span class="n">lpServicesReturned</span><span class="p">,</span> <span class="n">lpResumeHandle</span><span class="p">,</span> <span class="n">pszGroupName</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;EnumServicesStatusExW&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EnumServicesStatusExW</span><span class="p">(</span><span class="n">hSCManager</span><span class="p">,</span> <span class="n">InfoLevel</span><span class="p">,</span> <span class="n">dwServiceType</span><span class="p">,</span> <span class="n">dwServiceState</span><span class="p">,</span> <span class="n">lpServices</span><span class="p">,</span> <span class="n">cbBufSize</span><span class="p">,</span> <span class="n">pcbBytesNeeded</span><span class="p">,</span> <span class="n">lpServicesReturned</span><span class="p">,</span> <span class="n">lpResumeHandle</span><span class="p">,</span> <span class="n">pszGroupName</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EnumServicesStatusExW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hSCManager</span><span class="p">,</span> <span class="n">InfoLevel</span><span class="p">,</span> <span class="n">dwServiceType</span><span class="p">,</span> <span class="n">dwServiceState</span><span class="p">,</span> <span class="n">lpServices</span><span class="p">,</span> <span class="n">cbBufSize</span><span class="p">,</span> <span class="n">pcbBytesNeeded</span><span class="p">,</span> <span class="n">lpServicesReturned</span><span class="p">,</span> <span class="n">lpResumeHandle</span><span class="p">,</span> <span class="n">pszGroupName</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;StartServiceA&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">StartServiceA</span><span class="p">(</span><span class="n">hService</span><span class="p">,</span> <span class="n">dwNumServiceArgs</span><span class="p">,</span> <span class="n">lpServiceArgVectors</span><span class="p">):</span>
<span class="k">return</span> <span class="n">StartServiceA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hService</span><span class="p">,</span> <span class="n">dwNumServiceArgs</span><span class="p">,</span> <span class="n">lpServiceArgVectors</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;StartServiceW&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">StartServiceW</span><span class="p">(</span><span class="n">hService</span><span class="p">,</span> <span class="n">dwNumServiceArgs</span><span class="p">,</span> <span class="n">lpServiceArgVectors</span><span class="p">):</span>
<span class="k">return</span> <span class="n">StartServiceW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hService</span><span class="p">,</span> <span class="n">dwNumServiceArgs</span><span class="p">,</span> <span class="n">lpServiceArgVectors</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;OpenServiceA&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">OpenServiceA</span><span class="p">(</span><span class="n">hSCManager</span><span class="p">,</span> <span class="n">lpServiceName</span><span class="p">,</span> <span class="n">dwDesiredAccess</span><span class="p">):</span>
<span class="k">return</span> <span class="n">OpenServiceA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hSCManager</span><span class="p">,</span> <span class="n">lpServiceName</span><span class="p">,</span> <span class="n">dwDesiredAccess</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;OpenServiceW&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">OpenServiceW</span><span class="p">(</span><span class="n">hSCManager</span><span class="p">,</span> <span class="n">lpServiceName</span><span class="p">,</span> <span class="n">dwDesiredAccess</span><span class="p">):</span>
<span class="k">return</span> <span class="n">OpenServiceW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hSCManager</span><span class="p">,</span> <span class="n">lpServiceName</span><span class="p">,</span> <span class="n">dwDesiredAccess</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;CloseServiceHandle&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CloseServiceHandle</span><span class="p">(</span><span class="n">hSCObject</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CloseServiceHandle</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hSCObject</span><span class="p">)</span>
<span class="c1"># Create process stuff</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;CreateProcessAsUserA&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CreateProcessAsUserA</span><span class="p">(</span><span class="n">hToken</span><span class="p">,</span> <span class="n">lpApplicationName</span><span class="p">,</span> <span class="n">lpCommandLine</span><span class="p">,</span> <span class="n">lpProcessAttributes</span><span class="p">,</span> <span class="n">lpThreadAttributes</span><span class="p">,</span> <span class="n">bInheritHandles</span><span class="p">,</span> <span class="n">dwCreationFlags</span><span class="p">,</span> <span class="n">lpEnvironment</span><span class="p">,</span> <span class="n">lpCurrentDirectory</span><span class="p">,</span> <span class="n">lpStartupInfo</span><span class="p">,</span> <span class="n">lpProcessInformation</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CreateProcessAsUserA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hToken</span><span class="p">,</span> <span class="n">lpApplicationName</span><span class="p">,</span> <span class="n">lpCommandLine</span><span class="p">,</span> <span class="n">lpProcessAttributes</span><span class="p">,</span> <span class="n">lpThreadAttributes</span><span class="p">,</span> <span class="n">bInheritHandles</span><span class="p">,</span> <span class="n">dwCreationFlags</span><span class="p">,</span> <span class="n">lpEnvironment</span><span class="p">,</span> <span class="n">lpCurrentDirectory</span><span class="p">,</span> <span class="n">lpStartupInfo</span><span class="p">,</span> <span class="n">lpProcessInformation</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;CreateProcessAsUserW&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CreateProcessAsUserW</span><span class="p">(</span><span class="n">hToken</span><span class="p">,</span> <span class="n">lpApplicationName</span><span class="p">,</span> <span class="n">lpCommandLine</span><span class="p">,</span> <span class="n">lpProcessAttributes</span><span class="p">,</span> <span class="n">lpThreadAttributes</span><span class="p">,</span> <span class="n">bInheritHandles</span><span class="p">,</span> <span class="n">dwCreationFlags</span><span class="p">,</span> <span class="n">lpEnvironment</span><span class="p">,</span> <span class="n">lpCurrentDirectory</span><span class="p">,</span> <span class="n">lpStartupInfo</span><span class="p">,</span> <span class="n">lpProcessInformation</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CreateProcessAsUserW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hToken</span><span class="p">,</span> <span class="n">lpApplicationName</span><span class="p">,</span> <span class="n">lpCommandLine</span><span class="p">,</span> <span class="n">lpProcessAttributes</span><span class="p">,</span> <span class="n">lpThreadAttributes</span><span class="p">,</span> <span class="n">bInheritHandles</span><span class="p">,</span> <span class="n">dwCreationFlags</span><span class="p">,</span> <span class="n">lpEnvironment</span><span class="p">,</span> <span class="n">lpCurrentDirectory</span><span class="p">,</span> <span class="n">lpStartupInfo</span><span class="p">,</span> <span class="n">lpProcessInformation</span><span class="p">)</span>
<span class="c1"># Event log stuff</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;OpenEventLogA&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">OpenEventLogA</span><span class="p">(</span><span class="n">lpUNCServerName</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpSourceName</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">return</span> <span class="n">OpenEventLogA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpUNCServerName</span><span class="p">,</span> <span class="n">lpSourceName</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;OpenEventLogW&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">OpenEventLogW</span><span class="p">(</span><span class="n">lpUNCServerName</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpSourceName</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">return</span> <span class="n">OpenEventLogW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpUNCServerName</span><span class="p">,</span> <span class="n">lpSourceName</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;OpenBackupEventLogA&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">OpenBackupEventLogA</span><span class="p">(</span><span class="n">lpUNCServerName</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpSourceName</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">return</span> <span class="n">OpenBackupEventLogA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpUNCServerName</span><span class="p">,</span> <span class="n">lpSourceName</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;OpenBackupEventLogW&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">OpenBackupEventLogW</span><span class="p">(</span><span class="n">lpUNCServerName</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpSourceName</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">return</span> <span class="n">OpenBackupEventLogW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpUNCServerName</span><span class="p">,</span> <span class="n">lpSourceName</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;ReadEventLogA&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">ReadEventLogA</span><span class="p">(</span><span class="n">hEventLog</span><span class="p">,</span> <span class="n">dwReadFlags</span><span class="p">,</span> <span class="n">dwRecordOffset</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">nNumberOfBytesToRead</span><span class="p">,</span> <span class="n">pnBytesRead</span><span class="p">,</span> <span class="n">pnMinNumberOfBytesNeeded</span><span class="p">):</span>
<span class="k">return</span> <span class="n">ReadEventLogA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hEventLog</span><span class="p">,</span> <span class="n">dwReadFlags</span><span class="p">,</span> <span class="n">dwRecordOffset</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">nNumberOfBytesToRead</span><span class="p">,</span> <span class="n">pnBytesRead</span><span class="p">,</span> <span class="n">pnMinNumberOfBytesNeeded</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;ReadEventLogW&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">ReadEventLogW</span><span class="p">(</span><span class="n">hEventLog</span><span class="p">,</span> <span class="n">dwReadFlags</span><span class="p">,</span> <span class="n">dwRecordOffset</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">nNumberOfBytesToRead</span><span class="p">,</span> <span class="n">pnBytesRead</span><span class="p">,</span> <span class="n">pnMinNumberOfBytesNeeded</span><span class="p">):</span>
<span class="k">return</span> <span class="n">ReadEventLogW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hEventLog</span><span class="p">,</span> <span class="n">dwReadFlags</span><span class="p">,</span> <span class="n">dwRecordOffset</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">nNumberOfBytesToRead</span><span class="p">,</span> <span class="n">pnBytesRead</span><span class="p">,</span> <span class="n">pnMinNumberOfBytesNeeded</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;GetEventLogInformation&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetEventLogInformation</span><span class="p">(</span><span class="n">hEventLog</span><span class="p">,</span> <span class="n">dwInfoLevel</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">cbBufSize</span><span class="p">,</span> <span class="n">pcbBytesNeeded</span><span class="p">):</span>
<span class="k">return</span> <span class="n">GetEventLogInformation</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hEventLog</span><span class="p">,</span> <span class="n">dwInfoLevel</span><span class="p">,</span> <span class="n">lpBuffer</span><span class="p">,</span> <span class="n">cbBufSize</span><span class="p">,</span> <span class="n">pcbBytesNeeded</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;GetNumberOfEventLogRecords&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetNumberOfEventLogRecords</span><span class="p">(</span><span class="n">hEventLog</span><span class="p">,</span> <span class="n">NumberOfRecords</span><span class="p">):</span>
<span class="k">return</span> <span class="n">GetNumberOfEventLogRecords</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hEventLog</span><span class="p">,</span> <span class="n">NumberOfRecords</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;CloseEventLog&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CloseEventLog</span><span class="p">(</span><span class="n">hEventLog</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CloseEventLog</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hEventLog</span><span class="p">)</span>
<span class="c1"># ##### Iphlpapi (network list and stuff) ###### #</span>
<span class="k">def</span> <span class="nf">set_tcp_entry_error_check</span><span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="n">result</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;raise IphlpapiError if result is NOT 0 -- pretty print error 317&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">result</span><span class="p">:</span>
<span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="mi">317</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">IphlpapiError</span><span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="n">result</span><span class="p">,</span> <span class="s2">&quot;&lt;require elevated process&gt;&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="k">raise</span> <span class="n">IphlpapiError</span><span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span>
<span class="k">return</span> <span class="n">args</span>
<span class="n">SetTcpEntry</span> <span class="o">=</span> <span class="n">TransparentIphlpapiProxy</span><span class="p">(</span><span class="s1">&#39;SetTcpEntry&#39;</span><span class="p">,</span> <span class="n">error_check</span><span class="o">=</span><span class="n">set_tcp_entry_error_check</span><span class="p">)</span>
<span class="nd">@IphlpapiProxy</span><span class="p">(</span><span class="s1">&#39;GetExtendedTcpTable&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetExtendedTcpTable</span><span class="p">(</span><span class="n">pTcpTable</span><span class="p">,</span> <span class="n">pdwSize</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">bOrder</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">ulAf</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">TableClass</span><span class="o">=</span><span class="n">TCP_TABLE_OWNER_PID_ALL</span><span class="p">,</span> <span class="n">Reserved</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="k">if</span> <span class="n">pdwSize</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">pdwSize</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">sizeof</span><span class="p">(</span><span class="n">pTcpTable</span><span class="p">))</span>
<span class="k">return</span> <span class="n">GetExtendedTcpTable</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pTcpTable</span><span class="p">,</span> <span class="n">pdwSize</span><span class="p">,</span> <span class="n">bOrder</span><span class="p">,</span> <span class="n">ulAf</span><span class="p">,</span> <span class="n">TableClass</span><span class="p">,</span> <span class="n">Reserved</span><span class="p">)</span>
<span class="nd">@IphlpapiProxy</span><span class="p">(</span><span class="s1">&#39;GetInterfaceInfo&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetInterfaceInfo</span><span class="p">(</span><span class="n">pIfTable</span><span class="p">,</span> <span class="n">dwOutBufLen</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">dwOutBufLen</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">dwOutBufLen</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">sizeof</span><span class="p">(</span><span class="n">pIfTable</span><span class="p">))</span>
<span class="k">return</span> <span class="n">GetInterfaceInfo</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pIfTable</span><span class="p">,</span> <span class="n">dwOutBufLen</span><span class="p">)</span>
<span class="nd">@IphlpapiProxy</span><span class="p">(</span><span class="s1">&#39;GetIfTable&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetIfTable</span><span class="p">(</span><span class="n">pIfTable</span><span class="p">,</span> <span class="n">pdwSize</span><span class="p">,</span> <span class="n">bOrder</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="k">return</span> <span class="n">GetIfTable</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pIfTable</span><span class="p">,</span> <span class="n">pdwSize</span><span class="p">,</span> <span class="n">bOrder</span><span class="p">)</span>
<span class="nd">@IphlpapiProxy</span><span class="p">(</span><span class="s1">&#39;GetIpAddrTable&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetIpAddrTable</span><span class="p">(</span><span class="n">pIpAddrTable</span><span class="p">,</span> <span class="n">pdwSize</span><span class="p">,</span> <span class="n">bOrder</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="k">return</span> <span class="n">GetIpAddrTable</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pIpAddrTable</span><span class="p">,</span> <span class="n">pdwSize</span><span class="p">,</span> <span class="n">bOrder</span><span class="p">)</span>
<span class="c1"># ## WinTrustProxy PE signature##</span>
<span class="nd">@WinTrustProxy</span><span class="p">(</span><span class="s1">&#39;WinVerifyTrust&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">WinVerifyTrust</span><span class="p">(</span><span class="n">hwnd</span><span class="p">,</span> <span class="n">pgActionID</span><span class="p">,</span> <span class="n">pWVTData</span><span class="p">):</span>
<span class="k">return</span> <span class="n">WinVerifyTrust</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hwnd</span><span class="p">,</span> <span class="n">pgActionID</span><span class="p">,</span> <span class="n">pWVTData</span><span class="p">)</span>
<span class="c1"># ##Wintrust: catalog stuff ###</span>
<span class="nd">@WinTrustProxy</span><span class="p">(</span><span class="s1">&#39;CryptCATAdminCalcHashFromFileHandle&#39;</span><span class="p">,</span> <span class="n">error_check</span><span class="o">=</span><span class="n">zero_is_fail_error_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptCATAdminCalcHashFromFileHandle</span><span class="p">(</span><span class="n">hFile</span><span class="p">,</span> <span class="n">pcbHash</span><span class="p">,</span> <span class="n">pbHash</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptCATAdminCalcHashFromFileHandle</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hFile</span><span class="p">,</span> <span class="n">pcbHash</span><span class="p">,</span> <span class="n">pbHash</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">)</span>
<span class="nd">@WinTrustProxy</span><span class="p">(</span><span class="s1">&#39;CryptCATAdminCalcHashFromFileHandle2&#39;</span><span class="p">,</span> <span class="n">error_check</span><span class="o">=</span><span class="n">zero_is_fail_error_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptCATAdminCalcHashFromFileHandle2</span><span class="p">(</span><span class="n">hCatAdmin</span><span class="p">,</span> <span class="n">hFile</span><span class="p">,</span> <span class="n">pcbHash</span><span class="p">,</span> <span class="n">pbHash</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptCATAdminCalcHashFromFileHandle2</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hCatAdmin</span><span class="p">,</span> <span class="n">hFile</span><span class="p">,</span> <span class="n">pcbHash</span><span class="p">,</span> <span class="n">pbHash</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">)</span>
<span class="nd">@WinTrustProxy</span><span class="p">(</span><span class="s1">&#39;CryptCATAdminEnumCatalogFromHash&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptCATAdminEnumCatalogFromHash</span><span class="p">(</span><span class="n">hCatAdmin</span><span class="p">,</span> <span class="n">pbHash</span><span class="p">,</span> <span class="n">cbHash</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">phPrevCatInfo</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptCATAdminEnumCatalogFromHash</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hCatAdmin</span><span class="p">,</span> <span class="n">pbHash</span><span class="p">,</span> <span class="n">cbHash</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">phPrevCatInfo</span><span class="p">)</span>
<span class="nd">@WinTrustProxy</span><span class="p">(</span><span class="s1">&#39;CryptCATAdminAcquireContext&#39;</span><span class="p">,</span> <span class="n">error_check</span><span class="o">=</span><span class="n">zero_is_fail_error_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptCATAdminAcquireContext</span><span class="p">(</span><span class="n">phCatAdmin</span><span class="p">,</span> <span class="n">pgSubsystem</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptCATAdminAcquireContext</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">phCatAdmin</span><span class="p">,</span> <span class="n">pgSubsystem</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">)</span>
<span class="nd">@WinTrustProxy</span><span class="p">(</span><span class="s1">&#39;CryptCATAdminAcquireContext2&#39;</span><span class="p">,</span> <span class="n">error_check</span><span class="o">=</span><span class="n">zero_is_fail_error_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptCATAdminAcquireContext2</span><span class="p">(</span><span class="n">phCatAdmin</span><span class="p">,</span> <span class="n">pgSubsystem</span><span class="p">,</span> <span class="n">pwszHashAlgorithm</span><span class="p">,</span> <span class="n">pStrongHashPolicy</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptCATAdminAcquireContext2</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">phCatAdmin</span><span class="p">,</span> <span class="n">pgSubsystem</span><span class="p">,</span> <span class="n">pwszHashAlgorithm</span><span class="p">,</span> <span class="n">pStrongHashPolicy</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">)</span>
<span class="nd">@WinTrustProxy</span><span class="p">(</span><span class="s1">&#39;CryptCATCatalogInfoFromContext&#39;</span><span class="p">,</span> <span class="n">error_check</span><span class="o">=</span><span class="n">zero_is_fail_error_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptCATCatalogInfoFromContext</span><span class="p">(</span><span class="n">hCatInfo</span><span class="p">,</span> <span class="n">psCatInfo</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptCATCatalogInfoFromContext</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hCatInfo</span><span class="p">,</span> <span class="n">psCatInfo</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">)</span>
<span class="nd">@WinTrustProxy</span><span class="p">(</span><span class="s1">&#39;CryptCATAdminReleaseCatalogContext&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptCATAdminReleaseCatalogContext</span><span class="p">(</span><span class="n">hCatAdmin</span><span class="p">,</span> <span class="n">hCatInfo</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptCATAdminReleaseCatalogContext</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hCatAdmin</span><span class="p">,</span> <span class="n">hCatInfo</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">)</span>
<span class="nd">@WinTrustProxy</span><span class="p">(</span><span class="s1">&#39;CryptCATAdminReleaseContext&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptCATAdminReleaseContext</span><span class="p">(</span><span class="n">hCatAdmin</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptCATAdminReleaseContext</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hCatAdmin</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">)</span>
<span class="nd">@WinTrustProxy</span><span class="p">(</span><span class="s1">&#39;CryptCATEnumerateAttr&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptCATEnumerateAttr</span><span class="p">(</span><span class="n">hCatalog</span><span class="p">,</span> <span class="n">pCatMember</span><span class="p">,</span> <span class="n">pPrevAttr</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptCATEnumerateAttr</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hCatalog</span><span class="p">,</span> <span class="n">pCatMember</span><span class="p">,</span> <span class="n">pPrevAttr</span><span class="p">)</span>
<span class="nd">@WinTrustProxy</span><span class="p">(</span><span class="s1">&#39;CryptCATEnumerateCatAttr&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptCATEnumerateCatAttr</span><span class="p">(</span><span class="n">hCatalog</span><span class="p">,</span> <span class="n">pPrevAttr</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptCATEnumerateCatAttr</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hCatalog</span><span class="p">,</span> <span class="n">pPrevAttr</span><span class="p">)</span>
<span class="nd">@WinTrustProxy</span><span class="p">(</span><span class="s1">&#39;CryptCATEnumerateMember&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptCATEnumerateMember</span><span class="p">(</span><span class="n">hCatalog</span><span class="p">,</span> <span class="n">pPrevMember</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptCATEnumerateMember</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hCatalog</span><span class="p">,</span> <span class="n">pPrevMember</span><span class="p">)</span>
<span class="c1">## Crypto API ##</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CertStrToNameA&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CertStrToNameA</span><span class="p">(</span><span class="n">dwCertEncodingType</span><span class="p">,</span> <span class="n">pszX500</span><span class="p">,</span> <span class="n">dwStrType</span><span class="p">,</span> <span class="n">pvReserved</span><span class="p">,</span> <span class="n">pbEncoded</span><span class="p">,</span> <span class="n">pcbEncoded</span><span class="p">,</span> <span class="n">ppszError</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CertStrToNameA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">dwCertEncodingType</span><span class="p">,</span> <span class="n">pszX500</span><span class="p">,</span> <span class="n">dwStrType</span><span class="p">,</span> <span class="n">pvReserved</span><span class="p">,</span> <span class="n">pbEncoded</span><span class="p">,</span> <span class="n">pcbEncoded</span><span class="p">,</span> <span class="n">ppszError</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CertStrToNameW&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CertStrToNameW</span><span class="p">(</span><span class="n">dwCertEncodingType</span><span class="p">,</span> <span class="n">pszX500</span><span class="p">,</span> <span class="n">dwStrType</span><span class="p">,</span> <span class="n">pvReserved</span><span class="p">,</span> <span class="n">pbEncoded</span><span class="p">,</span> <span class="n">pcbEncoded</span><span class="p">,</span> <span class="n">ppszError</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CertStrToNameW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">dwCertEncodingType</span><span class="p">,</span> <span class="n">pszX500</span><span class="p">,</span> <span class="n">dwStrType</span><span class="p">,</span> <span class="n">pvReserved</span><span class="p">,</span> <span class="n">pbEncoded</span><span class="p">,</span> <span class="n">pcbEncoded</span><span class="p">,</span> <span class="n">ppszError</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CertCreateSelfSignCertificate&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CertCreateSelfSignCertificate</span><span class="p">(</span><span class="n">hCryptProvOrNCryptKey</span><span class="p">,</span> <span class="n">pSubjectIssuerBlob</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pKeyProvInfo</span><span class="p">,</span> <span class="n">pSignatureAlgorithm</span><span class="p">,</span> <span class="n">pStartTime</span><span class="p">,</span> <span class="n">pEndTime</span><span class="p">,</span> <span class="n">pExtensions</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CertCreateSelfSignCertificate</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hCryptProvOrNCryptKey</span><span class="p">,</span> <span class="n">pSubjectIssuerBlob</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pKeyProvInfo</span><span class="p">,</span> <span class="n">pSignatureAlgorithm</span><span class="p">,</span> <span class="n">pStartTime</span><span class="p">,</span> <span class="n">pEndTime</span><span class="p">,</span> <span class="n">pExtensions</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CertOpenStore&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CertOpenStore</span><span class="p">(</span><span class="n">lpszStoreProvider</span><span class="p">,</span> <span class="n">dwMsgAndCertEncodingType</span><span class="p">,</span> <span class="n">hCryptProv</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pvPara</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">lpszStoreProvider</span><span class="p">,</span> <span class="p">(</span><span class="n">long</span><span class="p">,</span> <span class="nb">int</span><span class="p">)):</span>
<span class="n">lpszStoreProvider</span> <span class="o">=</span> <span class="n">LPCSTR</span><span class="p">(</span><span class="n">lpszStoreProvider</span><span class="p">)</span>
<span class="k">return</span> <span class="n">CertOpenStore</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpszStoreProvider</span><span class="p">,</span> <span class="n">dwMsgAndCertEncodingType</span><span class="p">,</span> <span class="n">hCryptProv</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pvPara</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CertAddCertificateContextToStore&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CertAddCertificateContextToStore</span><span class="p">(</span><span class="n">hCertStore</span><span class="p">,</span> <span class="n">pCertContext</span><span class="p">,</span> <span class="n">dwAddDisposition</span><span class="p">,</span> <span class="n">ppStoreContext</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CertAddCertificateContextToStore</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hCertStore</span><span class="p">,</span> <span class="n">pCertContext</span><span class="p">,</span> <span class="n">dwAddDisposition</span><span class="p">,</span> <span class="n">ppStoreContext</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;PFXExportCertStoreEx&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">PFXExportCertStoreEx</span><span class="p">(</span><span class="n">hStore</span><span class="p">,</span> <span class="n">pPFX</span><span class="p">,</span> <span class="n">szPassword</span><span class="p">,</span> <span class="n">pvPara</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">PFXExportCertStoreEx</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hStore</span><span class="p">,</span> <span class="n">pPFX</span><span class="p">,</span> <span class="n">szPassword</span><span class="p">,</span> <span class="n">pvPara</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;CryptGenKey&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptGenKey</span><span class="p">(</span><span class="n">hProv</span><span class="p">,</span> <span class="n">Algid</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">phKey</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptGenKey</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProv</span><span class="p">,</span> <span class="n">Algid</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">phKey</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;CryptDestroyKey&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptDestroyKey</span><span class="p">(</span><span class="n">hKey</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptDestroyKey</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hKey</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;CryptAcquireContextA&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptAcquireContextA</span><span class="p">(</span><span class="n">phProv</span><span class="p">,</span> <span class="n">pszContainer</span><span class="p">,</span> <span class="n">pszProvider</span><span class="p">,</span> <span class="n">dwProvType</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptAcquireContextA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">phProv</span><span class="p">,</span> <span class="n">pszContainer</span><span class="p">,</span> <span class="n">pszProvider</span><span class="p">,</span> <span class="n">dwProvType</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;CryptAcquireContextW&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptAcquireContextW</span><span class="p">(</span><span class="n">phProv</span><span class="p">,</span> <span class="n">pszContainer</span><span class="p">,</span> <span class="n">pszProvider</span><span class="p">,</span> <span class="n">dwProvType</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptAcquireContextW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">phProv</span><span class="p">,</span> <span class="n">pszContainer</span><span class="p">,</span> <span class="n">pszProvider</span><span class="p">,</span> <span class="n">dwProvType</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;CryptReleaseContext&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptReleaseContext</span><span class="p">(</span><span class="n">hProv</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptReleaseContext</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hProv</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">)</span>
<span class="nd">@Advapi32Proxy</span><span class="p">(</span><span class="s1">&#39;CryptExportKey&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptExportKey</span><span class="p">(</span><span class="n">hKey</span><span class="p">,</span> <span class="n">hExpKey</span><span class="p">,</span> <span class="n">dwBlobType</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pbData</span><span class="p">,</span> <span class="n">pdwDataLen</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptExportKey</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hKey</span><span class="p">,</span> <span class="n">hExpKey</span><span class="p">,</span> <span class="n">dwBlobType</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pbData</span><span class="p">,</span> <span class="n">pdwDataLen</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;PFXImportCertStore&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">PFXImportCertStore</span><span class="p">(</span><span class="n">pPFX</span><span class="p">,</span> <span class="n">szPassword</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">PFXImportCertStore</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pPFX</span><span class="p">,</span> <span class="n">szPassword</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CertFindCertificateInStore&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CertFindCertificateInStore</span><span class="p">(</span><span class="n">hCertStore</span><span class="p">,</span> <span class="n">dwCertEncodingType</span><span class="p">,</span> <span class="n">dwFindFlags</span><span class="p">,</span> <span class="n">dwFindType</span><span class="p">,</span> <span class="n">pvFindPara</span><span class="p">,</span> <span class="n">pPrevCertContext</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CertFindCertificateInStore</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hCertStore</span><span class="p">,</span> <span class="n">dwCertEncodingType</span><span class="p">,</span> <span class="n">dwFindFlags</span><span class="p">,</span> <span class="n">dwFindType</span><span class="p">,</span> <span class="n">pvFindPara</span><span class="p">,</span> <span class="n">pPrevCertContext</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CertGetCertificateContextProperty&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CertGetCertificateContextProperty</span><span class="p">(</span><span class="n">pCertContext</span><span class="p">,</span> <span class="n">dwPropId</span><span class="p">,</span> <span class="n">pvData</span><span class="p">,</span> <span class="n">pcbData</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CertGetCertificateContextProperty</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pCertContext</span><span class="p">,</span> <span class="n">dwPropId</span><span class="p">,</span> <span class="n">pvData</span><span class="p">,</span> <span class="n">pcbData</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CertEnumCertificateContextProperties&#39;</span><span class="p">,</span> <span class="n">no_error_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CertEnumCertificateContextProperties</span><span class="p">(</span><span class="n">pCertContext</span><span class="p">,</span> <span class="n">dwPropId</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CertEnumCertificateContextProperties</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pCertContext</span><span class="p">,</span> <span class="n">dwPropId</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CryptEncryptMessage&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptEncryptMessage</span><span class="p">(</span><span class="n">pEncryptPara</span><span class="p">,</span> <span class="n">cRecipientCert</span><span class="p">,</span> <span class="n">rgpRecipientCert</span><span class="p">,</span> <span class="n">pbToBeEncrypted</span><span class="p">,</span> <span class="n">cbToBeEncrypted</span><span class="p">,</span> <span class="n">pbEncryptedBlob</span><span class="p">,</span> <span class="n">pcbEncryptedBlob</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">pbToBeEncrypted</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
<span class="c1"># Transform string to array of byte</span>
<span class="n">pbToBeEncrypted</span> <span class="o">=</span> <span class="p">(</span><span class="n">BYTE</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">pbToBeEncrypted</span><span class="p">))(</span><span class="o">*</span><span class="nb">bytearray</span><span class="p">(</span><span class="n">pbToBeEncrypted</span><span class="p">))</span>
<span class="k">if</span> <span class="n">cbToBeEncrypted</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">pbToBeEncrypted</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">cbToBeEncrypted</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">pbToBeEncrypted</span><span class="p">)</span>
<span class="k">return</span> <span class="n">CryptEncryptMessage</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pEncryptPara</span><span class="p">,</span> <span class="n">cRecipientCert</span><span class="p">,</span> <span class="n">rgpRecipientCert</span><span class="p">,</span> <span class="n">pbToBeEncrypted</span><span class="p">,</span> <span class="n">cbToBeEncrypted</span><span class="p">,</span> <span class="n">pbEncryptedBlob</span><span class="p">,</span> <span class="n">pcbEncryptedBlob</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CryptDecryptMessage&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptDecryptMessage</span><span class="p">(</span><span class="n">pDecryptPara</span><span class="p">,</span> <span class="n">pbEncryptedBlob</span><span class="p">,</span> <span class="n">cbEncryptedBlob</span><span class="p">,</span> <span class="n">pbDecrypted</span><span class="p">,</span> <span class="n">pcbDecrypted</span><span class="p">,</span> <span class="n">ppXchgCert</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptDecryptMessage</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pDecryptPara</span><span class="p">,</span> <span class="n">pbEncryptedBlob</span><span class="p">,</span> <span class="n">cbEncryptedBlob</span><span class="p">,</span> <span class="n">pbDecrypted</span><span class="p">,</span> <span class="n">pcbDecrypted</span><span class="p">,</span> <span class="n">ppXchgCert</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CryptAcquireCertificatePrivateKey&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptAcquireCertificatePrivateKey</span><span class="p">(</span><span class="n">pCert</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pvParameters</span><span class="p">,</span> <span class="n">phCryptProvOrNCryptKey</span><span class="p">,</span> <span class="n">pdwKeySpec</span><span class="p">,</span> <span class="n">pfCallerFreeProvOrNCryptKey</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptAcquireCertificatePrivateKey</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pCert</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pvParameters</span><span class="p">,</span> <span class="n">phCryptProvOrNCryptKey</span><span class="p">,</span> <span class="n">pdwKeySpec</span><span class="p">,</span> <span class="n">pfCallerFreeProvOrNCryptKey</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CertGetNameStringA&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CertGetNameStringA</span><span class="p">(</span><span class="n">pCertContext</span><span class="p">,</span> <span class="n">dwType</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pvTypePara</span><span class="p">,</span> <span class="n">pszNameString</span><span class="p">,</span> <span class="n">cchNameString</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CertGetNameStringA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pCertContext</span><span class="p">,</span> <span class="n">dwType</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pvTypePara</span><span class="p">,</span> <span class="n">pszNameString</span><span class="p">,</span> <span class="n">cchNameString</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CertGetNameStringW&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CertGetNameStringW</span><span class="p">(</span><span class="n">pCertContext</span><span class="p">,</span> <span class="n">dwType</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pvTypePara</span><span class="p">,</span> <span class="n">pszNameString</span><span class="p">,</span> <span class="n">cchNameString</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CertGetNameStringW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pCertContext</span><span class="p">,</span> <span class="n">dwType</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pvTypePara</span><span class="p">,</span> <span class="n">pszNameString</span><span class="p">,</span> <span class="n">cchNameString</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CertGetCertificateChain&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CertGetCertificateChain</span><span class="p">(</span><span class="n">hChainEngine</span><span class="p">,</span> <span class="n">pCertContext</span><span class="p">,</span> <span class="n">pTime</span><span class="p">,</span> <span class="n">hAdditionalStore</span><span class="p">,</span> <span class="n">pChainPara</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pvReserved</span><span class="p">,</span> <span class="n">ppChainContext</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CertGetCertificateChain</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hChainEngine</span><span class="p">,</span> <span class="n">pCertContext</span><span class="p">,</span> <span class="n">pTime</span><span class="p">,</span> <span class="n">hAdditionalStore</span><span class="p">,</span> <span class="n">pChainPara</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pvReserved</span><span class="p">,</span> <span class="n">ppChainContext</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CertDuplicateCertificateContext&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CertDuplicateCertificateContext</span><span class="p">(</span><span class="n">pCertContext</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CertDuplicateCertificateContext</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pCertContext</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CertFreeCertificateContext&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CertFreeCertificateContext</span><span class="p">(</span><span class="n">pCertContext</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CertFreeCertificateContext</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pCertContext</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CertEnumCertificatesInStore&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CertEnumCertificatesInStore</span><span class="p">(</span><span class="n">hCertStore</span><span class="p">,</span> <span class="n">pPrevCertContext</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CertEnumCertificatesInStore</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hCertStore</span><span class="p">,</span> <span class="n">pPrevCertContext</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CertCompareCertificate&#39;</span><span class="p">,</span> <span class="n">error_check</span><span class="o">=</span><span class="n">no_error_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CertCompareCertificate</span><span class="p">(</span><span class="n">dwCertEncodingType</span><span class="p">,</span> <span class="n">pCertId1</span><span class="p">,</span> <span class="n">pCertId2</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;This function does not raise is compare has failed:</span>
<span class="sd"> return 0 if cert are NOT equals</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">CertCompareCertificate</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">dwCertEncodingType</span><span class="p">,</span> <span class="n">pCertId1</span><span class="p">,</span> <span class="n">pCertId2</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CertEnumCTLsInStore&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CertEnumCTLsInStore</span><span class="p">(</span><span class="n">hCertStore</span><span class="p">,</span> <span class="n">pPrevCtlContext</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CertEnumCTLsInStore</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hCertStore</span><span class="p">,</span> <span class="n">pPrevCtlContext</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CryptEncodeObjectEx&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptEncodeObjectEx</span><span class="p">(</span><span class="n">dwCertEncodingType</span><span class="p">,</span> <span class="n">lpszStructType</span><span class="p">,</span> <span class="n">pvStructInfo</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pEncodePara</span><span class="p">,</span> <span class="n">pvEncoded</span><span class="p">,</span> <span class="n">pcbEncoded</span><span class="p">):</span>
<span class="n">lpszStructType</span> <span class="o">=</span> <span class="n">LPCSTR</span><span class="p">(</span><span class="n">lpszStructType</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">lpszStructType</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="k">else</span> <span class="n">lpszStructType</span>
<span class="k">return</span> <span class="n">CryptEncodeObjectEx</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">dwCertEncodingType</span><span class="p">,</span> <span class="n">lpszStructType</span><span class="p">,</span> <span class="n">pvStructInfo</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pEncodePara</span><span class="p">,</span> <span class="n">pvEncoded</span><span class="p">,</span> <span class="n">pcbEncoded</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CertCreateCertificateContext&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CertCreateCertificateContext</span><span class="p">(</span><span class="n">dwCertEncodingType</span><span class="p">,</span> <span class="n">pbCertEncoded</span><span class="p">,</span> <span class="n">cbCertEncoded</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CertCreateCertificateContext</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">dwCertEncodingType</span><span class="p">,</span> <span class="n">pbCertEncoded</span><span class="p">,</span> <span class="n">cbCertEncoded</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CryptQueryObject&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptQueryObject</span><span class="p">(</span><span class="n">dwObjectType</span><span class="p">,</span> <span class="n">pvObject</span><span class="p">,</span> <span class="n">dwExpectedContentTypeFlags</span><span class="p">,</span> <span class="n">dwExpectedFormatTypeFlags</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pdwMsgAndCertEncodingType</span><span class="p">,</span> <span class="n">pdwContentType</span><span class="p">,</span> <span class="n">pdwFormatType</span><span class="p">,</span> <span class="n">phCertStore</span><span class="p">,</span> <span class="n">phMsg</span><span class="p">,</span> <span class="n">ppvContext</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptQueryObject</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">dwObjectType</span><span class="p">,</span> <span class="n">pvObject</span><span class="p">,</span> <span class="n">dwExpectedContentTypeFlags</span><span class="p">,</span> <span class="n">dwExpectedFormatTypeFlags</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pdwMsgAndCertEncodingType</span><span class="p">,</span> <span class="n">pdwContentType</span><span class="p">,</span> <span class="n">pdwFormatType</span><span class="p">,</span> <span class="n">phCertStore</span><span class="p">,</span> <span class="n">phMsg</span><span class="p">,</span> <span class="n">ppvContext</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CryptMsgGetParam&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptMsgGetParam</span><span class="p">(</span><span class="n">hCryptMsg</span><span class="p">,</span> <span class="n">dwParamType</span><span class="p">,</span> <span class="n">dwIndex</span><span class="p">,</span> <span class="n">pvData</span><span class="p">,</span> <span class="n">pcbData</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptMsgGetParam</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hCryptMsg</span><span class="p">,</span> <span class="n">dwParamType</span><span class="p">,</span> <span class="n">dwIndex</span><span class="p">,</span> <span class="n">pvData</span><span class="p">,</span> <span class="n">pcbData</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CryptDecodeObject&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptDecodeObject</span><span class="p">(</span><span class="n">dwCertEncodingType</span><span class="p">,</span> <span class="n">lpszStructType</span><span class="p">,</span> <span class="n">pbEncoded</span><span class="p">,</span> <span class="n">cbEncoded</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pvStructInfo</span><span class="p">,</span> <span class="n">pcbStructInfo</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptDecodeObject</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">dwCertEncodingType</span><span class="p">,</span> <span class="n">lpszStructType</span><span class="p">,</span> <span class="n">pbEncoded</span><span class="p">,</span> <span class="n">cbEncoded</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pvStructInfo</span><span class="p">,</span> <span class="n">pcbStructInfo</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CryptMsgVerifyCountersignatureEncoded&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptMsgVerifyCountersignatureEncoded</span><span class="p">(</span><span class="n">hCryptProv</span><span class="p">,</span> <span class="n">dwEncodingType</span><span class="p">,</span> <span class="n">pbSignerInfo</span><span class="p">,</span> <span class="n">cbSignerInfo</span><span class="p">,</span> <span class="n">pbSignerInfoCountersignature</span><span class="p">,</span> <span class="n">cbSignerInfoCountersignature</span><span class="p">,</span> <span class="n">pciCountersigner</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptMsgVerifyCountersignatureEncoded</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hCryptProv</span><span class="p">,</span> <span class="n">dwEncodingType</span><span class="p">,</span> <span class="n">pbSignerInfo</span><span class="p">,</span> <span class="n">cbSignerInfo</span><span class="p">,</span> <span class="n">pbSignerInfoCountersignature</span><span class="p">,</span> <span class="n">cbSignerInfoCountersignature</span><span class="p">,</span> <span class="n">pciCountersigner</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CryptMsgVerifyCountersignatureEncodedEx&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptMsgVerifyCountersignatureEncodedEx</span><span class="p">(</span><span class="n">hCryptProv</span><span class="p">,</span> <span class="n">dwEncodingType</span><span class="p">,</span> <span class="n">pbSignerInfo</span><span class="p">,</span> <span class="n">cbSignerInfo</span><span class="p">,</span> <span class="n">pbSignerInfoCountersignature</span><span class="p">,</span> <span class="n">cbSignerInfoCountersignature</span><span class="p">,</span> <span class="n">dwSignerType</span><span class="p">,</span> <span class="n">pvSigner</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pvExtra</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptMsgVerifyCountersignatureEncodedEx</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hCryptProv</span><span class="p">,</span> <span class="n">dwEncodingType</span><span class="p">,</span> <span class="n">pbSignerInfo</span><span class="p">,</span> <span class="n">cbSignerInfo</span><span class="p">,</span> <span class="n">pbSignerInfoCountersignature</span><span class="p">,</span> <span class="n">cbSignerInfoCountersignature</span><span class="p">,</span> <span class="n">dwSignerType</span><span class="p">,</span> <span class="n">pvSigner</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pvExtra</span><span class="p">)</span>
<span class="nd">@Crypt32Proxy</span><span class="p">(</span><span class="s1">&#39;CryptHashCertificate&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptHashCertificate</span><span class="p">(</span><span class="n">hCryptProv</span><span class="p">,</span> <span class="n">Algid</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pbEncoded</span><span class="p">,</span> <span class="n">cbEncoded</span><span class="p">,</span> <span class="n">pbComputedHash</span><span class="p">,</span> <span class="n">pcbComputedHash</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptHashCertificate</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hCryptProv</span><span class="p">,</span> <span class="n">Algid</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pbEncoded</span><span class="p">,</span> <span class="n">cbEncoded</span><span class="p">,</span> <span class="n">pbComputedHash</span><span class="p">,</span> <span class="n">pcbComputedHash</span><span class="p">)</span>
<span class="c1"># ## CryptUI ## #</span>
<span class="nd">@CryptUIProxy</span><span class="p">(</span><span class="s1">&#39;CryptUIDlgViewContext&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CryptUIDlgViewContext</span><span class="p">(</span><span class="n">dwContextType</span><span class="p">,</span> <span class="n">pvContext</span><span class="p">,</span> <span class="n">hwnd</span><span class="p">,</span> <span class="n">pwszTitle</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pvReserved</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CryptUIDlgViewContext</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">dwContextType</span><span class="p">,</span> <span class="n">pvContext</span><span class="p">,</span> <span class="n">hwnd</span><span class="p">,</span> <span class="n">pwszTitle</span><span class="p">,</span> <span class="n">dwFlags</span><span class="p">,</span> <span class="n">pvReserved</span><span class="p">)</span>
<span class="c1"># ## User32 stuff ## #</span>
<span class="n">EnumWindows</span> <span class="o">=</span> <span class="n">TransparentUser32Proxy</span><span class="p">(</span><span class="s1">&#39;EnumWindows&#39;</span><span class="p">)</span>
<span class="n">EnumChildWindows</span> <span class="o">=</span> <span class="n">TransparentUser32Proxy</span><span class="p">(</span><span class="s1">&#39;EnumChildWindows&#39;</span><span class="p">)</span>
<span class="n">GetParent</span> <span class="o">=</span> <span class="n">TransparentUser32Proxy</span><span class="p">(</span><span class="s1">&#39;GetParent&#39;</span><span class="p">)</span>
<span class="n">GetClassInfoExA</span> <span class="o">=</span> <span class="n">TransparentUser32Proxy</span><span class="p">(</span><span class="s1">&#39;GetClassInfoExA&#39;</span><span class="p">)</span>
<span class="n">GetClassInfoExW</span> <span class="o">=</span> <span class="n">TransparentUser32Proxy</span><span class="p">(</span><span class="s1">&#39;GetClassInfoExW&#39;</span><span class="p">)</span>
<span class="n">GetWindowTextA</span> <span class="o">=</span> <span class="n">TransparentUser32Proxy</span><span class="p">(</span><span class="s1">&#39;GetWindowTextA&#39;</span><span class="p">,</span> <span class="n">no_error_check</span><span class="p">)</span>
<span class="n">GetWindowTextW</span> <span class="o">=</span> <span class="n">TransparentUser32Proxy</span><span class="p">(</span><span class="s1">&#39;GetWindowTextW&#39;</span><span class="p">,</span> <span class="n">no_error_check</span><span class="p">)</span>
<span class="n">GetWindowModuleFileNameA</span> <span class="o">=</span> <span class="n">TransparentUser32Proxy</span><span class="p">(</span><span class="s1">&#39;GetWindowModuleFileNameA&#39;</span><span class="p">,</span> <span class="n">no_error_check</span><span class="p">)</span>
<span class="n">GetWindowModuleFileNameW</span> <span class="o">=</span> <span class="n">TransparentUser32Proxy</span><span class="p">(</span><span class="s1">&#39;GetWindowModuleFileNameW&#39;</span><span class="p">,</span> <span class="n">no_error_check</span><span class="p">)</span>
<span class="n">GetSystemMetrics</span> <span class="o">=</span> <span class="n">TransparentUser32Proxy</span><span class="p">(</span><span class="s1">&#39;GetSystemMetrics&#39;</span><span class="p">,</span> <span class="n">no_error_check</span><span class="p">)</span>
<span class="n">GetWindowThreadProcessId</span> <span class="o">=</span> <span class="n">TransparentUser32Proxy</span><span class="p">(</span><span class="s1">&#39;GetWindowThreadProcessId&#39;</span><span class="p">)</span>
<span class="nd">@User32Proxy</span><span class="p">(</span><span class="s2">&quot;GetCursorPos&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetCursorPos</span><span class="p">(</span><span class="n">lpPoint</span><span class="p">):</span>
<span class="k">return</span> <span class="n">GetCursorPos</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpPoint</span><span class="p">)</span>
<span class="nd">@User32Proxy</span><span class="p">(</span><span class="s2">&quot;WindowFromPoint&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">WindowFromPoint</span><span class="p">(</span><span class="n">Point</span><span class="p">):</span>
<span class="k">return</span> <span class="n">WindowFromPoint</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">Point</span><span class="p">)</span>
<span class="nd">@User32Proxy</span><span class="p">(</span><span class="s2">&quot;GetWindowRect&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetWindowRect</span><span class="p">(</span><span class="n">hWnd</span><span class="p">,</span> <span class="n">lpRect</span><span class="p">):</span>
<span class="k">return</span> <span class="n">GetWindowRect</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hWnd</span><span class="p">,</span> <span class="n">lpRect</span><span class="p">)</span>
<span class="nd">@User32Proxy</span><span class="p">(</span><span class="s2">&quot;MessageBoxA&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">MessageBoxA</span><span class="p">(</span><span class="n">hWnd</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">lpText</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">lpCaption</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">uType</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="k">return</span> <span class="n">MessageBoxA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hWnd</span><span class="p">,</span> <span class="n">lpText</span><span class="p">,</span> <span class="n">lpCaption</span><span class="p">,</span> <span class="n">uType</span><span class="p">)</span>
<span class="nd">@User32Proxy</span><span class="p">(</span><span class="s2">&quot;MessageBoxW&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">MessageBoxW</span><span class="p">(</span><span class="n">hWnd</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">lpText</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">lpCaption</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">uType</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="k">return</span> <span class="n">MessageBoxW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hWnd</span><span class="p">,</span> <span class="n">lpText</span><span class="p">,</span> <span class="n">lpCaption</span><span class="p">,</span> <span class="n">uType</span><span class="p">)</span>
<span class="nd">@User32Proxy</span><span class="p">(</span><span class="s2">&quot;RealGetWindowClassA&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">RealGetWindowClassA</span><span class="p">(</span><span class="n">hwnd</span><span class="p">,</span> <span class="n">pszType</span><span class="p">,</span> <span class="n">cchType</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">cchType</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">cchType</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">pszType</span><span class="p">)</span>
<span class="k">return</span> <span class="n">RealGetWindowClassA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hwnd</span><span class="p">,</span> <span class="n">pszType</span><span class="p">,</span> <span class="n">cchType</span><span class="p">)</span>
<span class="nd">@User32Proxy</span><span class="p">(</span><span class="s2">&quot;RealGetWindowClassW&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">RealGetWindowClassW</span><span class="p">(</span><span class="n">hwnd</span><span class="p">,</span> <span class="n">pszType</span><span class="p">,</span> <span class="n">cchType</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">cchType</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">cchType</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">pszType</span><span class="p">)</span>
<span class="k">return</span> <span class="n">RealGetWindowClassW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hwnd</span><span class="p">,</span> <span class="n">pszType</span><span class="p">,</span> <span class="n">cchType</span><span class="p">)</span>
<span class="nd">@User32Proxy</span><span class="p">(</span><span class="s2">&quot;GetClassNameA&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetClassNameA</span> <span class="p">(</span><span class="n">hwnd</span><span class="p">,</span> <span class="n">pszType</span><span class="p">,</span> <span class="n">cchType</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">cchType</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">cchType</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">pszType</span><span class="p">)</span>
<span class="k">return</span> <span class="n">GetClassNameA</span> <span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hwnd</span><span class="p">,</span> <span class="n">pszType</span><span class="p">,</span> <span class="n">cchType</span><span class="p">)</span>
<span class="nd">@User32Proxy</span><span class="p">(</span><span class="s2">&quot;GetClassNameW&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetClassNameW</span> <span class="p">(</span><span class="n">hwnd</span><span class="p">,</span> <span class="n">pszType</span><span class="p">,</span> <span class="n">cchType</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">cchType</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">cchType</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">pszType</span><span class="p">)</span>
<span class="k">return</span> <span class="n">GetClassNameW</span> <span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hwnd</span><span class="p">,</span> <span class="n">pszType</span><span class="p">,</span> <span class="n">cchType</span><span class="p">)</span>
<span class="c1"># ## Version stuff ## #</span>
<span class="nd">@VersionProxy</span><span class="p">(</span><span class="s2">&quot;GetFileVersionInfoA&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetFileVersionInfoA</span><span class="p">(</span><span class="n">lptstrFilename</span><span class="p">,</span> <span class="n">dwHandle</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">dwLen</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpData</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">if</span> <span class="n">dwLen</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">lpData</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">dwLen</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpData</span><span class="p">)</span>
<span class="k">return</span> <span class="n">GetFileVersionInfoA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lptstrFilename</span><span class="p">,</span> <span class="n">dwHandle</span><span class="p">,</span> <span class="n">dwLen</span><span class="p">,</span> <span class="n">lpData</span><span class="p">)</span>
<span class="nd">@VersionProxy</span><span class="p">(</span><span class="s2">&quot;GetFileVersionInfoW&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetFileVersionInfoW</span><span class="p">(</span><span class="n">lptstrFilename</span><span class="p">,</span> <span class="n">dwHandle</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">dwLen</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lpData</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">if</span> <span class="n">dwLen</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">lpData</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">dwLen</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lpData</span><span class="p">)</span>
<span class="k">return</span> <span class="n">GetFileVersionInfoA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lptstrFilename</span><span class="p">,</span> <span class="n">dwHandle</span><span class="p">,</span> <span class="n">dwLen</span><span class="p">,</span> <span class="n">lpData</span><span class="p">)</span>
<span class="nd">@VersionProxy</span><span class="p">(</span><span class="s2">&quot;GetFileVersionInfoSizeA&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetFileVersionInfoSizeA</span><span class="p">(</span><span class="n">lptstrFilename</span><span class="p">,</span> <span class="n">lpdwHandle</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">lpdwHandle</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">lpdwHandle</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">DWORD</span><span class="p">())</span>
<span class="k">return</span> <span class="n">GetFileVersionInfoSizeA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lptstrFilename</span><span class="p">,</span> <span class="n">lpdwHandle</span><span class="p">)</span>
<span class="nd">@VersionProxy</span><span class="p">(</span><span class="s2">&quot;GetFileVersionInfoSizeW&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetFileVersionInfoSizeW</span><span class="p">(</span><span class="n">lptstrFilename</span><span class="p">,</span> <span class="n">lpdwHandle</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">lpdwHandle</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">lpdwHandle</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">DWORD</span><span class="p">())</span>
<span class="k">return</span> <span class="n">GetFileVersionInfoSizeW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lptstrFilename</span><span class="p">,</span> <span class="n">lpdwHandle</span><span class="p">)</span>
<span class="nd">@VersionProxy</span><span class="p">(</span><span class="s2">&quot;VerQueryValueA&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">VerQueryValueA</span><span class="p">(</span><span class="n">pBlock</span><span class="p">,</span> <span class="n">lpSubBlock</span><span class="p">,</span> <span class="n">lplpBuffer</span><span class="p">,</span> <span class="n">puLen</span><span class="p">):</span>
<span class="k">return</span> <span class="n">VerQueryValueA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pBlock</span><span class="p">,</span> <span class="n">lpSubBlock</span><span class="p">,</span> <span class="n">lplpBuffer</span><span class="p">,</span> <span class="n">puLen</span><span class="p">)</span>
<span class="nd">@VersionProxy</span><span class="p">(</span><span class="s2">&quot;VerQueryValueW&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">VerQueryValueW</span><span class="p">(</span><span class="n">pBlock</span><span class="p">,</span> <span class="n">lpSubBlock</span><span class="p">,</span> <span class="n">lplpBuffer</span><span class="p">,</span> <span class="n">puLen</span><span class="p">):</span>
<span class="k">return</span> <span class="n">VerQueryValueW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pBlock</span><span class="p">,</span> <span class="n">lpSubBlock</span><span class="p">,</span> <span class="n">lplpBuffer</span><span class="p">,</span> <span class="n">puLen</span><span class="p">)</span>
<span class="c1"># ## Ole32Proxy (COM STUFF) ## #</span>
<span class="c1"># IMPORTANT:</span>
<span class="c1"># Functions that returns HRESULT (like CoInitializeEx) will raise if HRESULT is an error</span>
<span class="c1"># even if there is no error check on the return value</span>
<span class="nd">@Ole32Proxy</span><span class="p">(</span><span class="s1">&#39;CoInitializeEx&#39;</span><span class="p">,</span> <span class="n">no_error_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CoInitializeEx</span><span class="p">(</span><span class="n">pvReserved</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dwCoInit</span><span class="o">=</span><span class="n">COINIT_MULTITHREADED</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CoInitializeEx</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pvReserved</span><span class="p">,</span> <span class="n">dwCoInit</span><span class="p">)</span>
<span class="nd">@Ole32Proxy</span><span class="p">(</span><span class="s1">&#39;CoInitializeSecurity&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CoInitializeSecurity</span><span class="p">(</span><span class="n">pSecDesc</span><span class="p">,</span> <span class="n">cAuthSvc</span><span class="p">,</span> <span class="n">asAuthSvc</span><span class="p">,</span> <span class="n">pReserved1</span><span class="p">,</span> <span class="n">dwAuthnLevel</span><span class="p">,</span> <span class="n">dwImpLevel</span><span class="p">,</span> <span class="n">pAuthList</span><span class="p">,</span> <span class="n">dwCapabilities</span><span class="p">,</span> <span class="n">pReserved3</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CoInitializeSecurity</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pSecDesc</span><span class="p">,</span> <span class="n">cAuthSvc</span><span class="p">,</span> <span class="n">asAuthSvc</span><span class="p">,</span> <span class="n">pReserved1</span><span class="p">,</span> <span class="n">dwAuthnLevel</span><span class="p">,</span> <span class="n">dwImpLevel</span><span class="p">,</span> <span class="n">pAuthList</span><span class="p">,</span> <span class="n">dwCapabilities</span><span class="p">,</span> <span class="n">pReserved3</span><span class="p">)</span>
<span class="nd">@Ole32Proxy</span><span class="p">(</span><span class="s1">&#39;CoCreateInstance&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CoCreateInstance</span><span class="p">(</span><span class="n">rclsid</span><span class="p">,</span> <span class="n">pUnkOuter</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dwClsContext</span><span class="o">=</span><span class="n">CLSCTX_INPROC_SERVER</span><span class="p">,</span> <span class="n">riid</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">,</span> <span class="n">ppv</span><span class="o">=</span><span class="n">NeededParameter</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CoCreateInstance</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">rclsid</span><span class="p">,</span> <span class="n">pUnkOuter</span><span class="p">,</span> <span class="n">dwClsContext</span><span class="p">,</span> <span class="n">riid</span><span class="p">,</span> <span class="n">ppv</span><span class="p">)</span>
<span class="nd">@Ole32Proxy</span><span class="p">(</span><span class="s1">&#39;CoCreateInstanceEx&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CoCreateInstanceEx</span><span class="p">(</span><span class="n">rclsid</span><span class="p">,</span> <span class="n">punkOuter</span><span class="p">,</span> <span class="n">dwClsCtx</span><span class="p">,</span> <span class="n">pServerInfo</span><span class="p">,</span> <span class="n">dwCount</span><span class="p">,</span> <span class="n">pResults</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CoCreateInstanceEx</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">rclsid</span><span class="p">,</span> <span class="n">punkOuter</span><span class="p">,</span> <span class="n">dwClsCtx</span><span class="p">,</span> <span class="n">pServerInfo</span><span class="p">,</span> <span class="n">dwCount</span><span class="p">,</span> <span class="n">pResults</span><span class="p">)</span>
<span class="nd">@Ole32Proxy</span><span class="p">(</span><span class="s1">&#39;CoGetInterceptor&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CoGetInterceptor</span><span class="p">(</span><span class="n">iidIntercepted</span><span class="p">,</span> <span class="n">punkOuter</span><span class="p">,</span> <span class="n">iid</span><span class="p">,</span> <span class="n">ppv</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CoGetInterceptor</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">iidIntercepted</span><span class="p">,</span> <span class="n">punkOuter</span><span class="p">,</span> <span class="n">iid</span><span class="p">,</span> <span class="n">ppv</span><span class="p">)</span>
<span class="nd">@Ole32Proxy</span><span class="p">(</span><span class="s1">&#39;CLSIDFromProgID&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CLSIDFromProgID</span><span class="p">(</span><span class="n">lpszProgID</span><span class="p">,</span> <span class="n">lpclsid</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CLSIDFromProgID</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpszProgID</span><span class="p">,</span> <span class="n">lpclsid</span><span class="p">)</span>
<span class="c1"># ## Shell32 ## #</span>
<span class="nd">@Shell32Proxy</span><span class="p">(</span><span class="s1">&#39;ShellExecuteA&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">ShellExecuteA</span><span class="p">(</span><span class="n">hwnd</span><span class="p">,</span> <span class="n">lpOperation</span><span class="p">,</span> <span class="n">lpFile</span><span class="p">,</span> <span class="n">lpParameters</span><span class="p">,</span> <span class="n">lpDirectory</span><span class="p">,</span> <span class="n">nShowCmd</span><span class="p">):</span>
<span class="k">return</span> <span class="n">ShellExecuteA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hwnd</span><span class="p">,</span> <span class="n">lpOperation</span><span class="p">,</span> <span class="n">lpFile</span><span class="p">,</span> <span class="n">lpParameters</span><span class="p">,</span> <span class="n">lpDirectory</span><span class="p">,</span> <span class="n">nShowCmd</span><span class="p">)</span>
<span class="nd">@Shell32Proxy</span><span class="p">(</span><span class="s1">&#39;ShellExecuteW&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">ShellExecuteW</span><span class="p">(</span><span class="n">hwnd</span><span class="p">,</span> <span class="n">lpOperation</span><span class="p">,</span> <span class="n">lpFile</span><span class="p">,</span> <span class="n">lpParameters</span><span class="p">,</span> <span class="n">lpDirectory</span><span class="p">,</span> <span class="n">nShowCmd</span><span class="p">):</span>
<span class="k">return</span> <span class="n">ShellExecuteW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hwnd</span><span class="p">,</span> <span class="n">lpOperation</span><span class="p">,</span> <span class="n">lpFile</span><span class="p">,</span> <span class="n">lpParameters</span><span class="p">,</span> <span class="n">lpDirectory</span><span class="p">,</span> <span class="n">nShowCmd</span><span class="p">)</span>
<span class="c1"># Transactions #</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;CreateFileTransactedA&quot;</span><span class="p">,</span> <span class="n">error_check</span><span class="o">=</span><span class="n">valid_handle_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CreateFileTransactedA</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">hTransaction</span><span class="p">,</span> <span class="n">pusMiniVersion</span><span class="p">,</span> <span class="n">pExtendedParameter</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CreateFileTransactedA</span><span class="o">.</span><span class="n">ctypes_function</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">hTransaction</span><span class="p">,</span> <span class="n">pusMiniVersion</span><span class="p">,</span> <span class="n">pExtendedParameter</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;CreateFileTransactedW&quot;</span><span class="p">,</span> <span class="n">error_check</span><span class="o">=</span><span class="n">valid_handle_check</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CreateFileTransactedW</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">hTransaction</span><span class="p">,</span> <span class="n">pusMiniVersion</span><span class="p">,</span> <span class="n">pExtendedParameter</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CreateFileTransactedW</span><span class="o">.</span><span class="n">ctypes_function</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">hTransaction</span><span class="p">,</span> <span class="n">pusMiniVersion</span><span class="p">,</span> <span class="n">pExtendedParameter</span><span class="p">)</span>
<span class="nd">@Ktmw32Proxy</span><span class="p">(</span><span class="s2">&quot;CommitTransaction&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CommitTransaction</span><span class="p">(</span><span class="n">TransactionHandle</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CommitTransaction</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">TransactionHandle</span><span class="p">)</span>
<span class="nd">@Ktmw32Proxy</span><span class="p">(</span><span class="s2">&quot;CreateTransaction&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CreateTransaction</span><span class="p">(</span><span class="n">lpTransactionAttributes</span><span class="p">,</span> <span class="n">UOW</span><span class="p">,</span> <span class="n">CreateOptions</span><span class="p">,</span> <span class="n">IsolationLevel</span><span class="p">,</span> <span class="n">IsolationFlags</span><span class="p">,</span> <span class="n">Timeout</span><span class="p">,</span> <span class="n">Description</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CreateTransaction</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpTransactionAttributes</span><span class="p">,</span> <span class="n">UOW</span><span class="p">,</span> <span class="n">CreateOptions</span><span class="p">,</span> <span class="n">IsolationLevel</span><span class="p">,</span> <span class="n">IsolationFlags</span><span class="p">,</span> <span class="n">Timeout</span><span class="p">,</span> <span class="n">Description</span><span class="p">)</span>
<span class="nd">@Ktmw32Proxy</span><span class="p">(</span><span class="s2">&quot;RollbackTransaction&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">RollbackTransaction</span><span class="p">(</span><span class="n">TransactionHandle</span><span class="p">):</span>
<span class="k">return</span> <span class="n">RollbackTransaction</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">TransactionHandle</span><span class="p">)</span>
<span class="nd">@Ktmw32Proxy</span><span class="p">(</span><span class="s2">&quot;OpenTransaction&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">OpenTransaction</span><span class="p">(</span><span class="n">dwDesiredAccess</span><span class="p">,</span> <span class="n">TransactionId</span><span class="p">):</span>
<span class="k">return</span> <span class="n">OpenTransaction</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">dwDesiredAccess</span><span class="p">,</span> <span class="n">TransactionId</span><span class="p">)</span>
<span class="c1"># Pipe</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;CreateNamedPipeA&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CreateNamedPipeA</span><span class="p">(</span><span class="n">lpName</span><span class="p">,</span> <span class="n">dwOpenMode</span><span class="p">,</span> <span class="n">dwPipeMode</span><span class="p">,</span> <span class="n">nMaxInstances</span><span class="p">,</span> <span class="n">nOutBufferSize</span><span class="p">,</span> <span class="n">nInBufferSize</span><span class="p">,</span> <span class="n">nDefaultTimeOut</span><span class="p">,</span> <span class="n">lpSecurityAttributes</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CreateNamedPipeA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpName</span><span class="p">,</span> <span class="n">dwOpenMode</span><span class="p">,</span> <span class="n">dwPipeMode</span><span class="p">,</span> <span class="n">nMaxInstances</span><span class="p">,</span> <span class="n">nOutBufferSize</span><span class="p">,</span> <span class="n">nInBufferSize</span><span class="p">,</span> <span class="n">nDefaultTimeOut</span><span class="p">,</span> <span class="n">lpSecurityAttributes</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;CreateNamedPipeW&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">CreateNamedPipeW</span><span class="p">(</span><span class="n">lpName</span><span class="p">,</span> <span class="n">dwOpenMode</span><span class="p">,</span> <span class="n">dwPipeMode</span><span class="p">,</span> <span class="n">nMaxInstances</span><span class="p">,</span> <span class="n">nOutBufferSize</span><span class="p">,</span> <span class="n">nInBufferSize</span><span class="p">,</span> <span class="n">nDefaultTimeOut</span><span class="p">,</span> <span class="n">lpSecurityAttributes</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CreateNamedPipeW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lpName</span><span class="p">,</span> <span class="n">dwOpenMode</span><span class="p">,</span> <span class="n">dwPipeMode</span><span class="p">,</span> <span class="n">nMaxInstances</span><span class="p">,</span> <span class="n">nOutBufferSize</span><span class="p">,</span> <span class="n">nInBufferSize</span><span class="p">,</span> <span class="n">nDefaultTimeOut</span><span class="p">,</span> <span class="n">lpSecurityAttributes</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;ConnectNamedPipe&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">ConnectNamedPipe</span><span class="p">(</span><span class="n">hNamedPipe</span><span class="p">,</span> <span class="n">lpOverlapped</span><span class="p">):</span>
<span class="k">return</span> <span class="n">ConnectNamedPipe</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hNamedPipe</span><span class="p">,</span> <span class="n">lpOverlapped</span><span class="p">)</span>
<span class="nd">@Kernel32Proxy</span><span class="p">(</span><span class="s2">&quot;SetNamedPipeHandleState&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">SetNamedPipeHandleState</span><span class="p">(</span><span class="n">hNamedPipe</span><span class="p">,</span> <span class="n">lpMode</span><span class="p">,</span> <span class="n">lpMaxCollectionCount</span><span class="p">,</span> <span class="n">lpCollectDataTimeout</span><span class="p">):</span>
<span class="k">return</span> <span class="n">SetNamedPipeHandleState</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">hNamedPipe</span><span class="p">,</span> <span class="n">lpMode</span><span class="p">,</span> <span class="n">lpMaxCollectionCount</span><span class="p">,</span> <span class="n">lpCollectDataTimeout</span><span class="p">)</span>
<span class="c1"># Eventlog stuff</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtOpenLog&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtOpenLog</span><span class="p">(</span><span class="n">Session</span><span class="p">,</span> <span class="n">Path</span><span class="p">,</span> <span class="n">Flags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtOpenLog</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">Session</span><span class="p">,</span> <span class="n">Path</span><span class="p">,</span> <span class="n">Flags</span><span class="p">)</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtClose&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtClose</span><span class="p">(</span><span class="n">Object</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtClose</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">Object</span><span class="p">)</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtQuery&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtQuery</span><span class="p">(</span><span class="n">Session</span><span class="p">,</span> <span class="n">Path</span><span class="p">,</span> <span class="n">Query</span><span class="p">,</span> <span class="n">Flags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtQuery</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">Session</span><span class="p">,</span> <span class="n">Path</span><span class="p">,</span> <span class="n">Query</span><span class="p">,</span> <span class="n">Flags</span><span class="p">)</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtNext&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtNext</span><span class="p">(</span><span class="n">ResultSet</span><span class="p">,</span> <span class="n">EventArraySize</span><span class="p">,</span> <span class="n">EventArray</span><span class="p">,</span> <span class="n">Timeout</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Returned</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtNext</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">ResultSet</span><span class="p">,</span> <span class="n">EventArraySize</span><span class="p">,</span> <span class="n">EventArray</span><span class="p">,</span> <span class="n">Timeout</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Returned</span><span class="p">)</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtCreateRenderContext&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtCreateRenderContext</span><span class="p">(</span><span class="n">ValuePathsCount</span><span class="p">,</span> <span class="n">ValuePaths</span><span class="p">,</span> <span class="n">Flags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtCreateRenderContext</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">ValuePathsCount</span><span class="p">,</span> <span class="n">ValuePaths</span><span class="p">,</span> <span class="n">Flags</span><span class="p">)</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtRender&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtRender</span><span class="p">(</span><span class="n">Context</span><span class="p">,</span> <span class="n">Fragment</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">BufferSize</span><span class="p">,</span> <span class="n">Buffer</span><span class="p">,</span> <span class="n">BufferUsed</span><span class="p">,</span> <span class="n">PropertyCount</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtRender</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">Context</span><span class="p">,</span> <span class="n">Fragment</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">BufferSize</span><span class="p">,</span> <span class="n">Buffer</span><span class="p">,</span> <span class="n">BufferUsed</span><span class="p">,</span> <span class="n">PropertyCount</span><span class="p">)</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtOpenChannelEnum&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtOpenChannelEnum</span><span class="p">(</span><span class="n">Session</span><span class="p">,</span> <span class="n">Flags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtOpenChannelEnum</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">Session</span><span class="p">,</span> <span class="n">Flags</span><span class="p">)</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtNextChannelPath&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtNextChannelPath</span><span class="p">(</span><span class="n">ChannelEnum</span><span class="p">,</span> <span class="n">ChannelPathBufferSize</span><span class="p">,</span> <span class="n">ChannelPathBuffer</span><span class="p">,</span> <span class="n">ChannelPathBufferUsed</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtNextChannelPath</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">ChannelEnum</span><span class="p">,</span> <span class="n">ChannelPathBufferSize</span><span class="p">,</span> <span class="n">ChannelPathBuffer</span><span class="p">,</span> <span class="n">ChannelPathBufferUsed</span><span class="p">)</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtOpenPublisherEnum&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtOpenPublisherEnum</span><span class="p">(</span><span class="n">Session</span><span class="p">,</span> <span class="n">Flags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtOpenPublisherEnum</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">Session</span><span class="p">,</span> <span class="n">Flags</span><span class="p">)</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtNextPublisherId&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtNextPublisherId</span><span class="p">(</span><span class="n">PublisherEnum</span><span class="p">,</span> <span class="n">PublisherIdBufferSize</span><span class="p">,</span> <span class="n">PublisherIdBuffer</span><span class="p">,</span> <span class="n">PublisherIdBufferUsed</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtNextPublisherId</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">PublisherEnum</span><span class="p">,</span> <span class="n">PublisherIdBufferSize</span><span class="p">,</span> <span class="n">PublisherIdBuffer</span><span class="p">,</span> <span class="n">PublisherIdBufferUsed</span><span class="p">)</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtGetLogInfo&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtGetLogInfo</span><span class="p">(</span><span class="n">Log</span><span class="p">,</span> <span class="n">PropertyId</span><span class="p">,</span> <span class="n">PropertyValueBufferSize</span><span class="p">,</span> <span class="n">PropertyValueBuffer</span><span class="p">,</span> <span class="n">PropertyValueBufferUsed</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtGetLogInfo</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">Log</span><span class="p">,</span> <span class="n">PropertyId</span><span class="p">,</span> <span class="n">PropertyValueBufferSize</span><span class="p">,</span> <span class="n">PropertyValueBuffer</span><span class="p">,</span> <span class="n">PropertyValueBufferUsed</span><span class="p">)</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtOpenChannelConfig&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtOpenChannelConfig</span><span class="p">(</span><span class="n">Session</span><span class="p">,</span> <span class="n">ChannelPath</span><span class="p">,</span> <span class="n">Flags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtOpenChannelConfig</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">Session</span><span class="p">,</span> <span class="n">ChannelPath</span><span class="p">,</span> <span class="n">Flags</span><span class="p">)</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtGetChannelConfigProperty&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtGetChannelConfigProperty</span><span class="p">(</span><span class="n">ChannelConfig</span><span class="p">,</span> <span class="n">PropertyId</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">PropertyValueBufferSize</span><span class="p">,</span> <span class="n">PropertyValueBuffer</span><span class="p">,</span> <span class="n">PropertyValueBufferUsed</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtGetChannelConfigProperty</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">ChannelConfig</span><span class="p">,</span> <span class="n">PropertyId</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">PropertyValueBufferSize</span><span class="p">,</span> <span class="n">PropertyValueBuffer</span><span class="p">,</span> <span class="n">PropertyValueBufferUsed</span><span class="p">)</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtOpenPublisherMetadata&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtOpenPublisherMetadata</span><span class="p">(</span><span class="n">Session</span><span class="p">,</span> <span class="n">PublisherIdentity</span><span class="p">,</span> <span class="n">LogFilePath</span><span class="p">,</span> <span class="n">Locale</span><span class="p">,</span> <span class="n">Flags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtOpenPublisherMetadata</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">Session</span><span class="p">,</span> <span class="n">PublisherIdentity</span><span class="p">,</span> <span class="n">LogFilePath</span><span class="p">,</span> <span class="n">Locale</span><span class="p">,</span> <span class="n">Flags</span><span class="p">)</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtOpenEventMetadataEnum&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtOpenEventMetadataEnum</span><span class="p">(</span><span class="n">PublisherMetadata</span><span class="p">,</span> <span class="n">Flags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtOpenEventMetadataEnum</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">PublisherMetadata</span><span class="p">,</span> <span class="n">Flags</span><span class="p">)</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtNextEventMetadata&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtNextEventMetadata</span><span class="p">(</span><span class="n">EventMetadataEnum</span><span class="p">,</span> <span class="n">Flags</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtNextEventMetadata</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">EventMetadataEnum</span><span class="p">,</span> <span class="n">Flags</span><span class="p">)</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtGetEventMetadataProperty&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtGetEventMetadataProperty</span><span class="p">(</span><span class="n">EventMetadata</span><span class="p">,</span> <span class="n">PropertyId</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">EventMetadataPropertyBufferSize</span><span class="p">,</span> <span class="n">EventMetadataPropertyBuffer</span><span class="p">,</span> <span class="n">EventMetadataPropertyBufferUsed</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtGetEventMetadataProperty</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">EventMetadata</span><span class="p">,</span> <span class="n">PropertyId</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">EventMetadataPropertyBufferSize</span><span class="p">,</span> <span class="n">EventMetadataPropertyBuffer</span><span class="p">,</span> <span class="n">EventMetadataPropertyBufferUsed</span><span class="p">)</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtGetPublisherMetadataProperty&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtGetPublisherMetadataProperty</span><span class="p">(</span><span class="n">PublisherMetadata</span><span class="p">,</span> <span class="n">PropertyId</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">PublisherMetadataPropertyBufferSize</span><span class="p">,</span> <span class="n">PublisherMetadataPropertyBuffer</span><span class="p">,</span> <span class="n">PublisherMetadataPropertyBufferUsed</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtGetPublisherMetadataProperty</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">PublisherMetadata</span><span class="p">,</span> <span class="n">PropertyId</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">PublisherMetadataPropertyBufferSize</span><span class="p">,</span> <span class="n">PublisherMetadataPropertyBuffer</span><span class="p">,</span> <span class="n">PublisherMetadataPropertyBufferUsed</span><span class="p">)</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtGetObjectArraySize&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtGetObjectArraySize</span><span class="p">(</span><span class="n">ObjectArray</span><span class="p">,</span> <span class="n">ObjectArraySize</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtGetObjectArraySize</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">ObjectArray</span><span class="p">,</span> <span class="n">ObjectArraySize</span><span class="p">)</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtGetObjectArrayProperty&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtGetObjectArrayProperty</span><span class="p">(</span><span class="n">ObjectArray</span><span class="p">,</span> <span class="n">PropertyId</span><span class="p">,</span> <span class="n">ArrayIndex</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">PropertyValueBufferSize</span><span class="p">,</span> <span class="n">PropertyValueBuffer</span><span class="p">,</span> <span class="n">PropertyValueBufferUsed</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtGetObjectArrayProperty</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">ObjectArray</span><span class="p">,</span> <span class="n">PropertyId</span><span class="p">,</span> <span class="n">ArrayIndex</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">PropertyValueBufferSize</span><span class="p">,</span> <span class="n">PropertyValueBuffer</span><span class="p">,</span> <span class="n">PropertyValueBufferUsed</span><span class="p">)</span>
<span class="nd">@WevtapiProxy</span><span class="p">(</span><span class="s2">&quot;EvtFormatMessage&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">EvtFormatMessage</span><span class="p">(</span><span class="n">PublisherMetadata</span><span class="p">,</span> <span class="n">Event</span><span class="p">,</span> <span class="n">MessageId</span><span class="p">,</span> <span class="n">ValueCount</span><span class="p">,</span> <span class="n">Values</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">BufferSize</span><span class="p">,</span> <span class="n">Buffer</span><span class="p">,</span> <span class="n">BufferUsed</span><span class="p">):</span>
<span class="k">return</span> <span class="n">EvtFormatMessage</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">PublisherMetadata</span><span class="p">,</span> <span class="n">Event</span><span class="p">,</span> <span class="n">MessageId</span><span class="p">,</span> <span class="n">ValueCount</span><span class="p">,</span> <span class="n">Values</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">BufferSize</span><span class="p">,</span> <span class="n">Buffer</span><span class="p">,</span> <span class="n">BufferUsed</span><span class="p">)</span>
<span class="c1"># ShlwapiProxy</span>
<span class="nd">@ShlwapiProxy</span><span class="p">(</span><span class="s2">&quot;StrStrIW&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">StrStrIW</span><span class="p">(</span><span class="n">pszFirst</span><span class="p">,</span> <span class="n">pszSrch</span><span class="p">):</span>
<span class="k">return</span> <span class="n">StrStrIW</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pszFirst</span><span class="p">,</span> <span class="n">pszSrch</span><span class="p">)</span>
<span class="nd">@ShlwapiProxy</span><span class="p">(</span><span class="s2">&quot;StrStrIA&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">StrStrIA</span><span class="p">(</span><span class="n">pszFirst</span><span class="p">,</span> <span class="n">pszSrch</span><span class="p">):</span>
<span class="k">return</span> <span class="n">StrStrIA</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">pszFirst</span><span class="p">,</span> <span class="n">pszSrch</span><span class="p">)</span>
<span class="nd">@ShlwapiProxy</span><span class="p">(</span><span class="s2">&quot;IsOS&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">IsOS</span><span class="p">(</span><span class="n">dwOS</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">is_implemented</span><span class="p">(</span><span class="n">IsOS</span><span class="p">)</span> <span class="ow">and</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">version</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&lt;</span> <span class="mi">6</span><span class="p">:</span>
<span class="c1"># Before Vista:</span>
<span class="c1"># If so use ordinal 437 from DOCUMENTATION</span>
<span class="c1"># https://docs.microsoft.com/en-us/windows/desktop/api/shlwapi/nf-shlwapi-isos#remarks</span>
<span class="n">IsOS</span><span class="o">.</span><span class="n">proxy</span><span class="o">.</span><span class="n">func_name</span> <span class="o">=</span> <span class="mi">437</span>
<span class="k">return</span> <span class="n">IsOS</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">dwOS</span><span class="p">)</span>
<span class="c1"># OleaccProxy</span>
<span class="nd">@OleaccProxy</span><span class="p">(</span><span class="s2">&quot;ObjectFromLresult&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">ObjectFromLresult</span><span class="p">(</span><span class="n">lResult</span><span class="p">,</span> <span class="n">riid</span><span class="p">,</span> <span class="n">wParam</span><span class="p">,</span> <span class="n">ppvObject</span><span class="p">):</span>
<span class="k">return</span> <span class="n">ObjectFromLresult</span><span class="o">.</span><span class="n">ctypes_function</span><span class="p">(</span><span class="n">lResult</span><span class="p">,</span> <span class="n">riid</span><span class="p">,</span> <span class="n">wParam</span><span class="p">,</span> <span class="n">ppvObject</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.4 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.
</div>
</body>
</html>