mirror of
https://github.com/hakril/PythonForWindows
synced 2026-06-08 14:31:45 +00:00
Pushed new HTML doc, changed version to 0.3. Ready for hack.lu
This commit is contained in:
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
||||
# Sphinx build info version 1
|
||||
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
|
||||
config: bb938eea015b2c5861daa2467f1a95bd
|
||||
config: fb4e1f3623837487174af5c6fcf17f8a
|
||||
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
||||
|
||||
Vendored
+11
-5
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Overview: module code — PythonForWindows 0.2 documentation</title>
|
||||
<title>Overview: module code — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -47,18 +47,24 @@
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>All modules for which code is available</h1>
|
||||
<ul><li><a href="windows/crypto/certificate.html">windows.crypto.certificate</a></li>
|
||||
<ul><li><a href="windows/alpc.html">windows.alpc</a></li>
|
||||
<li><a href="windows/crypto/certificate.html">windows.crypto.certificate</a></li>
|
||||
<li><a href="windows/crypto/encrypt_decrypt.html">windows.crypto.encrypt_decrypt</a></li>
|
||||
<li><a href="windows/crypto/generation.html">windows.crypto.generation</a></li>
|
||||
<li><a href="windows/debug/breakpoints.html">windows.debug.breakpoints</a></li>
|
||||
<li><a href="windows/debug/debugger.html">windows.debug.debugger</a></li>
|
||||
<li><a href="windows/debug/localdbg.html">windows.debug.localdbg</a></li>
|
||||
<li><a href="windows/generated_def/windef.html">windows.generated_def.windef</a></li>
|
||||
<li><a href="windows/generated_def/winstructs.html">windows.generated_def.winstructs</a></li>
|
||||
<li><a href="windows/hooks.html">windows.hooks</a></li>
|
||||
<li><a href="windows/native_exec/cpuid.html">windows.native_exec.cpuid</a></li>
|
||||
<li><a href="windows/native_exec/native_function.html">windows.native_exec.native_function</a></li>
|
||||
<li><a href="windows/native_exec/simple_x86.html">windows.native_exec.simple_x86</a></li>
|
||||
<li><a href="windows/pe_parse.html">windows.pe_parse</a></li>
|
||||
<li><a href="windows/remotectypes.html">windows.remotectypes</a></li>
|
||||
<li><a href="windows/rpc/client.html">windows.rpc.client</a></li>
|
||||
<li><a href="windows/rpc/epmapper.html">windows.rpc.epmapper</a></li>
|
||||
<li><a href="windows/rpc/ndr.html">windows.rpc.ndr</a></li>
|
||||
<li><a href="windows/syswow64.html">windows.syswow64</a></li>
|
||||
<li><a href="windows/utils/winutils.html">windows.utils.winutils</a></li>
|
||||
<li><a href="windows/winobject/exception.html">windows.winobject.exception</a></li>
|
||||
@@ -101,7 +107,7 @@
|
||||
<li class="right" >
|
||||
<a href="../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
|
||||
+629
@@ -0,0 +1,629 @@
|
||||
<!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="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.alpc — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
SOURCELINK_SUFFIX: '.txt'
|
||||
};
|
||||
</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 role="document">
|
||||
<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.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for windows.alpc</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span> <span class="nn">sys</span>
|
||||
<span class="kn">import</span> <span class="nn">ctypes</span>
|
||||
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">namedtuple</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">windows</span>
|
||||
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
|
||||
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">generated_def</span> <span class="k">as</span> <span class="n">gdef</span>
|
||||
|
||||
|
||||
<span class="c1">## For 64b python</span>
|
||||
<span class="c1"># 0x1f: 0x80000000: ALPC_MESSAGE_SECURITY_ATTRIBUTE(0x80000000) : size=0x18?</span>
|
||||
<span class="c1"># 0x1e: 0x40000000: ALPC_MESSAGE_VIEW_ATTRIBUTE(0x40000000): size=0x20</span>
|
||||
<span class="c1"># 0x1d: 0x20000000: ALPC_MESSAGE_CONTEXT_ATTRIBUTE(0x20000000): size=0x20</span>
|
||||
<span class="c1"># 0x1c: 0x10000000: ALPC_MESSAGE_HANDLE_ATTRIBUTE(0x10000000): size=0x18</span>
|
||||
<span class="c1"># 0x1b: 0x8000000: ALPC_MESSAGE_TOKEN_ATTRIBUTE(0x8000000): size=0x18</span>
|
||||
<span class="c1"># 0x1a: 0x4000000: ALPC_MESSAGE_DIRECT_ATTRIBUTE(0x4000000) size=0x8</span>
|
||||
<span class="c1"># 0x19: 0x2000000: ALPC_MESSAGE_WORK_ON_BEHALF_ATTRIBUTE(0x2000000) size=0x8</span>
|
||||
|
||||
<div class="viewcode-block" id="AlpcMessage"><a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcMessage">[docs]</a><span class="k">class</span> <span class="nc">AlpcMessage</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""Represent a full ALPC Message: a :class:`AlpcMessagePort` and a :class:`MessageAttribute`"""</span>
|
||||
<span class="c1"># PORT_MESSAGE + MessageAttribute</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg_or_size</span><span class="o">=</span><span class="mh">0x1000</span><span class="p">,</span> <span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="c1"># Init the PORT_MESSAGE</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">msg_or_size</span><span class="p">,</span> <span class="p">(</span><span class="n">long</span><span class="p">,</span> <span class="nb">int</span><span class="p">)):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">port_message_buffer_size</span> <span class="o">=</span> <span class="n">msg_or_size</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">port_message_raw_buffer</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_buffer</span><span class="p">(</span><span class="n">msg_or_size</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">port_message</span> <span class="o">=</span> <span class="n">AlpcMessagePort</span><span class="o">.</span><span class="n">from_buffer</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">port_message_raw_buffer</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">port_message</span><span class="o">.</span><span class="n">set_datalen</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">msg_or_size</span><span class="p">,</span> <span class="n">AlpcMessagePort</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">port_message</span> <span class="o">=</span> <span class="n">msg_or_size</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">port_message_raw_buffer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">port_message</span><span class="o">.</span><span class="n">raw_buffer</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">port_message_buffer_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">port_message_raw_buffer</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Uneexpected type for <msg_or_size>: </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">msg_or_size</span><span class="p">))</span>
|
||||
|
||||
<span class="c1"># Init the MessageAttributes</span>
|
||||
<span class="k">if</span> <span class="n">attributes</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="c1"># self.attributes = MessageAttribute.with_all_attributes()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">attributes</span> <span class="o">=</span> <span class="n">MessageAttribute</span><span class="o">.</span><span class="n">with_all_attributes</span><span class="p">()</span> <span class="c1">## Testing</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">attributes</span> <span class="o">=</span> <span class="n">attributes</span>
|
||||
|
||||
<span class="c1"># PORT_MESSAGE wrappers</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The type of the message (``PORT_MESSAGE.u2.s2.Type``)"""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">port_message</span><span class="o">.</span><span class="n">u2</span><span class="o">.</span><span class="n">s2</span><span class="o">.</span><span class="n">Type</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_port_message_data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">port_message</span><span class="o">.</span><span class="n">data</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">set_port_message_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">port_message</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">data</span>
|
||||
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_port_message_data</span><span class="p">,</span> <span class="n">set_port_message_data</span><span class="p">)</span>
|
||||
<span class="s2">"The data of the message (located after the PORT_MESSAGE header)"</span>
|
||||
|
||||
<span class="c1"># MessageAttributes wrappers</span>
|
||||
|
||||
<span class="c1">## Low level attributes access</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">security_attribute</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The :data:`~windows.generated_def.ALPC_MESSAGE_SECURITY_ATTRIBUTE` of the message</span>
|
||||
|
||||
<span class="sd"> :type: :class:`ALPC_SECURITY_ATTR`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get_attribute</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_SECURITY_ATTRIBUTE</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">view_attribute</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The :data:`~windows.generated_def.ALPC_MESSAGE_VIEW_ATTRIBUTE` of the message:</span>
|
||||
|
||||
<span class="sd"> :type: :class:`ALPC_DATA_VIEW_ATTR`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get_attribute</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_VIEW_ATTRIBUTE</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">context_attribute</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The :data:`~windows.generated_def.ALPC_MESSAGE_CONTEXT_ATTRIBUTE` of the message:</span>
|
||||
|
||||
<span class="sd"> :type: :class:`ALPC_CONTEXT_ATTR`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get_attribute</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_CONTEXT_ATTRIBUTE</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">handle_attribute</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The :data:`~windows.generated_def.ALPC_MESSAGE_HANDLE_ATTRIBUTE` of the message:</span>
|
||||
|
||||
<span class="sd"> :type: :class:`ALPC_HANDLE_ATTR`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get_attribute</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_HANDLE_ATTRIBUTE</span><span class="p">)</span>
|
||||
|
||||
<span class="c1">## Low level validity check (Test)</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">view_is_valid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># Change the name ?</span>
|
||||
<span class="sd">"""True if :data:`~windows.generated_def.ALPC_MESSAGE_VIEW_ATTRIBUTE` is a ValidAttributes"""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">is_valid</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_VIEW_ATTRIBUTE</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">security_is_valid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># Change the name ?</span>
|
||||
<span class="sd">"""True if :data:`~windows.generated_def.ALPC_MESSAGE_SECURITY_ATTRIBUTE` is a ValidAttributes"""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">is_valid</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_SECURITY_ATTRIBUTE</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">handle_is_valid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># Change the name ?</span>
|
||||
<span class="sd">"""True if :data:`~windows.generated_def.ALPC_MESSAGE_HANDLE_ATTRIBUTE` is a ValidAttributes"""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">is_valid</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_HANDLE_ATTRIBUTE</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">context_is_valid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># Change the name ?</span>
|
||||
<span class="sd">"""True if :data:`~windows.generated_def.ALPC_MESSAGE_CONTEXT_ATTRIBUTE` is a ValidAttributes"""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">is_valid</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_CONTEXT_ATTRIBUTE</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">valid_attributes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The list of valid attributes</span>
|
||||
|
||||
<span class="sd"> :type: [:class:`~windows.generated_def.Flag`]</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">valid_list</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">allocated_attributes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The list of allocated attributes</span>
|
||||
|
||||
<span class="sd"> :type: [:class:`~windows.generated_def.Flag`]</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">allocated_list</span>
|
||||
|
||||
<span class="c1">## High level setup (Test)</span>
|
||||
<span class="k">def</span> <span class="nf">setup_view</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">section_handle</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">setup_view</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="AlpcMessagePort"><a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcMessagePort">[docs]</a><span class="k">class</span> <span class="nc">AlpcMessagePort</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">PORT_MESSAGE</span><span class="p">):</span>
|
||||
<span class="sd">"""The effective ALPC Message composed of a ``PORT_MESSAGE`` structure followed by the data"""</span>
|
||||
<span class="c1"># Constructeur</span>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">from_buffer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">buffer</span><span class="p">):</span>
|
||||
<span class="c1"># A sort of super(AlpcMessagePort).from_buffer</span>
|
||||
<span class="c1"># But from_buffer is from the Metaclass of AlpcMessagePort so we use 'type(AlpcMessagePort)'</span>
|
||||
<span class="c1"># To access the standard version of from_buffer.</span>
|
||||
<span class="bp">self</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">AlpcMessagePort</span><span class="p">)</span><span class="o">.</span><span class="n">from_buffer</span><span class="p">(</span><span class="n">AlpcMessagePort</span><span class="p">,</span> <span class="n">buffer</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">buffer_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">raw_buffer</span> <span class="o">=</span> <span class="n">buffer</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">header_size</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">max_datasize</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">buffer_size</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">header_size</span>
|
||||
<span class="k">return</span> <span class="bp">self</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">from_buffer_size</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">buffer_size</span><span class="p">):</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_buffer</span><span class="p">(</span><span class="n">buffer_size</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">from_buffer</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">read_data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw_buffer</span><span class="p">[</span><span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span><span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">u1</span><span class="o">.</span><span class="n">s1</span><span class="o">.</span><span class="n">DataLength</span><span class="p">]</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">write_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">></span> <span class="bp">self</span><span class="o">.</span><span class="n">max_datasize</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Cannot write data of len <</span><span class="si">{0}</span><span class="s2">> (raw_buffer size == <</span><span class="si">{1}</span><span class="s2">>)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">buffer_size</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">raw_buffer</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">header_size</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">header_size</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)]</span> <span class="o">=</span> <span class="n">data</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">set_datalen</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
|
||||
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">read_data</span><span class="p">,</span> <span class="n">write_data</span><span class="p">)</span>
|
||||
<span class="s2">"The data of the message (located after the header)"</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">set_datalen</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">datalen</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">u1</span><span class="o">.</span><span class="n">s1</span><span class="o">.</span><span class="n">TotalLength</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">header_size</span> <span class="o">+</span> <span class="n">datalen</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">u1</span><span class="o">.</span><span class="n">s1</span><span class="o">.</span><span class="n">DataLength</span> <span class="o">=</span> <span class="n">datalen</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_datalen</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">u1</span><span class="o">.</span><span class="n">s1</span><span class="o">.</span><span class="n">DataLength</span>
|
||||
|
||||
<span class="n">datalen</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_datalen</span><span class="p">,</span> <span class="n">set_datalen</span><span class="p">)</span>
|
||||
<span class="sd">"""The length of the data"""</span></div>
|
||||
|
||||
<span class="n">KNOWN_ALPC_ATTRIBUTES</span> <span class="o">=</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_SECURITY_ATTRIBUTE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_VIEW_ATTRIBUTE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_CONTEXT_ATTRIBUTE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_HANDLE_ATTRIBUTE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_TOKEN_ATTRIBUTE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_DIRECT_ATTRIBUTE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_WORK_ON_BEHALF_ATTRIBUTE</span><span class="p">)</span>
|
||||
|
||||
<span class="n">KNOWN_ALPC_ATTRIBUTES_MAPPING</span> <span class="o">=</span> <span class="p">{</span><span class="n">x</span><span class="p">:</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">KNOWN_ALPC_ATTRIBUTES</span><span class="p">}</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="MessageAttribute"><a class="viewcode-back" href="../../alpc.html#windows.alpc.MessageAttribute">[docs]</a><span class="k">class</span> <span class="nc">MessageAttribute</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_ATTRIBUTES</span><span class="p">):</span>
|
||||
<span class="sd">"""The attributes of an ALPC message"""</span>
|
||||
<span class="n">ATTRIBUTE_BY_FLAG</span> <span class="o">=</span> <span class="p">[(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_SECURITY_ATTRIBUTE</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_SECURITY_ATTR</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_VIEW_ATTRIBUTE</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_DATA_VIEW_ATTR</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_CONTEXT_ATTRIBUTE</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_CONTEXT_ATTR</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_HANDLE_ATTRIBUTE</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_HANDLE_ATTR</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_TOKEN_ATTRIBUTE</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_TOKEN_ATTR</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_DIRECT_ATTRIBUTE</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_DIRECT_ATTR</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_WORK_ON_BEHALF_ATTRIBUTE</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_WORK_ON_BEHALF_ATTR</span><span class="p">),</span>
|
||||
<span class="p">]</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<div class="viewcode-block" id="MessageAttribute.with_attributes"><a class="viewcode-back" href="../../alpc.html#windows.alpc.MessageAttribute.with_attributes">[docs]</a> <span class="k">def</span> <span class="nf">with_attributes</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">attributes</span><span class="p">):</span>
|
||||
<span class="sd">"""Create a new :class:`MessageAttribute` with ``attributes`` allocated</span>
|
||||
|
||||
<span class="sd"> :returns: :class:`MessageAttribute`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_get_required_buffer_size</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_buffer</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
|
||||
<span class="bp">self</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">from_buffer</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">raw_buffer</span> <span class="o">=</span> <span class="n">buffer</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">AlpcInitializeMessageAttribute</span><span class="p">(</span><span class="n">attributes</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">raw_buffer</span><span class="p">),</span> <span class="n">res</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span></div>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<div class="viewcode-block" id="MessageAttribute.with_all_attributes"><a class="viewcode-back" href="../../alpc.html#windows.alpc.MessageAttribute.with_all_attributes">[docs]</a> <span class="k">def</span> <span class="nf">with_all_attributes</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
|
||||
<span class="sd">"""Create a new :class:`MessageAttribute` with the following attributes allocated:</span>
|
||||
|
||||
<span class="sd"> - :class:`ALPC_MESSAGE_SECURITY_ATTRIBUTE`</span>
|
||||
<span class="sd"> - :class:`ALPC_MESSAGE_VIEW_ATTRIBUTE`</span>
|
||||
<span class="sd"> - :class:`ALPC_MESSAGE_CONTEXT_ATTRIBUTE`</span>
|
||||
<span class="sd"> - :class:`ALPC_MESSAGE_HANDLE_ATTRIBUTE`</span>
|
||||
<span class="sd"> - :class:`ALPC_MESSAGE_TOKEN_ATTRIBUTE`</span>
|
||||
<span class="sd"> - :class:`ALPC_MESSAGE_DIRECT_ATTRIBUTE`</span>
|
||||
<span class="sd"> - :class:`ALPC_MESSAGE_WORK_ON_BEHALF_ATTRIBUTE`</span>
|
||||
|
||||
<span class="sd"> :returns: :class:`MessageAttribute`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">with_attributes</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_SECURITY_ATTRIBUTE</span> <span class="o">|</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_VIEW_ATTRIBUTE</span> <span class="o">|</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_CONTEXT_ATTRIBUTE</span> <span class="o">|</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_HANDLE_ATTRIBUTE</span> <span class="o">|</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_TOKEN_ATTRIBUTE</span> <span class="o">|</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_DIRECT_ATTRIBUTE</span> <span class="o">|</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_WORK_ON_BEHALF_ATTRIBUTE</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">_get_required_buffer_size</span><span class="p">(</span><span class="n">flags</span><span class="p">):</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">AlpcInitializeMessageAttribute</span><span class="p">(</span><span class="n">flags</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">res</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="n">windows</span><span class="o">.</span><span class="n">generated_def</span><span class="o">.</span><span class="n">ntstatus</span><span class="o">.</span><span class="n">NtStatusException</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="c1"># Buffer too small: osef</span>
|
||||
<span class="k">return</span> <span class="n">res</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="k">return</span> <span class="n">res</span><span class="o">.</span><span class="n">value</span>
|
||||
|
||||
<div class="viewcode-block" id="MessageAttribute.is_allocated"><a class="viewcode-back" href="../../alpc.html#windows.alpc.MessageAttribute.is_allocated">[docs]</a> <span class="k">def</span> <span class="nf">is_allocated</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attribute</span><span class="p">):</span>
|
||||
<span class="sd">"""Return ``True`` if ``attribute`` is allocated"""</span>
|
||||
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AllocatedAttributes</span> <span class="o">&</span> <span class="n">attribute</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="MessageAttribute.is_valid"><a class="viewcode-back" href="../../alpc.html#windows.alpc.MessageAttribute.is_valid">[docs]</a> <span class="k">def</span> <span class="nf">is_valid</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attribute</span><span class="p">):</span>
|
||||
<span class="sd">"""Return ``True`` if ``attribute`` is valid"""</span>
|
||||
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ValidAttributes</span> <span class="o">&</span> <span class="n">attribute</span><span class="p">)</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_attribute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attribute</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_allocated</span><span class="p">(</span><span class="n">attribute</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Cannot get non-allocated attribute <</span><span class="si">{0}</span><span class="s2">>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">attribute</span><span class="p">))</span>
|
||||
<span class="n">offset</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">sflag</span><span class="p">,</span> <span class="n">struct</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ATTRIBUTE_BY_FLAG</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">sflag</span> <span class="o">==</span> <span class="n">attribute</span><span class="p">:</span>
|
||||
<span class="c1"># print("Attr {0:#x} was at offet {1:#x}".format(attribute, offset))</span>
|
||||
<span class="k">return</span> <span class="n">struct</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">+</span> <span class="n">offset</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_allocated</span><span class="p">(</span><span class="n">sflag</span><span class="p">):</span>
|
||||
<span class="n">offset</span> <span class="o">+=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">struct</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"ALPC Attribute <</span><span class="si">{0}</span><span class="s2">> not found :("</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">attribute</span><span class="p">))</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_extract_alpc_attributes_values</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
||||
<span class="n">attrs</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">mask</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">1</span> <span class="o"><<</span> <span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">64</span><span class="p">)):</span>
|
||||
<span class="k">if</span> <span class="n">value</span> <span class="o">&</span> <span class="n">mask</span><span class="p">:</span>
|
||||
<span class="n">attrs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">mask</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">KNOWN_ALPC_ATTRIBUTES_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">]</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">valid_list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The list of valid attributes</span>
|
||||
|
||||
<span class="sd"> :type: [:class:`~windows.generated_def.Flag`]</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_alpc_attributes_values</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ValidAttributes</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">allocated_list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The list of allocated attributes</span>
|
||||
|
||||
<span class="sd"> :type: [:class:`~windows.generated_def.Flag`]</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_alpc_attributes_values</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AllocatedAttributes</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="n">AlpcSection</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s2">"AlpcSection"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"handle"</span><span class="p">,</span> <span class="s2">"size"</span><span class="p">])</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">AlpcTransportBase</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">send_receive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alpc_message</span><span class="p">,</span> <span class="n">receive_msg</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MSGFLG_SYNC_REQUEST</span><span class="p">):</span>
|
||||
<span class="sd">"""Send and receive a message with ``flags``.</span>
|
||||
|
||||
<span class="sd"> :param alpc_message: The message to send. If ``alpc_message`` is a :class:`str` it build an AlpcMessage with the message as data.</span>
|
||||
<span class="sd"> :type alpc_message: AlpcMessage or str</span>
|
||||
<span class="sd"> :param receive_msg: The message to send. If ``receive_msg`` is a ``None`` it create and return a simple :class:`AlpcMessage`</span>
|
||||
<span class="sd"> :type receive_msg: AlpcMessage or None</span>
|
||||
<span class="sd"> :param int flags: The flags for :func:`NtAlpcSendWaitReceivePort`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">alpc_message</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||||
<span class="n">raw_alpc_message</span> <span class="o">=</span> <span class="n">alpc_message</span>
|
||||
<span class="n">alpc_message</span> <span class="o">=</span> <span class="n">AlpcMessage</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="mh">0x1000</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">alpc_message</span><span class="p">)))</span>
|
||||
<span class="n">alpc_message</span><span class="o">.</span><span class="n">port_message</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">raw_alpc_message</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">receive_msg</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">receive_msg</span> <span class="o">=</span> <span class="n">AlpcMessage</span><span class="p">(</span><span class="mh">0x1000</span><span class="p">)</span>
|
||||
<span class="n">receive_size</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SIZE_T</span><span class="p">(</span><span class="n">receive_msg</span><span class="o">.</span><span class="n">port_message_buffer_size</span><span class="p">)</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtAlpcSendWaitReceivePort</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="n">alpc_message</span><span class="o">.</span><span class="n">port_message</span><span class="p">,</span> <span class="n">alpc_message</span><span class="o">.</span><span class="n">attributes</span><span class="p">,</span> <span class="n">receive_msg</span><span class="o">.</span><span class="n">port_message</span><span class="p">,</span> <span class="n">receive_size</span><span class="p">,</span> <span class="n">receive_msg</span><span class="o">.</span><span class="n">attributes</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">receive_msg</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">send</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alpc_message</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
<span class="sd">"""Send the ``alpc_message`` with ``flags``</span>
|
||||
|
||||
<span class="sd"> :param alpc_message: The message to send. If ``alpc_message`` is a :class:`str` it build an AlpcMessage with the message as data.</span>
|
||||
<span class="sd"> :type alpc_message: AlpcMessage or str</span>
|
||||
<span class="sd"> :param int flags: The flags for :func:`NtAlpcSendWaitReceivePort`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">alpc_message</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||||
<span class="n">raw_alpc_message</span> <span class="o">=</span> <span class="n">alpc_message</span>
|
||||
<span class="n">alpc_message</span> <span class="o">=</span> <span class="n">AlpcMessage</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="mh">0x1000</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">alpc_message</span><span class="p">)))</span>
|
||||
<span class="n">alpc_message</span><span class="o">.</span><span class="n">port_message</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">raw_alpc_message</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtAlpcSendWaitReceivePort</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="n">alpc_message</span><span class="o">.</span><span class="n">port_message</span><span class="p">,</span> <span class="n">alpc_message</span><span class="o">.</span><span class="n">attributes</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">recv</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">receive_msg</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
<span class="sd">"""Receive a message into ``alpc_message`` with ``flags``.</span>
|
||||
|
||||
<span class="sd"> :param receive_msg: The message to send. If ``receive_msg`` is a ``None`` it create and return a simple :class:`AlpcMessage`</span>
|
||||
<span class="sd"> :type receive_msg: AlpcMessage or None</span>
|
||||
<span class="sd"> :param int flags: The flags for :func:`NtAlpcSendWaitReceivePort`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">receive_msg</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">receive_msg</span> <span class="o">=</span> <span class="n">AlpcMessage</span><span class="p">(</span><span class="mh">0x1000</span><span class="p">)</span>
|
||||
<span class="n">receive_size</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SIZE_T</span><span class="p">(</span><span class="n">receive_msg</span><span class="o">.</span><span class="n">port_message_buffer_size</span><span class="p">)</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtAlpcSendWaitReceivePort</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">receive_msg</span><span class="o">.</span><span class="n">port_message</span><span class="p">,</span> <span class="n">receive_size</span><span class="p">,</span> <span class="n">receive_msg</span><span class="o">.</span><span class="n">attributes</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">receive_msg</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_close_port</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">port_handle</span><span class="p">):</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">NtAlpcDisconnectPort</span><span class="p">(</span><span class="n">port_handle</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CloseHandle</span><span class="p">(</span><span class="n">port_handle</span><span class="p">)</span>
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="AlpcClient"><a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcClient">[docs]</a><span class="k">class</span> <span class="nc">AlpcClient</span><span class="p">(</span><span class="n">AlpcTransportBase</span><span class="p">):</span>
|
||||
<span class="s2">"An ALPC client able to connect to a port and send/receive messages"</span>
|
||||
<span class="n">DEFAULT_MAX_MESSAGE_LENGTH</span> <span class="o">=</span> <span class="mh">0x1000</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">port_name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Init the :class:`AlpcClient` automatically connect to ``port_name`` using default values if given"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">port_name</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">if</span> <span class="n">port_name</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">connect_to_port</span><span class="p">(</span><span class="n">port_name</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_alpc_port_to_unicode_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="n">utf16_len</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="o">*</span> <span class="mi">2</span>
|
||||
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">UNICODE_STRING</span><span class="p">(</span><span class="n">utf16_len</span><span class="p">,</span> <span class="n">utf16_len</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="AlpcClient.connect_to_port"><a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcClient.connect_to_port">[docs]</a> <span class="k">def</span> <span class="nf">connect_to_port</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">port_name</span><span class="p">,</span> <span class="n">connect_message</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">port_attr</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">port_attr_flags</span><span class="o">=</span><span class="mh">0x10000</span><span class="p">,</span> <span class="n">obj_attr</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">flags</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MSGFLG_SYNC_REQUEST</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Connect to the ALPC port ``port_name``. Most of the parameters have defauls value is ``None`` is passed.</span>
|
||||
|
||||
<span class="sd"> :param AlpcMessage connect_message: The message send with the connection request, if not ``None`` the function will return an :class:`AlpcMessage`</span>
|
||||
<span class="sd"> :param ALPC_PORT_ATTRIBUTES port_attr: The port attributes, one with default value will be used if this parameter is ``None``</span>
|
||||
<span class="sd"> :param int port_attr_flags: ``ALPC_PORT_ATTRIBUTES.Flags`` used if ``port_attr`` is ``None`` (MUTUALY EXCLUSINVE WITH ``port_attr``)</span>
|
||||
<span class="sd"> :param OBJECT_ATTRIBUTES obj_attr: The attributes of the port (can be None)</span>
|
||||
<span class="sd"> :param int flags: The flags for :func:`NtAlpcConnectPort`</span>
|
||||
<span class="sd"> :param int timeout: The timeout of the request</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># TODO raise on mutual exclusive parameter</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Client already connected"</span><span class="p">)</span>
|
||||
<span class="n">handle</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">HANDLE</span><span class="p">()</span>
|
||||
<span class="n">port_name_unicode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_alpc_port_to_unicode_string</span><span class="p">(</span><span class="n">port_name</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">port_attr</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">port_attr</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_PORT_ATTRIBUTES</span><span class="p">()</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">Flags</span> <span class="o">=</span> <span class="n">port_attr_flags</span> <span class="c1"># Flag qui fonctionne pour l'UAC</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxMessageLength</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_MAX_MESSAGE_LENGTH</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MemoryBandwidth</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxPoolUsage</span> <span class="o">=</span> <span class="mh">0xffffffff</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxSectionSize</span> <span class="o">=</span> <span class="mh">0xffffffff</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxViewSize</span> <span class="o">=</span> <span class="mh">0xffffffff</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxTotalSectionSize</span> <span class="o">=</span> <span class="mh">0xffffffff</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">DupObjectTypes</span> <span class="o">=</span> <span class="mh">0xffffffff</span>
|
||||
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">SecurityQos</span><span class="o">.</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">port_attr</span><span class="o">.</span><span class="n">SecurityQos</span><span class="p">)</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">SecurityQos</span><span class="o">.</span><span class="n">ImpersonationLevel</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SecurityImpersonation</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">SecurityQos</span><span class="o">.</span><span class="n">ContextTrackingMode</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">SecurityQos</span><span class="o">.</span><span class="n">EffectiveOnly</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">connect_message</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">send_msg</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">send_msg_attr</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">buffersize</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">connect_message</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||||
<span class="n">buffersize</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">connect_message</span><span class="p">)</span> <span class="o">+</span> <span class="mh">0x1000</span><span class="p">)</span>
|
||||
<span class="n">send_msg</span> <span class="o">=</span> <span class="n">AlpcMessagePort</span><span class="o">.</span><span class="n">from_buffer_size</span><span class="p">(</span><span class="n">buffersize</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="n">send_msg</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">connect_message</span>
|
||||
<span class="n">send_msg_attr</span> <span class="o">=</span> <span class="n">MessageAttribute</span><span class="o">.</span><span class="n">with_all_attributes</span><span class="p">()</span>
|
||||
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">connect_message</span><span class="p">,</span> <span class="n">AlpcMessage</span><span class="p">):</span>
|
||||
<span class="n">send_msg</span> <span class="o">=</span> <span class="n">connect_message</span><span class="o">.</span><span class="n">port_message</span>
|
||||
<span class="n">send_msg_attr</span> <span class="o">=</span> <span class="n">connect_message</span><span class="o">.</span><span class="n">attributes</span>
|
||||
<span class="n">buffersize</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">(</span><span class="n">connect_message</span><span class="o">.</span><span class="n">port_message_buffer_size</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Don't know how to send <</span><span class="si">{0!r}</span><span class="s2">> as connect message"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">connect_message</span><span class="p">))</span>
|
||||
|
||||
<span class="c1"># windows.utils.print_ctypes_struct(port_attr, "port_attr_connect", hexa=True)</span>
|
||||
<span class="n">receive_attr</span> <span class="o">=</span> <span class="n">MessageAttribute</span><span class="o">.</span><span class="n">with_all_attributes</span><span class="p">()</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtAlpcConnectPort</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">port_name_unicode</span><span class="p">,</span> <span class="n">obj_attr</span><span class="p">,</span> <span class="n">port_attr</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">send_msg</span><span class="p">,</span> <span class="n">buffersize</span><span class="p">,</span> <span class="n">send_msg_attr</span><span class="p">,</span> <span class="n">receive_attr</span><span class="p">,</span> <span class="n">timeout</span><span class="p">)</span>
|
||||
<span class="c1"># If send_msg is not None, it contains the ClientId.UniqueProcess : PID of the server :)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">handle</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">port_name</span> <span class="o">=</span> <span class="n">port_name</span>
|
||||
<span class="k">return</span> <span class="n">AlpcMessage</span><span class="p">(</span><span class="n">send_msg</span><span class="p">,</span> <span class="n">receive_attr</span><span class="p">)</span> <span class="k">if</span> <span class="n">send_msg</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">create_port_section</span><span class="p">(</span><span class="bp">self</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="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">HANDLE</span><span class="p">()</span>
|
||||
<span class="n">ActualSectionSize</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SIZE_T</span><span class="p">()</span>
|
||||
<span class="c1"># RPCRT4 USE FLAGS 0x40000 ALPC_VIEWFLG_NOT_SECURE ?</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtAlpcCreatePortSection</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">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">AlpcSection</span><span class="p">(</span><span class="n">AlpcSectionHandle</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">ActualSectionSize</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">map_section</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">section_handle</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
<span class="n">view_attributes</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_DATA_VIEW_ATTR</span><span class="p">()</span>
|
||||
<span class="n">view_attributes</span><span class="o">.</span><span class="n">Flags</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">view_attributes</span><span class="o">.</span><span class="n">SectionHandle</span> <span class="o">=</span> <span class="n">section_handle</span>
|
||||
<span class="n">view_attributes</span><span class="o">.</span><span class="n">ViewBase</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">view_attributes</span><span class="o">.</span><span class="n">ViewSize</span> <span class="o">=</span> <span class="n">size</span>
|
||||
<span class="n">r</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">NtAlpcCreateSectionView</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="n">view_attributes</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">view_attributes</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">disconnect</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_close_port</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">disconnect</span><span class="p">()</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="AlpcServer"><a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcServer">[docs]</a><span class="k">class</span> <span class="nc">AlpcServer</span><span class="p">(</span><span class="n">AlpcTransportBase</span><span class="p">):</span>
|
||||
<span class="sd">"""An ALPC server able to create a port, accept connections and send/receive messages"""</span>
|
||||
<span class="n">DEFAULT_MAX_MESSAGE_LENGTH</span> <span class="o">=</span> <span class="mh">0x1000</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">port_name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">port_name</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">communication_port_list</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">if</span> <span class="n">port_name</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_port</span><span class="p">(</span><span class="n">port_name</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_alpc_port_to_unicode_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="n">utf16_len</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="o">*</span> <span class="mi">2</span>
|
||||
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">UNICODE_STRING</span><span class="p">(</span><span class="n">utf16_len</span><span class="p">,</span> <span class="n">utf16_len</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="AlpcServer.create_port"><a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcServer.create_port">[docs]</a> <span class="k">def</span> <span class="nf">create_port</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">port_name</span><span class="p">,</span> <span class="n">msglen</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">port_attr_flags</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">obj_attr</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">port_attr</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Create the ALPC port ``port_name``. Most of the parameters have defauls value is ``None`` is passed.</span>
|
||||
|
||||
<span class="sd"> :param str port_name: The port's name to create.</span>
|
||||
<span class="sd"> :param int msglen: ``ALPC_PORT_ATTRIBUTES.MaxMessageLength`` used if ``port_attr`` is ``None`` (MUTUALY EXCLUSINVE WITH ``port_attr``)</span>
|
||||
<span class="sd"> :param int port_attr_flags: ``ALPC_PORT_ATTRIBUTES.Flags`` used if ``port_attr`` is ``None`` (MUTUALY EXCLUSINVE WITH ``port_attr``)</span>
|
||||
<span class="sd"> :param OBJECT_ATTRIBUTES obj_attr: The attributes of the port, one with default value will be used if this parameter is ``None``</span>
|
||||
<span class="sd"> :param ALPC_PORT_ATTRIBUTES port_attr: The port attributes, one with default value will be used if this parameter is ``None``</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># TODO raise on mutual exclusive parameter (port_attr + port_attr_flags | obj_attr + msglen)</span>
|
||||
<span class="n">handle</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">HANDLE</span><span class="p">()</span>
|
||||
<span class="n">raw_name</span> <span class="o">=</span> <span class="n">port_name</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">raw_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"</span><span class="se">\\</span><span class="s2">"</span><span class="p">):</span>
|
||||
<span class="n">raw_name</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\\</span><span class="s2">"</span> <span class="o">+</span> <span class="n">port_name</span>
|
||||
<span class="n">port_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_alpc_port_to_unicode_string</span><span class="p">(</span><span class="n">raw_name</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">msglen</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">msglen</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_MAX_MESSAGE_LENGTH</span>
|
||||
<span class="k">if</span> <span class="n">obj_attr</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">obj_attr</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">OBJECT_ATTRIBUTES</span><span class="p">()</span>
|
||||
<span class="n">obj_attr</span><span class="o">.</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">obj_attr</span><span class="p">)</span>
|
||||
<span class="n">obj_attr</span><span class="o">.</span><span class="n">RootDirectory</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">obj_attr</span><span class="o">.</span><span class="n">ObjectName</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">pointer</span><span class="p">(</span><span class="n">port_name</span><span class="p">)</span>
|
||||
<span class="n">obj_attr</span><span class="o">.</span><span class="n">Attributes</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">obj_attr</span><span class="o">.</span><span class="n">SecurityDescriptor</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">obj_attr</span><span class="o">.</span><span class="n">SecurityQualityOfService</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">if</span> <span class="n">port_attr</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">port_attr</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_PORT_ATTRIBUTES</span><span class="p">()</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">Flags</span> <span class="o">=</span> <span class="n">port_attr_flags</span>
|
||||
<span class="c1"># port_attr.Flags = 0x2080000</span>
|
||||
<span class="c1"># port_attr.Flags = 0x90000</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxMessageLength</span> <span class="o">=</span> <span class="n">msglen</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MemoryBandwidth</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxPoolUsage</span> <span class="o">=</span> <span class="mh">0xffffffff</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxSectionSize</span> <span class="o">=</span> <span class="mh">0xffffffff</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxViewSize</span> <span class="o">=</span> <span class="mh">0xffffffff</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxTotalSectionSize</span> <span class="o">=</span> <span class="mh">0xffffffff</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">DupObjectTypes</span> <span class="o">=</span> <span class="mh">0xffffffff</span>
|
||||
<span class="c1"># windows.utils.print_ctypes_struct(port_attr, " - PORT_ATTR", hexa=True)</span>
|
||||
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtAlpcCreatePort</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">obj_attr</span><span class="p">,</span> <span class="n">port_attr</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">port_name</span> <span class="o">=</span> <span class="n">raw_name</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">handle</span><span class="o">.</span><span class="n">value</span></div>
|
||||
|
||||
<div class="viewcode-block" id="AlpcServer.accept_connection"><a class="viewcode-back" href="../../alpc.html#windows.alpc.AlpcServer.accept_connection">[docs]</a> <span class="k">def</span> <span class="nf">accept_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="n">port_attr</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">port_context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Accept the connection for a ``LPC_CONNECTION_REQUEST`` message.</span>
|
||||
<span class="sd"> ``msg.MessageId`` must be the same as the connection requesting message.</span>
|
||||
|
||||
<span class="sd"> :param AlpcMessage msg: The response message.</span>
|
||||
<span class="sd"> :param ALPC_PORT_ATTRIBUTES port_attr: The attributes of the port, one with default value will be used if this parameter is ``None``</span>
|
||||
<span class="sd"> :param PVOID port_context: A value that will be copied in ``ALPC_CONTEXT_ATTR.PortContext`` of every message on this connection.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">rhandle</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">HANDLE</span><span class="p">()</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">port_attr</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">port_attr</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_PORT_ATTRIBUTES</span><span class="p">()</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">Flags</span> <span class="o">=</span> <span class="mh">0x80000</span>
|
||||
<span class="c1"># port_attr.Flags = 0x80000 + 0x2000000</span>
|
||||
<span class="c1"># port_attr.Flags = 0x2000000</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxMessageLength</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_MAX_MESSAGE_LENGTH</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MemoryBandwidth</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxPoolUsage</span> <span class="o">=</span> <span class="mh">0xffffffff</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxSectionSize</span> <span class="o">=</span> <span class="mh">0xffffffff</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxViewSize</span> <span class="o">=</span> <span class="mh">0xffffffff</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">MaxTotalSectionSize</span> <span class="o">=</span> <span class="mh">0xffffffff</span>
|
||||
<span class="n">port_attr</span><span class="o">.</span><span class="n">DupObjectTypes</span> <span class="o">=</span> <span class="mh">0xffffffff</span>
|
||||
<span class="c1"># windows.utils.print_ctypes_struct(port_attr, " - CONN_PORT_ATTR", hexa=True)</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtAlpcAcceptConnectPort</span><span class="p">(</span><span class="n">rhandle</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">port_attr</span><span class="p">,</span> <span class="n">port_context</span><span class="p">,</span> <span class="n">msg</span><span class="o">.</span><span class="n">port_message</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">communication_port_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">rhandle</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">msg</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">disconnect</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_close_port</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">com_port_handle</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">communication_port_list</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_close_port</span><span class="p">(</span><span class="n">com_port_handle</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># TODO: add an API to close a communication port ?</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">disconnect</span><span class="p">()</span></div>
|
||||
</pre></div>
|
||||
|
||||
</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>
|
||||
<form class="search" action="../../search.html" method="get">
|
||||
<div><input type="text" name="q" /></div>
|
||||
<div><input type="submit" value="Go" /></div>
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
</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.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.5.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+107
-126
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.crypto.certificate — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.crypto.certificate — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -53,57 +53,60 @@
|
||||
|
||||
<span class="kn">import</span> <span class="nn">windows</span>
|
||||
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="k">import</span> <span class="o">*</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">windows.crypto</span> <span class="k">import</span> <span class="n">DEFAULT_ENCODING</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.crypto.helper</span> <span class="k">import</span> <span class="n">ECRYPT_DATA_BLOB</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">windows.crypto.cryptmsg</span>
|
||||
|
||||
|
||||
<span class="n">CRYPT_OBJECT_FORMAT_TYPE</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="n">CERT_QUERY_OBJECT_FILE</span><span class="p">,</span>
|
||||
<span class="n">CERT_QUERY_OBJECT_BLOB</span><span class="p">,</span>
|
||||
<span class="n">CERT_QUERY_CONTENT_CERT</span><span class="p">,</span>
|
||||
<span class="n">CERT_QUERY_CONTENT_CTL</span><span class="p">,</span>
|
||||
<span class="n">CERT_QUERY_CONTENT_CRL</span><span class="p">,</span>
|
||||
<span class="n">CERT_QUERY_CONTENT_SERIALIZED_STORE</span><span class="p">,</span>
|
||||
<span class="n">CERT_QUERY_CONTENT_SERIALIZED_CERT</span><span class="p">,</span>
|
||||
<span class="n">CERT_QUERY_CONTENT_SERIALIZED_CTL</span><span class="p">,</span>
|
||||
<span class="n">CERT_QUERY_CONTENT_SERIALIZED_CRL</span><span class="p">,</span>
|
||||
<span class="n">CERT_QUERY_CONTENT_PKCS7_SIGNED</span><span class="p">,</span>
|
||||
<span class="n">CERT_QUERY_CONTENT_PKCS7_UNSIGNED</span><span class="p">,</span>
|
||||
<span class="n">CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED</span><span class="p">,</span>
|
||||
<span class="n">CERT_QUERY_CONTENT_PKCS10</span><span class="p">,</span>
|
||||
<span class="n">CERT_QUERY_CONTENT_PFX</span><span class="p">,</span>
|
||||
<span class="n">CERT_QUERY_CONTENT_CERT_PAIR</span><span class="p">,</span>
|
||||
<span class="n">CERT_QUERY_CONTENT_PFX_AND_LOAD</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_OBJECT_FILE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_OBJECT_BLOB</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_CONTENT_CERT</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_CONTENT_CTL</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_CONTENT_CRL</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_CONTENT_SERIALIZED_STORE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_CONTENT_SERIALIZED_CERT</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_CONTENT_SERIALIZED_CTL</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_CONTENT_SERIALIZED_CRL</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_CONTENT_PKCS7_SIGNED</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_CONTENT_PKCS7_UNSIGNED</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_CONTENT_PKCS10</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_CONTENT_PFX</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_CONTENT_CERT_PAIR</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_CONTENT_PFX_AND_LOAD</span>
|
||||
<span class="p">]</span>
|
||||
|
||||
<span class="n">CRYPT_OBJECT_FORMAT_TYPE_DICT</span> <span class="o">=</span> <span class="p">{</span><span class="n">x</span><span class="p">:</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">CRYPT_OBJECT_FORMAT_TYPE</span><span class="p">}</span>
|
||||
|
||||
<span class="c1">## Move CryptObject to new .py ?</span>
|
||||
|
||||
<div class="viewcode-block" id="CryptObject"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CryptObject">[docs]</a><span class="k">class</span> <span class="nc">CryptObject</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""Extract information from an CryptoAPI object.</span>
|
||||
|
||||
<span class="sd"> Current main use is extracting the signers certificates from a PE file.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">MSG_PARAM_KNOW_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="n">CMSG_SIGNER_INFO_PARAM</span><span class="p">:</span> <span class="n">CMSG_SIGNER_INFO</span><span class="p">,</span>
|
||||
<span class="n">CMSG_SIGNER_COUNT_PARAM</span><span class="p">:</span> <span class="n">DWORD</span><span class="p">,</span>
|
||||
<span class="n">CMSG_CERT_COUNT_PARAM</span><span class="p">:</span> <span class="n">DWORD</span><span class="p">}</span>
|
||||
<span class="n">MSG_PARAM_KNOW_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="n">gdef</span><span class="o">.</span><span class="n">CMSG_SIGNER_INFO_PARAM</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CMSG_SIGNER_INFO</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">CMSG_SIGNER_COUNT_PARAM</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">CMSG_CERT_COUNT_PARAM</span><span class="p">:</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">}</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">content_type</span><span class="o">=</span><span class="n">CERT_QUERY_CONTENT_FLAG_ALL</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">content_type</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_CONTENT_FLAG_ALL</span><span class="p">):</span>
|
||||
<span class="c1"># No other API than filename for now..</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">filename</span> <span class="o">=</span> <span class="n">filename</span>
|
||||
|
||||
<span class="n">dwEncoding</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">dwContentType</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">dwFormatType</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">hStore</span> <span class="o">=</span> <span class="n">PVOID</span><span class="p">()</span>
|
||||
<span class="n">hMsg</span> <span class="o">=</span> <span class="n">PVOID</span><span class="p">()</span>
|
||||
<span class="n">dwEncoding</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">dwContentType</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">dwFormatType</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">hStore</span> <span class="o">=</span> <span class="n">EHCERTSTORE</span><span class="p">()</span>
|
||||
<span class="n">hMsg</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">crypto</span><span class="o">.</span><span class="n">cryptmsg</span><span class="o">.</span><span class="n">CryptMessage</span><span class="p">()</span>
|
||||
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">CryptQueryObject</span><span class="p">(</span><span class="n">CERT_QUERY_OBJECT_FILE</span><span class="p">,</span>
|
||||
<span class="n">LPWSTR</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">CryptQueryObject</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_OBJECT_FILE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">LPWSTR</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span>
|
||||
<span class="c1"># filename,</span>
|
||||
<span class="n">content_type</span><span class="p">,</span>
|
||||
<span class="n">CERT_QUERY_FORMAT_FLAG_BINARY</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">CERT_QUERY_FORMAT_FLAG_BINARY</span><span class="p">,</span>
|
||||
<span class="mi">0</span><span class="p">,</span>
|
||||
<span class="n">dwEncoding</span><span class="p">,</span>
|
||||
<span class="n">dwContentType</span><span class="p">,</span>
|
||||
@@ -112,77 +115,26 @@
|
||||
<span class="n">hMsg</span><span class="p">,</span>
|
||||
<span class="kc">None</span><span class="p">)</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">hstore</span> <span class="o">=</span> <span class="n">hStore</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">hmsg</span> <span class="o">=</span> <span class="n">hMsg</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">cert_store</span> <span class="o">=</span> <span class="n">hStore</span> <span class="k">if</span> <span class="n">hStore</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crypt_msg</span> <span class="o">=</span> <span class="n">hMsg</span> <span class="k">if</span> <span class="n">hMsg</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">encoding</span> <span class="o">=</span> <span class="n">dwEncoding</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">content_type</span> <span class="o">=</span> <span class="n">CRYPT_OBJECT_FORMAT_TYPE_DICT</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dwContentType</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">dwContentType</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">msg_get_param</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">param_type</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
<span class="n">signer_info</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="c1"># https://msdn.microsoft.com/en-us/library/windows/desktop/aa380227(v=vs.85).aspx</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">CryptMsgGetParam</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">hmsg</span><span class="p">,</span> <span class="n">param_type</span><span class="p">,</span> <span class="n">index</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">signer_info</span><span class="p">)</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_buffer</span><span class="p">(</span><span class="n">signer_info</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">CryptMsgGetParam</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">hmsg</span><span class="p">,</span> <span class="n">param_type</span><span class="p">,</span> <span class="n">index</span><span class="p">,</span> <span class="n">buffer</span><span class="p">,</span> <span class="n">signer_info</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">param_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">MSG_PARAM_KNOW_TYPES</span><span class="p">:</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">MSG_PARAM_KNOW_TYPES</span><span class="p">[</span><span class="n">param_type</span><span class="p">]</span><span class="o">.</span><span class="n">from_buffer</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">buffer</span>
|
||||
<span class="k">def</span> <span class="nf">_signers_and_certs_generator</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">for</span> <span class="n">signer</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">crypt_msg</span><span class="o">.</span><span class="n">signers</span><span class="p">:</span>
|
||||
<span class="n">cert</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cert_store</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">signer</span><span class="o">.</span><span class="n">Issuer</span><span class="p">,</span> <span class="n">signer</span><span class="o">.</span><span class="n">SerialNumber</span><span class="p">)</span>
|
||||
<span class="k">yield</span> <span class="n">signer</span><span class="p">,</span> <span class="n">cert</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">nb_signer</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The number of signers for the CryptObject</span>
|
||||
|
||||
<span class="sd"> :type: :class:`int`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg_get_param</span><span class="p">(</span><span class="n">CMSG_SIGNER_COUNT_PARAM</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
||||
|
||||
<div class="viewcode-block" id="CryptObject.get_signer_data"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CryptObject.get_signer_data">[docs]</a> <span class="k">def</span> <span class="nf">get_signer_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
<span class="sd">"""Returns the signer informations for signer nb ``index``</span>
|
||||
|
||||
<span class="sd"> :return: :class:`CMSG_SIGNER_INFO`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg_get_param</span><span class="p">(</span><span class="n">CMSG_SIGNER_INFO_PARAM</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CryptObject.get_signer_certificate"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CryptObject.get_signer_certificate">[docs]</a> <span class="k">def</span> <span class="nf">get_signer_certificate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
<span class="sd">"""Return the certificate used for signer nb ``index``</span>
|
||||
|
||||
<span class="sd"> :return: :class:`CertificateContext`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_signer_data</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
|
||||
<span class="n">cert_info</span> <span class="o">=</span> <span class="n">CERT_INFO</span><span class="p">()</span>
|
||||
<span class="n">cert_info</span><span class="o">.</span><span class="n">Issuer</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">Issuer</span>
|
||||
<span class="n">cert_info</span><span class="o">.</span><span class="n">SerialNumber</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">SerialNumber</span>
|
||||
<span class="n">rawcertcontext</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertFindCertificateInStore</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">hstore</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">encoding</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">CERT_FIND_SUBJECT_CERT</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">cert_info</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="c1">#return rawcertcontext</span>
|
||||
<span class="k">return</span> <span class="n">CertificateContext</span><span class="p">(</span><span class="n">rawcertcontext</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_raw_cert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg_get_param</span><span class="p">(</span><span class="n">CMSG_CERT_PARAM</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="CryptObject.get_cert"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CryptObject.get_cert">[docs]</a> <span class="k">def</span> <span class="nf">get_cert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
<span class="sd">"""Return embded certificate number ``index``.</span>
|
||||
|
||||
<span class="sd"> note: not all embded certificate are directly used to sign the :class:`CryptObject`.</span>
|
||||
|
||||
<span class="sd"> :return: :class:`CertificateContext`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">CertificateContext</span><span class="o">.</span><span class="n">from_buffer</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_raw_cert</span><span class="p">(</span><span class="n">index</span><span class="p">))</span></div>
|
||||
|
||||
<span class="n">cert</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_cert</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">nb_cert</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The number of certificate embded in the :class:`CryptObject`</span>
|
||||
|
||||
<span class="sd"> :type: :class:`int`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg_get_param</span><span class="p">(</span><span class="n">CMSG_CERT_COUNT_PARAM</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="k">def</span> <span class="nf">signers_and_certs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_signers_and_certs_generator</span><span class="p">())</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s1">'<</span><span class="si">{0}</span><span class="s1"> "</span><span class="si">{1}</span><span class="s1">" content_type=</span><span class="si">{2}</span><span class="s1">>'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">filename</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">content_type</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="EHCERTSTORE"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.EHCERTSTORE">[docs]</a><span class="k">class</span> <span class="nc">EHCERTSTORE</span><span class="p">(</span><span class="n">HCERTSTORE</span><span class="p">):</span>
|
||||
<span class="c1"># TODO: rename to CertificateStore ?</span>
|
||||
<span class="c1"># https://msdn.microsoft.com/en-us/library/windows/desktop/aa382037(v=vs.85).aspx</span>
|
||||
<div class="viewcode-block" id="EHCERTSTORE"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.EHCERTSTORE">[docs]</a><span class="k">class</span> <span class="nc">EHCERTSTORE</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">HCERTSTORE</span><span class="p">):</span>
|
||||
<span class="sd">"""A certificate store"""</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">certs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -196,7 +148,7 @@
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">cert</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertEnumCertificatesInStore</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">last</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">Kernel32Error</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">&</span> <span class="mh">0xffffffff</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="n">CRYPT_E_NOT_FOUND</span><span class="p">,):</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">&</span> <span class="mh">0xffffffff</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CRYPT_E_NOT_FOUND</span><span class="p">,):</span>
|
||||
<span class="k">return</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
|
||||
<span class="k">raise</span>
|
||||
<span class="c1"># Need to duplicate as CertEnumCertificatesInStore will free the context 'last'</span>
|
||||
@@ -207,14 +159,21 @@
|
||||
|
||||
<div class="viewcode-block" id="EHCERTSTORE.add_certificate"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.EHCERTSTORE.add_certificate">[docs]</a> <span class="k">def</span> <span class="nf">add_certificate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">certificate</span><span class="p">):</span>
|
||||
<span class="sd">"""Add a certificate to the store"""</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">CertAddCertificateContextToStore</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">certificate</span><span class="p">,</span> <span class="n">CERT_STORE_ADD_NEW</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">CertAddCertificateContextToStore</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">certificate</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_ADD_NEW</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<div class="viewcode-block" id="EHCERTSTORE.from_file"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.EHCERTSTORE.from_file">[docs]</a> <span class="k">def</span> <span class="nf">from_file</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">filename</span><span class="p">):</span>
|
||||
<span class="sd">"""Create a new :class:`EHCERTSTORE` from ``filename``"""</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertOpenStore</span><span class="p">(</span><span class="n">CERT_STORE_PROV_FILENAME_A</span><span class="p">,</span> <span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">CERT_STORE_OPEN_EXISTING_FLAG</span><span class="p">,</span> <span class="n">filename</span><span class="p">)</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertOpenStore</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_PROV_FILENAME_A</span><span class="p">,</span> <span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_OPEN_EXISTING_FLAG</span><span class="p">,</span> <span class="n">filename</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="bp">cls</span><span class="p">)</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">yolo</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertEnumCTLsInStore</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="n">title</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CryptUIDlgViewContext</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_CTL_CONTEXT</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">title</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">x</span>
|
||||
|
||||
|
||||
<span class="c1"># See https://msdn.microsoft.com/en-us/library/windows/desktop/aa388136(v=vs.85).aspx</span>
|
||||
<span class="nd">@classmethod</span>
|
||||
@@ -222,20 +181,34 @@
|
||||
<span class="sd">"""Create a new :class:`EHCERTSTORE` from system store``store_name``</span>
|
||||
<span class="sd"> (see https://msdn.microsoft.com/en-us/library/windows/desktop/aa388136(v=vs.85).aspx)</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertOpenStore</span><span class="p">(</span><span class="n">CERT_STORE_PROV_SYSTEM_A</span><span class="p">,</span> <span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">CERT_SYSTEM_STORE_LOCAL_MACHINE</span> <span class="o">|</span> <span class="n">CERT_STORE_READONLY_FLAG</span><span class="p">,</span> <span class="n">store_name</span><span class="p">)</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertOpenStore</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_PROV_SYSTEM_A</span><span class="p">,</span> <span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_SYSTEM_STORE_LOCAL_MACHINE</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_READONLY_FLAG</span><span class="p">,</span> <span class="n">store_name</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="bp">cls</span><span class="p">)</span></div>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<div class="viewcode-block" id="EHCERTSTORE.new_in_memory"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.EHCERTSTORE.new_in_memory">[docs]</a> <span class="k">def</span> <span class="nf">new_in_memory</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
|
||||
<span class="sd">"""Create a new temporary :class:`EHCERTSTORE` in memory"""</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertOpenStore</span><span class="p">(</span><span class="n">CERT_STORE_PROV_MEMORY</span><span class="p">,</span> <span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="bp">cls</span><span class="p">)</span></div></div>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertOpenStore</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_PROV_MEMORY</span><span class="p">,</span> <span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="bp">cls</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="c1"># TODO: a more complete search API ?</span>
|
||||
<div class="viewcode-block" id="EHCERTSTORE.find"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.EHCERTSTORE.find">[docs]</a> <span class="k">def</span> <span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">issuer</span><span class="p">,</span> <span class="n">serialnumber</span><span class="p">):</span>
|
||||
<span class="sd">"""Return the certificate that match `issuer` and `serialnumber`</span>
|
||||
|
||||
<span class="sd"> :return: :class:`CertificateContext`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># data = self.get_signer_data(index)</span>
|
||||
<span class="n">cert_info</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_INFO</span><span class="p">()</span>
|
||||
<span class="n">cert_info</span><span class="o">.</span><span class="n">Issuer</span> <span class="o">=</span> <span class="n">issuer</span>
|
||||
<span class="n">cert_info</span><span class="o">.</span><span class="n">SerialNumber</span> <span class="o">=</span> <span class="n">serialnumber</span>
|
||||
<span class="n">rawcertcontext</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertFindCertificateInStore</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_FIND_SUBJECT_CERT</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">cert_info</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="c1"># return rawcertcontext</span>
|
||||
<span class="k">return</span> <span class="n">CertificateContext</span><span class="p">(</span><span class="n">rawcertcontext</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span></div></div>
|
||||
|
||||
<span class="c1"># Add API arround 'CertFindCertificateInStore' ?</span>
|
||||
|
||||
<span class="c1"># PKCS12_NO_PERSIST_KEY -> do not save it in a key container on disk</span>
|
||||
<span class="c1"># Without it, a key container is created at 'C:\Users\USERNAME\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-3241049326-165485355-1070449050-1001'</span>
|
||||
<div class="viewcode-block" id="import_pfx"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.import_pfx">[docs]</a><span class="k">def</span> <span class="nf">import_pfx</span><span class="p">(</span><span class="n">pfx</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">CRYPT_USER_KEYSET</span> <span class="o">|</span> <span class="n">PKCS12_NO_PERSIST_KEY</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="import_pfx"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.import_pfx">[docs]</a><span class="k">def</span> <span class="nf">import_pfx</span><span class="p">(</span><span class="n">pfx</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">CRYPT_USER_KEYSET</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PKCS12_NO_PERSIST_KEY</span><span class="p">):</span>
|
||||
<span class="sd">"""Import the file ``pfx`` with the ``password``.</span>
|
||||
|
||||
<span class="sd"> ``default flags = PKCS12_NO_PERSIST_KEY | CRYPT_USER_KEYSET``.</span>
|
||||
@@ -245,18 +218,18 @@
|
||||
<span class="sd"> :return: :class:`EHCERTSTORE`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">pfx</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||||
<span class="n">pfx</span> <span class="o">=</span> <span class="n">ECRYPT_DATA_BLOB</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">pfx</span><span class="p">)</span>
|
||||
<span class="n">pfx</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CRYPT_DATA_BLOB</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">pfx</span><span class="p">)</span>
|
||||
<span class="n">cert_store</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">PFXImportCertStore</span><span class="p">(</span><span class="n">pfx</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">flags</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">EHCERTSTORE</span><span class="p">(</span><span class="n">cert_store</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="c1"># Why PCCERT_CONTEXT (pointer type) and not _CERT_CONTEXT ?</span>
|
||||
<div class="viewcode-block" id="CertificateContext"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CertificateContext">[docs]</a><span class="k">class</span> <span class="nc">CertificateContext</span><span class="p">(</span><span class="n">PCCERT_CONTEXT</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="CertificateContext"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CertificateContext">[docs]</a><span class="k">class</span> <span class="nc">CertificateContext</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">PCCERT_CONTEXT</span><span class="p">):</span>
|
||||
<span class="sd">"""Represent a Certificate.</span>
|
||||
|
||||
<span class="sd"> note: It is a pointer ctypes structure (``PCCERT_CONTEXT``)</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="n">PCCERT_CONTEXT</span><span class="o">.</span><span class="n">_type_</span> <span class="c1"># Not herited from PCCERT_CONTEXT</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PCCERT_CONTEXT</span><span class="o">.</span><span class="n">_type_</span> <span class="c1"># Not herited from PCCERT_CONTEXT</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -281,7 +254,7 @@
|
||||
<span class="k">return</span> <span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">"</span><span class="si">{:02x}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">serial_bytes</span><span class="p">)</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="CertificateContext.get_name"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CertificateContext.get_name">[docs]</a> <span class="k">def</span> <span class="nf">get_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nametype</span><span class="o">=</span><span class="n">CERT_NAME_SIMPLE_DISPLAY_TYPE</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="CertificateContext.get_name"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CertificateContext.get_name">[docs]</a> <span class="k">def</span> <span class="nf">get_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nametype</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_NAME_SIMPLE_DISPLAY_TYPE</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
<span class="sd">"""Retrieve the subject or issuer name of the certificate. See ``CertGetNameStringA``</span>
|
||||
|
||||
<span class="sd"> :returns: :class:`str`</span>
|
||||
@@ -301,7 +274,7 @@
|
||||
<span class="sd">"""The name of the certificate's issuer.</span>
|
||||
|
||||
<span class="sd"> :type: :class:`str`"""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_name</span><span class="p">(</span><span class="n">flags</span><span class="o">=</span><span class="n">CERT_NAME_ISSUER_FLAG</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_name</span><span class="p">(</span><span class="n">flags</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_NAME_ISSUER_FLAG</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">store</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -314,19 +287,19 @@
|
||||
<span class="k">def</span> <span class="nf">get_raw_certificate_chains</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># Rename to all_chains ?</span>
|
||||
<span class="n">chain_context</span> <span class="o">=</span> <span class="n">EPCCERT_CHAIN_CONTEXT</span><span class="p">()</span>
|
||||
|
||||
<span class="n">enhkey_usage</span> <span class="o">=</span> <span class="n">CERT_ENHKEY_USAGE</span><span class="p">()</span>
|
||||
<span class="n">enhkey_usage</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_ENHKEY_USAGE</span><span class="p">()</span>
|
||||
<span class="n">enhkey_usage</span><span class="o">.</span><span class="n">cUsageIdentifier</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">enhkey_usage</span><span class="o">.</span><span class="n">rgpszUsageIdentifier</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<span class="n">cert_usage</span> <span class="o">=</span> <span class="n">CERT_USAGE_MATCH</span><span class="p">()</span>
|
||||
<span class="n">cert_usage</span><span class="o">.</span><span class="n">dwType</span> <span class="o">=</span> <span class="n">USAGE_MATCH_TYPE_AND</span>
|
||||
<span class="n">cert_usage</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_USAGE_MATCH</span><span class="p">()</span>
|
||||
<span class="n">cert_usage</span><span class="o">.</span><span class="n">dwType</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">USAGE_MATCH_TYPE_AND</span>
|
||||
<span class="n">cert_usage</span><span class="o">.</span><span class="n">Usage</span> <span class="o">=</span> <span class="n">enhkey_usage</span>
|
||||
|
||||
<span class="n">chain_para</span> <span class="o">=</span> <span class="n">CERT_CHAIN_PARA</span><span class="p">()</span>
|
||||
<span class="n">chain_para</span><span class="o">.</span><span class="n">cbSize</span> <span class="o">=</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">chain_para</span><span class="p">)</span>
|
||||
<span class="n">chain_para</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CERT_CHAIN_PARA</span><span class="p">()</span>
|
||||
<span class="n">chain_para</span><span class="o">.</span><span class="n">cbSize</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">chain_para</span><span class="p">)</span>
|
||||
<span class="n">chain_para</span><span class="o">.</span><span class="n">RequestedUsage</span> <span class="o">=</span> <span class="n">cert_usage</span>
|
||||
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">CertGetCertificateChain</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="bp">self</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">hCertStore</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">chain_para</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">chain_context</span><span class="p">))</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">CertGetCertificateChain</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="bp">self</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">hCertStore</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">chain_para</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">chain_context</span><span class="p">))</span>
|
||||
<span class="c1">#return CertficateChain(chain_context)</span>
|
||||
<span class="k">return</span> <span class="n">chain_context</span>
|
||||
|
||||
@@ -359,10 +332,13 @@
|
||||
<span class="c1"># Only the refcount is incremented</span>
|
||||
<span class="c1"># This postulate allow us to return 'self' directly</span>
|
||||
<span class="c1"># https://msdn.microsoft.com/en-us/library/windows/desktop/aa376045(v=vs.85).aspx</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="n">PVOID</span><span class="p">)</span><span class="o">.</span><span class="n">value</span> <span class="o">==</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">PVOID</span><span class="p">)</span><span class="o">.</span><span class="n">value</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PVOID</span><span class="p">)</span><span class="o">.</span><span class="n">value</span> <span class="o">==</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PVOID</span><span class="p">)</span><span class="o">.</span><span class="n">value</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"CertDuplicateCertificateContext did not returned the argument (check doc)"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">view</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CryptUIDlgViewContext</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CERT_STORE_CERTIFICATE_CONTEXT</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">title</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">enum_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">prop</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
@@ -388,6 +364,12 @@
|
||||
<span class="sd"> :type: :class:`bytearray`"""</span>
|
||||
<span class="k">return</span> <span class="nb">bytearray</span><span class="p">(</span><span class="bp">self</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">pbCertEncoded</span><span class="p">[:</span><span class="bp">self</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">cbCertEncoded</span><span class="p">])</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="s2">"TODO: doc"</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">pbCertInfo</span><span class="o">.</span><span class="n">dwVersion</span>
|
||||
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<div class="viewcode-block" id="CertificateContext.from_file"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CertificateContext.from_file">[docs]</a> <span class="k">def</span> <span class="nf">from_file</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">filename</span><span class="p">):</span>
|
||||
<span class="sd">"""Create a :class:`CertificateContext` from the file ``filename``</span>
|
||||
@@ -431,9 +413,8 @@
|
||||
|
||||
|
||||
<span class="c1"># Those classes are more of a POC than anything else</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">EPCCERT_CHAIN_CONTEXT</span><span class="p">(</span><span class="n">PCCERT_CHAIN_CONTEXT</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="n">PCCERT_CHAIN_CONTEXT</span><span class="o">.</span><span class="n">_type_</span>
|
||||
<span class="k">class</span> <span class="nc">EPCCERT_CHAIN_CONTEXT</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">PCCERT_CHAIN_CONTEXT</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PCCERT_CHAIN_CONTEXT</span><span class="o">.</span><span class="n">_type_</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">chains</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -453,8 +434,8 @@
|
||||
<span class="n">ch</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">cert</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">EPCCERT_SIMPLE_CHAIN</span><span class="p">(</span><span class="n">PCCERT_SIMPLE_CHAIN</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="n">PCCERT_SIMPLE_CHAIN</span><span class="o">.</span><span class="n">_type_</span>
|
||||
<span class="k">class</span> <span class="nc">EPCCERT_SIMPLE_CHAIN</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">PCCERT_SIMPLE_CHAIN</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PCCERT_SIMPLE_CHAIN</span><span class="o">.</span><span class="n">_type_</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">elements</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -464,8 +445,8 @@
|
||||
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">element</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">EPCERT_CHAIN_ELEMENT</span><span class="p">(</span><span class="n">PCERT_CHAIN_ELEMENT</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="n">PCERT_CHAIN_ELEMENT</span><span class="o">.</span><span class="n">_type_</span>
|
||||
<span class="k">class</span> <span class="nc">EPCERT_CHAIN_ELEMENT</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">PCERT_CHAIN_ELEMENT</span><span class="p">):</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PCERT_CHAIN_ELEMENT</span><span class="o">.</span><span class="n">_type_</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">cert</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -473,9 +454,9 @@
|
||||
|
||||
|
||||
<span class="c1"># Move this in another .py ?</span>
|
||||
<div class="viewcode-block" id="CryptContext"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CryptContext">[docs]</a><span class="k">class</span> <span class="nc">CryptContext</span><span class="p">(</span><span class="n">HCRYPTPROV</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="CryptContext"><a class="viewcode-back" href="../../../crypto.html#windows.crypto.CryptContext">[docs]</a><span class="k">class</span> <span class="nc">CryptContext</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">HCRYPTPROV</span><span class="p">):</span>
|
||||
<span class="sd">""" A context manager arround ``CryptAcquireContextW`` & ``CryptReleaseContext``"""</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="n">HCRYPTPROV</span><span class="o">.</span><span class="n">_type_</span>
|
||||
<span class="n">_type_</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">HCRYPTPROV</span><span class="o">.</span><span class="n">_type_</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pszContainer</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pszProvider</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dwProvType</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">dwFlags</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">retrycreate</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">pszContainer</span> <span class="o">=</span> <span class="n">pszContainer</span>
|
||||
@@ -499,7 +480,7 @@
|
||||
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">retrycreate</span><span class="p">:</span>
|
||||
<span class="k">raise</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CryptAcquireContextW</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pszContainer</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pszProvider</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwProvType</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwFlags</span> <span class="o">|</span> <span class="n">CRYPT_NEWKEYSET</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CryptAcquireContextW</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pszContainer</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pszProvider</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwProvType</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwFlags</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">CRYPT_NEWKEYSET</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CryptReleaseContext</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span></div>
|
||||
@@ -533,7 +514,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.crypto.encrypt_decrypt — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.crypto.encrypt_decrypt — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -187,7 +187,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+6
-5
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.crypto.generation — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.crypto.generation — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -48,7 +48,8 @@
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for windows.crypto.generation</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
|
||||
<span></span><span class="kn">import</span> <span class="nn">windows</span>
|
||||
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="k">import</span> <span class="o">*</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">windows.crypto.helper</span> <span class="k">import</span> <span class="n">ECRYPT_DATA_BLOB</span>
|
||||
@@ -132,7 +133,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+32
-8
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.debug.breakpoints — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.debug.breakpoints — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -120,14 +120,20 @@
|
||||
<span class="k">def</span> <span class="nf">get_arg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nb</span><span class="p">,</span> <span class="n">proc</span><span class="p">,</span> <span class="n">thread</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">nb</span> <span class="o"><</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">REG_ARGS</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">thread</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">REG_ARGS</span><span class="p">[</span><span class="n">nb</span><span class="p">])</span>
|
||||
<span class="k">return</span> <span class="n">proc</span><span class="o">.</span><span class="n">read_dword</span><span class="p">(</span><span class="n">thread</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">sp</span> <span class="o">+</span> <span class="mi">8</span> <span class="o">+</span> <span class="p">(</span><span class="mi">8</span> <span class="o">*</span> <span class="n">nb</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">proc</span><span class="o">.</span><span class="n">read_qword</span><span class="p">(</span><span class="n">thread</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">sp</span> <span class="o">+</span> <span class="mi">8</span> <span class="o">+</span> <span class="p">(</span><span class="mi">8</span> <span class="o">*</span> <span class="n">nb</span><span class="p">))</span>
|
||||
|
||||
<span class="c1">## Behaviour breakpoint !</span>
|
||||
<span class="k">class</span> <span class="nc">FunctionParamDumpBP</span><span class="p">(</span><span class="n">Breakpoint</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">addr</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="c1"># class FunctionParamDumpBP(Breakpoint):</span>
|
||||
<span class="k">class</span> <span class="nc">FunctionParamDumpBPAbstract</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">addr</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">target</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TARGET</span>
|
||||
<span class="k">except</span> <span class="ne">AttributeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"</span><span class="si">{0}</span><span class="s2"> bp without a <target> must have a <TARGET> class attribute"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">addr</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">addr</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{0}</span><span class="s2">!</span><span class="si">{1}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">target</span><span class="o">.</span><span class="n">target_dll</span><span class="p">,</span> <span class="n">target</span><span class="o">.</span><span class="n">target_func</span><span class="p">)</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">FunctionParamDumpBP</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">FunctionParamDumpBPAbstract</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">target</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">target_args</span> <span class="o">=</span> <span class="n">target</span><span class="o">.</span><span class="n">prototype</span><span class="o">.</span><span class="n">_argtypes_</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">target_params</span> <span class="o">=</span> <span class="n">target</span><span class="o">.</span><span class="n">params</span>
|
||||
@@ -179,6 +185,11 @@
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">extract_arguments_32bits</span><span class="p">(</span><span class="n">cproc</span><span class="p">,</span> <span class="n">cthread</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">extract_arguments_64bits</span><span class="p">(</span><span class="n">cproc</span><span class="p">,</span> <span class="n">cthread</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">FunctionParamDumpBP</span><span class="p">(</span><span class="n">FunctionParamDumpBPAbstract</span><span class="p">,</span> <span class="n">Breakpoint</span><span class="p">):</span>
|
||||
<span class="k">pass</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">FunctionParamDumpHXBP</span><span class="p">(</span><span class="n">FunctionParamDumpBPAbstract</span><span class="p">,</span> <span class="n">HXBreakpoint</span><span class="p">):</span>
|
||||
<span class="k">pass</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">FunctionRetBP</span><span class="p">(</span><span class="n">Breakpoint</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">initial_breakpoint</span><span class="p">):</span>
|
||||
@@ -208,6 +219,19 @@
|
||||
<span class="sd"> - Extract the arguments of the functions</span>
|
||||
<span class="sd"> - Break at the return of the function</span>
|
||||
<span class="sd"> """</span></div>
|
||||
|
||||
<span class="k">class</span> <span class="nc">PrintBP</span><span class="p">(</span><span class="n">Breakpoint</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="nb">format</span><span class="p">,</span> <span class="n">func</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">PrintBP</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">format</span> <span class="o">=</span> <span class="nb">format</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">func</span> <span class="o">=</span> <span class="n">func</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">trigger</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dbg</span><span class="p">,</span> <span class="n">exc</span><span class="p">):</span>
|
||||
<span class="n">thread</span> <span class="o">=</span> <span class="n">dbg</span><span class="o">.</span><span class="n">current_thread</span>
|
||||
<span class="n">format_dict</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"dbg"</span><span class="p">:</span> <span class="n">dbg</span><span class="p">,</span> <span class="s2">"exc"</span><span class="p">:</span> <span class="n">exc</span><span class="p">,</span> <span class="s2">"proc"</span><span class="p">:</span> <span class="n">dbg</span><span class="o">.</span><span class="n">current_process</span><span class="p">,</span> <span class="s2">"thread"</span><span class="p">:</span> <span class="n">thread</span><span class="p">,</span> <span class="s2">"ctx"</span><span class="p">:</span> <span class="n">thread</span><span class="o">.</span><span class="n">context</span><span class="p">}</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">:</span>
|
||||
<span class="n">format_dict</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="o">**</span><span class="n">format_dict</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">format_dict</span><span class="p">))</span>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
@@ -238,7 +262,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+111
-38
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.debug.debugger — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.debug.debugger — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -128,7 +128,11 @@
|
||||
<div class="viewcode-block" id="Debugger.attach"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.attach">[docs]</a> <span class="k">def</span> <span class="nf">attach</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
|
||||
<span class="sd">"""attach to ``target`` (must be a :class:`WinProcess`)</span>
|
||||
|
||||
<span class="sd"> :rtype: :class:`Debugger`"""</span>
|
||||
<span class="sd"> :rtype: :class:`Debugger`</span>
|
||||
|
||||
<span class="sd"> .. note::</span>
|
||||
|
||||
<span class="sd"> see :ref:`Debugger.attach sample <sample_debugger_attach>`"""</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">DebugActiveProcess</span><span class="p">(</span><span class="n">target</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">target</span><span class="p">)</span></div>
|
||||
|
||||
@@ -183,7 +187,7 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">current_process</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">target</span><span class="o">.</span><span class="n">pid</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">pid</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="ow">and</span> <span class="n">target</span><span class="o">.</span><span class="n">pid</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">pid</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">DebugActiveProcessStop</span><span class="p">(</span><span class="n">target</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span></div>
|
||||
|
||||
@@ -225,6 +229,15 @@
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'Unknow action : <0>'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">action</span><span class="p">))</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">ContinueDebugEvent</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">dwProcessId</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">dwThreadId</span><span class="p">,</span> <span class="n">action</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_add_exe_to_module_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">create_process_event</span><span class="p">):</span>
|
||||
<span class="sd">"""Add the intial exe file described by create_process_event to the list of module in the process"""</span>
|
||||
<span class="n">exe_path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">get_mapped_filename</span><span class="p">(</span><span class="n">create_process_event</span><span class="o">.</span><span class="n">lpBaseOfImage</span><span class="p">)</span>
|
||||
<span class="n">exe_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">exe_path</span><span class="p">)</span>
|
||||
<span class="c1">#print("Exe name is {0}".format(exe_name))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_module_by_process</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">pid</span><span class="p">][</span><span class="n">exe_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">pe_parse</span><span class="o">.</span><span class="n">GetPEFile</span><span class="p">(</span><span class="n">create_process_event</span><span class="o">.</span><span class="n">lpBaseOfImage</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="p">)</span>
|
||||
<span class="c1">#self._setup_pending_breakpoints_load_dll(exe_name) # Already setup in _setup_pending_breakpoints_new_process</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">_update_debugger_state</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">debug_event</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">current_process</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">processes</span><span class="p">[</span><span class="n">debug_event</span><span class="o">.</span><span class="n">dwProcessId</span><span class="p">]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">threads</span><span class="p">[</span><span class="n">debug_event</span><span class="o">.</span><span class="n">dwThreadId</span><span class="p">]</span>
|
||||
@@ -295,7 +308,7 @@
|
||||
|
||||
<span class="k">def</span> <span class="nf">_setup_breakpoint_BP</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bp</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">WinProcess</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"SETUP STANDARD_BP on </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">target</span><span class="p">))</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Cannot setup STANDARD_BP on </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">target</span><span class="p">))</span>
|
||||
|
||||
<span class="n">addr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resolve</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">addr</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
@@ -332,8 +345,10 @@
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Cannot put </span><span class="si">{0}</span><span class="s2"> in </span><span class="si">{1}</span><span class="s2"> (DRx full)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">bp</span><span class="p">,</span> <span class="n">target</span><span class="p">))</span>
|
||||
<span class="n">empty_drx</span> <span class="o">=</span> <span class="nb">str</span><span class="p">([</span><span class="n">pos</span> <span class="k">for</span> <span class="n">pos</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span> <span class="k">if</span> <span class="n">pos</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">x</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span>
|
||||
<span class="n">ctx</span> <span class="o">=</span> <span class="n">target</span><span class="o">.</span><span class="n">context</span>
|
||||
<span class="n">ctx</span><span class="o">.</span><span class="n">EDr7</span><span class="o">.</span><span class="n">GE</span> <span class="o">=</span> <span class="mi">1</span>
|
||||
<span class="n">ctx</span><span class="o">.</span><span class="n">EDr7</span><span class="o">.</span><span class="n">LE</span> <span class="o">=</span> <span class="mi">1</span>
|
||||
<span class="c1"># Windows DebugCtl aliasing in DR7</span>
|
||||
<span class="c1"># See https://www.codeproject.com/Articles/517466/Last-branch-records-and-branch-tracing</span>
|
||||
<span class="n">ctx</span><span class="o">.</span><span class="n">EDr7</span><span class="o">.</span><span class="n">LE</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># bit 8 of DR7 represents bit 0 of DebugCtl. This is the LBR bit. (last branch record, will explain)</span>
|
||||
<span class="n">ctx</span><span class="o">.</span><span class="n">EDr7</span><span class="o">.</span><span class="n">GE</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># bit 9 of DR7 represents bit 1 of DebugCtl. This is the BTF bit. (single-step on branches)</span>
|
||||
<span class="nb">setattr</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">EDr7</span><span class="p">,</span> <span class="s2">"L"</span> <span class="o">+</span> <span class="n">empty_drx</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||
<span class="nb">setattr</span><span class="p">(</span><span class="n">ctx</span><span class="p">,</span> <span class="s2">"Dr"</span> <span class="o">+</span> <span class="n">empty_drx</span><span class="p">,</span> <span class="n">addr</span><span class="p">)</span>
|
||||
<span class="n">x</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">empty_drx</span><span class="p">)]</span> <span class="o">=</span> <span class="n">bp</span>
|
||||
@@ -369,13 +384,15 @@
|
||||
<span class="k">return</span> <span class="n">PAGE_EXECUTE_READ</span>
|
||||
<span class="k">if</span> <span class="n">events</span> <span class="o">==</span> <span class="nb">set</span><span class="p">(</span><span class="s2">"X"</span><span class="p">):</span>
|
||||
<span class="c1"># Might have problem if DEP is not enabled</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">is_implemented</span><span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">GetProcessDEPPolicy</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">target</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">64</span><span class="p">:</span>
|
||||
<span class="n">has_DEP</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="k">elif</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">is_implemented</span><span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">GetProcessDEPPolicy</span><span class="p">):</span>
|
||||
<span class="n">has_DEP</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">permaned</span> <span class="o">=</span> <span class="n">LONG</span><span class="p">()</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">GetProcessDEPPolicy</span><span class="p">(</span><span class="n">target</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">has_DEP</span><span class="p">,</span> <span class="n">permaned</span><span class="p">)</span>
|
||||
<span class="n">has_DEP</span> <span class="o">=</span> <span class="n">has_DEP</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">has_DEP</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">has_DEP</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="k">return</span> <span class="n">PAGE_READWRITE</span> <span class="k">if</span> <span class="n">has_DEP</span> <span class="k">else</span> <span class="n">PAGE_NOACCESS</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Unexpected set of event for Membp: </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">events</span><span class="p">))</span>
|
||||
|
||||
@@ -418,12 +435,28 @@
|
||||
<span class="k">for</span> <span class="n">page_addr</span> <span class="ow">in</span> <span class="n">affected_pages</span><span class="p">:</span>
|
||||
<span class="n">cp_watch_page</span><span class="p">[</span><span class="n">page_addr</span><span class="p">]</span><span class="o">.</span><span class="n">bps</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">bp</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">cp_watch_page</span><span class="p">[</span><span class="n">page_addr</span><span class="p">]</span><span class="o">.</span><span class="n">bps</span><span class="p">:</span>
|
||||
<span class="n">target</span><span class="o">.</span><span class="n">virtual_protect</span><span class="p">(</span><span class="n">page_addr</span><span class="p">,</span> <span class="n">PAGE_SIZE</span><span class="p">,</span> <span class="n">cp_watch_page</span><span class="p">[</span><span class="n">page_addr</span><span class="p">]</span><span class="o">.</span><span class="n">original_prot</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">target</span><span class="o">.</span><span class="n">virtual_protect</span><span class="p">(</span><span class="n">page_addr</span><span class="p">,</span> <span class="n">PAGE_SIZE</span><span class="p">,</span> <span class="n">cp_watch_page</span><span class="p">[</span><span class="n">page_addr</span><span class="p">]</span><span class="o">.</span><span class="n">original_prot</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="c1"># TODO</span>
|
||||
<span class="c1"># What should we do if the virtual protect fail on a Non-Free page ?</span>
|
||||
<span class="c1"># It may be because the page was dealloc + map as a view..</span>
|
||||
<span class="c1"># For now: keep the page as-is</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">target</span><span class="o">.</span><span class="n">query_memory</span><span class="p">(</span><span class="n">page_addr</span><span class="p">)</span><span class="o">.</span><span class="n">State</span> <span class="o">==</span> <span class="n">MEM_FREE</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="c1"># If page is MEM_FREE ignore the error</span>
|
||||
<span class="k">del</span> <span class="n">cp_watch_page</span><span class="p">[</span><span class="n">page_addr</span><span class="p">]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">full_page_events</span> <span class="o">=</span> <span class="nb">set</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">bp</span><span class="o">.</span><span class="n">events</span> <span class="k">for</span> <span class="n">bp</span> <span class="ow">in</span> <span class="n">cp_watch_page</span><span class="p">[</span><span class="n">page_addr</span><span class="p">]</span><span class="o">.</span><span class="n">bps</span><span class="p">])</span>
|
||||
<span class="n">protection_for_page</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_compute_page_access_for_event</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">full_page_events</span><span class="p">)</span>
|
||||
<span class="n">target</span><span class="o">.</span><span class="n">virtual_protect</span><span class="p">(</span><span class="n">page_addr</span><span class="p">,</span> <span class="n">PAGE_SIZE</span><span class="p">,</span> <span class="n">protection_for_page</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">target</span><span class="o">.</span><span class="n">virtual_protect</span><span class="p">(</span><span class="n">page_addr</span><span class="p">,</span> <span class="n">PAGE_SIZE</span><span class="p">,</span> <span class="n">protection_for_page</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="c1"># if not target.query_memory(page_addr).State == MEM_FREE:</span>
|
||||
<span class="c1"># raise</span>
|
||||
<span class="k">for</span> <span class="n">bp</span> <span class="ow">in</span> <span class="n">cp_watch_page</span><span class="p">[</span><span class="n">page_addr</span><span class="p">]</span><span class="o">.</span><span class="n">bps</span><span class="p">:</span>
|
||||
<span class="n">bp</span><span class="o">.</span><span class="n">on_error</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">page_addr</span><span class="p">)</span>
|
||||
<span class="c1"># TODO: handle case were it is mem-free ?</span>
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
|
||||
|
||||
@@ -662,12 +695,12 @@
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span> <span class="ow">and</span> <span class="n">pe</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">64</span><span class="p">:</span>
|
||||
<span class="n">name_sufix</span> <span class="o">=</span> <span class="s2">"64"</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">load_dll</span><span class="o">.</span><span class="n">lpImageName</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">pe</span><span class="o">.</span><span class="n">export_name</span> <span class="o">+</span> <span class="n">name_sufix</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">addr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">read_ptr</span><span class="p">(</span><span class="n">load_dll</span><span class="o">.</span><span class="n">lpImageName</span><span class="p">)</span>
|
||||
<span class="k">except</span><span class="p">:</span>
|
||||
<span class="n">addr</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">addr</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">if</span> <span class="n">load_dll</span><span class="o">.</span><span class="n">lpImageName</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">addr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">read_ptr</span><span class="p">(</span><span class="n">load_dll</span><span class="o">.</span><span class="n">lpImageName</span><span class="p">)</span>
|
||||
<span class="k">except</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">addr</span><span class="p">:</span>
|
||||
<span class="n">pe</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">pe_parse</span><span class="o">.</span><span class="n">GetPEFile</span><span class="p">(</span><span class="n">load_dll</span><span class="o">.</span><span class="n">lpBaseOfDll</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="p">)</span>
|
||||
@@ -700,6 +733,7 @@
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">current_process</span> <span class="o">=</span> <span class="n">WinProcess</span><span class="o">.</span><span class="n">_from_handle</span><span class="p">(</span><span class="n">proc_handle</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span> <span class="o">=</span> <span class="n">WinThread</span><span class="o">.</span><span class="n">_from_handle</span><span class="p">(</span><span class="n">thread_handle</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"New process: </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="p">),</span> <span class="s2">"DBG"</span><span class="p">)</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">threads</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">tid</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_explicit_single_step</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">tid</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
@@ -711,11 +745,15 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_memory_save</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">pid</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_module_by_process</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">pid</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_update_debugger_state</span><span class="p">(</span><span class="n">debug_event</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_add_exe_to_module_list</span><span class="p">(</span><span class="n">create_process</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_setup_pending_breakpoints_new_process</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_setup_pending_breakpoints_new_thread</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span><span class="p">)</span>
|
||||
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">DisabledMemoryBreakpoint</span><span class="p">():</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_create_process</span><span class="p">(</span><span class="n">create_process</span><span class="p">)</span>
|
||||
<span class="c1"># TODO: close hFile</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_create_process</span><span class="p">(</span><span class="n">create_process</span><span class="p">)</span>
|
||||
<span class="k">finally</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">create_process</span><span class="o">.</span><span class="n">hFile</span><span class="p">:</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">CloseHandle</span><span class="p">(</span><span class="n">create_process</span><span class="o">.</span><span class="n">hFile</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_handle_exit_process</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">debug_event</span><span class="p">):</span>
|
||||
<span class="sd">"""Handle EXIT_PROCESS_DEBUG_EVENT"""</span>
|
||||
@@ -735,9 +773,8 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">current_process</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">cpid</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">pid</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="ow">and</span> <span class="n">cpid</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">pid</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">retvalue</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_handle_create_thread</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">debug_event</span><span class="p">):</span>
|
||||
@@ -748,8 +785,10 @@
|
||||
<span class="n">thread_handle</span> <span class="o">=</span> <span class="n">HANDLE</span><span class="p">()</span>
|
||||
<span class="n">cp_handle</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">handle</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">DuplicateHandle</span><span class="p">(</span><span class="n">cp_handle</span><span class="p">,</span> <span class="n">create_thread</span><span class="o">.</span><span class="n">hThread</span><span class="p">,</span> <span class="n">cp_handle</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">thread_handle</span><span class="p">),</span> <span class="n">dwOptions</span><span class="o">=</span><span class="n">DUPLICATE_SAME_ACCESS</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span> <span class="o">=</span> <span class="n">WinThread</span><span class="o">.</span><span class="n">_from_handle</span><span class="p">(</span><span class="n">thread_handle</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">threads</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">tid</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span>
|
||||
<span class="n">new_thread</span> <span class="o">=</span> <span class="n">WinThread</span><span class="o">.</span><span class="n">_from_handle</span><span class="p">(</span><span class="n">thread_handle</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">threads</span><span class="p">[</span><span class="n">new_thread</span><span class="o">.</span><span class="n">tid</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_thread</span>
|
||||
<span class="c1"># The new thread is on the thread pool: we can now update the debugger state</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_update_debugger_state</span><span class="p">(</span><span class="n">debug_event</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_explicit_single_step</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">tid</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_breakpoint_to_reput</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">tid</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_hardware_breakpoint</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">tid</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
@@ -778,13 +817,19 @@
|
||||
<span class="n">dll_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">dll</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">dll_name</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">".dll"</span><span class="p">):</span>
|
||||
<span class="n">dll_name</span> <span class="o">=</span> <span class="n">dll_name</span><span class="p">[:</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span>
|
||||
<span class="c1"># Mais c'est debile..</span>
|
||||
<span class="c1"># Si j'ai ntdll et ntdll64: les deux vont avoir le meme nom..</span>
|
||||
<span class="k">if</span> <span class="n">dll_name</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">".dll64"</span><span class="p">):</span>
|
||||
<span class="n">dll_name</span> <span class="o">=</span> <span class="n">dll_name</span><span class="p">[:</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span> <span class="o">+</span> <span class="s2">"64"</span> <span class="c1"># Crade..</span>
|
||||
<span class="c1">#print("Load {0} -> {1}".format(dll, dll_name))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_module_by_process</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">pid</span><span class="p">][</span><span class="n">dll_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">pe_parse</span><span class="o">.</span><span class="n">GetPEFile</span><span class="p">(</span><span class="n">load_dll</span><span class="o">.</span><span class="n">lpBaseOfDll</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_setup_pending_breakpoints_load_dll</span><span class="p">(</span><span class="n">dll_name</span><span class="p">)</span>
|
||||
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">DisabledMemoryBreakpoint</span><span class="p">():</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_load_dll</span><span class="p">(</span><span class="n">load_dll</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_load_dll</span><span class="p">(</span><span class="n">load_dll</span><span class="p">)</span>
|
||||
<span class="k">finally</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">load_dll</span><span class="o">.</span><span class="n">hFile</span><span class="p">:</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">CloseHandle</span><span class="p">(</span><span class="n">load_dll</span><span class="o">.</span><span class="n">hFile</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_handle_unload_dll</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">debug_event</span><span class="p">):</span>
|
||||
<span class="sd">"""Handle UNLOAD_DLL_DEBUG_EVENT"""</span>
|
||||
@@ -850,10 +895,10 @@
|
||||
<span class="k">elif</span> <span class="n">target</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="c1"># Check that targets are accepted</span>
|
||||
<span class="k">if</span> <span class="n">target</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">processes</span><span class="o">.</span><span class="n">values</span><span class="p">()</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">threads</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
||||
<span class="k">if</span> <span class="n">target</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">:</span> <span class="c1"># Original target (that have not been lauched yet)</span>
|
||||
<span class="c1"># if target == self.target: # Original target (that have not been lauched yet)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_pending_breakpoint</span><span class="p">(</span><span class="n">bp</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Unknown target </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">target</span><span class="p">))</span>
|
||||
<span class="c1"># else:</span>
|
||||
<span class="c1"># raise ValueError("Unknown target {0}".format(target))</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_setup_breakpoint</span><span class="p">(</span><span class="n">bp</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Debugger.del_bp"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.del_bp">[docs]</a> <span class="k">def</span> <span class="nf">del_bp</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bp</span><span class="p">,</span> <span class="n">targets</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
@@ -910,7 +955,18 @@
|
||||
<span class="n">cp_watch_page</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_watched_pages</span><span class="p">[</span><span class="n">target</span><span class="o">.</span><span class="n">pid</span><span class="p">]</span>
|
||||
<span class="n">page_protection</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="k">for</span> <span class="n">page_addr</span><span class="p">,</span> <span class="n">watched_page</span> <span class="ow">in</span> <span class="n">cp_watch_page</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||||
<span class="n">target</span><span class="o">.</span><span class="n">virtual_protect</span><span class="p">(</span><span class="n">page_addr</span><span class="p">,</span> <span class="n">PAGE_SIZE</span><span class="p">,</span> <span class="n">watched_page</span><span class="o">.</span><span class="n">original_prot</span><span class="p">,</span> <span class="n">page_protection</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">target</span><span class="o">.</span><span class="n">virtual_protect</span><span class="p">(</span><span class="n">page_addr</span><span class="p">,</span> <span class="n">PAGE_SIZE</span><span class="p">,</span> <span class="n">watched_page</span><span class="o">.</span><span class="n">original_prot</span><span class="p">,</span> <span class="n">page_protection</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="c1"># Check if page have been unmapped</span>
|
||||
<span class="c1"># print("disable_all_memory_breakpoints failed on page {0:#x} in state {1:#x}".format(page_addr, target.query_memory(page_addr).State))</span>
|
||||
<span class="c1"># if not target.query_memory(page_addr).State == MEM_FREE:</span>
|
||||
<span class="c1"># import pdb;pdb.set_trace()</span>
|
||||
<span class="c1"># raise</span>
|
||||
<span class="c1"># If page have been unmap, warn the concerned Breakpoints.</span>
|
||||
<span class="k">for</span> <span class="n">bp</span> <span class="ow">in</span> <span class="n">watched_page</span><span class="o">.</span><span class="n">bps</span><span class="p">:</span>
|
||||
<span class="c1"># TODO: Document</span>
|
||||
<span class="n">bp</span><span class="o">.</span><span class="n">on_error</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">page_addr</span><span class="p">)</span>
|
||||
<span class="n">res</span><span class="p">[</span><span class="n">page_addr</span><span class="p">]</span> <span class="o">=</span> <span class="n">page_protection</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="k">return</span> <span class="n">res</span></div>
|
||||
|
||||
@@ -959,6 +1015,7 @@
|
||||
<span class="sd"> The default behaviour is to return ``DBG_CONTINUE`` for the known exception code</span>
|
||||
<span class="sd"> and ``DBG_EXCEPTION_NOT_HANDLED`` else</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Exception: </span><span class="si">{0}</span><span class="s2"> at "</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">exception</span><span class="o">.</span><span class="n">ExceptionRecord</span><span class="o">.</span><span class="n">ExceptionCode</span><span class="p">,</span> <span class="n">exception</span><span class="o">.</span><span class="n">ExceptionRecord</span><span class="o">.</span><span class="n">ExceptionAddress</span><span class="p">),</span> <span class="s2">"DBG"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">exception</span><span class="o">.</span><span class="n">ExceptionRecord</span><span class="o">.</span><span class="n">ExceptionCode</span> <span class="ow">in</span> <span class="n">winexception</span><span class="o">.</span><span class="n">exception_name_by_value</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">DBG_EXCEPTION_NOT_HANDLED</span>
|
||||
<span class="k">return</span> <span class="n">DBG_CONTINUE</span></div>
|
||||
@@ -974,35 +1031,51 @@
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Debugger that explicitly single step should implement <on_single_step>"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Debugger.on_create_process"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.on_create_process">[docs]</a> <span class="k">def</span> <span class="nf">on_create_process</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">create_process</span><span class="p">):</span>
|
||||
<span class="sd">"""Called on create_process event (for param type see https://msdn.microsoft.com/en-us/library/windows/desktop/ms679286(v=vs.85).aspx)"""</span>
|
||||
<span class="sd">"""Called on create_process event</span>
|
||||
|
||||
<span class="sd"> :param CREATE_PROCESS_DEBUG_INFO create_process:"""</span>
|
||||
<span class="k">pass</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Debugger.on_exit_process"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.on_exit_process">[docs]</a> <span class="k">def</span> <span class="nf">on_exit_process</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exit_process</span><span class="p">):</span>
|
||||
<span class="sd">"""Called on exit_process event (for param type see https://msdn.microsoft.com/en-us/library/windows/desktop/ms679334(v=vs.85).aspx)"""</span>
|
||||
<span class="sd">"""Called on exit_process event</span>
|
||||
|
||||
<span class="sd"> :param EXIT_PROCESS_DEBUG_INFO exit_process:"""</span>
|
||||
<span class="k">pass</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Debugger.on_create_thread"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.on_create_thread">[docs]</a> <span class="k">def</span> <span class="nf">on_create_thread</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">create_thread</span><span class="p">):</span>
|
||||
<span class="sd">"""Called on create_thread event (for param type see https://msdn.microsoft.com/en-us/library/windows/desktop/ms679287(v=vs.85).aspx)"""</span>
|
||||
<span class="sd">"""Called on create_thread event</span>
|
||||
|
||||
<span class="sd"> :param CREATE_THREAD_DEBUG_INFO create_thread:"""</span>
|
||||
<span class="k">pass</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Debugger.on_exit_thread"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.on_exit_thread">[docs]</a> <span class="k">def</span> <span class="nf">on_exit_thread</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exit_thread</span><span class="p">):</span>
|
||||
<span class="sd">"""Called on exit_thread event (for param type see https://msdn.microsoft.com/en-us/library/windows/desktop/ms679335(v=vs.85).aspx)"""</span>
|
||||
<span class="sd">"""Called on exit_thread event</span>
|
||||
|
||||
<span class="sd"> :param EXIT_THREAD_DEBUG_INFO exit_thread:"""</span>
|
||||
<span class="k">pass</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Debugger.on_load_dll"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.on_load_dll">[docs]</a> <span class="k">def</span> <span class="nf">on_load_dll</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">load_dll</span><span class="p">):</span>
|
||||
<span class="sd">"""Called on load_dll event (for param type see https://msdn.microsoft.com/en-us/library/windows/desktop/ms680351(v=vs.85).aspx)"""</span>
|
||||
<span class="sd">"""Called on load_dll event</span>
|
||||
|
||||
<span class="sd"> :param LOAD_DLL_DEBUG_INFO load_dll:"""</span>
|
||||
<span class="k">pass</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Debugger.on_unload_dll"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.on_unload_dll">[docs]</a> <span class="k">def</span> <span class="nf">on_unload_dll</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unload_dll</span><span class="p">):</span>
|
||||
<span class="sd">"""Called on unload_dll event (for param type see https://msdn.microsoft.com/en-us/library/windows/desktop/ms681403(v=vs.85).aspx)"""</span>
|
||||
<span class="sd">"""Called on unload_dll event</span>
|
||||
|
||||
<span class="sd"> :param UNLOAD_DLL_DEBUG_INFO unload_dll:"""</span>
|
||||
<span class="k">pass</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Debugger.on_output_debug_string"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.on_output_debug_string">[docs]</a> <span class="k">def</span> <span class="nf">on_output_debug_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">debug_string</span><span class="p">):</span>
|
||||
<span class="sd">"""Called on debug_string event (for param type see https://msdn.microsoft.com/en-us/library/windows/desktop/ms680545(v=vs.85).aspx)"""</span>
|
||||
<span class="sd">"""Called on debug_string event</span>
|
||||
|
||||
<span class="sd"> :param OUTPUT_DEBUG_STRING_INFO debug_string:"""</span>
|
||||
<span class="k">pass</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Debugger.on_rip"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.on_rip">[docs]</a> <span class="k">def</span> <span class="nf">on_rip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rip_info</span><span class="p">):</span>
|
||||
<span class="sd">"""Called on rip_info event (for param type see https://msdn.microsoft.com/en-us/library/windows/desktop/ms680587(v=vs.85).aspx)"""</span>
|
||||
<span class="sd">"""Called on rip_info event</span>
|
||||
|
||||
<span class="sd"> :param RIP_INFO rip_info:"""</span>
|
||||
<span class="k">pass</span></div></div>
|
||||
</pre></div>
|
||||
|
||||
@@ -1034,7 +1107,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+35
-8
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.debug.localdbg — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.debug.localdbg — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -82,6 +82,7 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">veh_depth</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">current_exception</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">exceptions_stack</span> <span class="o">=</span> <span class="p">[</span><span class="kc">None</span><span class="p">]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">current_process</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span>
|
||||
|
||||
<span class="nd">@contextmanager</span>
|
||||
<span class="k">def</span> <span class="nf">NewCurrentException</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc</span><span class="p">):</span>
|
||||
@@ -114,6 +115,31 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_reput_breakpoint</span><span class="p">[</span><span class="n">windows</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">tid</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">breakpoints</span><span class="p">[</span><span class="n">addr</span><span class="p">],</span> <span class="n">single_step</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">single_step</span><span class="p">()</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_local_resolve</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">addr</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">addr</span>
|
||||
<span class="n">dll</span><span class="p">,</span> <span class="n">api</span> <span class="o">=</span> <span class="n">addr</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"!"</span><span class="p">)</span>
|
||||
<span class="n">dll</span> <span class="o">=</span> <span class="n">dll</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
||||
<span class="n">modules</span> <span class="o">=</span> <span class="p">{</span><span class="n">m</span><span class="o">.</span><span class="n">name</span><span class="p">[:</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="s2">".dll"</span><span class="p">)]</span> <span class="k">if</span> <span class="n">m</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">".dll"</span><span class="p">)</span> <span class="k">else</span> <span class="n">m</span><span class="o">.</span><span class="n">name</span> <span class="p">:</span> <span class="n">m</span> <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">peb</span><span class="o">.</span><span class="n">modules</span><span class="p">}</span>
|
||||
<span class="n">mod</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">if</span> <span class="n">dll</span> <span class="ow">in</span> <span class="n">modules</span><span class="p">:</span>
|
||||
<span class="n">mod</span> <span class="o">=</span> <span class="p">[</span><span class="n">modules</span><span class="p">[</span><span class="n">dll</span><span class="p">]]</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">mod</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="c1"># TODO: optim exports are the same for whole system (32 vs 64 bits)</span>
|
||||
<span class="c1"># I don't have to reparse the exports each time..</span>
|
||||
<span class="c1"># Try to interpret api as an int</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">api_int</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">api</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">mod</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">baseaddr</span> <span class="o">+</span> <span class="n">api_int</span>
|
||||
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="n">exports</span> <span class="o">=</span> <span class="n">mod</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">pe</span><span class="o">.</span><span class="n">exports</span>
|
||||
<span class="k">if</span> <span class="n">api</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">exports</span><span class="p">:</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Error resolving <</span><span class="si">{0}</span><span class="s2">> in local process"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="n">target</span><span class="p">),</span> <span class="s2">"DBG"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Unknown API <</span><span class="si">{0}</span><span class="s2">> in DLL </span><span class="si">{1}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">api</span><span class="p">,</span> <span class="n">dll</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">exports</span><span class="p">[</span><span class="n">api</span><span class="p">]</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">callback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc</span><span class="p">):</span>
|
||||
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">NewCurrentException</span><span class="p">(</span><span class="n">exc</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle_exception</span><span class="p">(</span><span class="n">exc</span><span class="p">)</span>
|
||||
@@ -184,10 +210,11 @@
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Unknow BP type </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">type</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="n">targets</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"LocalDebugger: STANDARD_BP doest not support targets </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">targets</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">breakpoints</span><span class="p">[</span><span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="p">]</span> <span class="o">=</span> <span class="n">bp</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_memory_save</span><span class="p">[</span><span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="p">]</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">read_memory</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||
<span class="k">with</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">VirtualProtected</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">PAGE_EXECUTE_READWRITE</span><span class="p">):</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="p">,</span> <span class="s2">"</span><span class="se">\xcc</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="n">addr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_local_resolve</span><span class="p">(</span><span class="n">bp</span><span class="o">.</span><span class="n">addr</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">breakpoints</span><span class="p">[</span><span class="n">addr</span><span class="p">]</span> <span class="o">=</span> <span class="n">bp</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_memory_save</span><span class="p">[</span><span class="n">addr</span><span class="p">]</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">read_memory</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||
<span class="k">with</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">VirtualProtected</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">PAGE_EXECUTE_READWRITE</span><span class="p">):</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">write_memory</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="s2">"</span><span class="se">\xcc</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">add_bp_hxbp</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bp</span><span class="p">,</span> <span class="n">targets</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
@@ -334,7 +361,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+26
-4
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.hooks — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.hooks — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -51,6 +51,7 @@
|
||||
<span></span><span class="kn">import</span> <span class="nn">sys</span>
|
||||
<span class="kn">import</span> <span class="nn">ctypes</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">windows</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.utils</span> <span class="k">as</span> <span class="nn">utils</span>
|
||||
<span class="kn">from</span> <span class="nn">.</span> <span class="k">import</span> <span class="n">native_exec</span>
|
||||
<span class="kn">from</span> <span class="nn">.generated_def</span> <span class="k">import</span> <span class="n">winfuncs</span>
|
||||
@@ -150,6 +151,27 @@
|
||||
<span class="c1"># Use this tricks to prevent garbage collection of hook ?</span>
|
||||
<span class="c1">#def __del__(self):</span>
|
||||
<span class="c1"># pass</span>
|
||||
|
||||
|
||||
<span class="c1">## New simple hook API based on winproxy</span>
|
||||
<span class="k">def</span> <span class="nf">setup_hook</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">hook</span><span class="p">,</span> <span class="n">dll_to_hook</span><span class="p">):</span>
|
||||
<span class="s2">"TODO: Test and doc :D"</span>
|
||||
<span class="n">dll_name</span><span class="p">,</span> <span class="n">api_name</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">get_target</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
|
||||
<span class="n">prototype</span> <span class="o">=</span> <span class="n">target</span><span class="o">.</span><span class="n">prototype</span>
|
||||
<span class="n">hook</span><span class="o">.</span><span class="n">_types_info</span> <span class="o">=</span> <span class="p">(</span><span class="n">prototype</span><span class="o">.</span><span class="n">_restype_</span><span class="p">,)</span> <span class="o">+</span> <span class="n">prototype</span><span class="o">.</span><span class="n">_argtypes_</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">dll_name</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">".dll"</span><span class="p">):</span>
|
||||
<span class="n">dll_name</span> <span class="o">+=</span> <span class="s2">".dll"</span>
|
||||
<span class="c1"># Get the peb of our process</span>
|
||||
<span class="n">peb</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">peb</span>
|
||||
<span class="c1"># Get the dll_to_hook</span>
|
||||
<span class="n">module_to_hook</span> <span class="o">=</span> <span class="p">[</span><span class="n">m</span> <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">peb</span><span class="o">.</span><span class="n">modules</span> <span class="k">if</span> <span class="n">m</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">dll_to_hook</span><span class="o">.</span><span class="n">lower</span><span class="p">()][</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="c1"># Get the iat entries for DLL dll_name</span>
|
||||
<span class="n">adv_imports</span> <span class="o">=</span> <span class="n">module_to_hook</span><span class="o">.</span><span class="n">pe</span><span class="o">.</span><span class="n">imports</span><span class="p">[</span><span class="n">dll_name</span><span class="p">]</span>
|
||||
<span class="c1"># Get RegOpenKeyExA iat entry</span>
|
||||
<span class="n">iat</span> <span class="o">=</span> <span class="p">[</span><span class="n">n</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">adv_imports</span> <span class="k">if</span> <span class="n">n</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="n">api_name</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">iat</span><span class="o">.</span><span class="n">set_hook</span><span class="p">(</span><span class="n">hook</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">iat</span>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
@@ -180,7 +202,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+4
-4
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.native_exec.cpuid — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.native_exec.cpuid — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -237,7 +237,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.native_exec.native_function — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.native_exec.native_function — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -194,7 +194,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.native_exec.simple_x86 — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.native_exec.simple_x86 — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -1128,7 +1128,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+4
-4
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.pe_parse — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.pe_parse — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -818,7 +818,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+23
-4
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.remotectypes — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.remotectypes — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -142,6 +142,8 @@
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">base</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw_value</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">base</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">count</span><span class="p">():</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">read_memory</span><span class="p">(</span><span class="n">base</span> <span class="o">+</span> <span class="p">(</span><span class="n">i</span> <span class="o">*</span> <span class="mh">0x100</span><span class="p">),</span> <span class="mh">0x100</span><span class="p">)</span>
|
||||
@@ -156,6 +158,8 @@
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">base</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw_value</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">base</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="c1"># Simple case where target in a WinProcess</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">read_wstring</span><span class="p">(</span><span class="n">base</span><span class="p">)</span>
|
||||
@@ -213,6 +217,7 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">target</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">slice</span><span class="p">):</span>
|
||||
<span class="c1"># import pdb;pdb.set_trace()</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="nb">slice</span><span class="p">,</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">long</span><span class="p">)):</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"RemoteArray slice __getitem__"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="nb">slice</span> <span class="o">>=</span> <span class="nb">len</span><span class="p">:</span>
|
||||
@@ -223,6 +228,13 @@
|
||||
<span class="k">class</span> <span class="nc">TST</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">Structure</span><span class="p">):</span>
|
||||
<span class="n">_fields_</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">"TST"</span><span class="p">,</span> <span class="n">subtype</span><span class="p">)]</span>
|
||||
<span class="k">return</span> <span class="n">RemoteStructure</span><span class="o">.</span><span class="n">from_structure</span><span class="p">(</span><span class="n">TST</span><span class="p">)(</span><span class="n">item_addr</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">)</span><span class="o">.</span><span class="n">TST</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__getslice__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">stop</span><span class="p">):</span> <span class="c1"># Still used even for python 2.7 wtf :F</span>
|
||||
<span class="n">stop</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">stop</span><span class="p">,</span> <span class="nb">len</span><span class="p">)</span>
|
||||
<span class="n">start</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
<span class="c1"># dummy implementation</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">stop</span><span class="p">)]</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">RemoteArray</span>
|
||||
|
||||
|
||||
@@ -390,6 +402,13 @@
|
||||
<span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">ftype</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">Union</span><span class="p">):</span> <span class="c1"># Union that must be transfomed</span>
|
||||
<span class="k">return</span> <span class="n">RemoteUnion</span><span class="o">.</span><span class="n">from_structure</span><span class="p">(</span><span class="n">ftype</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">_base_addr</span> <span class="o">+</span> <span class="n">fosset</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_target</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">ftype</span><span class="p">,</span> <span class="n">_ctypes</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span> <span class="c1"># Arrays</span>
|
||||
<span class="c1"># if this is a string: just cast the read value to string</span>
|
||||
<span class="k">if</span> <span class="n">ftype</span><span class="o">.</span><span class="n">_type_</span> <span class="o">==</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_char</span><span class="p">:</span> <span class="c1"># Use issubclass instead ?</span>
|
||||
<span class="k">return</span> <span class="n">s</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">elif</span> <span class="n">ftype</span><span class="o">.</span><span class="n">_type_</span> <span class="o">==</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_wchar</span><span class="p">:</span> <span class="c1"># Use issubclass instead ?</span>
|
||||
<span class="c1"># Decode from utf16 -> size /=2 | put it in a wchar array | split at the first "\x00"</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="n">ftype</span><span class="o">.</span><span class="n">_type_</span> <span class="o">*</span> <span class="p">(</span><span class="n">fsize</span> <span class="o">/</span> <span class="mi">2</span><span class="p">))</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">s</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">'utf16'</span><span class="p">))[:]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># Sorry..</span>
|
||||
<span class="c1"># I am pretty sur something smarter is possible..</span>
|
||||
<span class="k">return</span> <span class="n">create_remote_array</span><span class="p">(</span><span class="n">ftype</span><span class="o">.</span><span class="n">_type_</span><span class="p">,</span> <span class="n">ftype</span><span class="o">.</span><span class="n">_length_</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">_base_addr</span> <span class="o">+</span> <span class="n">fosset</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_target</span><span class="p">)</span>
|
||||
<span class="c1"># Normal types</span>
|
||||
<span class="c1"># Follow the ctypes usage: if it's not directly inherited from _SimpleCData</span>
|
||||
@@ -561,7 +580,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+243
@@ -0,0 +1,243 @@
|
||||
<!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="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.rpc.client — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
SOURCELINK_SUFFIX: '.txt'
|
||||
};
|
||||
</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 role="document">
|
||||
<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.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for windows.rpc.client</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">struct</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">windows.alpc</span> <span class="k">as</span> <span class="nn">alpc</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.com</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
||||
|
||||
|
||||
<span class="n">KNOW_REQUEST_TYPE</span> <span class="o">=</span> <span class="p">{</span><span class="n">x</span><span class="p">:</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">[</span><span class="n">gdef</span><span class="o">.</span><span class="n">RPC_REQUEST_TYPE_CALL</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">RPC_REQUEST_TYPE_BIND</span><span class="p">]}</span>
|
||||
|
||||
|
||||
<span class="n">KNOW_RESPONSE_TYPE</span> <span class="o">=</span> <span class="p">{</span><span class="n">x</span><span class="p">:</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">[</span><span class="n">gdef</span><span class="o">.</span><span class="n">RPC_RESPONSE_TYPE_FAIL</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">RPC_RESPONSE_TYPE_SUCESS</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">RPC_RESPONSE_TYPE_BIND_OK</span><span class="p">]}</span>
|
||||
|
||||
|
||||
<span class="n">KNOWN_RPC_ERROR_CODE</span> <span class="o">=</span> <span class="p">{</span><span class="n">x</span><span class="p">:</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">[</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_INVALID_HANDLE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">RPC_X_BAD_STUB_DATA</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">RPC_S_UNKNOWN_IF</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">RPC_S_PROTOCOL_ERROR</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">RPC_S_UNSUPPORTED_TRANS_SYN</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">RPC_S_PROCNUM_OUT_OF_RANGE</span><span class="p">,</span>
|
||||
<span class="p">]}</span>
|
||||
|
||||
<span class="n">NOT_USED</span> <span class="o">=</span> <span class="mh">0xBAADF00D</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">ALPC_RPC_BIND</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">Structure</span><span class="p">):</span>
|
||||
<span class="n">_pack_</span> <span class="o">=</span> <span class="mi">1</span>
|
||||
<span class="n">_fields_</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">(</span><span class="s2">"request_type"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"UNK1"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"UNK2"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"target"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">RPC_IF_ID</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"flags"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"if_nb_ndr32"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">USHORT</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"if_nb_ndr64"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">USHORT</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"if_nb_unkn"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">USHORT</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"PAD"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">USHORT</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"register_multiple_syntax"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"use_flow"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"UNK5"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"maybe_flow_id"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"UNK7"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"some_context_id"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"UNK9"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">]</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">ALPC_RPC_CALL</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">Structure</span><span class="p">):</span>
|
||||
<span class="n">_pack_</span> <span class="o">=</span> <span class="mi">1</span>
|
||||
<span class="n">_fields_</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">(</span><span class="s2">"request_type"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"UNK1"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"flags"</span><span class="p">,</span><span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"request_id"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"if_nb"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"method_offset"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"UNK2"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"UNK3"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"UNK4"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"UNK5"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"UNK6"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"UNK7"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"UNK8"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"UNK9"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"UNK10"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"UNK11"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">),</span>
|
||||
<span class="p">]</span>
|
||||
|
||||
<div class="viewcode-block" id="RPCClient"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.RPCClient">[docs]</a><span class="k">class</span> <span class="nc">RPCClient</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""A client for RPC-over-ALPC able to bind to interface and perform calls using NDR32 marshalling"""</span>
|
||||
<span class="n">REQUEST_IDENTIFIER</span> <span class="o">=</span> <span class="mh">0x11223344</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">port</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">alpc_client</span> <span class="o">=</span> <span class="n">alpc</span><span class="o">.</span><span class="n">AlpcClient</span><span class="p">(</span><span class="n">port</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">number_of_bind_if</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># if -> interface</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">if_bind_number</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
|
||||
<div class="viewcode-block" id="RPCClient.bind"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.RPCClient.bind">[docs]</a> <span class="k">def</span> <span class="nf">bind</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">IID_str</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">)):</span>
|
||||
<span class="sd">"""Bind to the ``IID_str`` with the given ``version``</span>
|
||||
|
||||
<span class="sd"> :returns: :class:`windows.generated_def.IID`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">IID</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">com</span><span class="o">.</span><span class="n">IID</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">IID_str</span><span class="p">)</span>
|
||||
<span class="n">request</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_forge_bind_request</span><span class="p">(</span><span class="n">IID</span><span class="p">,</span> <span class="n">version</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">number_of_bind_if</span><span class="p">)</span>
|
||||
<span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_send_request</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
|
||||
<span class="c1"># Parse reponse</span>
|
||||
<span class="n">request_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_request_type</span><span class="p">(</span><span class="n">response</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">request_type</span> <span class="o">!=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">RPC_RESPONSE_TYPE_BIND_OK</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Unexpected reponse type. Expected RESPONSE_TYPE_BIND_OK got </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">KNOW_RESPONSE_TYPE</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">request_type</span><span class="p">,</span> <span class="n">request_type</span><span class="p">)))</span>
|
||||
<span class="n">iid_hash</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</span><span class="n">buffer</span><span class="p">(</span><span class="n">IID</span><span class="p">)[:])</span> <span class="c1"># TODO: add __hash__ to IID</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">if_bind_number</span><span class="p">[</span><span class="n">iid_hash</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">number_of_bind_if</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">number_of_bind_if</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="c1">#TODO: attach version information to IID</span>
|
||||
<span class="k">return</span> <span class="n">IID</span></div>
|
||||
|
||||
<div class="viewcode-block" id="RPCClient.call"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.RPCClient.call">[docs]</a> <span class="k">def</span> <span class="nf">call</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">IID</span><span class="p">,</span> <span class="n">method_offset</span><span class="p">,</span> <span class="n">params</span><span class="p">):</span>
|
||||
<span class="sd">"""Call method number ``method_offset`` of interface ``IID`` with mashalled ``params``</span>
|
||||
|
||||
<span class="sd"> :param IID IID: An IID previously returned by :func:`bind`</span>
|
||||
<span class="sd"> :param int method_offset:</span>
|
||||
<span class="sd"> :param str params: The mashalled parameters (NDR32)</span>
|
||||
<span class="sd"> :returns: :class:`str`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">iid_hash</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</span><span class="n">buffer</span><span class="p">(</span><span class="n">IID</span><span class="p">)[:])</span>
|
||||
<span class="n">interface_nb</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">if_bind_number</span><span class="p">[</span><span class="n">iid_hash</span><span class="p">]</span> <span class="c1"># TODO: add __hash__ to IID</span>
|
||||
<span class="n">request</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_forge_call_request</span><span class="p">(</span><span class="n">interface_nb</span><span class="p">,</span> <span class="n">method_offset</span><span class="p">,</span> <span class="n">params</span><span class="p">)</span>
|
||||
<span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_send_request</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
|
||||
<span class="c1"># Parse reponse</span>
|
||||
<span class="n">request_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_request_type</span><span class="p">(</span><span class="n">response</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">request_type</span> <span class="o">!=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">RPC_RESPONSE_TYPE_SUCESS</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Unexpected reponse type. Expected RESPONSE_SUCESS got </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">KNOW_RESPONSE_TYPE</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">request_type</span><span class="p">,</span> <span class="n">request_type</span><span class="p">)))</span>
|
||||
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s2">"<6I"</span><span class="p">,</span> <span class="n">response</span><span class="p">[:</span><span class="mi">6</span> <span class="o">*</span> <span class="mi">4</span><span class="p">])</span>
|
||||
<span class="k">assert</span> <span class="n">data</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">REQUEST_IDENTIFIER</span>
|
||||
<span class="k">return</span> <span class="n">response</span><span class="p">[</span><span class="mi">4</span> <span class="o">*</span> <span class="mi">6</span><span class="p">:]</span> <span class="c1"># Should be the return value (not completly verified)</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_send_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
|
||||
<span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">alpc_client</span><span class="o">.</span><span class="n">send_receive</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">data</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_forge_call_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">interface_nb</span><span class="p">,</span> <span class="n">method_offset</span><span class="p">,</span> <span class="n">params</span><span class="p">):</span>
|
||||
<span class="c1"># TODO: differents REQUEST_IDENTIFIER for each req ?</span>
|
||||
<span class="c1"># TODO: what is this '0' ? (1 is also accepted) (flags ?)</span>
|
||||
<span class="c1"># request = struct.pack("<16I", gdef.RPC_REQUEST_TYPE_CALL, NOT_USED, 1, self.REQUEST_IDENTIFIER, interface_nb, method_offset, *[NOT_USED] * 10)</span>
|
||||
<span class="n">req</span> <span class="o">=</span> <span class="n">ALPC_RPC_CALL</span><span class="p">()</span>
|
||||
<span class="n">req</span><span class="o">.</span><span class="n">request_type</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">RPC_REQUEST_TYPE_CALL</span>
|
||||
<span class="n">req</span><span class="o">.</span><span class="n">flags</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">req</span><span class="o">.</span><span class="n">request_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">REQUEST_IDENTIFIER</span>
|
||||
<span class="n">req</span><span class="o">.</span><span class="n">if_nb</span> <span class="o">=</span> <span class="n">interface_nb</span>
|
||||
<span class="n">req</span><span class="o">.</span><span class="n">method_offset</span> <span class="o">=</span> <span class="n">method_offset</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">buffer</span><span class="p">(</span><span class="n">req</span><span class="p">)[:]</span> <span class="o">+</span> <span class="n">params</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_forge_bind_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">syntaxversion</span><span class="p">,</span> <span class="n">requested_if_nb</span><span class="p">):</span>
|
||||
<span class="n">version_major</span><span class="p">,</span> <span class="n">version_minor</span> <span class="o">=</span> <span class="n">syntaxversion</span>
|
||||
<span class="n">req</span> <span class="o">=</span> <span class="n">ALPC_RPC_BIND</span><span class="p">()</span>
|
||||
<span class="n">req</span><span class="o">.</span><span class="n">request_type</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">RPC_REQUEST_TYPE_BIND</span>
|
||||
<span class="n">req</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">RPC_IF_ID</span><span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="o">*</span><span class="n">syntaxversion</span><span class="p">)</span>
|
||||
<span class="n">req</span><span class="o">.</span><span class="n">flags</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BIND_IF_SYNTAX_NDR32</span>
|
||||
<span class="c1"># req.flags = gdef.BIND_IF_SYNTAX_NDR64</span>
|
||||
<span class="n">req</span><span class="o">.</span><span class="n">if_nb_ndr32</span> <span class="o">=</span> <span class="n">requested_if_nb</span>
|
||||
<span class="n">req</span><span class="o">.</span><span class="n">if_nb_ndr64</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">req</span><span class="o">.</span><span class="n">if_nb_ndr64</span> <span class="o">=</span> <span class="n">requested_if_nb</span>
|
||||
<span class="n">req</span><span class="o">.</span><span class="n">if_nb_unkn</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">req</span><span class="o">.</span><span class="n">register_multiple_syntax</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="n">req</span><span class="o">.</span><span class="n">some_context_id</span> <span class="o">=</span> <span class="mh">0xB00B00B</span>
|
||||
<span class="k">return</span> <span class="n">buffer</span><span class="p">(</span><span class="n">req</span><span class="p">)[:]</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_get_request_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">response</span><span class="p">):</span>
|
||||
<span class="s2">"raise if request_type == RESPONSE_TYPE_FAIL"</span>
|
||||
<span class="n">request_type</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s2">"<I"</span><span class="p">,</span> <span class="n">response</span><span class="p">[:</span><span class="mi">4</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">request_type</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">RPC_RESPONSE_TYPE_FAIL</span><span class="p">:</span>
|
||||
<span class="n">error_code</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s2">"<5I"</span><span class="p">,</span> <span class="n">response</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"RPC Response error </span><span class="si">{0}</span><span class="s2"> (</span><span class="si">{1}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error_code</span><span class="p">,</span> <span class="n">KNOWN_RPC_ERROR_CODE</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">error_code</span><span class="p">,</span> <span class="n">error_code</span><span class="p">)))</span>
|
||||
<span class="k">return</span> <span class="n">request_type</span></div>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<div id="searchbox" style="display: none" role="search">
|
||||
<h3>Quick search</h3>
|
||||
<form class="search" action="../../../search.html" method="get">
|
||||
<div><input type="text" name="q" /></div>
|
||||
<div><input type="submit" value="Go" /></div>
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
</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.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.5.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+287
@@ -0,0 +1,287 @@
|
||||
<!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="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.rpc.epmapper — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
SOURCELINK_SUFFIX: '.txt'
|
||||
};
|
||||
</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 role="document">
|
||||
<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.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for windows.rpc.epmapper</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span> <span class="nn">struct</span>
|
||||
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">namedtuple</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">windows</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="k">import</span> <span class="n">ndr</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.dbgprint</span> <span class="k">import</span> <span class="n">dbgprint</span>
|
||||
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">NdrTower</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrStructure</span><span class="p">):</span>
|
||||
<span class="n">MEMBERS</span> <span class="o">=</span> <span class="p">[</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrLong</span><span class="p">,</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrByteConformantArray</span><span class="p">]</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">post_unpack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">tower</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="nb">bytearray</span><span class="p">(</span><span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"<I"</span><span class="p">,</span> <span class="n">size</span><span class="p">))</span> <span class="o">+</span> <span class="nb">bytearray</span><span class="p">(</span><span class="n">tower</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">NdrContext</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrStructure</span><span class="p">):</span>
|
||||
<span class="n">MEMBERS</span> <span class="o">=</span> <span class="p">[</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrLong</span><span class="p">,</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrLong</span><span class="p">,</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrLong</span><span class="p">,</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrLong</span><span class="p">,</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrLong</span><span class="p">]</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">NDRIID</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrStructure</span><span class="p">):</span>
|
||||
<span class="n">MEMBERS</span> <span class="o">=</span> <span class="p">[</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrByte</span><span class="p">]</span> <span class="o">*</span> <span class="mi">16</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">EptMapAuthParameters</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrParameters</span><span class="p">):</span>
|
||||
<span class="n">MEMBERS</span> <span class="o">=</span> <span class="p">[</span><span class="n">NDRIID</span><span class="p">,</span>
|
||||
<span class="n">NdrTower</span><span class="p">,</span>
|
||||
<span class="n">ndr</span><span class="o">.</span><span class="n">NdrUniquePTR</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrSID</span><span class="p">),</span>
|
||||
<span class="n">NdrContext</span><span class="p">,</span>
|
||||
<span class="n">ndr</span><span class="o">.</span><span class="n">NdrLong</span><span class="p">]</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">Towers</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrConformantVaryingArrays</span><span class="p">):</span>
|
||||
<span class="n">MEMBER_TYPE</span> <span class="o">=</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrUniquePTR</span><span class="p">(</span><span class="n">NdrTower</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">EptMapAuthResults</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrParameters</span><span class="p">):</span>
|
||||
<span class="n">MEMBERS</span> <span class="o">=</span> <span class="p">[</span><span class="n">NdrContext</span><span class="p">,</span>
|
||||
<span class="n">ndr</span><span class="o">.</span><span class="n">NdrLong</span><span class="p">,</span>
|
||||
<span class="n">Towers</span><span class="p">]</span>
|
||||
|
||||
<span class="n">UnpackTower</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s2">"UnpackTower"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"protseq"</span><span class="p">,</span> <span class="s2">"endpoint"</span><span class="p">,</span> <span class="s2">"address"</span><span class="p">,</span> <span class="s2">"object"</span><span class="p">,</span> <span class="s2">"syntax"</span><span class="p">])</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">parse_floor</span><span class="p">(</span><span class="n">stream</span><span class="p">):</span>
|
||||
<span class="n">lhs_size</span> <span class="o">=</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">"<H"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">lhs</span> <span class="o">=</span> <span class="n">stream</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">lhs_size</span><span class="p">)</span>
|
||||
<span class="n">rhs_size</span> <span class="o">=</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">"<H"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">rhs</span> <span class="o">=</span> <span class="n">stream</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">rhs_size</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">rhs</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">craft_floor</span><span class="p">(</span><span class="n">lhs</span><span class="p">,</span> <span class="n">rhs</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"<H"</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">lhs</span><span class="p">))</span> <span class="o">+</span> <span class="n">lhs</span> <span class="o">+</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"<H"</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">rhs</span><span class="p">))</span> <span class="o">+</span> <span class="n">rhs</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">explode_alpc_tower</span><span class="p">(</span><span class="n">tower</span><span class="p">):</span>
|
||||
<span class="n">stream</span> <span class="o">=</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrStream</span><span class="p">(</span><span class="nb">bytearray</span><span class="p">(</span><span class="n">tower</span><span class="p">))</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">"<I"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">size</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">data</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Invalid tower size: indicate </span><span class="si">{0}</span><span class="s2">, tower size </span><span class="si">{1}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">size</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">data</span><span class="p">)))</span>
|
||||
<span class="n">floor_count</span> <span class="o">=</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">"<H"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">floor_count</span> <span class="o">!=</span> <span class="mi">4</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"ALPC Tower are expected to have 4 floors (</span><span class="si">{0}</span><span class="s2"> instead)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">floor_count</span><span class="p">))</span>
|
||||
|
||||
<span class="c1"># Floor 0</span>
|
||||
<span class="n">lhs</span><span class="p">,</span> <span class="n">rhs</span> <span class="o">=</span> <span class="n">parse_floor</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">lhs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="mh">0xd</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Floor 0: IID expected"</span><span class="p">)</span>
|
||||
<span class="n">iid</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IID</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">lhs</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="mi">17</span><span class="p">])</span>
|
||||
<span class="nb">object</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">RPC_IF_ID</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">lhs</span><span class="p">[</span><span class="mi">17</span><span class="p">],</span> <span class="n">lhs</span><span class="p">[</span><span class="mi">18</span><span class="p">])</span>
|
||||
|
||||
<span class="c1"># Floor 1</span>
|
||||
<span class="n">lhs</span><span class="p">,</span> <span class="n">rhs</span> <span class="o">=</span> <span class="n">parse_floor</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">lhs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="mh">0xd</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Floor 0: IID expected"</span><span class="p">)</span>
|
||||
<span class="n">iid</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IID</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">lhs</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="mi">17</span><span class="p">])</span>
|
||||
<span class="n">syntax</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">RPC_IF_ID</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">lhs</span><span class="p">[</span><span class="mi">17</span><span class="p">],</span> <span class="n">lhs</span><span class="p">[</span><span class="mi">18</span><span class="p">])</span>
|
||||
|
||||
<span class="c1"># Floor 2</span>
|
||||
<span class="n">lhs</span><span class="p">,</span> <span class="n">rhs</span> <span class="o">=</span> <span class="n">parse_floor</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">lhs</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span> <span class="ow">or</span> <span class="n">lhs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="mh">0x0c</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Alpc Tower expects 0xc as Floor2 LHS (got </span><span class="si">{0:#x}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">lhs</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
|
||||
|
||||
<span class="n">lhs</span><span class="p">,</span> <span class="n">rhs</span> <span class="o">=</span> <span class="n">parse_floor</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">rhs</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"ALPC Port name doest not end by </span><span class="se">\\</span><span class="s2">x00"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">UnpackTower</span><span class="p">(</span><span class="s2">"ncalrpc"</span><span class="p">,</span> <span class="n">rhs</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="kc">None</span><span class="p">,</span> <span class="nb">object</span><span class="p">,</span> <span class="n">syntax</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># http://pubs.opengroup.org/onlinepubs/9629399/apdxi.htm#tagcjh_28</span>
|
||||
<span class="c1"># Octet 0 contains the hexadecimal value 0d. This is a reserved protocol identifier prefix that indicates that the protocol ID is UUID derived</span>
|
||||
<span class="n">TOWER_PROTOCOL_IS_UUID</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\x0d</span><span class="s2">"</span>
|
||||
<span class="n">TOWER_EMPTY_RHS</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\x00\x00</span><span class="s2">"</span>
|
||||
<span class="n">TOWER_PROTOCOL_ID_ALPC</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\x0c</span><span class="s2">"</span> <span class="c1"># From RE</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">construct_alpc_tower</span><span class="p">(</span><span class="nb">object</span><span class="p">,</span> <span class="n">syntax</span><span class="p">,</span> <span class="n">protseq</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">address</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">address</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Construct ALPC Tower with address != None"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">protseq</span> <span class="o">!=</span> <span class="s2">"ncalrpc"</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Construct ALPC Tower with protseq != 'ncalrpc'"</span><span class="p">)</span>
|
||||
<span class="c1"># Floor 0</span>
|
||||
<span class="n">floor_0_lsh</span> <span class="o">=</span> <span class="n">TOWER_PROTOCOL_IS_UUID</span> <span class="o">+</span> <span class="nb">bytearray</span><span class="p">(</span><span class="nb">object</span><span class="o">.</span><span class="n">Uuid</span><span class="p">)</span> <span class="o">+</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"<BB"</span><span class="p">,</span> <span class="nb">object</span><span class="o">.</span><span class="n">VersMajor</span><span class="p">,</span> <span class="nb">object</span><span class="o">.</span><span class="n">VersMinor</span><span class="p">)</span>
|
||||
<span class="n">floor_0_rsh</span> <span class="o">=</span> <span class="n">TOWER_EMPTY_RHS</span>
|
||||
<span class="n">floor_0</span> <span class="o">=</span> <span class="n">craft_floor</span><span class="p">(</span><span class="n">floor_0_lsh</span><span class="p">,</span> <span class="n">floor_0_rsh</span><span class="p">)</span>
|
||||
<span class="c1"># Floor 1</span>
|
||||
<span class="n">floor_1_lsh</span> <span class="o">=</span> <span class="n">TOWER_PROTOCOL_IS_UUID</span> <span class="o">+</span> <span class="nb">bytearray</span><span class="p">(</span><span class="n">syntax</span><span class="o">.</span><span class="n">Uuid</span><span class="p">)</span> <span class="o">+</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"<BB"</span><span class="p">,</span> <span class="n">syntax</span><span class="o">.</span><span class="n">VersMajor</span><span class="p">,</span> <span class="n">syntax</span><span class="o">.</span><span class="n">VersMinor</span><span class="p">)</span>
|
||||
<span class="n">floor_1_rsh</span> <span class="o">=</span> <span class="n">TOWER_EMPTY_RHS</span>
|
||||
<span class="n">floor_1</span> <span class="o">=</span> <span class="n">craft_floor</span><span class="p">(</span><span class="n">floor_1_lsh</span><span class="p">,</span> <span class="n">floor_1_rsh</span><span class="p">)</span>
|
||||
<span class="c1"># Floor 2</span>
|
||||
<span class="n">floor_2_lsh</span> <span class="o">=</span> <span class="n">TOWER_PROTOCOL_ID_ALPC</span>
|
||||
<span class="n">floor_2_rsh</span> <span class="o">=</span> <span class="n">TOWER_EMPTY_RHS</span>
|
||||
<span class="n">floor_2</span> <span class="o">=</span> <span class="n">craft_floor</span><span class="p">(</span><span class="n">floor_2_lsh</span><span class="p">,</span> <span class="n">floor_2_rsh</span><span class="p">)</span>
|
||||
<span class="c1"># Floor 3</span>
|
||||
<span class="k">if</span> <span class="n">endpoint</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">floor_3_lsh</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\xff</span><span class="s2">"</span>
|
||||
<span class="n">floor_3_rsh</span> <span class="o">=</span> <span class="n">TOWER_EMPTY_RHS</span>
|
||||
<span class="n">floor_3</span> <span class="o">=</span> <span class="n">craft_floor</span><span class="p">(</span><span class="n">floor_3_lsh</span><span class="p">,</span> <span class="n">floor_3_rsh</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">floor_3_lsh</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\x10</span><span class="s2">"</span>
|
||||
<span class="n">floor_3_rsh</span> <span class="o">=</span> <span class="n">endpoint</span>
|
||||
<span class="n">floor_3</span> <span class="o">=</span> <span class="n">craft_floor</span><span class="p">(</span><span class="n">floor_3_lsh</span><span class="p">,</span> <span class="n">floor_3_rsh</span><span class="p">)</span>
|
||||
<span class="n">towerarray</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"<H"</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span> <span class="o">+</span> <span class="n">floor_0</span> <span class="o">+</span> <span class="n">floor_1</span> <span class="o">+</span> <span class="n">floor_2</span> <span class="o">+</span> <span class="n">floor_3</span>
|
||||
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">towerarray</span><span class="p">),</span> <span class="nb">bytearray</span><span class="p">(</span><span class="n">towerarray</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="find_alpc_endpoints"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.epmapper.find_alpc_endpoints">[docs]</a><span class="k">def</span> <span class="nf">find_alpc_endpoints</span><span class="p">(</span><span class="n">targetiid</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="n">nb_response</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">sid</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">WinLocalSystemSid</span><span class="p">):</span>
|
||||
<span class="sd">"""Ask the EPMapper for ALPC endpoints of ``targetiid:version`` (maximum of ``nb_response``)</span>
|
||||
|
||||
<span class="sd"> :param str targetiid: The IID of the requested interface</span>
|
||||
<span class="sd"> :param (int,int) version: The version requested interface</span>
|
||||
<span class="sd"> :param int nb_response: The maximum number of response</span>
|
||||
<span class="sd"> :param WELL_KNOWN_SID_TYPE sid: The SID used to request the EPMapper</span>
|
||||
|
||||
<span class="sd"> :returns: [:class:`~windows.rpc.epmapper.UnpackTower`] -- A list of :class:`~windows.rpc.epmapper.UnpackTower`</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">targetiid</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||||
<span class="n">targetiid</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IID</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">targetiid</span><span class="p">)</span>
|
||||
<span class="c1"># Connect to epmapper</span>
|
||||
<span class="n">client</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">rpc</span><span class="o">.</span><span class="n">RPCClient</span><span class="p">(</span><span class="sa">r</span><span class="s2">"\RPC Control\epmapper"</span><span class="p">)</span>
|
||||
<span class="n">epmapperiid</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="s2">"e1af8308-5d1f-11c9-91a4-08002b14a0fa"</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span>
|
||||
|
||||
<span class="c1"># Compute request tower</span>
|
||||
<span class="c1">## object</span>
|
||||
<span class="n">rpc_object</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">RPC_IF_ID</span><span class="p">(</span><span class="n">targetiid</span><span class="p">,</span> <span class="o">*</span><span class="n">version</span><span class="p">)</span>
|
||||
<span class="c1">## Syntax</span>
|
||||
<span class="n">syntax_iid</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IID</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="s2">"8a885d04-1ceb-11c9-9fe8-08002b104860"</span><span class="p">)</span>
|
||||
<span class="n">rpc_syntax</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">RPC_IF_ID</span><span class="p">(</span><span class="n">syntax_iid</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
<span class="c1">## Forge tower</span>
|
||||
<span class="n">tower_array_size</span><span class="p">,</span> <span class="n">towerarray</span> <span class="o">=</span> <span class="n">construct_alpc_tower</span><span class="p">(</span><span class="n">rpc_object</span><span class="p">,</span> <span class="n">rpc_syntax</span><span class="p">,</span> <span class="s2">"ncalrpc"</span><span class="p">,</span> <span class="s2">""</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># parameters</span>
|
||||
<span class="n">local_system_psid</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">get_known_sid</span><span class="p">(</span><span class="n">sid</span><span class="p">)</span>
|
||||
<span class="n">context</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># Pack request</span>
|
||||
<span class="n">fullreq</span> <span class="o">=</span> <span class="n">EptMapAuthParameters</span><span class="o">.</span><span class="n">pack</span><span class="p">([</span><span class="nb">bytearray</span><span class="p">(</span><span class="n">targetiid</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="n">tower_array_size</span><span class="p">,</span> <span class="n">towerarray</span><span class="p">),</span>
|
||||
<span class="n">local_system_psid</span><span class="p">,</span>
|
||||
<span class="n">context</span><span class="p">,</span>
|
||||
<span class="n">nb_response</span><span class="p">])</span>
|
||||
<span class="c1"># RPC Call</span>
|
||||
<span class="n">response</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">epmapperiid</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="n">fullreq</span><span class="p">)</span>
|
||||
<span class="c1"># Unpack response</span>
|
||||
<span class="n">stream</span> <span class="o">=</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrStream</span><span class="p">(</span><span class="n">response</span><span class="p">)</span>
|
||||
<span class="n">unpacked</span> <span class="o">=</span> <span class="n">EptMapAuthResults</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
<span class="c1"># Looks like there is a memory leak here (in stream.data) if nb_response > len(unpacked[2])</span>
|
||||
<span class="c1"># Parse towers</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">explode_alpc_tower</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">unpacked</span><span class="p">[</span><span class="mi">2</span><span class="p">]]</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="find_alpc_endpoint_and_connect"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.epmapper.find_alpc_endpoint_and_connect">[docs]</a><span class="k">def</span> <span class="nf">find_alpc_endpoint_and_connect</span><span class="p">(</span><span class="n">targetiid</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="n">sid</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">WinLocalSystemSid</span><span class="p">):</span>
|
||||
<span class="sd">"""Ask the EPMapper for ALPC endpoints of ``targetiid:version`` and connect to one of them.</span>
|
||||
|
||||
<span class="sd"> :param str targetiid: The IID of the requested interface</span>
|
||||
<span class="sd"> :param (int,int) version: The version requested interface</span>
|
||||
<span class="sd"> :param WELL_KNOWN_SID_TYPE sid: The SID used to request the EPMapper</span>
|
||||
|
||||
<span class="sd"> :returns: A connected :class:`~windows.rpc.RPCClient`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Finding ALPC endpoints for <</span><span class="si">{0}</span><span class="s2">>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">targetiid</span><span class="p">),</span> <span class="s2">"RPC"</span><span class="p">)</span>
|
||||
<span class="n">alpctowers</span> <span class="o">=</span> <span class="n">find_alpc_endpoints</span><span class="p">(</span><span class="n">targetiid</span><span class="p">,</span> <span class="n">version</span><span class="p">,</span> <span class="n">nb_response</span><span class="o">=</span><span class="mi">50</span><span class="p">,</span> <span class="n">sid</span><span class="o">=</span><span class="n">sid</span><span class="p">)</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"ALPC endpoints list: <</span><span class="si">{0}</span><span class="s2">>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">alpctowers</span><span class="p">),</span> <span class="s2">"RPC"</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">tower</span> <span class="ow">in</span> <span class="n">alpctowers</span><span class="p">:</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Trying to connect to endpoint <</span><span class="si">{0}</span><span class="s2">>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">tower</span><span class="o">.</span><span class="n">endpoint</span><span class="p">),</span> <span class="s2">"RPC"</span><span class="p">)</span>
|
||||
<span class="n">alpc_port</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"\RPC Control\</span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">tower</span><span class="o">.</span><span class="n">endpoint</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">client</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">rpc</span><span class="o">.</span><span class="n">RPCClient</span><span class="p">(</span><span class="n">alpc_port</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Could not connect to endpoint <</span><span class="si">{0}</span><span class="s2">>: </span><span class="si">{1}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">tower</span><span class="o">.</span><span class="n">endpoint</span><span class="p">,</span> <span class="n">e</span><span class="p">),</span> <span class="s2">"RPC"</span><span class="p">)</span>
|
||||
<span class="k">continue</span>
|
||||
<span class="k">break</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Could not find a valid endpoint for target <</span><span class="si">{0}</span><span class="s2">> version <</span><span class="si">{1}</span><span class="s2">>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">targetiid</span><span class="p">,</span> <span class="n">version</span><span class="p">))</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s1">'Connected to ALPC port "</span><span class="si">{0}</span><span class="s1">"'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">alpc_port</span><span class="p">),</span> <span class="s2">"RPC"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">client</span></div>
|
||||
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<div id="searchbox" style="display: none" role="search">
|
||||
<h3>Quick search</h3>
|
||||
<form class="search" action="../../../search.html" method="get">
|
||||
<div><input type="text" name="q" /></div>
|
||||
<div><input type="submit" value="Go" /></div>
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
</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.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.5.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+509
@@ -0,0 +1,509 @@
|
||||
<!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="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.rpc.ndr — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
SOURCELINK_SUFFIX: '.txt'
|
||||
};
|
||||
</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 role="document">
|
||||
<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.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for windows.rpc.ndr</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span> <span class="nn">windows</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">struct</span>
|
||||
|
||||
<span class="c1"># http://pubs.opengroup.org/onlinepubs/9629399/chap14.htm#tagcjh_19_03_07</span>
|
||||
|
||||
<span class="c1">## Array</span>
|
||||
<span class="c1"># A conformant array is an array in which the maximum number of elements is not known beforehand and therefore is included in the representation of the array.</span>
|
||||
<span class="c1"># A varying array is an array in which the actual number of elements passed in a given call varies and therefore is included in the representation of the array.</span>
|
||||
|
||||
<span class="c1">## Pointers</span>
|
||||
|
||||
<span class="c1"># NDR defines two classes of pointers that differ both in semantics and in representation</span>
|
||||
<span class="c1"># - reference pointers, which cannot be null and cannot be aliases</span>
|
||||
<span class="c1"># - full pointers, which can be null and can be an aliases</span>
|
||||
<span class="c1"># - unique pointers, which can be null and cannot be aliases, and are transmitted as full pointers.</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">pack_dword</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"<I"</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">dword_pad</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="o">%</span> <span class="mi">4</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">s</span>
|
||||
<span class="k">return</span> <span class="n">s</span> <span class="o">+</span> <span class="p">(</span><span class="s2">"P"</span> <span class="o">*</span> <span class="p">(</span><span class="mi">4</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="o">%</span> <span class="mi">4</span><span class="p">))</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NdrUniquePTR"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrUniquePTR">[docs]</a><span class="k">class</span> <span class="nc">NdrUniquePTR</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""Create a UNIQUE PTR around a given Ndr type"""</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">subcls</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">subcls</span> <span class="o">=</span> <span class="n">subcls</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">pack</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="n">subpack</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">subcls</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">subpack</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">pack_dword</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">pack_dword</span><span class="p">(</span><span class="mh">0x02020202</span><span class="p">)</span> <span class="o">+</span> <span class="n">subpack</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
|
||||
<span class="n">ptr</span> <span class="o">=</span> <span class="n">NdrLong</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">ptr</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subcls</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">pack_in_struct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="nb">id</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">pack_dword</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="kc">None</span>
|
||||
<span class="n">subpack</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">subcls</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">subpack</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">pack_dword</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="kc">None</span>
|
||||
<span class="k">return</span> <span class="n">pack_dword</span><span class="p">(</span><span class="mh">0x01010101</span> <span class="o">*</span> <span class="p">(</span><span class="nb">id</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)),</span> <span class="n">subpack</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">unpack_in_struct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
|
||||
<span class="n">ptr</span> <span class="o">=</span> <span class="n">NdrLong</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">ptr</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="mi">0</span><span class="p">,</span> <span class="kc">None</span>
|
||||
<span class="k">return</span> <span class="n">ptr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">subcls</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">"<I"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subcls</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span></div>
|
||||
|
||||
<span class="k">class</span> <span class="nc">NdrFixedArray</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">subcls</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">subcls</span> <span class="o">=</span> <span class="n">subcls</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="n">size</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">pack</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
|
||||
<span class="k">return</span> <span class="n">dword_pad</span><span class="p">(</span><span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">subcls</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">elt</span><span class="p">)</span> <span class="k">for</span> <span class="n">elt</span> <span class="ow">in</span> <span class="n">data</span><span class="p">]))</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">subcls</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">)]</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NdrSID"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrSID">[docs]</a><span class="k">class</span> <span class="nc">NdrSID</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="nd">@classmethod</span>
|
||||
<div class="viewcode-block" id="NdrSID.pack"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrSID.pack">[docs]</a> <span class="k">def</span> <span class="nf">pack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">psid</span><span class="p">):</span>
|
||||
<span class="sd">"""Pack a PSID</span>
|
||||
|
||||
<span class="sd"> :param PSID psid:</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">subcount</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">GetSidSubAuthorityCount</span><span class="p">(</span><span class="n">psid</span><span class="p">)</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">GetLengthSid</span><span class="p">(</span><span class="n">psid</span><span class="p">)</span>
|
||||
<span class="n">sid_data</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">read_memory</span><span class="p">(</span><span class="n">psid</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">pack_dword</span><span class="p">(</span><span class="n">subcount</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">+</span> <span class="n">dword_pad</span><span class="p">(</span><span class="n">sid_data</span><span class="p">)</span></div>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<div class="viewcode-block" id="NdrSID.unpack"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrSID.unpack">[docs]</a> <span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
|
||||
<span class="sd">"""Unpack a PSID, partial implementation that returns a :class:`str` and not a PSID"""</span>
|
||||
<span class="n">subcount</span> <span class="o">=</span> <span class="n">NdrLong</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">stream</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">8</span> <span class="o">+</span> <span class="p">(</span><span class="n">subcount</span> <span class="o">*</span> <span class="mi">4</span><span class="p">))</span></div></div>
|
||||
|
||||
<span class="k">class</span> <span class="nc">NdrVaryingCString</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">pack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="n">l</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"<2I"</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">l</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">+=</span> <span class="n">data</span>
|
||||
<span class="k">return</span> <span class="n">dword_pad</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="NdrWString"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrWString">[docs]</a><span class="k">class</span> <span class="nc">NdrWString</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">pack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">"utf-16-le"</span><span class="p">)</span>
|
||||
<span class="n">l</span> <span class="o">=</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"<3I"</span><span class="p">,</span> <span class="n">l</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">l</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">+=</span> <span class="n">data</span>
|
||||
<span class="k">return</span> <span class="n">dword_pad</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
|
||||
<span class="n">stream</span><span class="o">.</span><span class="n">align</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
|
||||
<span class="n">size1</span><span class="p">,</span> <span class="n">zero</span><span class="p">,</span> <span class="n">size2</span> <span class="o">=</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">"<3I"</span><span class="p">)</span>
|
||||
<span class="k">assert</span> <span class="n">size1</span> <span class="o">==</span> <span class="n">size2</span>
|
||||
<span class="k">assert</span> <span class="n">zero</span> <span class="o">==</span> <span class="mi">0</span>
|
||||
<span class="n">s</span> <span class="o">=</span> <span class="n">stream</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">size1</span> <span class="o">*</span> <span class="mi">2</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">s</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"utf-16-le"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="NdrCString"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrCString">[docs]</a><span class="k">class</span> <span class="nc">NdrCString</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">pack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="n">l</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"<3I"</span><span class="p">,</span> <span class="n">l</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">l</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">+=</span> <span class="n">data</span>
|
||||
<span class="k">return</span> <span class="n">dword_pad</span><span class="p">(</span><span class="n">result</span><span class="p">)</span></div>
|
||||
|
||||
<span class="c1"># @classmethod</span>
|
||||
<span class="c1"># def unpack(self, stream):</span>
|
||||
<span class="c1"># maxcount, offset, count = stream.partial_unpack("<3I")</span>
|
||||
<span class="c1"># return maxcount, offset, count</span>
|
||||
|
||||
<span class="n">NdrUniqueCString</span> <span class="o">=</span> <span class="n">NdrUniquePTR</span><span class="p">(</span><span class="n">NdrCString</span><span class="p">)</span>
|
||||
<span class="n">NdrUniqueWString</span> <span class="o">=</span> <span class="n">NdrUniquePTR</span><span class="p">(</span><span class="n">NdrWString</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="NdrLong"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrLong">[docs]</a><span class="k">class</span> <span class="nc">NdrLong</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">pack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"<I"</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
|
||||
<span class="n">stream</span><span class="o">.</span><span class="n">align</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">"<I"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
|
||||
|
||||
<div class="viewcode-block" id="NdrHyper"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrHyper">[docs]</a><span class="k">class</span> <span class="nc">NdrHyper</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">pack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"<Q"</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
|
||||
<span class="n">stream</span><span class="o">.</span><span class="n">align</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">"<Q"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
|
||||
|
||||
<div class="viewcode-block" id="NdrShort"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrShort">[docs]</a><span class="k">class</span> <span class="nc">NdrShort</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">pack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"<H"</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">"<H"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NdrByte"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrByte">[docs]</a><span class="k">class</span> <span class="nc">NdrByte</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">pack</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"<B"</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">"<B"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">NdrContextHandle</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">pack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IID</span><span class="p">):</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IID</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"<I"</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">bytearray</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
|
||||
<span class="n">attributes</span><span class="p">,</span> <span class="n">rawguid</span> <span class="o">=</span> <span class="n">stream</span><span class="o">.</span><span class="n">partial_unpack</span><span class="p">(</span><span class="s2">"<I16s"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IID</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">rawguid</span><span class="p">)</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NdrStructure"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrStructure">[docs]</a><span class="k">class</span> <span class="nc">NdrStructure</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""a NDR structure that tries to respect the rules of pointer packing, this class should be subclassed with</span>
|
||||
<span class="sd"> an attribute ``MEMBERS`` describing the members of the class</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="nd">@classmethod</span>
|
||||
<div class="viewcode-block" id="NdrStructure.pack"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrStructure.pack">[docs]</a> <span class="k">def</span> <span class="nf">pack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="sd">"""Pack data into the struct, ``data`` size must equals the number of members in the structure"""</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">MEMBERS</span><span class="p">)):</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Size mistach:"</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * data size = </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * members size = </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">MEMBERS</span><span class="p">)))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * data </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * members = </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">MEMBERS</span><span class="p">))</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"SUCE"</span><span class="p">)</span>
|
||||
<span class="n">conformant_size</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">pointed</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">member</span><span class="p">,</span> <span class="n">memberdata</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">MEMBERS</span><span class="p">,</span> <span class="n">data</span><span class="p">)):</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">member</span><span class="p">,</span> <span class="s2">"pack_in_struct"</span><span class="p">):</span>
|
||||
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">member</span><span class="o">.</span><span class="n">pack_in_struct</span><span class="p">(</span><span class="n">memberdata</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
|
||||
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">y</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">pointed</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">member</span><span class="p">,</span> <span class="s2">"pack_conformant"</span><span class="p">):</span>
|
||||
<span class="n">size</span><span class="p">,</span> <span class="n">data</span> <span class="o">=</span> <span class="n">member</span><span class="o">.</span><span class="n">pack_conformant</span><span class="p">(</span><span class="n">memberdata</span><span class="p">)</span>
|
||||
<span class="n">conformant_size</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
|
||||
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">packed_member</span> <span class="o">=</span> <span class="n">member</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">memberdata</span><span class="p">)</span>
|
||||
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">packed_member</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">dword_pad</span><span class="p">(</span><span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">conformant_size</span><span class="p">))</span> <span class="o">+</span> <span class="n">dword_pad</span><span class="p">(</span><span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">res</span><span class="p">))</span> <span class="o">+</span> <span class="n">dword_pad</span><span class="p">(</span><span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">pointed</span><span class="p">))</span></div>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<div class="viewcode-block" id="NdrStructure.unpack"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrStructure.unpack">[docs]</a> <span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
|
||||
<span class="sd">"""Unpack the structure from the stream"""</span>
|
||||
<span class="n">conformant_members</span> <span class="o">=</span> <span class="p">[</span><span class="nb">hasattr</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="s2">"pack_conformant"</span><span class="p">)</span> <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="n">MEMBERS</span><span class="p">]</span>
|
||||
<span class="n">is_conformant</span> <span class="o">=</span> <span class="nb">any</span><span class="p">(</span><span class="n">conformant_members</span><span class="p">)</span>
|
||||
<span class="k">assert</span><span class="p">(</span><span class="n">conformant_members</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span> <span class="o"><=</span> <span class="mi">1</span><span class="p">),</span> <span class="s2">"Unpack conformant struct with more that one conformant MEMBER not implem"</span>
|
||||
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">if</span> <span class="n">is_conformant</span><span class="p">:</span>
|
||||
<span class="n">conformant_size</span> <span class="o">=</span> <span class="n">NdrLong</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
<span class="n">post_subcls</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">member</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">MEMBERS</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">conformant_members</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span>
|
||||
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">member</span><span class="o">.</span><span class="n">unpack_conformant</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="n">conformant_size</span><span class="p">))</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">member</span><span class="p">,</span> <span class="s2">"unpack_in_struct"</span><span class="p">):</span>
|
||||
<span class="n">ptr</span><span class="p">,</span> <span class="n">subcls</span> <span class="o">=</span> <span class="n">member</span><span class="o">.</span><span class="n">unpack_in_struct</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">ptr</span><span class="p">:</span>
|
||||
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ptr</span><span class="p">)</span>
|
||||
<span class="n">post_subcls</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">i</span><span class="p">,</span> <span class="n">subcls</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">post_subcls</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">member</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</span><span class="p">))</span>
|
||||
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">post_subcls</span><span class="p">:</span>
|
||||
<span class="n">data</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">post_unpack</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></div>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">post_unpack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">data</span></div>
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NdrParameters"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrParameters">[docs]</a><span class="k">class</span> <span class="nc">NdrParameters</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""a class to pack NDR parameters together to performs RPC call, this class should be subclassed with</span>
|
||||
<span class="sd"> an attribute ``MEMBERS`` describing the members of the class</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">pack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">MEMBERS</span><span class="p">)):</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Size mistach:"</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * data size = </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * members size = </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">MEMBERS</span><span class="p">)))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * data </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * members = </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">MEMBERS</span><span class="p">))</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"SUCE"</span><span class="p">)</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="p">(</span><span class="n">member</span><span class="p">,</span> <span class="n">memberdata</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">MEMBERS</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="n">packed_member</span> <span class="o">=</span> <span class="n">member</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">memberdata</span><span class="p">)</span>
|
||||
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">packed_member</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dword_pad</span><span class="p">(</span><span class="n">elt</span><span class="p">)</span> <span class="k">for</span> <span class="n">elt</span> <span class="ow">in</span> <span class="n">res</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">member</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="n">MEMBERS</span><span class="p">:</span>
|
||||
<span class="n">unpacked_member</span> <span class="o">=</span> <span class="n">member</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">unpacked_member</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">res</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NdrConformantArray"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrConformantArray">[docs]</a><span class="k">class</span> <span class="nc">NdrConformantArray</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="n">MEMBER_TYPE</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">pack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="n">ndrsize</span> <span class="o">=</span> <span class="n">NdrLong</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">dword_pad</span><span class="p">(</span><span class="n">ndrsize</span> <span class="o">+</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="bp">cls</span><span class="o">.</span><span class="n">MEMBER_TYPE</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">memberdata</span><span class="p">)</span> <span class="k">for</span> <span class="n">memberdata</span> <span class="ow">in</span> <span class="n">data</span><span class="p">]))</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">pack_conformant</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="n">ndrsize</span> <span class="o">=</span> <span class="n">NdrLong</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
|
||||
<span class="n">ndrdata</span> <span class="o">=</span> <span class="n">dword_pad</span><span class="p">(</span><span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="bp">cls</span><span class="o">.</span><span class="n">MEMBER_TYPE</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">memberdata</span><span class="p">)</span> <span class="k">for</span> <span class="n">memberdata</span> <span class="ow">in</span> <span class="n">data</span><span class="p">]))</span>
|
||||
<span class="k">return</span> <span class="n">ndrsize</span><span class="p">,</span> <span class="n">ndrdata</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">unpack_conformant</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">stream</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="p">[</span><span class="bp">cls</span><span class="o">.</span><span class="n">MEMBER_TYPE</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">size</span><span class="p">)]</span>
|
||||
<span class="n">stream</span><span class="o">.</span><span class="n">align</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">res</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NdrConformantVaryingArrays"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrConformantVaryingArrays">[docs]</a><span class="k">class</span> <span class="nc">NdrConformantVaryingArrays</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="n">MEMBER_TYPE</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">pack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="n">ndrsize</span> <span class="o">=</span> <span class="n">NdrLong</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
|
||||
<span class="n">offset</span> <span class="o">=</span> <span class="n">NdrLong</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">dword_pad</span><span class="p">(</span><span class="n">ndrsize</span> <span class="o">+</span> <span class="n">offset</span> <span class="o">+</span> <span class="n">ndrsize</span> <span class="o">+</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="bp">cls</span><span class="o">.</span><span class="n">MEMBER_TYPE</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">memberdata</span><span class="p">)</span> <span class="k">for</span> <span class="n">memberdata</span> <span class="ow">in</span> <span class="n">data</span><span class="p">]))</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
|
||||
<span class="n">maxcount</span> <span class="o">=</span> <span class="n">NdrLong</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
<span class="n">offset</span> <span class="o">=</span> <span class="n">NdrLong</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
<span class="n">count</span> <span class="o">=</span> <span class="n">NdrLong</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
<span class="k">assert</span><span class="p">(</span><span class="n">offset</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span>
|
||||
<span class="c1"># assert(maxcount == count)</span>
|
||||
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">post_subcls</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">count</span><span class="p">):</span>
|
||||
<span class="n">member</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">MEMBER_TYPE</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">member</span><span class="p">,</span> <span class="s2">"unpack_in_struct"</span><span class="p">):</span>
|
||||
<span class="n">ptr</span><span class="p">,</span> <span class="n">subcls</span> <span class="o">=</span> <span class="n">member</span><span class="o">.</span><span class="n">unpack_in_struct</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">ptr</span><span class="p">:</span>
|
||||
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ptr</span><span class="p">)</span>
|
||||
<span class="n">post_subcls</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">i</span><span class="p">,</span> <span class="n">subcls</span><span class="p">))</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">member</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="c1"># Unpack pointers</span>
|
||||
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">post_subcls</span><span class="p">:</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
<span class="n">result</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">data</span>
|
||||
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_post_unpack</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">_post_unpack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">result</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">result</span></div>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">NdrWcharConformantVaryingArrays</span><span class="p">(</span><span class="n">NdrConformantVaryingArrays</span><span class="p">):</span>
|
||||
<span class="n">MEMBER_TYPE</span> <span class="o">=</span> <span class="n">NdrShort</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">_post_unpack</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">result</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="sa">u</span><span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">unichr</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">result</span><span class="p">)</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NdrLongConformantArray"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrLongConformantArray">[docs]</a><span class="k">class</span> <span class="nc">NdrLongConformantArray</span><span class="p">(</span><span class="n">NdrConformantArray</span><span class="p">):</span>
|
||||
<span class="n">MEMBER_TYPE</span> <span class="o">=</span> <span class="n">NdrLong</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NdrByteConformantArray"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrByteConformantArray">[docs]</a><span class="k">class</span> <span class="nc">NdrByteConformantArray</span><span class="p">(</span><span class="n">NdrConformantArray</span><span class="p">):</span>
|
||||
<span class="n">MEMBER_TYPE</span> <span class="o">=</span> <span class="n">NdrByte</span></div>
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NdrStream"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrStream">[docs]</a><span class="k">class</span> <span class="nc">NdrStream</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""A stream of bytes used for NDR unpacking"""</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">fulldata</span> <span class="o">=</span> <span class="n">data</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">data</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">partial_unpack</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">format</span><span class="p">):</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">calcsize</span><span class="p">(</span><span class="nb">format</span><span class="p">)</span>
|
||||
<span class="n">toparse</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[:</span><span class="n">size</span><span class="p">]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="n">size</span><span class="p">:]</span>
|
||||
<span class="k">return</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="nb">format</span><span class="p">,</span> <span class="n">toparse</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">read_aligned_dword</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
|
||||
<span class="n">aligned_size</span> <span class="o">=</span> <span class="n">size</span>
|
||||
<span class="k">if</span> <span class="n">size</span> <span class="o">%</span> <span class="mi">4</span><span class="p">:</span>
|
||||
<span class="n">aligned_size</span> <span class="o">=</span> <span class="n">size</span> <span class="o">+</span> <span class="p">(</span><span class="mi">4</span> <span class="o">-</span> <span class="p">(</span><span class="n">size</span> <span class="o">%</span> <span class="mi">4</span><span class="p">))</span>
|
||||
<span class="n">retdata</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[:</span><span class="n">size</span><span class="p">]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="n">aligned_size</span><span class="p">:]</span>
|
||||
<span class="k">return</span> <span class="n">retdata</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[:</span><span class="n">size</span><span class="p">]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="n">size</span><span class="p">:]</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o"><</span> <span class="n">size</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Could not read </span><span class="si">{0}</span><span class="s2"> from stream"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">size</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">data</span>
|
||||
|
||||
<div class="viewcode-block" id="NdrStream.align"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrStream.align">[docs]</a> <span class="k">def</span> <span class="nf">align</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
|
||||
<span class="sd">"""Discard some bytes to align the remaining stream on ``size``"""</span>
|
||||
<span class="n">already_read</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fulldata</span><span class="p">)</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">already_read</span> <span class="o">%</span> <span class="n">size</span><span class="p">:</span>
|
||||
<span class="c1"># Realign</span>
|
||||
<span class="n">size_to_align</span> <span class="o">=</span> <span class="p">(</span><span class="n">size</span> <span class="o">-</span> <span class="p">(</span><span class="n">already_read</span> <span class="o">%</span> <span class="n">size</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="n">size_to_align</span><span class="p">:]</span></div></div>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">make_parameters</span><span class="p">(</span><span class="n">types</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">class</span> <span class="nc">NdrCustomParameters</span><span class="p">(</span><span class="n">NdrParameters</span><span class="p">):</span>
|
||||
<span class="n">MEMBERS</span> <span class="o">=</span> <span class="n">types</span>
|
||||
<span class="k">return</span> <span class="n">NdrCustomParameters</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">make_structure</span><span class="p">(</span><span class="n">types</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">class</span> <span class="nc">NdrCustomStructure</span><span class="p">(</span><span class="n">NdrStructure</span><span class="p">):</span>
|
||||
<span class="n">MEMBERS</span> <span class="o">=</span> <span class="n">types</span>
|
||||
<span class="k">return</span> <span class="n">NdrCustomStructure</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>
|
||||
<form class="search" action="../../../search.html" method="get">
|
||||
<div><input type="text" name="q" /></div>
|
||||
<div><input type="submit" value="Go" /></div>
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
</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.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.5.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+30
-12
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.syswow64 — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.syswow64 — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -92,7 +92,7 @@
|
||||
<div class="viewcode-block" id="execute_64bits_code_from_syswow"><a class="viewcode-back" href="../../internals.html#windows.syswow64.execute_64bits_code_from_syswow">[docs]</a><span class="k">def</span> <span class="nf">execute_64bits_code_from_syswow</span><span class="p">(</span><span class="n">x64shellcode</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">generate_64bits_execution_stub_from_syswow</span><span class="p">(</span><span class="n">x64shellcode</span><span class="p">)()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="generate_syswow64_call"><a class="viewcode-back" href="../../internals.html#windows.syswow64.generate_syswow64_call">[docs]</a><span class="k">def</span> <span class="nf">generate_syswow64_call</span><span class="p">(</span><span class="n">target</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="generate_syswow64_call"><a class="viewcode-back" href="../../internals.html#windows.syswow64.generate_syswow64_call">[docs]</a><span class="k">def</span> <span class="nf">generate_syswow64_call</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">errcheck</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="n">nb_args</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">target</span><span class="o">.</span><span class="n">prototype</span><span class="o">.</span><span class="n">_argtypes_</span><span class="p">)</span>
|
||||
<span class="n">target_addr</span> <span class="o">=</span> <span class="n">get_syswow_ntdll_exports</span><span class="p">()[</span><span class="n">target</span><span class="o">.</span><span class="vm">__name__</span><span class="p">]</span>
|
||||
<span class="n">argument_buffer_len</span> <span class="o">=</span> <span class="p">(</span><span class="n">nb_args</span> <span class="o">*</span> <span class="mi">8</span><span class="p">)</span>
|
||||
@@ -157,15 +157,14 @@
|
||||
<span class="n">code_64b</span> <span class="o">+=</span> <span class="n">x64</span><span class="o">.</span><span class="n">Pop</span><span class="p">(</span><span class="s1">'RCX'</span><span class="p">)</span>
|
||||
<span class="n">code_64b</span> <span class="o">+=</span> <span class="n">x64</span><span class="o">.</span><span class="n">Pop</span><span class="p">(</span><span class="s1">'RBX'</span><span class="p">)</span>
|
||||
<span class="n">code_64b</span> <span class="o">+=</span> <span class="n">x64</span><span class="o">.</span><span class="n">Ret</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">try_generate_stub_target</span><span class="p">(</span><span class="n">code_64b</span><span class="o">.</span><span class="n">get_code</span><span class="p">(),</span> <span class="n">argument_buffer</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span></div>
|
||||
<span class="k">return</span> <span class="n">try_generate_stub_target</span><span class="p">(</span><span class="n">code_64b</span><span class="o">.</span><span class="n">get_code</span><span class="p">(),</span> <span class="n">argument_buffer</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">errcheck</span><span class="o">=</span><span class="n">errcheck</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="try_generate_stub_target"><a class="viewcode-back" href="../../internals.html#windows.syswow64.try_generate_stub_target">[docs]</a><span class="k">def</span> <span class="nf">try_generate_stub_target</span><span class="p">(</span><span class="n">shellcode</span><span class="p">,</span> <span class="n">argument_buffer</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
|
||||
<span class="sd">"""shellcode must NOT end by a ret"""</span>
|
||||
<div class="viewcode-block" id="try_generate_stub_target"><a class="viewcode-back" href="../../internals.html#windows.syswow64.try_generate_stub_target">[docs]</a><span class="k">def</span> <span class="nf">try_generate_stub_target</span><span class="p">(</span><span class="n">shellcode</span><span class="p">,</span> <span class="n">argument_buffer</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">errcheck</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">is_wow_64</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Calling execute_64bits_code_from_syswow from non-syswow process"</span><span class="p">)</span>
|
||||
<span class="n">native_caller</span> <span class="o">=</span> <span class="n">generate_64bits_execution_stub_from_syswow</span><span class="p">(</span><span class="n">shellcode</span><span class="p">)</span>
|
||||
<span class="n">native_caller</span><span class="o">.</span><span class="n">errcheck</span> <span class="o">=</span> <span class="n">target</span><span class="o">.</span><span class="n">errcheck</span>
|
||||
<span class="n">native_caller</span><span class="o">.</span><span class="n">errcheck</span> <span class="o">=</span> <span class="n">errcheck</span> <span class="k">if</span> <span class="n">errcheck</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">target</span><span class="o">.</span><span class="n">errcheck</span>
|
||||
<span class="c1"># Generate the wrapper function that fill the argument_buffer</span>
|
||||
<span class="n">expected_arguments_number</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">target</span><span class="o">.</span><span class="n">prototype</span><span class="o">.</span><span class="n">_argtypes_</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">wrapper</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">):</span>
|
||||
@@ -183,6 +182,8 @@
|
||||
<span class="c1"># Build buffer</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"<"</span> <span class="o">+</span> <span class="s2">"Q"</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">writable_args</span><span class="p">),</span> <span class="o">*</span><span class="n">writable_args</span><span class="p">)</span>
|
||||
<span class="n">ctypes</span><span class="o">.</span><span class="n">memmove</span><span class="p">(</span><span class="n">argument_buffer</span><span class="p">,</span> <span class="n">buffer</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">buffer</span><span class="p">))</span>
|
||||
<span class="c1"># Copy origincal args in function, for errcheck if needed</span>
|
||||
<span class="n">native_caller</span><span class="o">.</span><span class="n">current_original_args</span> <span class="o">=</span> <span class="n">args</span> <span class="c1"># TODO: THIS IS NOT THREAD SAFE</span>
|
||||
<span class="k">return</span> <span class="n">native_caller</span><span class="p">()</span>
|
||||
<span class="n">wrapper</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{0}</span><span class="s2"><syswow64>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">target</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,)</span>
|
||||
<span class="n">wrapper</span><span class="o">.</span><span class="vm">__doc__</span> <span class="o">=</span> <span class="s2">"This is a wrapper to </span><span class="si">{0}</span><span class="s2"> in 64b mode, it accept <</span><span class="si">{1}</span><span class="s2">> args"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">target</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">expected_arguments_number</span><span class="p">)</span>
|
||||
@@ -241,9 +242,10 @@
|
||||
|
||||
<div class="viewcode-block" id="Syswow64ApiProxy"><a class="viewcode-back" href="../../internals.html#windows.syswow64.Syswow64ApiProxy">[docs]</a><span class="k">class</span> <span class="nc">Syswow64ApiProxy</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""Create a python wrapper around a function"""</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">winproxy_function</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">winproxy_function</span><span class="p">,</span> <span class="n">errcheck</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">winproxy_function</span> <span class="o">=</span> <span class="n">winproxy_function</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">raw_call</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">errcheck</span> <span class="o">=</span> <span class="n">errcheck</span>
|
||||
<span class="k">if</span> <span class="n">winproxy_function</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">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">winproxy_function</span><span class="o">.</span><span class="n">params</span><span class="p">]</span>
|
||||
|
||||
@@ -258,7 +260,7 @@
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw_call</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">raw_call</span> <span class="o">=</span> <span class="n">generate_syswow64_call</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">winproxy_function</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">raw_call</span> <span class="o">=</span> <span class="n">generate_syswow64_call</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">winproxy_function</span><span class="p">,</span> <span class="n">errcheck</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">errcheck</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">ExportNotFound</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">winproxy_function</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="s2">"SysWow[ntdll64]"</span><span class="p">)</span>
|
||||
|
||||
@@ -280,6 +282,23 @@
|
||||
<span class="nb">setattr</span><span class="p">(</span><span class="n">python_proxy</span><span class="p">,</span> <span class="s2">"force_resolution"</span><span class="p">,</span> <span class="n">force_resolution</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">python_proxy</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">ntquerysysteminformation_syswow64_error_check</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="n">args</span> <span class="o">=</span> <span class="n">func</span><span class="o">.</span><span class="n">current_original_args</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="ow">not</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</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">"</span><span class="si">{0}</span><span class="s2"> failed with NTStatus </span><span class="si">{1}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">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">@Syswow64ApiProxy</span><span class="p">(</span><span class="n">winproxy</span><span class="o">.</span><span class="n">NtQuerySystemInformation</span><span class="p">,</span> <span class="n">errcheck</span><span class="o">=</span><span class="n">ntquerysysteminformation_syswow64_error_check</span><span class="p">)</span>
|
||||
<span class="c1"># @Syswow64ApiProxy(winproxy.NtQuerySystemInformation)</span>
|
||||
<span class="k">def</span> <span class="nf">NtQuerySystemInformation_32_to_64</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">if</span> <span class="n">SystemInformation</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">SystemInformation</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="k">return</span> <span class="n">NtQuerySystemInformation_32_to_64</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">@Syswow64ApiProxy</span><span class="p">(</span><span class="n">winproxy</span><span class="o">.</span><span class="n">NtCreateThreadEx</span><span class="p">)</span>
|
||||
@@ -330,7 +349,6 @@
|
||||
<span class="k">return</span> <span class="n">NtProtectVirtualMemory_32_to_64</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">@Syswow64ApiProxy</span><span class="p">(</span><span class="n">winproxy</span><span class="o">.</span><span class="n">NtGetContextThread</span><span class="p">)</span>
|
||||
<div class="viewcode-block" id="NtGetContextThread_32_to_64"><a class="viewcode-back" href="../../internals.html#windows.syswow64.NtGetContextThread_32_to_64">[docs]</a><span class="k">def</span> <span class="nf">NtGetContextThread_32_to_64</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">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">lpContext</span><span class="p">)</span> <span class="o">==</span> <span class="n">windows</span><span class="o">.</span><span class="n">winobject</span><span class="o">.</span><span class="n">exception</span><span class="o">.</span><span class="n">ECONTEXT64</span><span class="p">:</span>
|
||||
@@ -374,7 +392,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+57
-8
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.utils.winutils — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.utils.winutils — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -54,6 +54,7 @@
|
||||
<span class="kn">import</span> <span class="nn">sys</span>
|
||||
<span class="kn">import</span> <span class="nn">code</span>
|
||||
<span class="kn">import</span> <span class="nn">datetime</span>
|
||||
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">namedtuple</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">windows</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.dbgprint</span> <span class="k">import</span> <span class="n">dbgprint</span>
|
||||
@@ -63,6 +64,7 @@
|
||||
|
||||
|
||||
<span class="c1"># Function resolution !</span>
|
||||
<span class="c1"># should be in winproxy ?</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">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>
|
||||
@@ -142,6 +144,20 @@
|
||||
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winobject</span><span class="o">.</span><span class="n">process</span><span class="o">.</span><span class="n">WinProcess</span><span class="p">(</span><span class="n">pid</span><span class="o">=</span><span class="n">proc_info</span><span class="o">.</span><span class="n">dwProcessId</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="n">proc_info</span><span class="o">.</span><span class="n">hProcess</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">lookup_privilege_value</span><span class="p">(</span><span class="n">privilege_name</span><span class="p">):</span>
|
||||
<span class="n">luid</span> <span class="o">=</span> <span class="n">LUID</span><span class="p">()</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">LookupPrivilegeValueA</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">privilege_name</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">luid</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">luid</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">lookup_privilege_name</span><span class="p">(</span><span class="n">privilege_value</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">privilege_value</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">):</span>
|
||||
<span class="n">luid</span> <span class="o">=</span> <span class="n">LUID</span><span class="p">(</span><span class="n">privilege_value</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">privilege_value</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
<span class="n">privilege_value</span> <span class="o">=</span> <span class="n">luid</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">(</span><span class="mh">0x100</span><span class="p">)</span>
|
||||
<span class="n">buff</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_buffer</span><span class="p">(</span><span class="n">size</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">LookupPrivilegeNameA</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">privilege_value</span><span class="p">,</span> <span class="n">buff</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">buff</span><span class="p">[:</span><span class="n">size</span><span class="o">.</span><span class="n">value</span><span class="p">]</span>
|
||||
|
||||
<div class="viewcode-block" id="enable_privilege"><a class="viewcode-back" href="../../../utils.html#windows.utils.enable_privilege">[docs]</a><span class="k">def</span> <span class="nf">enable_privilege</span><span class="p">(</span><span class="n">lpszPrivilege</span><span class="p">,</span> <span class="n">bEnablePrivilege</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Enable or disable a privilege::</span>
|
||||
@@ -219,15 +235,17 @@
|
||||
<span class="k">return</span> <span class="n">raw_input</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="pop_shell"><a class="viewcode-back" href="../../../utils.html#windows.utils.pop_shell">[docs]</a><span class="k">def</span> <span class="nf">pop_shell</span><span class="p">():</span>
|
||||
<div class="viewcode-block" id="pop_shell"><a class="viewcode-back" href="../../../utils.html#windows.utils.pop_shell">[docs]</a><span class="k">def</span> <span class="nf">pop_shell</span><span class="p">(</span><span class="n">locs</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Pop a console with an InterativeConsole"""</span>
|
||||
<span class="k">if</span> <span class="n">locs</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">locs</span> <span class="o">=</span> <span class="nb">globals</span><span class="p">()</span>
|
||||
<span class="n">create_console</span><span class="p">()</span>
|
||||
<span class="n">FixedInteractiveConsole</span><span class="p">(</span><span class="nb">locals</span><span class="p">())</span><span class="o">.</span><span class="n">interact</span><span class="p">()</span></div>
|
||||
|
||||
<span class="n">FixedInteractiveConsole</span><span class="p">(</span><span class="n">locs</span><span class="p">)</span><span class="o">.</span><span class="n">interact</span><span class="p">()</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_kernel_modules</span><span class="p">():</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">is_wow_64</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">get_kernel_modules_syswow64</span><span class="p">()</span>
|
||||
<span class="n">cbsize</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">()</span>
|
||||
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtQuerySystemInformation</span><span class="p">(</span><span class="n">SystemModuleInformation</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">cbsize</span><span class="p">))</span>
|
||||
<span class="n">raw_buffer</span> <span class="o">=</span> <span class="p">(</span><span class="n">cbsize</span><span class="o">.</span><span class="n">value</span> <span class="o">*</span> <span class="n">c_char</span><span class="p">)()</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="n">SYSTEM_MODULE_INFORMATION</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">raw_buffer</span><span class="p">))</span>
|
||||
@@ -235,6 +253,15 @@
|
||||
<span class="n">modules</span> <span class="o">=</span> <span class="p">(</span><span class="n">SYSTEM_MODULE</span> <span class="o">*</span> <span class="n">buffer</span><span class="o">.</span><span class="n">ModulesCount</span><span class="p">)</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="n">addressof</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span> <span class="o">+</span> <span class="n">SYSTEM_MODULE_INFORMATION</span><span class="o">.</span><span class="n">Modules</span><span class="o">.</span><span class="n">offset</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">modules</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_kernel_modules_syswow64</span><span class="p">():</span>
|
||||
<span class="n">cbsize</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">NtQuerySystemInformation_32_to_64</span><span class="p">(</span><span class="n">SystemModuleInformation</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">cbsize</span><span class="p">))</span>
|
||||
<span class="n">raw_buffer</span> <span class="o">=</span> <span class="p">(</span><span class="n">cbsize</span><span class="o">.</span><span class="n">value</span> <span class="o">*</span> <span class="n">c_char</span><span class="p">)()</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="n">SYSTEM_MODULE_INFORMATION64</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">raw_buffer</span><span class="p">))</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">NtQuerySystemInformation_32_to_64</span><span class="p">(</span><span class="n">SystemModuleInformation</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">raw_buffer</span><span class="p">),</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">raw_buffer</span><span class="p">),</span> <span class="n">byref</span><span class="p">(</span><span class="n">cbsize</span><span class="p">))</span>
|
||||
<span class="n">modules</span> <span class="o">=</span> <span class="p">(</span><span class="n">SYSTEM_MODULE64</span> <span class="o">*</span> <span class="n">buffer</span><span class="o">.</span><span class="n">ModulesCount</span><span class="p">)</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="n">addressof</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span> <span class="o">+</span> <span class="n">SYSTEM_MODULE_INFORMATION64</span><span class="o">.</span><span class="n">Modules</span><span class="o">.</span><span class="n">offset</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">modules</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="c1"># String stuff</span>
|
||||
<span class="k">def</span> <span class="nf">ntstatus</span><span class="p">(</span><span class="n">code</span><span class="p">):</span>
|
||||
@@ -281,6 +308,28 @@
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">RtlDecompressBuffer</span><span class="p">(</span><span class="n">comptype</span><span class="p">,</span> <span class="n">uncompressed</span><span class="p">,</span> <span class="n">uncompress_size</span><span class="p">,</span> <span class="n">buffer</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">buffer</span><span class="p">),</span> <span class="n">result_size</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">uncompressed</span><span class="p">[:</span><span class="n">result_size</span><span class="o">.</span><span class="n">value</span><span class="p">]</span>
|
||||
|
||||
|
||||
<span class="c1"># sid.py + real SID type ?</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_known_sid</span><span class="p">(</span><span class="n">sid_type</span><span class="p">):</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CreateWellKnownSid</span><span class="p">(</span><span class="n">sid_type</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">WindowsError</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_buffer</span><span class="p">(</span><span class="n">size</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CreateWellKnownSid</span><span class="p">(</span><span class="n">sid_type</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">buffer</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">buffer</span><span class="p">,</span> <span class="n">PSID</span><span class="p">)</span>
|
||||
|
||||
<span class="n">UnloadEventTraceInfo</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s2">"UnloadEventTraceInfo"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"size"</span><span class="p">,</span> <span class="s2">"nb_elt"</span><span class="p">,</span> <span class="s2">"array_ptr"</span><span class="p">])</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_unload_event_trace</span><span class="p">():</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">PULONG</span><span class="p">()</span>
|
||||
<span class="n">y</span> <span class="o">=</span> <span class="n">PULONG</span><span class="p">()</span>
|
||||
<span class="n">z</span> <span class="o">=</span> <span class="n">PVOID</span><span class="p">()</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">RtlGetUnloadEventTraceEx</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">UnloadEventTraceInfo</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">y</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">z</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="VirtualProtected"><a class="viewcode-back" href="../../../utils.html#windows.utils.VirtualProtected">[docs]</a><span class="k">class</span> <span class="nc">VirtualProtected</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> A context manager usable like `VirtualProtect` that will restore the old protection at exit ::</span>
|
||||
@@ -356,7 +405,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.winobject.exception — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.winobject.exception — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -453,7 +453,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+33
-9
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.winobject.handle — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.winobject.handle — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -48,7 +48,8 @@
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for windows.winobject.handle</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span> <span class="nn">ctypes</span>
|
||||
<span></span><span class="kn">import</span> <span class="nn">os</span>
|
||||
<span class="kn">import</span> <span class="nn">ctypes</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">windows</span>
|
||||
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
|
||||
@@ -59,6 +60,7 @@
|
||||
<span class="k">class</span> <span class="nc">EPUBLIC_OBJECT_TYPE_INFORMATION</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">Structure</span><span class="p">):</span>
|
||||
<span class="n">_fields_</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">transform_ctypes_fields</span><span class="p">(</span><span class="n">PUBLIC_OBJECT_TYPE_INFORMATION</span><span class="p">,</span> <span class="p">{</span><span class="s2">"TypeName"</span><span class="p">:</span> <span class="n">windows</span><span class="o">.</span><span class="n">winobject</span><span class="o">.</span><span class="n">process</span><span class="o">.</span><span class="n">WinUnicodeString</span><span class="p">})</span>
|
||||
|
||||
<span class="n">current_process_pid</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getpid</span><span class="p">()</span>
|
||||
|
||||
<div class="viewcode-block" id="Handle"><a class="viewcode-back" href="../../../handle.html#windows.winobject.handle.Handle">[docs]</a><span class="k">class</span> <span class="nc">Handle</span><span class="p">(</span><span class="n">SYSTEM_HANDLE</span><span class="p">):</span>
|
||||
<span class="sd">"""A handle of the system"""</span>
|
||||
@@ -67,8 +69,9 @@
|
||||
<span class="sd">"""The process possessing the handle</span>
|
||||
|
||||
<span class="sd"> :type: :class:`WinProcess <windows.winobject.process.WinProcess>`"""</span>
|
||||
<span class="s2">"TODO: something smart ? :D"</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">processes</span> <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">pid</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwProcessId</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="c1"># "TODO: something smart ? :D"</span>
|
||||
<span class="c1"># return [p for p in windows.system.processes if p.pid == self.dwProcessId][0]</span>
|
||||
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">WinProcess</span><span class="p">(</span><span class="n">pid</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dwProcessId</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -104,7 +107,7 @@
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtQueryObject</span><span class="p">(</span><span class="n">lh</span><span class="p">,</span> <span class="n">ObjectTypeInformation</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">xxx</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">xxx</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">size_needed</span><span class="p">))</span>
|
||||
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">code</span> <span class="o">!=</span> <span class="n">STATUS_INFO_LENGTH_MISMATCH</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"ERROR WITH </span><span class="si">{0:x}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">lh</span><span class="p">))</span>
|
||||
<span class="c1"># print("ERROR WITH {0:x}".format(lh))</span>
|
||||
<span class="k">raise</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="n">size_needed</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_buffer</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
|
||||
@@ -132,11 +135,32 @@
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">DuplicateHandle</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">process</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">wValue</span><span class="p">,</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">res</span><span class="p">),</span> <span class="n">dwOptions</span><span class="o">=</span><span class="n">DUPLICATE_SAME_ACCESS</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">res</span><span class="o">.</span><span class="n">value</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">description</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">stype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span>
|
||||
<span class="n">descr_func</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"description_"</span> <span class="o">+</span> <span class="n">stype</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">descr_func</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="k">return</span> <span class="n">descr_func</span><span class="p">()</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">description_Process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">proc</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">WinProcess</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">wValue</span><span class="p">)</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">proc</span><span class="p">)</span>
|
||||
<span class="k">del</span> <span class="n">proc</span><span class="o">.</span><span class="n">_handle</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">description_Thread</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">thread</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">WinThread</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">wValue</span><span class="p">)</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">thread</span><span class="p">)</span>
|
||||
<span class="k">del</span> <span class="n">thread</span><span class="o">.</span><span class="n">_handle</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s2">"<</span><span class="si">{0}</span><span class="s2"> value=<0x</span><span class="si">{1:x}</span><span class="s2">> in process pid=</span><span class="si">{2}</span><span class="s2">>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">wValue</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwProcessId</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwProcessId</span> <span class="o">==</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">pid</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwProcessId</span> <span class="o">==</span> <span class="n">current_process_pid</span><span class="p">:</span>
|
||||
<span class="k">return</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"_local_handle"</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CloseHandle</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_local_handle</span><span class="p">)</span></div>
|
||||
@@ -193,7 +217,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+5
-5
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.winobject.network — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.winobject.network — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -444,7 +444,7 @@
|
||||
<span class="k">return</span> <span class="n">icmp_type_and_code</span><span class="o">.</span><span class="n">value</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s1">'<</span><span class="si">{0}</span><span class="s1"> "</span><span class="si">{1}</span><span class="s1">">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span></div>
|
||||
<span class="k">return</span> <span class="sa">u</span><span class="s1">'<</span><span class="si">{0}</span><span class="s1"> "</span><span class="si">{1}</span><span class="s1">">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">"ascii"</span><span class="p">,</span> <span class="n">errors</span><span class="o">=</span><span class="s1">'backslashreplace'</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Network"><a class="viewcode-back" href="../../../network.html#windows.winobject.network.Network">[docs]</a><span class="k">class</span> <span class="nc">Network</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="n">NetFwPolicy2</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">com</span><span class="o">.</span><span class="n">IID</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="s2">"E2B3C97F-6AE1-41AC-817A-F6F92166D7DD"</span><span class="p">)</span>
|
||||
@@ -525,7 +525,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+195
-84
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.winobject.process — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.winobject.process — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -61,6 +61,7 @@
|
||||
<span class="kn">import</span> <span class="nn">windows</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.native_exec.simple_x86</span> <span class="k">as</span> <span class="nn">x86</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.native_exec.simple_x64</span> <span class="k">as</span> <span class="nn">x64</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.remotectypes</span> <span class="k">as</span> <span class="nn">rctypes</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">injection</span>
|
||||
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">native_exec</span>
|
||||
@@ -73,11 +74,13 @@
|
||||
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="k">import</span> <span class="n">windef</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">exception</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">sid</span>
|
||||
|
||||
|
||||
<span class="n">TimeInfo</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s2">"TimeInfo"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"creation"</span><span class="p">,</span> <span class="s2">"exit"</span><span class="p">,</span> <span class="s2">"kernel"</span><span class="p">,</span> <span class="s2">"user"</span><span class="p">])</span>
|
||||
<span class="sd">"""Time information about a process"""</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">AutoHandle</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""An abstract class that allow easy handle creation/destruction/wait"""</span>
|
||||
<span class="c1"># Big bypass to prevent missing reference at programm close..</span>
|
||||
@@ -108,20 +111,49 @@
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">WaitForSingleObject</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">timeout</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"_handle"</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle</span><span class="p">:</span>
|
||||
<span class="c1"># sys.path is not None -> check if python shutdown</span>
|
||||
<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"_handle"</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle</span><span class="p">:</span>
|
||||
<span class="c1"># Prevent some bug where dbgprint might be None when __del__ is called in a closing process</span>
|
||||
<span class="c1"># for i in vars(sys).items(): print(i)</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Closing Handle </span><span class="si">{0}</span><span class="s2"> for </span><span class="si">{1}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">hex</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_handle</span><span class="p">),</span> <span class="bp">self</span><span class="p">),</span> <span class="s2">"HANDLE"</span><span class="p">)</span> <span class="k">if</span> <span class="n">dbgprint</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_close_function</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_handle</span><span class="p">)</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="WinThread"><a class="viewcode-back" href="../../../process.html#windows.winobject.process.WinThread">[docs]</a><span class="k">class</span> <span class="nc">WinThread</span><span class="p">(</span><span class="n">THREADENTRY32</span><span class="p">,</span> <span class="n">AutoHandle</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="WinThread"><a class="viewcode-back" href="../../../process.html#windows.winobject.process.WinThread">[docs]</a><span class="k">class</span> <span class="nc">WinThread</span><span class="p">(</span><span class="n">AutoHandle</span><span class="p">):</span>
|
||||
<span class="sd">"""Represent a thread """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tid</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">owner_pid</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">owner</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">tid</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">handle</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Need at least <pid> or <handle> to create a </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">))</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">tid</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tid</span> <span class="o">=</span> <span class="n">tid</span>
|
||||
<span class="k">if</span> <span class="n">handle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle</span> <span class="o">=</span> <span class="n">handle</span>
|
||||
<span class="k">if</span> <span class="n">owner</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_owner</span> <span class="o">=</span> <span class="n">owner</span>
|
||||
<span class="k">if</span> <span class="n">owner_pid</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_owner_pid</span> <span class="o">=</span> <span class="n">owner_pid</span>
|
||||
<span class="k">if</span> <span class="n">owner_pid</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">owner</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_owner_pid</span> <span class="o">=</span> <span class="n">owner</span><span class="o">.</span><span class="n">pid</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">_from_THREADENTRY32</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">entry</span><span class="p">,</span> <span class="n">owner</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="n">tid</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">th32ThreadID</span>
|
||||
<span class="n">owner_pid</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">th32OwnerProcessID</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">tid</span><span class="o">=</span><span class="n">tid</span><span class="p">,</span> <span class="n">owner_pid</span><span class="o">=</span><span class="n">owner_pid</span><span class="p">,</span> <span class="n">owner</span><span class="o">=</span><span class="n">owner</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">_from_handle</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">handle</span><span class="p">):</span>
|
||||
<span class="c1"># Create a DeadThread if thread is already dead ?</span>
|
||||
<span class="k">return</span> <span class="n">WinThread</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">handle</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">tid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Thread ID</span>
|
||||
|
||||
<span class="sd"> :type: :class:`int`"""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">th32ThreadID</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_thread_id</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">owner_pid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_thread_owner_pid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">owner</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -129,13 +161,7 @@
|
||||
|
||||
<span class="sd"> :type: :class:`WinProcess`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"_owner"</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_owner</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_owner</span> <span class="o">=</span> <span class="p">[</span><span class="n">process</span> <span class="k">for</span> <span class="n">process</span> <span class="ow">in</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">processes</span> <span class="k">if</span> <span class="n">process</span><span class="o">.</span><span class="n">pid</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">th32OwnerProcessID</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_owner</span>
|
||||
<span class="k">return</span> <span class="n">WinProcess</span><span class="p">(</span><span class="n">pid</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">owner_pid</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">context</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -277,23 +303,12 @@
|
||||
<span class="k">if</span> <span class="n">owner</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">owner_name</span> <span class="o">=</span> <span class="s2">"<Dead process with pid </span><span class="si">{0}</span><span class="s2">>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">hex</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">th32OwnerProcessID</span><span class="p">))</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">owner_name</span> <span class="o">=</span> <span class="n">owner</span><span class="o">.</span><span class="n">name</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">owner_name</span> <span class="o">=</span> <span class="n">owner</span><span class="o">.</span><span class="n">name</span>
|
||||
<span class="k">except</span> <span class="ne">EnvironmentError</span><span class="p">:</span>
|
||||
<span class="n">owner_name</span> <span class="o">=</span> <span class="s2">"!cannot-retrieve-owner-name"</span>
|
||||
<span class="k">return</span> <span class="s1">'<</span><span class="si">{0}</span><span class="s1"> </span><span class="si">{1}</span><span class="s1"> owner "</span><span class="si">{2}</span><span class="s1">" at </span><span class="si">{3}</span><span class="s1">>'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tid</span><span class="p">,</span> <span class="n">owner_name</span><span class="p">,</span> <span class="nb">hex</span><span class="p">(</span><span class="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">)))</span>
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">_from_handle</span><span class="p">(</span><span class="n">handle</span><span class="p">):</span>
|
||||
<span class="n">tid</span> <span class="o">=</span> <span class="n">WinThread</span><span class="o">.</span><span class="n">_get_thread_id</span><span class="p">(</span><span class="n">handle</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="c1"># Really useful ?</span>
|
||||
<span class="n">thread</span> <span class="o">=</span> <span class="p">[</span><span class="n">t</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">windows</span><span class="o">.</span><span class="n">winobject</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">System</span><span class="p">()</span><span class="o">.</span><span class="n">threads</span> <span class="k">if</span> <span class="n">t</span><span class="o">.</span><span class="n">tid</span> <span class="o">==</span> <span class="n">tid</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="c1"># set AutoHandle _handle</span>
|
||||
<span class="n">thread</span><span class="o">.</span><span class="n">_handle</span> <span class="o">=</span> <span class="n">handle</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Thread </span><span class="si">{0}</span><span class="s2"> from handle </span><span class="si">{1}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">thread</span><span class="p">,</span> <span class="nb">hex</span><span class="p">(</span><span class="n">handle</span><span class="p">)),</span> <span class="s2">"HANDLE"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">thread</span>
|
||||
<span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"DeadThread from handle </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">hex</span><span class="p">(</span><span class="n">handle</span><span class="p">)),</span> <span class="s2">"HANDLE"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">DeadThread</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">tid</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">_get_thread_id_by_api</span><span class="p">(</span><span class="n">handle</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetThreadId</span><span class="p">(</span><span class="n">handle</span><span class="p">)</span>
|
||||
@@ -303,10 +318,17 @@
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">64</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"[_get_thread_id_manual] 32 -> 64 (XP64 bits + Syswow process ?)"</span><span class="p">)</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">THREAD_BASIC_INFORMATION</span><span class="p">()</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">NtQueryInformationThread</span><span class="p">(</span><span class="n">hand</span><span class="p">,</span> <span class="n">ThreadBasicInformation</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">res</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">res</span><span class="p">))</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">NtQueryInformationThread</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">ThreadBasicInformation</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">res</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">res</span><span class="p">))</span>
|
||||
<span class="n">id2</span> <span class="o">=</span> <span class="n">res</span><span class="o">.</span><span class="n">ClientId</span><span class="o">.</span><span class="n">UniqueThread</span>
|
||||
<span class="k">return</span> <span class="n">id2</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_get_thread_owner_pid</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">):</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">THREAD_BASIC_INFORMATION</span><span class="p">()</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">NtQueryInformationThread</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">ThreadBasicInformation</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">res</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">res</span><span class="p">))</span>
|
||||
<span class="n">id2</span> <span class="o">=</span> <span class="n">res</span><span class="o">.</span><span class="n">ClientId</span><span class="o">.</span><span class="n">UniqueProcess</span>
|
||||
<span class="k">return</span> <span class="n">id2</span>
|
||||
|
||||
|
||||
<span class="k">if</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">is_implemented</span><span class="p">(</span><span class="n">winproxy</span><span class="o">.</span><span class="n">GetThreadId</span><span class="p">):</span>
|
||||
<span class="n">_get_thread_id</span> <span class="o">=</span> <span class="n">_get_thread_id_by_api</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
@@ -359,7 +381,8 @@
|
||||
|
||||
<span class="sd"> :type: :class:`bool`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">utils</span><span class="o">.</span><span class="n">is_wow_64</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
|
||||
<span class="c1"># return utils.is_wow_64(self.handle)</span>
|
||||
<span class="k">return</span> <span class="n">utils</span><span class="o">.</span><span class="n">is_wow_64</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">limited_handle</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">bitness</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -373,13 +396,41 @@
|
||||
<span class="k">return</span> <span class="mi">32</span>
|
||||
<span class="k">return</span> <span class="mi">64</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">limited_handle</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">version</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o"><=</span> <span class="mi">5</span><span class="p">:</span>
|
||||
<span class="c1"># Windows XP | Serveur 2003</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">OpenProcess</span><span class="p">(</span><span class="n">PROCESS_QUERY_INFORMATION</span><span class="p">,</span> <span class="n">dwProcessId</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">OpenProcess</span><span class="p">(</span><span class="n">PROCESS_QUERY_LIMITED_INFORMATION</span><span class="p">,</span> <span class="n">dwProcessId</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">ppid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Parent Process ID</span>
|
||||
|
||||
<span class="sd"> :type: :class:`int`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">64</span><span class="p">:</span>
|
||||
<span class="n">xtype</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">remotectypes</span><span class="o">.</span><span class="n">transform_type_to_remote64bits</span><span class="p">(</span><span class="n">PROCESS_BASIC_INFORMATION</span><span class="p">)</span>
|
||||
<span class="c1"># Fuck-it <3</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_char</span> <span class="o">*</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">xtype</span><span class="p">))()</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">NtQueryInformationProcess_32_to_64</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">ProcessInformation</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">ProcessInformationLength</span><span class="o">=</span><span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">xtype</span><span class="p">))</span>
|
||||
<span class="c1"># Map a remote64bits(PROCESS_BASIC_INFORMATION) at the address of 'data'</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">xtype</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">data</span><span class="p">),</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">information_type</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">PROCESS_BASIC_INFORMATION</span><span class="p">()</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtQueryInformationProcess</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">information_type</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">x</span><span class="o">.</span><span class="n">InheritedFromUniqueProcessId</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">threads</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The threads of the process</span>
|
||||
|
||||
<span class="sd"> :type: [:class:`WinThread`] -- A list of Thread</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">thread</span> <span class="k">for</span> <span class="n">thread</span> <span class="ow">in</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">threads</span> <span class="k">if</span> <span class="n">thread</span><span class="o">.</span><span class="n">th32OwnerProcessID</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">pid</span><span class="p">]</span>
|
||||
<span class="n">owner_pid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pid</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">WinThread</span><span class="o">.</span><span class="n">_from_THREADENTRY32</span><span class="p">(</span><span class="n">th</span><span class="p">,</span> <span class="n">owner</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span> <span class="k">for</span> <span class="n">th</span> <span class="ow">in</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">enumerate_threads_generator</span><span class="p">()</span> <span class="k">if</span> <span class="n">th</span><span class="o">.</span><span class="n">th32OwnerProcessID</span> <span class="o">==</span> <span class="n">owner_pid</span><span class="p">]</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">virtual_alloc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"virtual_alloc"</span><span class="p">)</span>
|
||||
@@ -435,7 +486,6 @@
|
||||
<span class="k">if</span> <span class="n">size</span> <span class="o">&</span> <span class="mh">0x0fff</span><span class="p">:</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="p">((</span><span class="n">size</span> <span class="o">>></span> <span class="mi">12</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o"><<</span> <span class="mi">12</span>
|
||||
<span class="c1">#ssize = ULONG(size)</span>
|
||||
<span class="c1">#import pdb;pdb.set_trace()</span>
|
||||
<span class="n">old_protect</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">old_protect</span><span class="p">)</span>
|
||||
<span class="n">xaddr</span> <span class="o">=</span> <span class="n">ULONG64</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span>
|
||||
<span class="n">addr</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">xaddr</span><span class="p">)</span>
|
||||
@@ -459,7 +509,7 @@
|
||||
<span class="k">def</span> <span class="nf">query_memory</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">addr</span><span class="p">):</span>
|
||||
<span class="sd">"""Query the memory informations about page at ``addr``</span>
|
||||
|
||||
<span class="sd"> :rtype: :class:`MEMORY_BASIC_INFORMATION`</span>
|
||||
<span class="sd"> :rtype: :class:`~windows.generated_def.MEMORY_BASIC_INFORMATION`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">64</span><span class="p">:</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">MEMORY_BASIC_INFORMATION64</span><span class="p">()</span>
|
||||
@@ -480,7 +530,7 @@
|
||||
<span class="k">def</span> <span class="nf">memory_state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Yield the memory information for the whole address space of the process</span>
|
||||
|
||||
<span class="sd"> :yield: :class:`MEMORY_BASIC_INFORMATION`</span>
|
||||
<span class="sd"> :yield: :class:`~windows.generated_def.MEMORY_BASIC_INFORMATION`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">addr</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
@@ -673,23 +723,33 @@
|
||||
<span class="n">ExitTime</span> <span class="o">=</span> <span class="n">FILETIME</span><span class="p">()</span>
|
||||
<span class="n">KernelTime</span> <span class="o">=</span> <span class="n">FILETIME</span><span class="p">()</span>
|
||||
<span class="n">UserTime</span> <span class="o">=</span> <span class="n">FILETIME</span><span class="p">()</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">GetProcessTimes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">CreationTime</span><span class="p">,</span> <span class="n">ExitTime</span><span class="p">,</span> <span class="n">KernelTime</span><span class="p">,</span> <span class="n">UserTime</span><span class="p">)</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">GetProcessTimes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">limited_handle</span><span class="p">,</span> <span class="n">CreationTime</span><span class="p">,</span> <span class="n">ExitTime</span><span class="p">,</span> <span class="n">KernelTime</span><span class="p">,</span> <span class="n">UserTime</span><span class="p">)</span>
|
||||
|
||||
<span class="n">creation</span> <span class="o">=</span> <span class="p">(</span><span class="n">CreationTime</span><span class="o">.</span><span class="n">dwHighDateTime</span> <span class="o"><<</span> <span class="mi">32</span><span class="p">)</span> <span class="o">+</span> <span class="n">CreationTime</span><span class="o">.</span><span class="n">dwLowDateTime</span>
|
||||
<span class="n">exit</span> <span class="o">=</span> <span class="p">(</span><span class="n">ExitTime</span><span class="o">.</span><span class="n">dwHighDateTime</span> <span class="o"><<</span> <span class="mi">32</span><span class="p">)</span> <span class="o">+</span> <span class="n">ExitTime</span><span class="o">.</span><span class="n">dwLowDateTime</span>
|
||||
<span class="n">kernel</span> <span class="o">=</span> <span class="p">(</span><span class="n">KernelTime</span><span class="o">.</span><span class="n">dwHighDateTime</span> <span class="o"><<</span> <span class="mi">32</span><span class="p">)</span> <span class="o">+</span> <span class="n">KernelTime</span><span class="o">.</span><span class="n">dwLowDateTime</span>
|
||||
<span class="n">user</span> <span class="o">=</span> <span class="p">(</span><span class="n">UserTime</span><span class="o">.</span><span class="n">dwHighDateTime</span> <span class="o"><<</span> <span class="mi">32</span><span class="p">)</span> <span class="o">+</span> <span class="n">UserTime</span><span class="o">.</span><span class="n">dwLowDateTime</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">TimeInfo</span><span class="p">(</span><span class="n">creation</span><span class="p">,</span> <span class="n">exit</span><span class="p">,</span> <span class="n">kernel</span><span class="p">,</span> <span class="n">user</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">open_token</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">TOKEN_QUERY</span><span class="p">):</span>
|
||||
<span class="n">token_handle</span> <span class="o">=</span> <span class="n">HANDLE</span><span class="p">()</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">OpenProcessToken</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">token_handle</span><span class="p">))</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">OpenProcessToken</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">limited_handle</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">token_handle</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">Token</span><span class="p">(</span><span class="n">token_handle</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="n">token</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">open_token</span><span class="p">)</span>
|
||||
<span class="n">token</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">open_token</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">Process</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__del__</span><span class="p">()</span>
|
||||
<span class="c1"># Same logic that AutoHandle.__del__ for Process.limited_handle</span>
|
||||
<span class="c1"># Assert that Process inherit AutoHandle</span>
|
||||
<span class="c1"># sys.path is not None -> check if python shutdown</span>
|
||||
<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"_limited_handle"</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_limited_handle</span><span class="p">:</span>
|
||||
<span class="c1"># Prevent some bug where dbgprint might be None when __del__ is called in a closing process</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Closing limited handle </span><span class="si">{0}</span><span class="s2"> for </span><span class="si">{1}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">hex</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_limited_handle</span><span class="p">),</span> <span class="bp">self</span><span class="p">),</span> <span class="s2">"HANDLE"</span><span class="p">)</span> <span class="k">if</span> <span class="n">dbgprint</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_close_function</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_limited_handle</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="c1"># @utils.fixedpropety</span>
|
||||
<span class="c1"># def token(self):</span>
|
||||
@@ -711,7 +771,7 @@
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetCurrentThreadId</span><span class="p">()</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">owner</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The current process</span>
|
||||
|
||||
@@ -754,6 +814,8 @@
|
||||
|
||||
<span class="n">allocator</span> <span class="o">=</span> <span class="n">native_exec</span><span class="o">.</span><span class="n">native_function</span><span class="o">.</span><span class="n">allocator</span>
|
||||
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"CurrentProcess"</span> <span class="c1"># Used by Winthread for __repr__</span>
|
||||
|
||||
<span class="c1"># Use RtlGetCurrentPeb ?</span>
|
||||
<span class="k">def</span> <span class="nf">get_peb_builtin</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_peb</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
@@ -779,16 +841,7 @@
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">getpid</span><span class="p">()</span>
|
||||
|
||||
<span class="c1"># Is there a better way ?</span>
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">ppid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Parent Process ID</span>
|
||||
|
||||
<span class="sd"> :type: :class:`int`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">processes</span> <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">pid</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">pid</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">ppid</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span> <span class="c1"># leave it has fixed property as we don't care if CurrentProcess is never collected</span>
|
||||
<span class="k">def</span> <span class="nf">peb</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The Process Environment Block of the current process</span>
|
||||
|
||||
@@ -865,13 +918,22 @@
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_wow_64</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Not a syswow process"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">get_current_process_syswow_peb</span><span class="p">()</span></div>
|
||||
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">get_current_process_syswow_peb</span><span class="p">()</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">open_token</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">TOKEN_ALL_ACCESS</span><span class="p">):</span>
|
||||
<span class="n">token_handle</span> <span class="o">=</span> <span class="n">HANDLE</span><span class="p">()</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">OpenProcessToken</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">token_handle</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">Token</span><span class="p">(</span><span class="n">token_handle</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="n">token</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">open_token</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="WinProcess"><a class="viewcode-back" href="../../../process.html#windows.winobject.process.WinProcess">[docs]</a><span class="k">class</span> <span class="nc">WinProcess</span><span class="p">(</span><span class="n">Process</span><span class="p">):</span>
|
||||
<span class="sd">"""A Process on the system"""</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pid</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ppid</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">pid</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">handle</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Need at lead <pid> or <handle> to create a </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__name</span><span class="p">))</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Need at least <pid> or <handle> to create a </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">))</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">pid</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pid</span> <span class="o">=</span> <span class="n">pid</span>
|
||||
<span class="k">if</span> <span class="n">handle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle</span> <span class="o">=</span> <span class="n">handle</span>
|
||||
@@ -893,7 +955,7 @@
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">szExeFile</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span>
|
||||
<span class="n">pid</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">th32ProcessID</span>
|
||||
<span class="n">ppid</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">th32ParentProcessID</span>
|
||||
<span class="k">return</span> <span class="n">WinProcess</span><span class="p">(</span><span class="n">pid</span><span class="o">=</span><span class="n">pid</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span> <span class="n">ppid</span><span class="o">=</span><span class="n">ppid</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">pid</span><span class="o">=</span><span class="n">pid</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span> <span class="n">ppid</span><span class="o">=</span><span class="n">ppid</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
@@ -915,26 +977,20 @@
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetProcessId</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">ppid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Parent Process ID</span>
|
||||
|
||||
<span class="sd"> :type: :class:`int`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># TODO: is there an API ?</span>
|
||||
<span class="n">pid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pid</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">processes</span> <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">pid</span> <span class="o">==</span> <span class="n">pid</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">th32ParentProcessID</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_get_handle</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">OpenProcess</span><span class="p">(</span><span class="n">dwProcessId</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">exe_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
|
||||
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">exe_name</span> <span class="o">=</span> <span class="s2">"!cannot-retrieve-name"</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_exit</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="s1">'<</span><span class="si">{0}</span><span class="s1"> "</span><span class="si">{1}</span><span class="s1">" pid </span><span class="si">{2}</span><span class="s1"> (DEAD) at </span><span class="si">{3}</span><span class="s1">>'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pid</span><span class="p">,</span> <span class="nb">hex</span><span class="p">(</span><span class="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">)))</span>
|
||||
<span class="k">return</span> <span class="s1">'<</span><span class="si">{0}</span><span class="s1"> "</span><span class="si">{1}</span><span class="s1">" pid </span><span class="si">{2}</span><span class="s1"> (DEAD) at </span><span class="si">{3}</span><span class="s1">>'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">exe_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pid</span><span class="p">,</span> <span class="nb">hex</span><span class="p">(</span><span class="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">)))</span>
|
||||
<span class="k">except</span> <span class="ne">WindowsError</span><span class="p">:</span> <span class="c1"># Cannot open process</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="k">return</span> <span class="s1">'<</span><span class="si">{0}</span><span class="s1"> "</span><span class="si">{1}</span><span class="s1">" pid </span><span class="si">{2}</span><span class="s1"> at </span><span class="si">{3}</span><span class="s1">>'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pid</span><span class="p">,</span> <span class="nb">hex</span><span class="p">(</span><span class="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">)))</span>
|
||||
<span class="k">return</span> <span class="s1">'<</span><span class="si">{0}</span><span class="s1"> "</span><span class="si">{1}</span><span class="s1">" pid </span><span class="si">{2}</span><span class="s1"> at </span><span class="si">{3}</span><span class="s1">>'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">exe_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pid</span><span class="p">,</span> <span class="nb">hex</span><span class="p">(</span><span class="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">)))</span>
|
||||
|
||||
<div class="viewcode-block" id="WinProcess.virtual_alloc"><a class="viewcode-back" href="../../../process.html#windows.winobject.process.WinProcess.virtual_alloc">[docs]</a> <span class="k">def</span> <span class="nf">virtual_alloc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">prot</span><span class="o">=</span><span class="n">PAGE_EXECUTE_READWRITE</span><span class="p">):</span>
|
||||
<span class="sd">"""Allocate memory in the process</span>
|
||||
@@ -1059,7 +1115,9 @@
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Could not get peb addr of process </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">peb_addr</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="c1"># Not a fixedpropety to prevent ref-cycle and uncollectable WinProcess</span>
|
||||
<span class="c1"># Try with a weakref ?</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">peb</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The PEB of the process (see :mod:`remotectypes`)</span>
|
||||
|
||||
@@ -1072,6 +1130,27 @@
|
||||
<span class="k">return</span> <span class="n">RemotePEB</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">peb_addr</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">peb_syswow_addr</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_wow_64</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Not a syswow process"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">64</span><span class="p">:</span>
|
||||
<span class="n">information_type</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">PROCESS_BASIC_INFORMATION</span><span class="p">()</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtQueryInformationProcess</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">information_type</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
|
||||
<span class="n">peb_addr</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">PebBaseAddress</span><span class="p">,</span> <span class="n">PVOID</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="k">return</span> <span class="n">peb_addr</span>
|
||||
<span class="k">else</span><span class="p">:</span> <span class="c1">#current is 32bits</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">remotectypes</span><span class="o">.</span><span class="n">transform_type_to_remote64bits</span><span class="p">(</span><span class="n">PROCESS_BASIC_INFORMATION</span><span class="p">)</span>
|
||||
<span class="c1"># Fuck-it <3</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_char</span> <span class="o">*</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">x</span><span class="p">))()</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">NtQueryInformationProcess_32_to_64</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">ProcessInformation</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">ProcessInformationLength</span><span class="o">=</span><span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
|
||||
<span class="n">peb_offset</span> <span class="o">=</span> <span class="n">x</span><span class="o">.</span><span class="n">PebBaseAddress</span><span class="o">.</span><span class="n">offset</span>
|
||||
<span class="n">peb_addr</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s2">"<Q"</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">PebBaseAddress</span><span class="o">.</span><span class="n">offset</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">PebBaseAddress</span><span class="o">.</span><span class="n">offset</span><span class="o">+</span><span class="mi">8</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="n">peb_addr</span>
|
||||
|
||||
<span class="c1"># Not a fixedpropety to prevent ref-cycle and uncollectable WinProcess</span>
|
||||
<span class="c1"># Try with a weakref ?</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">peb_syswow</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The 64bits PEB of a SysWow64 process</span>
|
||||
|
||||
@@ -1080,19 +1159,9 @@
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_wow_64</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Not a syswow process"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">64</span><span class="p">:</span>
|
||||
<span class="n">information_type</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">PROCESS_BASIC_INFORMATION</span><span class="p">()</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtQueryInformationProcess</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">information_type</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
|
||||
<span class="n">peb_addr</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">PebBaseAddress</span><span class="p">,</span> <span class="n">PVOID</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="k">return</span> <span class="n">RemotePEB</span><span class="p">(</span><span class="n">peb_addr</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">RemotePEB</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">peb_syswow_addr</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span> <span class="c1">#current is 32bits</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">remotectypes</span><span class="o">.</span><span class="n">transform_type_to_remote64bits</span><span class="p">(</span><span class="n">PROCESS_BASIC_INFORMATION</span><span class="p">)</span>
|
||||
<span class="c1"># Fuck-it <3</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_char</span> <span class="o">*</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">x</span><span class="p">))()</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">NtQueryInformationProcess_32_to_64</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">ProcessInformation</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">ProcessInformationLength</span><span class="o">=</span><span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
|
||||
<span class="n">peb_offset</span> <span class="o">=</span> <span class="n">x</span><span class="o">.</span><span class="n">PebBaseAddress</span><span class="o">.</span><span class="n">offset</span>
|
||||
<span class="n">peb_addr</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s2">"<Q"</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">PebBaseAddress</span><span class="o">.</span><span class="n">offset</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">PebBaseAddress</span><span class="o">.</span><span class="n">offset</span><span class="o">+</span><span class="mi">8</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="n">RemotePEB64</span><span class="p">(</span><span class="n">peb_addr</span><span class="p">,</span> <span class="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">ReadSyswow64Process</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">RemotePEB64</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">peb_syswow_addr</span><span class="p">,</span> <span class="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">ReadSyswow64Process</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
|
||||
|
||||
<div class="viewcode-block" id="WinProcess.exit"><a class="viewcode-back" href="../../../process.html#windows.winobject.process.WinProcess.exit">[docs]</a> <span class="k">def</span> <span class="nf">exit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">code</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
<span class="sd">"""Exit the process"""</span>
|
||||
@@ -1115,8 +1184,7 @@
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_handle</span> <span class="o">=</span> <span class="n">handle</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">integrity</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="Token.get_integrity"><a class="viewcode-back" href="../../../process.html#windows.winobject.process.Token.get_integrity">[docs]</a> <span class="k">def</span> <span class="nf">get_integrity</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Return the integrity level of a token</span>
|
||||
|
||||
<span class="sd"> :type: :class:`int`</span>
|
||||
@@ -1127,7 +1195,19 @@
|
||||
<span class="n">sid</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">buffer</span><span class="p">,</span> <span class="n">POINTER</span><span class="p">(</span><span class="n">TOKEN_MANDATORY_LABEL</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">Label</span><span class="o">.</span><span class="n">Sid</span>
|
||||
<span class="n">count</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetSidSubAuthorityCount</span><span class="p">(</span><span class="n">sid</span><span class="p">)</span>
|
||||
<span class="n">integrity</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetSidSubAuthority</span><span class="p">(</span><span class="n">sid</span><span class="p">,</span> <span class="n">count</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="n">know_integrity_level_mapper</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">integrity</span><span class="p">,</span> <span class="n">integrity</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">know_integrity_level_mapper</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">integrity</span><span class="p">,</span> <span class="n">integrity</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Token.set_integrity"><a class="viewcode-back" href="../../../process.html#windows.winobject.process.Token.set_integrity">[docs]</a> <span class="k">def</span> <span class="nf">set_integrity</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">integrity</span><span class="p">):</span>
|
||||
<span class="sd">"""Set the integrity level of a token</span>
|
||||
|
||||
<span class="sd"> :param type: :class:`int`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">mandatory_label</span> <span class="o">=</span> <span class="n">TOKEN_MANDATORY_LABEL</span><span class="p">()</span>
|
||||
<span class="n">mandatory_label</span><span class="o">.</span><span class="n">Label</span><span class="o">.</span><span class="n">Attributes</span> <span class="o">=</span> <span class="mh">0x60</span>
|
||||
<span class="n">mandatory_label</span><span class="o">.</span><span class="n">Label</span><span class="o">.</span><span class="n">Sid</span> <span class="o">=</span> <span class="n">sid</span><span class="o">.</span><span class="n">EPSID</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="s2">"S-1-16-</span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">integrity</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">set_informations</span><span class="p">(</span><span class="n">TokenIntegrityLevel</span><span class="p">,</span> <span class="n">mandatory_label</span><span class="p">)</span></div>
|
||||
|
||||
<span class="n">integrity</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_integrity</span><span class="p">,</span> <span class="n">set_integrity</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">is_elevated</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -1268,6 +1348,14 @@
|
||||
<span class="p">{</span><span class="s2">"ProcessParameters"</span><span class="p">:</span> <span class="n">POINTER</span><span class="p">(</span><span class="n">RTL_USER_PROCESS_PARAMETERS</span><span class="p">)}</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">exe</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The executable of the process, as pointed by PEB.ImageBaseAddress</span>
|
||||
|
||||
<span class="sd"> :type: :class:`windows.pe_parse.PEFile`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">pe_parse</span><span class="o">.</span><span class="n">GetPEFile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ImageBaseAddress</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">imagepath</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The ImagePathName of the PEB</span>
|
||||
@@ -1363,9 +1451,6 @@
|
||||
<span class="n">_fields_</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">transform_ctypes_fields</span><span class="p">(</span><span class="n">PSAPI_WORKING_SET_EX_INFORMATION64</span><span class="p">,</span> <span class="p">{</span><span class="s2">"VirtualAttributes"</span><span class="p">:</span> <span class="n">EPSAPI_WORKING_SET_EX_BLOCK64</span><span class="p">})</span>
|
||||
|
||||
|
||||
<span class="kn">import</span> <span class="nn">windows.remotectypes</span> <span class="k">as</span> <span class="nn">rctypes</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">RemoteLoadedModule</span><span class="p">(</span><span class="n">rctypes</span><span class="o">.</span><span class="n">RemoteStructure</span><span class="o">.</span><span class="n">from_structure</span><span class="p">(</span><span class="n">LoadedModule</span><span class="p">)):</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">pe</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -1380,6 +1465,14 @@
|
||||
<span class="k">def</span> <span class="nf">ptr_flink_to_remote_module</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ptr_value</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">RemoteLoadedModule</span><span class="p">(</span><span class="n">ptr_value</span> <span class="o">-</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)</span> <span class="o">*</span> <span class="mi">2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_target</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">exe</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The executable of the process, as pointed by PEB.ImageBaseAddress</span>
|
||||
|
||||
<span class="sd"> :type: :class:`windows.pe_parse.PEFile`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">pe_parse</span><span class="o">.</span><span class="n">GetPEFile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ImageBaseAddress</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_target</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">modules</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The loaded modules present in the PEB</span>
|
||||
@@ -1413,6 +1506,15 @@
|
||||
<span class="k">def</span> <span class="nf">ptr_flink_to_remote_module</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ptr_value</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">RemoteLoadedModule64</span><span class="p">(</span><span class="n">ptr_value</span> <span class="o">-</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">rctypes</span><span class="o">.</span><span class="n">c_void_p64</span><span class="p">)</span> <span class="o">*</span> <span class="mi">2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_target</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">exe</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The executable of the process, as pointed by PEB.ImageBaseAddress</span>
|
||||
|
||||
<span class="sd"> :type: :class:`windows.pe_parse.PEFile`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">pe_parse</span><span class="o">.</span><span class="n">GetPEFile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ImageBaseAddress</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_target</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">modules</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The loaded modules present in the PEB</span>
|
||||
@@ -1445,6 +1547,15 @@
|
||||
<span class="k">def</span> <span class="nf">ptr_flink_to_remote_module</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ptr_value</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">RemoteLoadedModule32</span><span class="p">(</span><span class="n">ptr_value</span> <span class="o">-</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">rctypes</span><span class="o">.</span><span class="n">c_void_p32</span><span class="p">)</span> <span class="o">*</span> <span class="mi">2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_target</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">exe</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The executable of the process, as pointed by PEB.ImageBaseAddress</span>
|
||||
|
||||
<span class="sd"> :type: :class:`windows.pe_parse.PEFile`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">pe_parse</span><span class="o">.</span><span class="n">GetPEFile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ImageBaseAddress</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_target</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">modules</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The loaded modules present in the PEB</span>
|
||||
@@ -1491,7 +1602,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.winobject.registry — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.winobject.registry — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -262,7 +262,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+31
-12
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.winobject.service — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.winobject.service — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -52,6 +52,7 @@
|
||||
<span class="kn">import</span> <span class="nn">windows</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">namedtuple</span>
|
||||
<span class="kn">from</span> <span class="nn">contextlib</span> <span class="k">import</span> <span class="n">contextmanager</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">utils</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="k">import</span> <span class="o">*</span>
|
||||
@@ -91,8 +92,10 @@
|
||||
<span class="sd">"""</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">Service</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="n">handle</span> <span class="o">=</span> <span class="kc">None</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="s1">'<</span><span class="si">{0}</span><span class="s1"> "</span><span class="si">{1}</span><span class="s1">">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s1">'<</span><span class="si">{0}</span><span class="s1"> "</span><span class="si">{1}</span><span class="s1">" </span><span class="si">{2}</span><span class="s1">>'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">state</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -132,24 +135,40 @@
|
||||
<span class="n">pid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ServiceStatusProcess</span><span class="o">.</span><span class="n">dwProcessId</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">pid</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="n">l</span> <span class="o">=</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">processes</span> <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">pid</span> <span class="o">==</span> <span class="n">pid</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">l</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span> <span class="c1"># Other thing ?</span>
|
||||
<span class="k">return</span> <span class="n">l</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">l</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">WinProcess</span><span class="p">(</span><span class="n">pid</span><span class="o">=</span><span class="n">pid</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">l</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="ServiceA"><a class="viewcode-back" href="../../../service.html#windows.winobject.service.ServiceA">[docs]</a><span class="k">class</span> <span class="nc">ServiceA</span><span class="p">(</span><span class="n">Service</span><span class="p">,</span> <span class="n">ENUM_SERVICE_STATUS_PROCESSA</span><span class="p">):</span>
|
||||
<span class="sd">"""A Service object with ascii data"""</span>
|
||||
<span class="k">pass</span></div>
|
||||
<span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">args</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Start service with args != None"</span><span class="p">)</span>
|
||||
<span class="k">with</span> <span class="n">scmanagera</span><span class="p">(</span><span class="n">SC_MANAGER_CONNECT</span><span class="p">)</span> <span class="k">as</span> <span class="n">scm</span><span class="p">:</span>
|
||||
<span class="c1"># windows.winproxy.StartServiceA()</span>
|
||||
<span class="n">servh</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">OpenServiceA</span><span class="p">(</span><span class="n">scm</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">SERVICE_START</span><span class="p">)</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">StartServiceA</span><span class="p">(</span><span class="n">servh</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CloseServiceHandle</span><span class="p">(</span><span class="n">servh</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="nd">@contextmanager</span>
|
||||
<span class="k">def</span> <span class="nf">scmanagera</span><span class="p">(</span><span class="n">access</span><span class="p">):</span>
|
||||
<span class="c1"># scmanager = windows.winproxy.OpenSCManagerA(dwDesiredAccess=SC_MANAGER_ENUMERATE_SERVICE)</span>
|
||||
<span class="n">scmanager</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">OpenSCManagerA</span><span class="p">(</span><span class="n">dwDesiredAccess</span><span class="o">=</span><span class="n">access</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">yield</span> <span class="n">scmanager</span>
|
||||
<span class="k">finally</span><span class="p">:</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CloseServiceHandle</span><span class="p">(</span><span class="n">scmanager</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">enumerate_services</span><span class="p">():</span>
|
||||
<span class="c1"># TODO: fix this so we don't have a scmanager leak..</span>
|
||||
<span class="n">scmanager</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">OpenSCManagerA</span><span class="p">(</span><span class="n">dwDesiredAccess</span><span class="o">=</span><span class="n">SC_MANAGER_ENUMERATE_SERVICE</span><span class="p">)</span>
|
||||
|
||||
<span class="n">size_needed</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">nb_services</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">counter</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">EnumServicesStatusExA</span><span class="p">(</span><span class="n">scmanager</span><span class="p">,</span> <span class="n">SC_ENUM_PROCESS_INFO</span><span class="p">,</span> <span class="n">SERVICE_TYPE_ALL</span><span class="p">,</span> <span class="n">SERVICE_ACTIVE</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">size_needed</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">nb_services</span><span class="p">),</span> <span class="n">byref</span><span class="p">(</span><span class="n">counter</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">EnumServicesStatusExA</span><span class="p">(</span><span class="n">scmanager</span><span class="p">,</span> <span class="n">SC_ENUM_PROCESS_INFO</span><span class="p">,</span> <span class="n">SERVICE_TYPE_ALL</span><span class="p">,</span> <span class="n">SERVICE_STATE_ALL</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">size_needed</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">nb_services</span><span class="p">),</span> <span class="n">byref</span><span class="p">(</span><span class="n">counter</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">WindowsError</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
|
||||
@@ -158,7 +177,7 @@
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="p">(</span><span class="n">BYTE</span> <span class="o">*</span> <span class="n">size</span><span class="p">)()</span>
|
||||
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">EnumServicesStatusExA</span><span class="p">(</span><span class="n">scmanager</span><span class="p">,</span> <span class="n">SC_ENUM_PROCESS_INFO</span><span class="p">,</span> <span class="n">SERVICE_TYPE_ALL</span><span class="p">,</span> <span class="n">SERVICE_ACTIVE</span><span class="p">,</span> <span class="n">buffer</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">size_needed</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">nb_services</span><span class="p">),</span> <span class="n">byref</span><span class="p">(</span><span class="n">counter</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">EnumServicesStatusExA</span><span class="p">(</span><span class="n">scmanager</span><span class="p">,</span> <span class="n">SC_ENUM_PROCESS_INFO</span><span class="p">,</span> <span class="n">SERVICE_TYPE_ALL</span><span class="p">,</span> <span class="n">SERVICE_STATE_ALL</span><span class="p">,</span> <span class="n">buffer</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">size_needed</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">nb_services</span><span class="p">),</span> <span class="n">byref</span><span class="p">(</span><span class="n">counter</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">continue</span>
|
||||
|
||||
@@ -194,7 +213,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+67
-9
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.winobject.system — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.winobject.system — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -69,6 +69,7 @@
|
||||
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">handle</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">windows.generated_def.winstructs</span> <span class="k">import</span> <span class="o">*</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.dbgprint</span> <span class="k">import</span> <span class="n">dbgprint</span>
|
||||
|
||||
<div class="viewcode-block" id="System"><a class="viewcode-back" href="../../../windows.html#windows.winobject.system.System">[docs]</a><span class="k">class</span> <span class="nc">System</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""The state of the current ``Windows`` system ``Python`` is running on"""</span>
|
||||
@@ -92,7 +93,7 @@
|
||||
|
||||
<span class="sd"> :type: [:class:`process.WinThread`] -- A list of Thread</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">enumerate_threads</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">enumerate_threads_setup_owners</span><span class="p">()</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">logicaldrives</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -229,6 +230,13 @@
|
||||
<span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_version</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">version_map</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">version</span><span class="o">.</span><span class="n">wProductType</span><span class="p">,</span> <span class="n">version</span><span class="o">.</span><span class="n">wProductType</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">windir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_buffer</span><span class="p">(</span><span class="mh">0x100</span><span class="p">)</span>
|
||||
<span class="n">reslen</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetWindowsDirectoryA</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">buffer</span><span class="p">[:</span><span class="n">reslen</span><span class="p">]</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">generated_def</span><span class="o">.</span><span class="n">OSVERSIONINFOEXA</span><span class="p">()</span>
|
||||
<span class="n">data</span><span class="o">.</span><span class="n">dwOSVersionInfoSize</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
@@ -250,8 +258,13 @@
|
||||
<span class="n">bufstr</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">bufptr</span><span class="p">,</span> <span class="n">LPCSTR</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">bufstr</span><span class="o">.</span><span class="n">value</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">build_number</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_file_version</span><span class="p">(</span><span class="s2">"ntdll"</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">enumerate_processes</span><span class="p">():</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Enumerating processes with CreateToolhelp32Snapshot"</span><span class="p">,</span> <span class="s2">"SLOW"</span><span class="p">)</span>
|
||||
<span class="n">process_entry</span> <span class="o">=</span> <span class="n">PROCESSENTRY32</span><span class="p">()</span>
|
||||
<span class="n">process_entry</span><span class="o">.</span><span class="n">dwSize</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">process_entry</span><span class="p">)</span>
|
||||
<span class="n">snap</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CreateToolhelp32Snapshot</span><span class="p">(</span><span class="n">windef</span><span class="o">.</span><span class="n">TH32CS_SNAPPROCESS</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
@@ -260,18 +273,63 @@
|
||||
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">process</span><span class="o">.</span><span class="n">WinProcess</span><span class="o">.</span><span class="n">_from_PROCESSENTRY32</span><span class="p">(</span><span class="n">process_entry</span><span class="p">))</span>
|
||||
<span class="k">while</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">Process32Next</span><span class="p">(</span><span class="n">snap</span><span class="p">,</span> <span class="n">process_entry</span><span class="p">):</span>
|
||||
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">process</span><span class="o">.</span><span class="n">WinProcess</span><span class="o">.</span><span class="n">_from_PROCESSENTRY32</span><span class="p">(</span><span class="n">process_entry</span><span class="p">))</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">CloseHandle</span><span class="p">(</span><span class="n">snap</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">enumerate_threads</span><span class="p">():</span>
|
||||
<span class="n">thread_entry</span> <span class="o">=</span> <span class="n">process</span><span class="o">.</span><span class="n">WinThread</span><span class="p">()</span>
|
||||
<span class="k">def</span> <span class="nf">enumerate_threads_generator</span><span class="p">():</span>
|
||||
<span class="c1"># Ptet dangereux, parce que on yield la meme THREADENTRY32 a chaque fois</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Enumerating threads with CreateToolhelp32Snapshot <generator>"</span><span class="p">,</span> <span class="s2">"SLOW"</span><span class="p">)</span>
|
||||
<span class="n">thread_entry</span> <span class="o">=</span> <span class="n">THREADENTRY32</span><span class="p">()</span>
|
||||
<span class="n">thread_entry</span><span class="o">.</span><span class="n">dwSize</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">thread_entry</span><span class="p">)</span>
|
||||
<span class="n">snap</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CreateToolhelp32Snapshot</span><span class="p">(</span><span class="n">windef</span><span class="o">.</span><span class="n">TH32CS_SNAPTHREAD</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"New handle CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD) <generator> | </span><span class="si">{0:#x}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">snap</span><span class="p">),</span> <span class="s2">"HANDLE"</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">Thread32First</span><span class="p">(</span><span class="n">snap</span><span class="p">,</span> <span class="n">thread_entry</span><span class="p">)</span>
|
||||
<span class="k">yield</span> <span class="n">thread_entry</span>
|
||||
<span class="k">while</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">Thread32Next</span><span class="p">(</span><span class="n">snap</span><span class="p">,</span> <span class="n">thread_entry</span><span class="p">):</span>
|
||||
<span class="k">yield</span> <span class="n">thread_entry</span>
|
||||
<span class="k">finally</span><span class="p">:</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">CloseHandle</span><span class="p">(</span><span class="n">snap</span><span class="p">)</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"CLOSE CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD) <generator> | </span><span class="si">{0:#x}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">snap</span><span class="p">),</span> <span class="s2">"HANDLE"</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">enumerate_threads</span><span class="p">():</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">WinThread</span><span class="o">.</span><span class="n">_from_THREADENTRY32</span><span class="p">(</span><span class="n">th</span><span class="p">)</span> <span class="k">for</span> <span class="n">th</span> <span class="ow">in</span> <span class="n">System</span><span class="o">.</span><span class="n">enumerate_threads_generator</span><span class="p">()]</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">enumerate_threads_setup_owners</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="c1"># Enumerating threads is a special operation concerning the owner process.</span>
|
||||
<span class="c1"># We may not be able to retrieve the name of the owning process by normal way</span>
|
||||
<span class="c1"># (as we need to get a handle on the process)</span>
|
||||
<span class="c1"># So, this implementation of enumerate_thread also setup the owner with the result of enumerate_processes</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Enumerating threads with CreateToolhelp32Snapshot and setup owner"</span><span class="p">,</span> <span class="s2">"SLOW"</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># One snap for both enum to be prevent race</span>
|
||||
<span class="n">snap</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CreateToolhelp32Snapshot</span><span class="p">(</span><span class="n">windef</span><span class="o">.</span><span class="n">TH32CS_SNAPTHREAD</span> <span class="o">|</span> <span class="n">windef</span><span class="o">.</span><span class="n">TH32CS_SNAPPROCESS</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
|
||||
<span class="n">process_entry</span> <span class="o">=</span> <span class="n">PROCESSENTRY32</span><span class="p">()</span>
|
||||
<span class="n">process_entry</span><span class="o">.</span><span class="n">dwSize</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">process_entry</span><span class="p">)</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">Process32First</span><span class="p">(</span><span class="n">snap</span><span class="p">,</span> <span class="n">process_entry</span><span class="p">)</span>
|
||||
<span class="n">processes</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">processes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">process</span><span class="o">.</span><span class="n">WinProcess</span><span class="o">.</span><span class="n">_from_PROCESSENTRY32</span><span class="p">(</span><span class="n">process_entry</span><span class="p">))</span>
|
||||
<span class="k">while</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">Process32Next</span><span class="p">(</span><span class="n">snap</span><span class="p">,</span> <span class="n">process_entry</span><span class="p">):</span>
|
||||
<span class="n">processes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">process</span><span class="o">.</span><span class="n">WinProcess</span><span class="o">.</span><span class="n">_from_PROCESSENTRY32</span><span class="p">(</span><span class="n">process_entry</span><span class="p">))</span>
|
||||
|
||||
<span class="c1"># Forge a dict pid -> process</span>
|
||||
<span class="n">proc_dict</span> <span class="o">=</span> <span class="p">{</span><span class="n">proc</span><span class="o">.</span><span class="n">pid</span><span class="p">:</span> <span class="n">proc</span> <span class="k">for</span> <span class="n">proc</span> <span class="ow">in</span> <span class="n">processes</span><span class="p">}</span>
|
||||
|
||||
<span class="n">thread_entry</span> <span class="o">=</span> <span class="n">THREADENTRY32</span><span class="p">()</span>
|
||||
<span class="n">thread_entry</span><span class="o">.</span><span class="n">dwSize</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">thread_entry</span><span class="p">)</span>
|
||||
<span class="n">threads</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">Thread32First</span><span class="p">(</span><span class="n">snap</span><span class="p">,</span> <span class="n">thread_entry</span><span class="p">)</span>
|
||||
<span class="n">threads</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">copy</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">thread_entry</span><span class="p">))</span>
|
||||
<span class="n">parent</span> <span class="o">=</span> <span class="n">proc_dict</span><span class="p">[</span><span class="n">thread_entry</span><span class="o">.</span><span class="n">th32OwnerProcessID</span><span class="p">]</span>
|
||||
<span class="n">threads</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">process</span><span class="o">.</span><span class="n">WinThread</span><span class="o">.</span><span class="n">_from_THREADENTRY32</span><span class="p">(</span><span class="n">thread_entry</span><span class="p">,</span> <span class="n">owner</span><span class="o">=</span><span class="n">parent</span><span class="p">))</span>
|
||||
<span class="k">while</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">Thread32Next</span><span class="p">(</span><span class="n">snap</span><span class="p">,</span> <span class="n">thread_entry</span><span class="p">):</span>
|
||||
<span class="n">threads</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">copy</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">thread_entry</span><span class="p">))</span>
|
||||
<span class="n">parent</span> <span class="o">=</span> <span class="n">proc_dict</span><span class="p">[</span><span class="n">thread_entry</span><span class="o">.</span><span class="n">th32OwnerProcessID</span><span class="p">]</span>
|
||||
<span class="n">threads</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">process</span><span class="o">.</span><span class="n">WinThread</span><span class="o">.</span><span class="n">_from_THREADENTRY32</span><span class="p">(</span><span class="n">thread_entry</span><span class="p">,</span> <span class="n">owner</span><span class="o">=</span><span class="n">parent</span><span class="p">))</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">CloseHandle</span><span class="p">(</span><span class="n">snap</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">threads</span></div>
|
||||
</pre></div>
|
||||
|
||||
@@ -303,7 +361,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+4
-4
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.winobject.volume — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.winobject.volume — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -149,7 +149,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+4
-4
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.winobject.wmi — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.winobject.wmi — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -167,7 +167,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+4
-4
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>windows.wintrust — PythonForWindows 0.2 documentation</title>
|
||||
<title>windows.wintrust — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../../',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -37,7 +37,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -276,7 +276,7 @@
|
||||
<li class="right" >
|
||||
<a href="../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
``windows.alpc`` -- Advanced Local Procedure Call
|
||||
*************************************************
|
||||
|
||||
.. module:: windows.alpc
|
||||
|
||||
The :mod:`windows.alpc` module regroups the classes that permits to send and receive
|
||||
ALPC messages over an ALPC port and the classes representing these messages.
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
See samples:
|
||||
|
||||
* :ref:`sample_alpc`
|
||||
* :ref:`sample_advanced_alpc`
|
||||
|
||||
ALPC Message
|
||||
------------
|
||||
|
||||
.. autoclass:: AlpcMessage
|
||||
|
||||
.. autoclass:: AlpcMessagePort
|
||||
|
||||
.. autoclass:: MessageAttribute
|
||||
|
||||
ALPC client
|
||||
-----------
|
||||
|
||||
.. autoclass:: AlpcClient
|
||||
|
||||
ALPC Server
|
||||
-----------
|
||||
|
||||
.. autoclass:: AlpcServer
|
||||
Vendored
-44
@@ -1,44 +0,0 @@
|
||||
:mod:`windows.com` - Component Object Model
|
||||
""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
.. module:: windows.com
|
||||
|
||||
A module to call `COM` interfaces from `Python` or
|
||||
`COM` vtable in python.
|
||||
|
||||
This code is only used in :mod:`windows.winobject.wmi` and :mod:`windows.winobject.network` for the firewall.
|
||||
The ability to create `COM` vtable is used in the `LKD project <https://github.com/sogeti-esec-lab/LKD/>`_ .
|
||||
|
||||
|
||||
Using a COM interface
|
||||
'''''''''''''''''''''
|
||||
|
||||
It's possible to directly call `COM` interface from python. All you need is the definition of the `COM` interface.
|
||||
|
||||
There are three ways to get the definition of the code interface:
|
||||
|
||||
* By using it from :mod:`windows.generated_def.interfaces`
|
||||
* By writing it yourself : <https://github.com/sogeti-esec-lab/LKD/blob/ba40727d7d257b00f89fc6ca7296c9833b7b75b2/dbginterface/remote.py#L56>`_
|
||||
* By generating it.
|
||||
|
||||
To generate a `COM` interface you need its definition from the ".c" file.
|
||||
Then add thisit to ``PythonForWindows\ctypes_generation\com\MyInterface.txt``.
|
||||
Finally re-generate the interface using ``generate.py``.
|
||||
|
||||
When you have the `COM` interface defintion you can create an instance of it.
|
||||
Then you need to retrieve the interface by using an API returning an object or :func:`window.com.create_instance`.
|
||||
You can then use the instance to call whatever method you need.
|
||||
|
||||
.. note::
|
||||
|
||||
see sample :ref:`sample_com_firewall`
|
||||
|
||||
Implementing a COM interface
|
||||
''''''''''''''''''''''''''''
|
||||
|
||||
To create `COM` object you need to:
|
||||
|
||||
1. Create your ``COMImplementation`` with an ``IMPLEMENT`` attribute that should be a cominterface `CODE 1 <https://github.com/sogeti-esec-lab/LKD/blob/efabf3cc38b94d4180ebe8d2c554da5d76b2fea1/lkd/dbginterface/base.py#L48>`_
|
||||
2. Implements the methods of the interface `CODE 2 <https://github.com/sogeti-esec-lab/LKD/blob/efabf3cc38b94d4180ebe8d2c554da5d76b2fea1/lkd/dbginterface/base.py#L55>`_
|
||||
3. Create an instance `CODE3 <https://github.com/sogeti-esec-lab/LKD/blob/efabf3cc38b94d4180ebe8d2c554da5d76b2fea1/lkd/dbginterface/base.py#L59>`_
|
||||
4. Pass it to whatever native function expects it `CODE4 <https://github.com/sogeti-esec-lab/LKD/blob/efabf3cc38b94d4180ebe8d2c554da5d76b2fea1/lkd/dbginterface/base.py#L272>`_
|
||||
+8
-4
@@ -30,9 +30,17 @@ import_pfx
|
||||
.. autofunction:: import_pfx
|
||||
|
||||
|
||||
|
||||
Certificate
|
||||
"""""""""""
|
||||
|
||||
.. warning::
|
||||
|
||||
The classes described here are under heavy test and try.
|
||||
|
||||
The classes, methods and properties described here will problably change as I haven't yet had the time
|
||||
to try it out in real cases and figure out the final look of the API I want to do.
|
||||
|
||||
.. note::
|
||||
|
||||
See sample :ref:`sample_crypto_certificate`
|
||||
@@ -54,10 +62,6 @@ CryptObject
|
||||
|
||||
.. autoclass:: CryptObject
|
||||
|
||||
.. warning::
|
||||
|
||||
The methods and property of this class will problably change as I haven't yet had the time
|
||||
to try it out in real cases.
|
||||
|
||||
|
||||
CryptContext
|
||||
|
||||
Vendored
-88
@@ -1,88 +0,0 @@
|
||||
:mod:`windows.debug` -- Debugging
|
||||
=================================
|
||||
|
||||
.. module:: windows.debug
|
||||
|
||||
.. note::
|
||||
|
||||
See sample :ref:`sample_debugger`
|
||||
|
||||
:class:`Debugger`
|
||||
"""""""""""""""""
|
||||
|
||||
The :class:`Debugger` is the base class to perform the debugging of a remote process.
|
||||
The :class:`Debugger` have some functions called on given event that can be implemented by subclasses.
|
||||
|
||||
All Memory-breakpoint are disabled when callind a public callback or a breakpoint ``trigger()`` function.
|
||||
|
||||
This means that those methods see the original ``current_process`` memory access rights.
|
||||
|
||||
.. autoclass:: Debugger
|
||||
:members:
|
||||
:member-order: bysource
|
||||
|
||||
.. automethod:: __init__
|
||||
|
||||
|
||||
|
||||
:class:`LocalDebugger`
|
||||
""""""""""""""""""""""
|
||||
|
||||
.. note::
|
||||
|
||||
See sample :ref:`sample_local_debugger`
|
||||
|
||||
The :class:`Debugger` is the base class to perform the debugging the current process.
|
||||
It is based on :func:`VectoredException` (see :ref:`sample_vectoredexception`)
|
||||
|
||||
There is not much documentation for now as the code might change soon.
|
||||
|
||||
|
||||
|
||||
.. autoclass:: LocalDebugger
|
||||
:members:
|
||||
|
||||
|
||||
|
||||
:class:`Breakpoint`
|
||||
"""""""""""""""""""
|
||||
|
||||
Standard breakpoints types expect an address as argument.
|
||||
|
||||
An address can be:
|
||||
|
||||
* An :class:`int`
|
||||
* A :class:`str` of form (breakpoint will be put when ``DLL`` is loaded):
|
||||
|
||||
* ``"DLL!ApiName"``
|
||||
* ``"DLL!Offset"`` where offset is a int ("16", "0x10", ..)
|
||||
|
||||
|
||||
When a breakpoint is hit, its ``trigger`` function is called with the debugger and a
|
||||
``DEBUG_EXECEPTION_EVENT`` structure as argument.
|
||||
|
||||
|
||||
.. autoclass:: Breakpoint
|
||||
:members:
|
||||
|
||||
.. autoclass:: HXBreakpoint
|
||||
:members:
|
||||
:inherited-members:
|
||||
|
||||
.. autoclass:: MemoryBreakpoint
|
||||
:members:
|
||||
:inherited-members:
|
||||
:special-members: __init__
|
||||
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
MemoryBreakpoint are triggered based on the fault address only (as I don't know a way to get the size of the read/write causing the fault without embedding a disassembler).
|
||||
|
||||
This means that a MEMBP at address ``X`` won't be triggered by a write of size 4 at address ``X - 1``. it's sad I know.
|
||||
|
||||
.. autoclass:: FunctionBP
|
||||
:members:
|
||||
:inherited-members:
|
||||
:special-members: __init__
|
||||
-99
@@ -1,99 +0,0 @@
|
||||
Exception and Context related structures
|
||||
========================================
|
||||
|
||||
.. module:: windows.winobject.exception
|
||||
|
||||
|
||||
This module regroups all the Exception/Context related structures and functions.
|
||||
Most of the structures are the Windows structure with a prefix ``E`` (For enhanced)
|
||||
|
||||
Those structure have the same fields that the normal windows ones but their types might vary for a simpler use.
|
||||
|
||||
|
||||
This module also define the decorator :func:`VectoredException` which allows to play with ``Vectored Exception Handler`` in Python
|
||||
|
||||
.. note::
|
||||
|
||||
See sample :ref:`sample_vectoredexception` samples
|
||||
|
||||
Exception Records
|
||||
'''''''''''''''''
|
||||
|
||||
.. autoclass:: EEXCEPTION_RECORD
|
||||
:members:
|
||||
:inherited-members:
|
||||
|
||||
.. autoclass:: EEXCEPTION_RECORD32
|
||||
:inherited-members:
|
||||
|
||||
.. autoclass:: EEXCEPTION_RECORD64
|
||||
:members:
|
||||
:inherited-members:
|
||||
|
||||
EXCEPTION DEBUG INFO
|
||||
''''''''''''''''''''
|
||||
|
||||
.. autoclass:: EEXCEPTION_DEBUG_INFO32
|
||||
:members:
|
||||
:inherited-members:
|
||||
|
||||
.. data:: ExceptionRecord
|
||||
|
||||
:type: :class:`EEXCEPTION_RECORD32`
|
||||
|
||||
|
||||
.. autoclass:: EEXCEPTION_DEBUG_INFO64
|
||||
:members:
|
||||
:inherited-members:
|
||||
|
||||
.. data:: ExceptionRecord
|
||||
|
||||
:type: :class:`EEXCEPTION_RECORD64`
|
||||
|
||||
Context
|
||||
'''''''
|
||||
|
||||
.. autoclass:: ECONTEXT32
|
||||
:members:
|
||||
:inherited-members:
|
||||
|
||||
.. autoclass:: ECONTEXTWOW64
|
||||
:members:
|
||||
:inherited-members:
|
||||
|
||||
.. autoclass:: ECONTEXT64
|
||||
:members:
|
||||
:inherited-members:
|
||||
|
||||
.. autoclass:: EEflags
|
||||
:members:
|
||||
|
||||
.. autoclass:: EDr7
|
||||
:members:
|
||||
|
||||
EXCEPTION POINTERS
|
||||
''''''''''''''''''
|
||||
|
||||
.. autoclass:: EEXCEPTION_POINTERS
|
||||
:members:
|
||||
|
||||
.. data:: ExceptionRecord
|
||||
|
||||
:type: POINTER to :class:`EEXCEPTION_RECORD`
|
||||
|
||||
.. data:: ContextRecord
|
||||
|
||||
:type: POINTER to :class:`ECONTEXT32` or :class:`ECONTEXT64`
|
||||
|
||||
|
||||
.. _vectoredexception:
|
||||
|
||||
Vectored Exception
|
||||
''''''''''''''''''
|
||||
|
||||
.. note::
|
||||
|
||||
See sample :ref:`sample_vectoredexception`
|
||||
|
||||
.. autoclass:: VectoredException
|
||||
:members:
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
``windows.generated_def`` -- generated Windows defines and structures
|
||||
*********************************************************************
|
||||
|
||||
.. module:: windows.generated_def
|
||||
|
||||
:mod:`windows.generated_def` contains ``Python`` files generated by ``ctypes_generation``.
|
||||
|
||||
Those generated files includes:
|
||||
|
||||
- some Windows structures and enums
|
||||
- some Windows defines including some ``NTSTATUS``
|
||||
- some Windows function prototypes
|
||||
|
||||
|
||||
Each value in ``windef`` and ``ntstatus`` is a :class:`Flag` or a :class:`StrFlag`.
|
||||
|
||||
Here is every generated definition by type:
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
windef_generated.rst
|
||||
ntstatus_generated.rst
|
||||
winstructs_generated.rst
|
||||
|
||||
|
||||
|
||||
.. class:: Flag
|
||||
|
||||
A :class:`long` with a name
|
||||
|
||||
|
||||
.. class:: StrFlag
|
||||
|
||||
A :class:`str` with a name
|
||||
|
||||
|
||||
Example
|
||||
--------
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
>>> import windows.generated_def
|
||||
>>> import windows.generated_def as gdef
|
||||
>>> gdef
|
||||
<module 'windows.generated_def' from 'c:\users\hakril\documents\work\pythonforwindows\windows\generated_def\__init__.pyc'>
|
||||
|
||||
>>> gdef.PAGE_EXECUTE_READWRITE
|
||||
PAGE_EXECUTE_READWRITE(0x40L)
|
||||
|
||||
>>> gdef.PAGE_EXECUTE_READWRITE == 0x40
|
||||
True
|
||||
|
||||
>>> gdef.PAGE_EXECUTE_READWRITE + 1
|
||||
65L
|
||||
|
||||
>>> gdef.STATUS_ACCESS_VIOLATION
|
||||
STATUS_ACCESS_VIOLATION(0xc0000005L)
|
||||
|
||||
>>> gdef.LDR_DATA_TABLE_ENTRY
|
||||
<class 'windows.generated_def.winstructs._LDR_DATA_TABLE_ENTRY'>
|
||||
|
||||
>>> gdef.LDR_DATA_TABLE_ENTRY._fields_
|
||||
[('Reserved1', <class 'windows.generated_def.winstructs.c_void_p_Array_2'>), ...]
|
||||
|
||||
>>> gdef.MEMORY_INFORMATION_CLASS
|
||||
<class 'windows.generated_def.winstructs._MEMORY_INFORMATION_CLASS'>
|
||||
|
||||
>>> gdef.MEMORY_INFORMATION_CLASS.values
|
||||
[_MEMORY_INFORMATION_CLASS.MemoryBasicInformation(0x0L), _MEMORY_INFORMATION_CLASS.MemoryWorkingSetList(0x1L),
|
||||
_MEMORY_INFORMATION_CLASS.MemorySectionName(0x2L), _MEMORY_INFORMATION_CLASS.MemoryBasicVlmInformation(0x3L),
|
||||
_MEMORY_INFORMATION_CLASS.MemoryWorkingSetListEx(0x4L)]
|
||||
|
||||
>>> gdef.MemoryBasicInformation
|
||||
_MEMORY_INFORMATION_CLASS.MemoryBasicInformation(0x0L)
|
||||
Vendored
-10
@@ -1,10 +0,0 @@
|
||||
Handle -- Processes handles
|
||||
============================
|
||||
|
||||
.. note::
|
||||
|
||||
See sample :ref:`sample_system`
|
||||
|
||||
.. module:: windows.winobject.handle
|
||||
|
||||
.. autoclass:: Handle
|
||||
-113
@@ -1,113 +0,0 @@
|
||||
IAT hooking
|
||||
"""""""""""
|
||||
|
||||
.. note::
|
||||
|
||||
See sample :ref:`sample_iat_hook`
|
||||
|
||||
Putting an IAT hook
|
||||
'''''''''''''''''''
|
||||
|
||||
To setup your IAT hook you just need:
|
||||
|
||||
* A callback that respect the :ref:`hook_protocol`
|
||||
* The :class:`windows.pe_parse.IATEntry` to hook
|
||||
|
||||
|
||||
You just need to use the function :func:`windows.pe_parse.IATEntry.set_hook`
|
||||
|
||||
Putting a hook::
|
||||
|
||||
import windows
|
||||
from windows.hooks import *
|
||||
|
||||
@CreateFileACallback
|
||||
def createfile_callback(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile, real_function):
|
||||
print("Trying to open {0}".format(lpFileName))
|
||||
if "secret" in lpFileName:
|
||||
return 0xffffffff
|
||||
return real_function()
|
||||
|
||||
my_exe = windows.current_process.peb.modules[0]
|
||||
imp = my_exe.pe.imports
|
||||
|
||||
iat_create_file = [entry for entry in imp['kernel32.dll'] if entry.name == "CreateFileA"]
|
||||
iat_create_file.set_hook(createfile_callback)
|
||||
|
||||
|
||||
.. _hook_protocol:
|
||||
|
||||
Hook protocol
|
||||
'''''''''''''
|
||||
|
||||
Callback arguments
|
||||
------------------
|
||||
|
||||
A hook callback must have the same number of argument as the hooked API, PLUS a last argument ``real_function``.
|
||||
|
||||
|
||||
|
||||
The ``real_function`` argument is a callable that represent the hooked API, it can be called in two ways:
|
||||
|
||||
* Without argument, the call will be done with the argument originaly passed to your callback. This allows simple redirection to the real API.
|
||||
|
||||
* With arguments it will simply call the API with these.
|
||||
|
||||
Example::
|
||||
|
||||
def createfile_callback(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile, real_function):
|
||||
print("Trying to open {0}".format(lpFileName))
|
||||
if "secret" in lpFileName:
|
||||
return 0xffffffff
|
||||
# Perform the real call
|
||||
return real_function()
|
||||
|
||||
|
||||
A hook callback must also embed some :ref:`Type Information <type_information>`
|
||||
|
||||
|
||||
.. _type_information:
|
||||
|
||||
Callback type information
|
||||
--------------------------
|
||||
|
||||
In order make the magic behind hook callback, :mod:`ctypes` needs to have type information about the API parameters.
|
||||
|
||||
There is (again) two ways to give those informations to your hook callback. Both techniques use a decorator to setup type information to the callback.
|
||||
|
||||
* Giving the type manualy using the decorator :class:`windows.hooks.Callback`::
|
||||
|
||||
from windows.hooks import *
|
||||
# First type is return type, others are parameters types
|
||||
@Callback(ctypes.c_void_p, ctypes.c_ulong)
|
||||
def exit_callback(x, real_function):
|
||||
print("Try to quit with {0} | {1}".format(x, type(x)))
|
||||
if x == 3:
|
||||
print("TRYING TO REAL EXIT")
|
||||
return real_function(1234)
|
||||
return 0x4242424243444546
|
||||
|
||||
* Using the `Callback` decorator generated from known functions::
|
||||
|
||||
from windows.hooks import *
|
||||
# Decorator name is always API_NAME + "CallBack"
|
||||
@CreateFileACallback
|
||||
def createfile_callback(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile, real_function):
|
||||
print("Trying to open {0}".format(lpFileName))
|
||||
if "secret" in lpFileName:
|
||||
return 0xffffffff
|
||||
return real_function()
|
||||
|
||||
.. note::
|
||||
|
||||
See the list of known functions
|
||||
|
||||
|
||||
:mod:`windows.hooks`
|
||||
''''''''''''''''''''
|
||||
|
||||
.. module:: windows.hooks
|
||||
|
||||
.. autoclass:: windows.hooks.Callback
|
||||
|
||||
.. autoclass:: windows.hooks.IATHook
|
||||
+3
@@ -21,6 +21,9 @@ Contents:
|
||||
debug.rst
|
||||
com.rst
|
||||
crypto.rst
|
||||
alpc.rst
|
||||
rpc.rst
|
||||
generated.rst
|
||||
iat_hook.rst
|
||||
wip.rst
|
||||
internals.rst
|
||||
|
||||
Vendored
-35
@@ -1,35 +0,0 @@
|
||||
.. PyWindows documentation master file, created by
|
||||
sphinx-quickstart on Tue Apr 07 11:39:41 2015.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Welcome to PythonForWindows's documentation!
|
||||
============================================
|
||||
|
||||
Contents:
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:numbered:
|
||||
|
||||
windows.rst
|
||||
various.rst
|
||||
native_exec.rst
|
||||
winproxy.rst
|
||||
utils.rst
|
||||
wintrust.rst
|
||||
debug.rst
|
||||
com.rst
|
||||
iat_hook.rst
|
||||
wip.rst
|
||||
internals.rst
|
||||
sample.rst
|
||||
|
||||
|
||||
Indices and tables
|
||||
==================
|
||||
|
||||
* :ref:`modindex`
|
||||
* :ref:`search`
|
||||
* :ref:`genindex`
|
||||
|
||||
-125
@@ -1,125 +0,0 @@
|
||||
Internals
|
||||
=========
|
||||
|
||||
Because some horrible hacks of ``PythonForWindows`` are hidden and I wanted to talk about it.
|
||||
|
||||
remotectypes.py
|
||||
'''''''''''''''
|
||||
|
||||
.. module:: windows.remotectypes
|
||||
|
||||
Performing parsing of PEB / PE in remote process may be painful and i didn't want
|
||||
to have two versions of all my parsing code.
|
||||
|
||||
So I made a wrapper around :mod:`ctypes` that is able to do two things:
|
||||
|
||||
- Transform a 32bits ctypes structure into a 64bits one and reverse
|
||||
|
||||
This is done by replacing the ``c_void_p``/``c_char_p`` by ``DWORD`` or
|
||||
``QWORD`` and rewriting a wrapper around the :mod:`ctypes` ``POINTER`` and other stuff.
|
||||
It might not works for every structure by i didn't have any problem for now.
|
||||
|
||||
- Read the memory in another process
|
||||
|
||||
For this one I rewrote a class that use the standard :mod:`ctypes` structure
|
||||
offset-size calculation, extracts those information when asked for a field and read it from the target process.
|
||||
We just need to take care of special cases: ``POINTER`` / ``ARRAY`` / ``STRING`` / ..
|
||||
|
||||
We also need to be carreful about the inheritance, we need to inherit from "hidden"
|
||||
:class:`ctypes` classes to keep the magic working.
|
||||
|
||||
|
||||
This module exports the following API:
|
||||
|
||||
.. autofunction:: transform_type_to_remote32bits
|
||||
|
||||
.. autofunction:: transform_type_to_remote64bits
|
||||
|
||||
Both functions return a class that represent the structure in a remote process.
|
||||
The class.__init__ accept two arguments:
|
||||
|
||||
* ``base_addr``: the address of the object in the remote process
|
||||
* ``target``: an object with a method ``read_memory`` (so a :class:`windows.winobject.WinProcess` in our case)
|
||||
|
||||
Example ``WinProcess.peb``::
|
||||
|
||||
def peb(self):
|
||||
if windows.current_process.bitness == 32 and self.bitness == 64:
|
||||
return RemotePEB64(self.peb_addr, self)
|
||||
if windows.current_process.bitness == 64 and self.bitness == 32:
|
||||
return RemotePEB32(self.peb_addr, self)
|
||||
return RemotePEB(self.peb_addr, self)
|
||||
|
||||
I am pretty sure that this code does NOT handle all the cases, so it might break some day.
|
||||
|
||||
syswow64.py -- Crossing the heaven gate
|
||||
'''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
.. module:: windows.syswow64
|
||||
|
||||
One of my goal with ``PythonForWindows`` is to have some abstraction of the bitness of the processes.
|
||||
It means being able to work on a ``32bits Python`` or a ``64bits Python``.
|
||||
|
||||
In the case of a 32bits python on a ``64bits`` system (``SysWow64``) it's not trivial to perform operation on
|
||||
other ``64bits`` processes. For example directly calling :func:`CreateRemoteThread` will not work.
|
||||
|
||||
To be able to perform those operation we must be able to execute code in the ``64bits`` part of our
|
||||
``SysWow64`` process.
|
||||
|
||||
.. note::
|
||||
|
||||
See `Knockin’ on Heaven’s Gate – Dynamic Processor Mode Switching <http://rce.co/knockin-on-heavens-gate-dynamic-processor-mode-switching/>`_
|
||||
|
||||
|
||||
For that we need to jump to the 64bits segment of our process, execute some code then return.
|
||||
To do so, we need to use some ``far jump`` / ``far ret`` with the segments selector ``0x23`` (CS_32bits) and ``0x33`` (CS_64bits).
|
||||
|
||||
The generation of this is quite ugly in my case.
|
||||
This code is in:
|
||||
|
||||
.. function:: execute_64bits_code_from_syswow
|
||||
|
||||
Once we are able to execute some code in the ``64bits`` part we need to create the code that will call our API (in NTDLL).
|
||||
To do that, I rely on the type information already present in the function of :mod:`windows.winproxy`.
|
||||
With these information we are able to know
|
||||
|
||||
* The name of the API
|
||||
* The number of arguments
|
||||
|
||||
Then I generate the correct x64 stub (using :mod:`windows.native_exec.simple_x64`) with the function:
|
||||
|
||||
.. function:: generate_syswow64_call
|
||||
|
||||
One problem I encountered is that our function must be able to pass values of 64bits, so passing arguments by register is not possible.
|
||||
|
||||
For now I allocate a buffer where a python wrapper copy the parameters and the x64 stub retrieves them from here.
|
||||
|
||||
(It might be possible to do something by creating a WINCFUNC with only ULONG64 parameters).
|
||||
|
||||
.. function:: try_generate_stub_target
|
||||
|
||||
The final result is a ``Python`` function like the one in :mod:`windows.winproxy`
|
||||
|
||||
* It copies the arguments in the buffer
|
||||
* Jumps on the 32->64 stub
|
||||
* X64 bits code retrieves the arguments in the buffer and setup the registers and the stack for the call
|
||||
* Calls the API
|
||||
* Returns to 32bits mode.
|
||||
|
||||
.. class:: Syswow64ApiProxy
|
||||
|
||||
Existing function are:
|
||||
|
||||
.. function:: NtCreateThreadEx_32_to_64
|
||||
|
||||
.. function:: NtQueryInformationProcess_32_to_64
|
||||
|
||||
.. function:: NtQueryInformationThread_32_to_64
|
||||
|
||||
.. function:: NtQueryVirtualMemory_32_to_64
|
||||
|
||||
.. function:: NtGetContextThread_32_to_64
|
||||
|
||||
.. function:: NtSetContextThread_32_to_64
|
||||
|
||||
.. function:: LdrLoadDll_32_to_64
|
||||
-236
@@ -1,236 +0,0 @@
|
||||
.. module:: windows.native_exec
|
||||
|
||||
``windows.native_exec`` -- Native Code Execution
|
||||
************************************************
|
||||
|
||||
|
||||
:mod:`windows.native_exec` allows to create `Python` functions calling native code.
|
||||
it also provides a simple assembler for x86 and x64.
|
||||
|
||||
:mod:`windows.native_exec` provides those functions:
|
||||
|
||||
.. autofunction:: windows.native_exec.create_function
|
||||
|
||||
The :mod:`windows.native_exec` also contains some submodules:
|
||||
* :mod:`windows.native_exec.cpuid`
|
||||
* :mod:`windows.native_exec.simple_x86`
|
||||
* :mod:`windows.native_exec.simple_x64`
|
||||
|
||||
:mod:`windows.native_exec.cpuid` -- Interface to native CPUID
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
.. automodule:: windows.native_exec.cpuid
|
||||
:no-show-inheritance:
|
||||
:no-members: bitness
|
||||
|
||||
Demo::
|
||||
|
||||
>>> import windows.native_exec.cpuid
|
||||
>>> windows.native_exec.cpuid.do_cpuid(0)
|
||||
<windows.native_exec.cpuid.X86CpuidResult object at 0x0330D990>
|
||||
>>> x = windows.native_exec.cpuid.do_cpuid(0)
|
||||
>>> x.EAX
|
||||
13L
|
||||
>>> x.EBX
|
||||
1970169159L
|
||||
>>> windows.native_exec.cpuid.get_vendor_id()
|
||||
'GenuineIntel'
|
||||
>>> windows.native_exec.cpuid.get_proc_family_model()
|
||||
(6L, 58L)
|
||||
|
||||
|
||||
:mod:`windows.native_exec.simple_x86` -- X86 Assembler
|
||||
""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
.. module:: windows.native_exec.simple_x86
|
||||
|
||||
The :mod:`windows.native_exec.simple_x86` module allows to create simple x86 code.
|
||||
|
||||
Its features are:
|
||||
* Forward - Backward jump (using labels)
|
||||
* Non-string interface for conditional/context dependent generation
|
||||
|
||||
|
||||
.. note::
|
||||
The assembler DOES NOT handle every instruction at all.
|
||||
|
||||
|
||||
The assembler instructions are `Python` object that may accept arguments representing
|
||||
the mnemonic operands.
|
||||
|
||||
These parameters can be of type:
|
||||
* :class:`str` (register)
|
||||
* :class:`int` (int)
|
||||
* :class:`mem_access` (memory access)
|
||||
|
||||
.. autoclass:: windows.native_exec.simple_x86.mem_access
|
||||
:members: prefix, base, index, scale, disp
|
||||
:exclude-members: count
|
||||
|
||||
The :class:`mem_access` object can be created:
|
||||
* By hand
|
||||
* Using :func:`create_displacement`
|
||||
* Using :func:`mem`
|
||||
|
||||
.. autofunction:: windows.native_exec.simple_x86.create_displacement
|
||||
.. autofunction:: windows.native_exec.simple_x86.deref
|
||||
.. autofunction:: windows.native_exec.simple_x86.mem
|
||||
|
||||
Instruction assembling::
|
||||
|
||||
>>> import windows.native_exec.simple_x86 as x86
|
||||
>>> import random
|
||||
>>> x86.Mov
|
||||
<class 'windows.native_exec.simple_x86.Mov'>
|
||||
>>> instr = x86.Mov("EAX", "EBX")
|
||||
>>> instr
|
||||
<windows.native_exec.simple_x86.Mov object at 0x03243770>
|
||||
>>> instr.get_code()
|
||||
'\x89\xd8'
|
||||
>>> x86.Mov("EAX", 0x42424242).get_code()
|
||||
'\xc7\xc0BBBB'
|
||||
>>> x86.Mov("EAX", x86.create_displacement(base="EAX", disp=random.randint(0, 0xffffffff))).get_code()
|
||||
'\x8b\x80\x977\n&'
|
||||
>>> x86.Mov(x86.mem("[EBX + EDI * 2 + 0x11111111]"), "EAX").get_code()
|
||||
'\x89\x84{\x11\x11\x11\x11'
|
||||
>>> x86.Mov(x86.mem("gs:[EBX + EDI * 2 + 0x11111111]"), "EAX").get_code()
|
||||
'e\x89\x84{\x11\x11\x11\x11'
|
||||
|
||||
:mod:`windows.native_exec.simple_x86` also provides an interface to complex shellcode assembling
|
||||
including jump and label via the :class:`MultipleInstr` class.
|
||||
|
||||
Shellcode assembling::
|
||||
|
||||
import windows.native_exec.simple_x86 as x86
|
||||
|
||||
code = x86.MultipleInstr()
|
||||
code += x86.Label(":BEGIN")
|
||||
code += x86.Jmp(":BEGIN")
|
||||
print(repr(code.get_code()))
|
||||
# '\xeb\xfe'
|
||||
|
||||
Another example from a project::
|
||||
|
||||
IO_STACK_INPUT_BUFFER_LEN = x86.mem('[ESI + 8]')
|
||||
IO_STACK_INPUT_BUFFER = x86.mem('[ESI + 0x10]')
|
||||
|
||||
INPUT_BUFFER_SIZE = x86.mem('[ECX]')
|
||||
INPUT_BUFFER_PORT = x86.mem('[ECX + 4]')
|
||||
INPUT_BUFFER_VALUE = x86.mem('[ECX + 8]')
|
||||
|
||||
out_ioctl = x86.MultipleInstr()
|
||||
out_ioctl += x86.Cmp(IO_STACK_INPUT_BUFFER_LEN, 0xc) # size indicator / port / value
|
||||
out_ioctl += x86.Jnz(":FAIL")
|
||||
out_ioctl += x86.Mov('ECX', IO_STACK_INPUT_BUFFER)
|
||||
out_ioctl += x86.Mov('EDX', INPUT_BUFFER_PORT)
|
||||
out_ioctl += x86.Mov('EAX', INPUT_BUFFER_VALUE)
|
||||
out_ioctl += x86.Mov('ECX', INPUT_BUFFER_SIZE)
|
||||
out_ioctl += x86.Cmp('ECX', 0x1)
|
||||
out_ioctl += x86.Jnz(":OUT_2_OR_4")
|
||||
out_ioctl += x86.Out('DX', 'AL')
|
||||
out_ioctl += x86.Jmp(':SUCCESS')
|
||||
out_ioctl += x86.Label(":OUT_2_OR_4")
|
||||
out_ioctl += x86.Cmp('ECX', 0x2)
|
||||
out_ioctl += x86.Jnz(":OUT_4")
|
||||
out_ioctl += x86.Out('DX', 'AX')
|
||||
out_ioctl += x86.Jmp(':SUCCESS')
|
||||
out_ioctl += x86.Label(":OUT_4")
|
||||
out_ioctl += x86.Out('DX', 'EAX')
|
||||
out_ioctl += x86.Label(":SUCCESS")
|
||||
out_ioctl += x86.Xor('EAX', 'EAX')
|
||||
out_ioctl += x86.Ret()
|
||||
out_ioctl += x86.Label(":FAIL")
|
||||
out_ioctl += x86.Mov('EAX', 0x0C000000D)
|
||||
out_ioctl += x86.Ret()
|
||||
|
||||
out_ioctl.get_code()
|
||||
'\x81~\x08\x0c\x00\x00\x00u&\x8bN\x10\x8bQ\x04\x8bA\x08\x8b\t\x81\xf9\x01\x00\x00\x00u\x03\xee\xeb\r\x81\xf9\x02\x00\x00\x00u\x04f\xef\xeb\x01\xef1\xc0\xc3\xc7\xc0\r\x00\x00\xc0\xc3'
|
||||
|
||||
|
||||
:mod:`windows.native_exec.simple_x64` -- X64 Assembler
|
||||
""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
.. module:: windows.native_exec.simple_x64
|
||||
|
||||
Same things as :mod:`windows.native_exec.simple_x86`
|
||||
|
||||
The only things that change are:
|
||||
* The registers name
|
||||
|
||||
:mod:`windows.native_exec.simple_x64` handles 32 and 64 bits operations.
|
||||
|
||||
Demo::
|
||||
|
||||
>>> import windows.native_exec.simple_x64 as x64
|
||||
>>> x64.Mov("RAX", "R13").get_code()
|
||||
'L\x89\xe8'
|
||||
>>> x64.Mov("EAX", "EDI").get_code()
|
||||
'\x89\xf8'
|
||||
>>> x64.Mov("RAX", "EDI").get_code()
|
||||
"""
|
||||
ValueError: Size mismatch
|
||||
"""
|
||||
>>> x64.Mov("RAX", x64.mem("[EAX]")).get_code()
|
||||
'gH\x8b\x00'
|
||||
>>> x64.Mov("RAX", x64.mem("[RAX]")).get_code()
|
||||
'H\x8b\x00'
|
||||
>>> x64.Mov("EAX", x64.mem("[RAX]")).get_code()
|
||||
'\x8b\x00'
|
||||
>>> x64.Mov("EAX", x64.mem("[EAX]")).get_code()
|
||||
'g\x8b\x00'
|
||||
|
||||
|
||||
|
||||
:mod:`windows.native_exec.nativeutils` -- Native utility functions
|
||||
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
.. module:: windows.native_exec.nativeutils
|
||||
|
||||
This module contains some native-code functions that can be used for various purposes.
|
||||
Each function export a label that allow another :class:`MultipleInstr` to call the code of the function.
|
||||
|
||||
The current functions are:
|
||||
|
||||
* ``StrlenW64`` A 64bits wide-string STRLEN (``Label(":FUNC_STRLENW64")``)
|
||||
* ``StrlenA64`` A 64bits ASCII STRLEN (``Label(":FUNC_STRLENA64")``)
|
||||
* ``GetProcAddress64`` A 64bits export resolver (``Label(":FUNC_GETPROCADDRESS64")``)
|
||||
|
||||
* Arg1: The DLL (wstring)
|
||||
* Arg2: The API (string)
|
||||
* Return value:
|
||||
|
||||
* 0xfffffffffffffffe if the DLL is not found
|
||||
* 0xffffffffffffffff if the API is not found
|
||||
* The address of the function
|
||||
|
||||
* ``StrlenW32`` A 32bits wide-string STRLEN (``Label(":FUNC_STRLENW32")``)
|
||||
* ``StrlenA32`` A 32bits ASCII STRLEN (``Label(":FUNC_STRLENA32")``)
|
||||
* ``GetProcAddress32`` A 32bits export resolver (``Label(":FUNC_GETPROCADDRESS32")``)
|
||||
|
||||
* Arg1: The DLL (wstring)
|
||||
* Arg2: The API (string)
|
||||
* Return value:
|
||||
|
||||
* 0xfffffffe if the DLL is not found
|
||||
* 0xffffffff if the API is not found
|
||||
* The address of the function
|
||||
|
||||
To use those functions in a :class:`MultipleInstr` just call the label in your code and append the function at
|
||||
the end of your :class:`MultipleInstr`
|
||||
|
||||
|
||||
Example::
|
||||
|
||||
RemoteManualLoadLibray = x86.MultipleInstr()
|
||||
|
||||
RemoteManualLoadLibray += x86.Mov("ECX", x86.mem("[ESP + 4]"))
|
||||
RemoteManualLoadLibray += x86.Push(x86.mem("[ECX + 4]"))
|
||||
RemoteManualLoadLibray += x86.Push(x86.mem("[ECX]"))
|
||||
RemoteManualLoadLibray += x86.Call(":FUNC_GETPROCADDRESS32")
|
||||
RemoteManualLoadLibray += x86.Push(x86.mem("[ECX + 8]"))
|
||||
RemoteManualLoadLibray += x86.Call("EAX") # LoadLibrary
|
||||
RemoteManualLoadLibray += x86.Pop("ECX")
|
||||
RemoteManualLoadLibray += x86.Pop("ECX")
|
||||
RemoteManualLoadLibray += x86.Ret()
|
||||
|
||||
RemoteManualLoadLibray += GetProcAddress32
|
||||
Vendored
-27
@@ -1,27 +0,0 @@
|
||||
Network
|
||||
=======
|
||||
|
||||
.. module:: windows.winobject.network
|
||||
|
||||
.. note::
|
||||
|
||||
See sample :ref:`sample_network_exploration`
|
||||
|
||||
|
||||
.. autoclass:: Network
|
||||
|
||||
Connections
|
||||
"""""""""""
|
||||
|
||||
.. autoclass:: TCP4Connection
|
||||
|
||||
|
||||
.. autoclass:: TCP6Connection
|
||||
|
||||
Firewall
|
||||
""""""""
|
||||
|
||||
.. autoclass:: Firewall
|
||||
|
||||
|
||||
.. autoclass:: FirewallRule
|
||||
+1798
File diff suppressed because it is too large
Load Diff
Vendored
-128
@@ -1,128 +0,0 @@
|
||||
Processes and Threads
|
||||
"""""""""""""""""""""
|
||||
|
||||
.. module:: windows.winobject.process
|
||||
|
||||
CurrentProcess
|
||||
''''''''''''''
|
||||
|
||||
.. note::
|
||||
|
||||
See sample :ref:`sample_current_process`
|
||||
|
||||
.. autoclass:: CurrentProcess
|
||||
:members:
|
||||
:show-inheritance:
|
||||
:inherited-members:
|
||||
|
||||
CurrentThread
|
||||
'''''''''''''
|
||||
|
||||
.. autoclass:: CurrentThread
|
||||
:members:
|
||||
:show-inheritance:
|
||||
:inherited-members:
|
||||
|
||||
WinProcess
|
||||
''''''''''
|
||||
|
||||
.. note::
|
||||
|
||||
See sample :ref:`sample_remote_process`
|
||||
|
||||
.. autoclass:: WinProcess
|
||||
:members:
|
||||
:show-inheritance:
|
||||
:inherited-members:
|
||||
|
||||
|
||||
WinThread
|
||||
'''''''''
|
||||
|
||||
.. autoclass:: WinThread
|
||||
:members:
|
||||
:show-inheritance:
|
||||
:inherited-members:
|
||||
|
||||
|
||||
.. autoclass:: DeadThread
|
||||
:members:
|
||||
:show-inheritance:
|
||||
:inherited-members:
|
||||
|
||||
Token
|
||||
'''''
|
||||
|
||||
.. autoclass:: Token
|
||||
:members:
|
||||
:inherited-members:
|
||||
|
||||
|
||||
PEB Exploration
|
||||
"""""""""""""""
|
||||
|
||||
The :mod:`windows` module is able to parse the PEB of the current process or remote process.
|
||||
The :class:`PEB` is accessible via ``process.peb`` and is of type :class:`PEB`.
|
||||
|
||||
.. note::
|
||||
|
||||
See sample :ref:`sample_peb_exploration`
|
||||
|
||||
PEB
|
||||
'''
|
||||
|
||||
.. autoclass:: PEB
|
||||
:members:
|
||||
:inherited-members:
|
||||
|
||||
.. autoclass:: WinUnicodeString
|
||||
|
||||
LoadedModule
|
||||
''''''''''''
|
||||
|
||||
.. autoclass:: LoadedModule
|
||||
|
||||
|
||||
PEFile - Parsing loaded PE
|
||||
""""""""""""""""""""""""""
|
||||
|
||||
:mod:`windows.pe_parse`
|
||||
'''''''''''''''''''''''
|
||||
|
||||
.. module:: windows.pe_parse
|
||||
|
||||
.. autofunction:: windows.pe_parse.GetPEFile
|
||||
|
||||
PEFile
|
||||
^^^^^^
|
||||
|
||||
.. autoclass:: PEFile
|
||||
|
||||
IATEntry
|
||||
^^^^^^^^
|
||||
|
||||
.. autoclass:: IATEntry
|
||||
|
||||
.. data:: addr
|
||||
|
||||
:class:`int` : Address of the IAT Entry
|
||||
|
||||
.. data:: ord
|
||||
|
||||
:class:`int` : Ordinal of the imported function
|
||||
|
||||
.. data:: name
|
||||
|
||||
:class:`int` : Name of the imported function
|
||||
|
||||
.. data:: value
|
||||
|
||||
:class:`int` : The content (destination) of the IAT entry
|
||||
|
||||
.. warning::
|
||||
|
||||
`value` is a descriptor. Setting its value will actually CHANGE THE IAT ENTRY, resulting in a segfault if no VirtualProtect have been done.
|
||||
|
||||
.. note::
|
||||
|
||||
See: :class:`windows.utils.VirtualProtected`
|
||||
-38
@@ -1,38 +0,0 @@
|
||||
Registry
|
||||
========
|
||||
|
||||
.. module:: windows.winobject.registry
|
||||
|
||||
.. note::
|
||||
|
||||
See sample :ref:`sample_registry`
|
||||
|
||||
Registry
|
||||
""""""""
|
||||
|
||||
.. autoclass:: Registry
|
||||
:special-members: __getitem__
|
||||
|
||||
|
||||
PyHKey
|
||||
""""""
|
||||
|
||||
.. autoclass:: PyHKey
|
||||
|
||||
.. function:: __call__(name)
|
||||
|
||||
Alias for :func:`open_subkey`
|
||||
|
||||
.. function:: __getitem__(name)
|
||||
|
||||
Alias for :func:`get`
|
||||
|
||||
.. function:: __setitem__(name)
|
||||
|
||||
Wrapper for :func:`set`, accept ``value`` or ``(value, type)``
|
||||
|
||||
KeyValue
|
||||
""""""""
|
||||
|
||||
.. autoclass:: KeyValue
|
||||
:exclude-members: count, index
|
||||
Vendored
+233
@@ -0,0 +1,233 @@
|
||||
``windows.rpc`` -- ALPC-based Windows RPC
|
||||
*****************************************
|
||||
|
||||
.. module:: windows.rpc
|
||||
|
||||
The :mod:`windows.rpc` allows to perform the basic for MS-RPC:
|
||||
|
||||
* find interface endpoints
|
||||
* connect to it
|
||||
* bind to interfaces
|
||||
* perform call
|
||||
* Marshall/Unmarshall NDR
|
||||
|
||||
.. note::
|
||||
|
||||
See samples:
|
||||
|
||||
* :ref:`sample_rpc_uac`
|
||||
* :ref:`sample_rpc_lsass`
|
||||
|
||||
|
||||
RPCClient
|
||||
---------
|
||||
|
||||
.. autoclass:: RPCClient
|
||||
|
||||
|
||||
Epmapper
|
||||
--------
|
||||
|
||||
.. autoclass:: windows.rpc.epmapper.UnpackTower
|
||||
:exclude-members: count, index
|
||||
|
||||
:func:`find_alpc_endpoints`
|
||||
'''''''''''''''''''''''''''
|
||||
|
||||
.. autofunction:: find_alpc_endpoints
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
>>> import windows.rpc
|
||||
>>> UAC_UIID = "201ef99a-7fa0-444c-9399-19ba84f12a1a"
|
||||
>>> windows.rpc.find_alpc_endpoints(UAC_UIID)
|
||||
[UnpackTower(protseq='ncalrpc',
|
||||
endpoint=bytearray(b'LRPC-c30c67fef2afa1612b'),
|
||||
address=None,
|
||||
object=<RPC_IF_ID "201EF99A-7FA0-444C-9399-19BA84F12A1A" (1, 0)>,
|
||||
syntax=<RPC_IF_ID "8A885D04-1CEB-11C9-9FE8-08002B104860" (2, 0)>)]
|
||||
|
||||
|
||||
:func:`find_alpc_endpoint_and_connect`
|
||||
''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
.. autofunction:: find_alpc_endpoint_and_connect
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
>>> import windows.rpc
|
||||
>>> UAC_UIID = "201ef99a-7fa0-444c-9399-19ba84f12a1a"
|
||||
>>> client = windows.rpc.find_alpc_endpoint_and_connect(UAC_UIID)
|
||||
>>> client
|
||||
<windows.rpc.client.RPCClient object at 0x046A1470>
|
||||
>>> client.alpc_client.portname
|
||||
'\\RPC Control\\LRPC-c30c67fef2afa1612b'
|
||||
>>> iid = client.bind(UAC_UIID)
|
||||
>>> iid
|
||||
<IID "201EF99A-7FA0-444C-9399-19BA84F12A1A">
|
||||
|
||||
Ndr
|
||||
---
|
||||
|
||||
.. module:: windows.rpc.ndr
|
||||
|
||||
The :mod:`windows.rpc.ndr` module offers some construction to help marshalling types and structures to NDR.
|
||||
|
||||
.. note::
|
||||
|
||||
The NDR supported for now is ``8a885d04-1ceb-11c9-9fe8-08002b104860`` version ``2.0``
|
||||
|
||||
Each NDR class has a function :func:`pack`.
|
||||
|
||||
|
||||
.. autoclass:: NdrSID
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
>>> import windows.generated_def as gdef
|
||||
>>> sid = windows.utils.get_known_sid(gdef.WinLocalSystemSid)
|
||||
>>> sid
|
||||
c_void_p(78304040)
|
||||
>>> psidstr = windows.rpc.ndr.NdrSID.pack(sid)
|
||||
>>> psidstr
|
||||
'\x01\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x05\x12\x00\x00\x00'
|
||||
>>> windows.rpc.ndr.NdrSID.unpack(windows.rpc.ndr.NdrStream(psidstr))
|
||||
# Implementation is partial for now and does not return a PSID but a string
|
||||
'\x01\x01\x00\x00\x00\x00\x00\x05\x12\x00\x00\x00'
|
||||
|
||||
.. autoclass:: NdrWString
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
>>> from windows.rpc import ndr
|
||||
>>> x = ndr.NdrWString.pack("Test-String\x00")
|
||||
>>> x
|
||||
'\x0c\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00T\x00e\x00s\x00t\x00-\x00S\x00t\x00r\x00i\x00n\x00g\x00\x00\x00'
|
||||
>>> ndr.NdrWString.unpack(ndr.NdrStream(x))
|
||||
u'Test-String\x00'
|
||||
|
||||
.. autoclass:: NdrCString
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
>>> from windows.rpc import ndr
|
||||
>>> x = ndr.NdrCString.pack("Test-String\x00")
|
||||
>>> x
|
||||
'\x0c\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00Test-String\x00'
|
||||
# TODO: implem unpack
|
||||
|
||||
.. autoclass:: NdrLong
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
>>> from windows.rpc import ndr
|
||||
>>> x = ndr.NdrLong.pack(0x01020304)
|
||||
>>> x
|
||||
'\x04\x03\x02\x01'
|
||||
>>> hex(ndr.NdrLong.unpack(ndr.NdrStream(x)))
|
||||
'0x1020304'
|
||||
|
||||
.. autoclass:: NdrHyper
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
>>> from windows.rpc import ndr
|
||||
>>> x = ndr.NdrHyper.pack(0x0102030405060708)
|
||||
>>> x
|
||||
'\x08\x07\x06\x05\x04\x03\x02\x01'
|
||||
>>> hex(ndr.NdrHyper.unpack(ndr.NdrStream(x)))
|
||||
'0x102030405060708L'
|
||||
|
||||
.. autoclass:: NdrShort
|
||||
|
||||
>>> from windows.rpc import ndr
|
||||
>>> x = ndr.NdrShort.pack(0x0102)
|
||||
>>> x
|
||||
'\x02\x01'
|
||||
>>> hex(ndr.NdrShort.unpack(ndr.NdrStream(x)))
|
||||
'0x102'
|
||||
|
||||
.. autoclass:: NdrByte
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
>>> from windows.rpc import ndr
|
||||
>>> x = ndr.NdrByte.pack(0x42)
|
||||
>>> x
|
||||
'B'
|
||||
>>> hex(ndr.NdrByte.unpack(ndr.NdrStream(x)))
|
||||
'0x42'
|
||||
|
||||
|
||||
.. autoclass:: NdrUniquePTR
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
>>> from windows.rpc import ndr
|
||||
>>> ndr.NdrLong.pack(0x11111111)
|
||||
'\x11\x11\x11\x11'
|
||||
>>> ndr.NdrUniquePTR(ndr.NdrLong).pack(0x11111111)
|
||||
'\x02\x02\x02\x02\x11\x11\x11\x11'
|
||||
|
||||
|
||||
.. autoclass:: NdrConformantArray
|
||||
.. autoclass:: NdrConformantVaryingArrays
|
||||
.. autoclass:: NdrLongConformantArray
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
>>> windows.rpc.ndr.NdrLongConformantArray.pack([1,2,3,4])
|
||||
'\x04\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00'
|
||||
|
||||
.. autoclass:: NdrByteConformantArray
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
>>> windows.rpc.ndr.NdrByteConformantArray.pack([1,2,3,4])
|
||||
'\x04\x00\x00\x00\x01\x02\x03\x04'
|
||||
|
||||
|
||||
.. autoclass:: NdrStructure
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
>>> from windows.rpc import ndr
|
||||
>>> class NDRTest(ndr.NdrStructure):
|
||||
... MEMBERS = [ndr.NdrLong, ndr.NdrLong, ndr.NdrWString]
|
||||
...
|
||||
>>> x = NDRTest.pack([1, 2, "Test\x00"])
|
||||
>>> x
|
||||
'\x01\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00T\x00e\x00s\x00t\x00\x00\x00PP'
|
||||
>>> NDRTest.unpack(ndr.NdrStream(x))
|
||||
[1, 2, u'Test\x00']
|
||||
|
||||
|
||||
.. autoclass:: NdrParameters
|
||||
|
||||
|
||||
NDR STREAM
|
||||
''''''''''
|
||||
|
||||
.. autoclass:: NdrStream
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
>>> from windows.rpc import ndr
|
||||
>>> x = ndr.NdrStream("AAAABBBBCCCC")
|
||||
>>> hex(ndr.NdrLong.unpack(x))
|
||||
'0x41414141'
|
||||
>>> x.data
|
||||
'BBBBCCCC'
|
||||
>>> hex(ndr.NdrShort.unpack(x))
|
||||
'0x4242'
|
||||
>>> x.data
|
||||
'BBCCCC'
|
||||
>>> x.align(4)
|
||||
>>> x.data
|
||||
'CCCC'
|
||||
>>> hex(ndr.NdrLong.unpack(x))
|
||||
'0x43434343'
|
||||
+271
-47
@@ -9,11 +9,11 @@ Processes
|
||||
``windows.current_process``
|
||||
'''''''''''''''''''''''''''
|
||||
|
||||
.. literalinclude:: ..\..\samples\current_process.py
|
||||
.. literalinclude:: ..\..\samples\process\current_process.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python32.exe current_process.py
|
||||
(cmd λ) python32.exe process\current_process.py
|
||||
current process is <windows.winobject.process.CurrentProcess object at 0x030A2590>
|
||||
current process is a <32> bits process
|
||||
current process is a SysWow64 process ? <True>
|
||||
@@ -31,11 +31,11 @@ Output::
|
||||
Remote process : :class:`WinProcess`
|
||||
''''''''''''''''''''''''''''''''''''
|
||||
|
||||
.. literalinclude:: ..\..\samples\remote_process.py
|
||||
.. literalinclude:: ..\..\samples\process\remote_process.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python.exe remote_process.py
|
||||
(cmd λ) python.exe process\remote_process.py
|
||||
Creating a notepad
|
||||
Looking for notepads in the processes
|
||||
They are currently <1> notepads running on the system
|
||||
@@ -72,11 +72,11 @@ Output::
|
||||
:class:`PEB` exploration
|
||||
''''''''''''''''''''''''
|
||||
|
||||
.. literalinclude:: ..\..\samples\peb.py
|
||||
.. literalinclude:: ..\..\samples\process\peb.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python.exe peb.py
|
||||
(cmd λ) python.exe process\peb.py
|
||||
Exploring the current process PEB
|
||||
PEB is <<windows.winobject.PEB object at 0x02649B70>>
|
||||
Commandline object is <WinUnicodeString "python.exe peb.py " at 0x2649c60>
|
||||
@@ -105,11 +105,11 @@ Output::
|
||||
IAT hooking
|
||||
'''''''''''
|
||||
|
||||
.. literalinclude:: ..\..\samples\iat_hook.py
|
||||
.. literalinclude:: ..\..\samples\process\iat_hook.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python iat_hook.py
|
||||
(cmd λ) python process\iat_hook.py
|
||||
Asking for <MY_SECRET_KEY>
|
||||
<in hook> Hook called | hKey = 0x12d687 | lpSubKey = <MY_SECRET_KEY>
|
||||
<in hook> Secret key asked, returning magic handle 0x12345678
|
||||
@@ -182,11 +182,11 @@ Output::
|
||||
:class:`Network` - socket exploration
|
||||
"""""""""""""""""""""""""""""""""""""
|
||||
|
||||
.. literalinclude:: ..\..\samples\network.py
|
||||
.. literalinclude:: ..\..\samples\network\network.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python.exe network.py
|
||||
(cmd λ) python.exe network\network.py
|
||||
Working on ipv4
|
||||
== Listening ==
|
||||
Some listening connections: [<TCP IPV4 Listening socket on 0.0.0.0:80>, <TCP IPV4 Listening socket on 0.0.0.0:135>, <TCP IPV4 Listening socket on 0.0.0.0:443>]
|
||||
@@ -209,11 +209,11 @@ Output::
|
||||
:class:`Registry`
|
||||
"""""""""""""""""
|
||||
|
||||
.. literalinclude:: ..\..\samples\registry.py
|
||||
.. literalinclude:: ..\..\samples\registry\registry.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python.exe registry.py
|
||||
(cmd λ) python.exe registry\registry.py
|
||||
Registry is <<windows.registry.Registry object at 0x02941290>>
|
||||
HKEY_CURRENT_USER is <<PyHKey "HKEY_CURRENT_USER">>
|
||||
HKEY_CURRENT_USER subkeys names are:
|
||||
@@ -248,11 +248,11 @@ Output::
|
||||
``windows.wintrust``
|
||||
""""""""""""""""""""
|
||||
|
||||
.. literalinclude:: ..\..\samples\wintrust.py
|
||||
.. literalinclude:: ..\..\samples\crypto\wintrust.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python .\wintrust.py
|
||||
(cmd λ) python crypto\wintrust.py
|
||||
Checking signature of <C:\windows\system32\ntdll.dll>
|
||||
is_signed: <True>
|
||||
check_signature: <0>
|
||||
@@ -276,11 +276,11 @@ Output::
|
||||
In local process
|
||||
''''''''''''''''
|
||||
|
||||
.. literalinclude:: ..\..\samples\veh_segv.py
|
||||
.. literalinclude:: ..\..\samples\process\veh_segv.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python.exe veh_segv.py
|
||||
(cmd λ) python.exe process\veh_segv.py
|
||||
Protected page is at <0x1db0000>
|
||||
Setting page protection to <PAGE_NOACCESS>
|
||||
|
||||
@@ -304,11 +304,11 @@ Output::
|
||||
In remote process
|
||||
'''''''''''''''''
|
||||
|
||||
.. literalinclude:: ..\..\samples\remote_veh_segv.py
|
||||
.. literalinclude:: ..\..\samples\process\remote_veh_segv.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python .exe.\samples\remote_veh_segv.py
|
||||
(cmd λ) python.exe process\remote_veh_segv.py
|
||||
(In another console)
|
||||
|
||||
Tracing execution in module: <gdi32.dll>
|
||||
@@ -342,11 +342,11 @@ Debugging
|
||||
:class:`Debugger`
|
||||
'''''''''''''''''
|
||||
|
||||
.. literalinclude:: ..\..\samples\debugger_print_LdrLoaddll.py
|
||||
.. literalinclude:: ..\..\samples\debug\debugger_print_LdrLoaddll.py
|
||||
|
||||
Ouput::
|
||||
|
||||
(cmd λ) python.exe .\samples\debugger_print_LdrLoaddll.py
|
||||
(cmd λ) python.exe debug\debugger_print_LdrLoaddll.py
|
||||
Loading <KERNEL32.DLL>
|
||||
Got exception EXCEPTION_BREAKPOINT(0x80000003L) at 0x77a73bad
|
||||
Loading <C:\Windows\system32\IMM32.DLL>
|
||||
@@ -368,11 +368,11 @@ Ouput::
|
||||
Single stepping
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
.. literalinclude:: ..\..\samples\debugger_membp_singlestep.py
|
||||
.. literalinclude:: ..\..\samples\debug\debugger_membp_singlestep.py
|
||||
|
||||
Ouput::
|
||||
|
||||
(cmd λ) python.exe .\samples\debugger_membp_singlestep.py
|
||||
(cmd λ) python.exe debug\debugger_membp_singlestep.py
|
||||
Got exception EXCEPTION_BREAKPOINT(0x80000003L) at 0x77ae3c7d
|
||||
Instruction at <0x8d0006> wrote at <0x8e0000>
|
||||
Got single_step EXCEPTION_SINGLE_STEP(0x80000004L) at 0x8d000c
|
||||
@@ -388,11 +388,11 @@ Ouput::
|
||||
:class:`windows.debug.FunctionBP`
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. literalinclude:: ..\..\samples\debug_functionbp.py
|
||||
.. literalinclude:: ..\..\samples\debug\debug_functionbp.py
|
||||
|
||||
Ouput::
|
||||
|
||||
(cmd λ) python.exe .\samples\debug_functionbp.py
|
||||
(cmd λ) python.exe debug\debug_functionbp.py
|
||||
NtCreateFile of <\??\C:\Windows\syswow64\en-US\calc.exe.mui>: handle = 0xac
|
||||
Handle manually found! typename=<File>, name=<\Device\HarddiskVolume2\Windows\SysWOW64\en-US\calc.exe.mui>
|
||||
|
||||
@@ -404,6 +404,34 @@ Ouput::
|
||||
|
||||
Exiting process
|
||||
|
||||
.. _sample_debugger_attach:
|
||||
|
||||
:func:`Debugger.attach <windows.debug.Debugger.attach>`
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. literalinclude:: ..\..\samples\debug\attach.py
|
||||
|
||||
Ouput::
|
||||
|
||||
(cmd λ) python.exe debug\attach.py
|
||||
Finding process with pid <11392>
|
||||
Target is <WinProcess "notepad.exe" pid 11392 at 0x471a750>
|
||||
Debugger attached: <windows.debug.debugger.Debugger object at 0x04707EF0>
|
||||
|
||||
NtCreateFile of <\??\C:\Windows\Fonts\staticcache.dat>: handle = 0x288
|
||||
Handle manually found! typename=<File>, name=<\Device\HarddiskVolume4\Windows\Fonts\StaticCache.dat>
|
||||
|
||||
NtCreateFile of <\??\C:\WINDOWS\Registration\R000000000015.clb>: handle = 0x320
|
||||
Handle manually found! typename=<File>, name=<\Device\HarddiskVolume4\Windows\Registration\R000000000015.clb>
|
||||
|
||||
NtCreateFile of <\??\C:\WINDOWS\Globalization\Sorting\sortdefault.nls>: handle = 0x334
|
||||
Handle manually found! typename=<File>, name=<\Device\HarddiskVolume4\Windows\Globalization\Sorting\SortDefault.nls>
|
||||
|
||||
Exiting process
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Native code tester
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
@@ -413,7 +441,7 @@ Native code tester
|
||||
|
||||
Ouput::
|
||||
|
||||
(cmd λ) python.exe .\samples\test_code.py "mov eax, 0x42424242" "eax=0x11223344"
|
||||
(cmd λ) python.exe test_code.py "mov eax, 0x42424242" "eax=0x11223344"
|
||||
Testing x86 code
|
||||
Startup context is:
|
||||
Eip -> 0x3f0000L
|
||||
@@ -445,7 +473,7 @@ Ouput::
|
||||
Eax: 0x11223344 -> 0x42424242 (+0x31200efe)
|
||||
|
||||
|
||||
(cmd λ) python64 .\samples\test_code.py --x64 "mov r15, 0x11223344; push r14; call r15" "rcx=1; r14=0x4242424243434343"
|
||||
(cmd λ) python64 test_code.py --x64 "mov r15, 0x11223344; push r14; call r15" "rcx=1; r14=0x4242424243434343"
|
||||
Testing x64 code
|
||||
Startup context is:
|
||||
Rip -> 0x205a1d60000L
|
||||
@@ -506,11 +534,11 @@ Ouput::
|
||||
In current process
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. literalinclude:: ..\..\samples\local_debugger.py
|
||||
.. literalinclude:: ..\..\samples\debug\local_debugger.py
|
||||
|
||||
Ouput::
|
||||
|
||||
(cmd λ) python.exe .\samples\local_debugger.py
|
||||
(cmd λ) python.exe debug\local_debugger.py
|
||||
Code addr = 0xcf0002
|
||||
GOT AN HXBP at 0xcf0002
|
||||
EXCEPTION !!!! Got a EXCEPTION_SINGLE_STEP(0x80000004L) at 0xcf0003
|
||||
@@ -523,11 +551,11 @@ Ouput::
|
||||
In remote process
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. literalinclude:: ..\..\samples\local_debugger_remote_process.py
|
||||
.. literalinclude:: ..\..\samples\debug\local_debugger_remote_process.py
|
||||
|
||||
Ouput::
|
||||
|
||||
(cmd λ) python.exe .\samples\local_debugger_remote_process.py
|
||||
(cmd λ) python.exe debug\local_debugger_remote_process.py
|
||||
(In another console)
|
||||
I AM LOADING <C:\Windows\system32\uxtheme.dll>
|
||||
I AM LOADING <C:\Windows\system32\uxtheme.dll>
|
||||
@@ -553,16 +581,16 @@ Ouput::
|
||||
|
||||
.. _wmi_request:
|
||||
|
||||
Make WMI requests
|
||||
"""""""""""""""""
|
||||
WMI requests
|
||||
""""""""""""
|
||||
|
||||
|
||||
.. literalinclude:: ..\..\samples\wmi_request.py
|
||||
.. literalinclude:: ..\..\samples\wmi\wmi_request.py
|
||||
|
||||
|
||||
Ouput::
|
||||
|
||||
(cmd λ) python .\samples\wmi_request.py
|
||||
(cmd λ) python wmi\wmi_request.py
|
||||
WMI requester is <windows.winobject.wmi.WmiRequester object at 0x02B37EF0>
|
||||
Selecting * from 'Win32_Process'
|
||||
They are <92> processes
|
||||
@@ -585,11 +613,11 @@ Ouput::
|
||||
using COM: ``INetFwPolicy2``
|
||||
""""""""""""""""""""""""""""
|
||||
|
||||
.. literalinclude:: ..\..\samples\com_inetfwpolicy2.py
|
||||
.. literalinclude:: ..\..\samples\com\com_inetfwpolicy2.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python .\samples\com_inetfwpolicy2.py
|
||||
(cmd λ) python com\com_inetfwpolicy2.py
|
||||
Initialisation of COM
|
||||
Creating INetFwPolicy2 variable
|
||||
<INetFwPolicy2 object at 0x02DC8210> (value = None)
|
||||
@@ -606,8 +634,8 @@ Output::
|
||||
* NET_FW_PROFILE2_PUBLIC(0x4L) -> True
|
||||
|
||||
|
||||
``windows.crypto``
|
||||
""""""""""""""""""
|
||||
:mod:`windows.crypto`
|
||||
"""""""""""""""""""""
|
||||
|
||||
|
||||
.. _sample_crypto_encryption:
|
||||
@@ -617,11 +645,11 @@ Encryption demo
|
||||
|
||||
This sample is a working POC able to generate key-pair, encrypt and decrypt file.
|
||||
|
||||
.. literalinclude:: ..\..\samples\encryption_demo.py
|
||||
.. literalinclude:: ..\..\samples\crypto\encryption_demo.py
|
||||
|
||||
Ouput::
|
||||
|
||||
(cmd λ) python ..\samples\encryption_demo.py genkey YOLOCERTIF mykey --pfxpassword MYPASSWORD
|
||||
(cmd λ) python crypto\encryption_demo.py genkey YOLOCERTIF mykey --pfxpassword MYPASSWORD
|
||||
<CertificatContext "YOLOCERTIF" serial="1b a4 3e 17 f7 ed ec ab 4f f8 11 46 48 e9 29 25">
|
||||
|
||||
(cmd λ) ls
|
||||
@@ -629,7 +657,7 @@ Ouput::
|
||||
|
||||
(cmd λ) echo|set /p="my secret message" > message.txt
|
||||
|
||||
(cmd λ) python ..\samples\encryption_demo.py crypt message.txt message.crypt mykey.cer
|
||||
(cmd λ) python crypto\encryption_demo.py crypt message.txt message.crypt mykey.cer
|
||||
Encryption done. Result:
|
||||
bytearray(b'0\x82\x01\x19\x06\t*\x86H\x86\xf7\r\x01\x07\x03\xa0\x82\x01\n0\x82\x01\x06\x02\x01\x001\x81\xc30\x81
|
||||
\xc0\x02\x01\x000)0\x151\x130\x11\x06\x03U\x04\x03\x13\nYOLOCERTIF\x02\x10\x1b\xa4>\x17\xf7\xed\xec\xabO\xf8\x11
|
||||
@@ -639,7 +667,7 @@ Ouput::
|
||||
\xc6\x12x\x1am\xc8\x01t\xac\xa6\xf3#\x02\xd4J \x8eZ\xbb\x10W\xe1 0;\x06\t*\x86H\x86\xf7\r\x01\x07\x010\x14\x06\x08*
|
||||
\x86H\x86\xf7\r\x03\x07\x04\x08\x14F\x04\xad\xed9\xed<\x80\x18\x80]6\xccTV\xbc\xb8*\x84QY!~\xb3\n\x1aV\xd4\rf\xd1n:')
|
||||
|
||||
(cmd λ) python ..\samples\encryption_demo.py decrypt message.crypt mykey.pfx BADPASS
|
||||
(cmd λ) python crypto\encryption_demo.py decrypt message.crypt mykey.pfx BADPASS
|
||||
Traceback (most recent call last):
|
||||
File "..\samples\encryption_demo.py", line 103, in <module>
|
||||
res.func(**res.__dict__)
|
||||
@@ -655,7 +683,7 @@ Ouput::
|
||||
raise Kernel32Error(func_name)
|
||||
windows.winproxy.Kernel32Error: PFXImportCertStore: [Error 86] The specified network password is not correct.
|
||||
|
||||
(cmd λ) python samples\encryption_demo.py decrypt message.crypt mykey.pfx MYPASSWORD
|
||||
(cmd λ) python crypto\encryption_demo.py decrypt message.crypt mykey.pfx MYPASSWORD
|
||||
Result = <my secret message>
|
||||
|
||||
|
||||
@@ -664,13 +692,13 @@ Ouput::
|
||||
Certificate demo
|
||||
''''''''''''''''
|
||||
|
||||
.. literalinclude:: ..\..\samples\certificate.py
|
||||
.. literalinclude:: ..\..\samples\crypto\certificate.py
|
||||
|
||||
|
||||
Ouput::
|
||||
|
||||
|
||||
(cmd λ) python .\samples\certificate.py
|
||||
(cmd λ) python crypto\certificate.py
|
||||
Analysing certificate: <CertificateContext "Microsoft Windows" serial="33 00 00 01 06 6e c3 25 c4 31 c9 18 0e 00 00 00 00 01 06">
|
||||
* name: <Microsoft Windows>
|
||||
* issuer: <Microsoft Windows Production PCA 2011>
|
||||
@@ -692,7 +720,7 @@ Ouput::
|
||||
Found it !
|
||||
|
||||
== PE Analysis ==
|
||||
Target sha1 = <059cb1ba1a41433a18dd8f87422c2ac3bf35b7b8>
|
||||
Target sha1 = <eb90bc0e33f3e62b0eac4afa8bfcf42a5d4e7bbb>
|
||||
Analysing <CryptObject "C:\windows\system32\ntdll.dll" content_type=CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED(0xaL)>
|
||||
File has 1 signer(s):
|
||||
Signer 0:
|
||||
@@ -702,4 +730,200 @@ Ouput::
|
||||
|
||||
File embdeds 2 certificate(s):
|
||||
* 0) <CertificateContext "Microsoft Windows" serial="33 00 00 01 06 6e c3 25 c4 31 c9 18 0e 00 00 00 00 01 06">
|
||||
* 1) <CertificateContext "Microsoft Windows Production PCA 2011" serial="61 07 76 56 00 00 00 00 00 08">
|
||||
* 1) <CertificateContext "Microsoft Windows Production PCA 2011" serial="61 07 76 56 00 00 00 00 00 08">
|
||||
|
||||
|
||||
|
||||
:mod:`windows.alpc`
|
||||
"""""""""""""""""""
|
||||
|
||||
.. _sample_alpc:
|
||||
|
||||
simple alpc communication
|
||||
'''''''''''''''''''''''''
|
||||
|
||||
.. literalinclude:: ..\..\samples\alpc\simple_alpc.py
|
||||
|
||||
Ouput::
|
||||
|
||||
(cmd λ) python alpc\simple_alpc.py
|
||||
[SERV] PORT <\RPC Control\PythonForWindowsPORT> CREATED
|
||||
Client pid = 15044
|
||||
[SERV] Message type = 0x300a
|
||||
[SERV] Received data: <>
|
||||
[SERV] Connection request
|
||||
[CLIENT] Connected: <windows.alpc.AlpcClient object at 0x0377FDB0>
|
||||
|
||||
[SERV] Received message: <Hello world !>
|
||||
[SERV] Message type = 0x3001
|
||||
[CLIENT] Response: <REQUEST 'Hello world !' DONE>
|
||||
BYE
|
||||
|
||||
.. _sample_advanced_alpc:
|
||||
|
||||
|
||||
advanced alpc communication
|
||||
'''''''''''''''''''''''''''
|
||||
|
||||
.. literalinclude:: ..\..\samples\alpc\advanced_alpc.py
|
||||
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python alpc\advanced_alpc.py
|
||||
server pid = 13000
|
||||
[SERV] PORT <\RPC Control\PythonForWindowsPORT_2> CREATED
|
||||
Client pid = 2100
|
||||
[CLIENT] == Connecting to port ==
|
||||
[SERV] == Message received ==
|
||||
* ALPC connection request: <Connection request client message>
|
||||
[CLIENT] Connected with response: <Connection message response>
|
||||
|
||||
[CLIENT] == Sending a message ==
|
||||
* Sending Message <Complex Message 1>
|
||||
[SERV] == Message received ==
|
||||
* ALPC request: <Complex Message 1>
|
||||
* view_is_valid <False>
|
||||
* security_is_valid <False>
|
||||
* handle_is_valid <False>
|
||||
* context_is_valid <True>
|
||||
* message context attribute:
|
||||
- CTX.PortContext -> 0x11223344
|
||||
- CTX.MessageContext -> None
|
||||
- CTX.Sequence -> 0x1L
|
||||
- CTX.MessageId -> 0x0L
|
||||
- CTX.CallbackId -> 0x0L
|
||||
* message token attribute:
|
||||
- TOKEN.TokenId -> 0x1e4ecaccL
|
||||
- TOKEN.AuthenticationId -> 0x48989L
|
||||
- TOKEN.ModifiedId -> 0x48995L
|
||||
[CLIENT] Server response: <REQUEST 'Complex Message 1' DONE>
|
||||
[CLIENT] RESP Message Valid ATTRS = [ALPC_MESSAGE_CONTEXT_ATTRIBUTE(0x20000000L)]
|
||||
|
||||
[Client] == Sending a message with a handle ==
|
||||
[SERV] == Message received ==
|
||||
* ALPC request: <some message with a file>
|
||||
* view_is_valid <False>
|
||||
* security_is_valid <False>
|
||||
* handle_is_valid <True>
|
||||
* message handle attribute:
|
||||
- HANDLE.Flags -> 0x0L
|
||||
- HANDLE.Handle -> 0x260
|
||||
- HANDLE.ObjectType -> 0x1L
|
||||
- HANDLE.DesiredAccess -> 0x13019fL
|
||||
- File: <open file '<fdopen>', mode 'r' at 0x02D529C0>
|
||||
- content: <Tempfile data <3>
|
||||
* context_is_valid <True>
|
||||
* message context attribute:
|
||||
- CTX.PortContext -> 0x11223344
|
||||
- CTX.MessageContext -> None
|
||||
- CTX.Sequence -> 0x2L
|
||||
- CTX.MessageId -> 0x0L
|
||||
- CTX.CallbackId -> 0x0L
|
||||
* message token attribute:
|
||||
- TOKEN.TokenId -> 0x1e4ecaccL
|
||||
- TOKEN.AuthenticationId -> 0x48989L
|
||||
- TOKEN.ModifiedId -> 0x48995L
|
||||
|
||||
[Client] == Sending a message with a view ==
|
||||
[SERV] == Message received ==
|
||||
* ALPC request: <some message with a view>
|
||||
* view_is_valid <True>
|
||||
* message view attribute:
|
||||
- VIEW.Flags -> 0x0L
|
||||
- VIEW.SectionHandle -> None
|
||||
- VIEW.ViewBase -> 0x2770000
|
||||
- VIEW.ViewSize -> 0x4000
|
||||
* Reading view content: <The content of the view :)>
|
||||
* security_is_valid <False>
|
||||
* handle_is_valid <False>
|
||||
* context_is_valid <True>
|
||||
* message context attribute:
|
||||
- CTX.PortContext -> 0x11223344
|
||||
- CTX.MessageContext -> None
|
||||
- CTX.Sequence -> 0x3L
|
||||
- CTX.MessageId -> 0x0L
|
||||
- CTX.CallbackId -> 0x0L
|
||||
* message token attribute:
|
||||
- TOKEN.TokenId -> 0x1e4ecaccL
|
||||
- TOKEN.AuthenticationId -> 0x48989L
|
||||
- TOKEN.ModifiedId -> 0x48995L
|
||||
BYE
|
||||
|
||||
|
||||
|
||||
|
||||
:mod:`windows.rpc`
|
||||
""""""""""""""""""
|
||||
|
||||
.. _sample_rpc_uac:
|
||||
|
||||
Manual UAC
|
||||
''''''''''
|
||||
|
||||
.. literalinclude:: ..\..\samples\rpc\uac.py
|
||||
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python rpc\uac.py
|
||||
Namespace(cmdline='', creationflags=CREATE_UNICODE_ENVIRONMENT(0x400L), target='C:\\Python27\\python.exe', uacflags=17)
|
||||
# UAC pop - asking to execute python.exe | Clicking Yes
|
||||
Return value = 0x6
|
||||
Created process is <WinProcess "python.exe" pid 19304 at 0x455f7d0>
|
||||
* bitness is 32
|
||||
* integrity: SECURITY_MANDATORY_HIGH_RID(0x3000L)
|
||||
* elevated: True
|
||||
|
||||
# The new python.exe in another window
|
||||
>>> windows.current_process.token.integrity
|
||||
SECURITY_MANDATORY_HIGH_RID(0x3000L)
|
||||
>>> windows.current_process.token.is_elevated
|
||||
True
|
||||
|
||||
.. _sample_rpc_lsass:
|
||||
|
||||
Manual ``LsarEnumeratePrivileges``
|
||||
''''''''''''''''''''''''''''''''''
|
||||
|
||||
.. literalinclude:: ..\..\samples\rpc\lsass.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python rpc\lsass.py
|
||||
(2, u'SeCreateTokenPrivilege')
|
||||
(3, u'SeAssignPrimaryTokenPrivilege')
|
||||
(4, u'SeLockMemoryPrivilege')
|
||||
(5, u'SeIncreaseQuotaPrivilege')
|
||||
(6, u'SeMachineAccountPrivilege')
|
||||
(7, u'SeTcbPrivilege')
|
||||
(8, u'SeSecurityPrivilege')
|
||||
(9, u'SeTakeOwnershipPrivilege')
|
||||
(10, u'SeLoadDriverPrivilege')
|
||||
(11, u'SeSystemProfilePrivilege')
|
||||
(12, u'SeSystemtimePrivilege')
|
||||
(13, u'SeProfileSingleProcessPrivilege')
|
||||
(14, u'SeIncreaseBasePriorityPrivilege')
|
||||
(15, u'SeCreatePagefilePrivilege')
|
||||
(16, u'SeCreatePermanentPrivilege')
|
||||
(17, u'SeBackupPrivilege')
|
||||
(18, u'SeRestorePrivilege')
|
||||
(19, u'SeShutdownPrivilege')
|
||||
(20, u'SeDebugPrivilege')
|
||||
(21, u'SeAuditPrivilege')
|
||||
(22, u'SeSystemEnvironmentPrivilege')
|
||||
(23, u'SeChangeNotifyPrivilege')
|
||||
(24, u'SeRemoteShutdownPrivilege')
|
||||
(25, u'SeUndockPrivilege')
|
||||
(26, u'SeSyncAgentPrivilege')
|
||||
(27, u'SeEnableDelegationPrivilege')
|
||||
(28, u'SeManageVolumePrivilege')
|
||||
(29, u'SeImpersonatePrivilege')
|
||||
(30, u'SeCreateGlobalPrivilege')
|
||||
(31, u'SeTrustedCredManAccessPrivilege')
|
||||
(32, u'SeRelabelPrivilege')
|
||||
(33, u'SeIncreaseWorkingSetPrivilege')
|
||||
(34, u'SeTimeZonePrivilege')
|
||||
(35, u'SeCreateSymbolicLinkPrivilege')
|
||||
(36, u'SeDelegateSessionUserImpersonatePrivilege')
|
||||
|
||||
|
||||
Vendored
-509
@@ -1,509 +0,0 @@
|
||||
Samples of code
|
||||
===============
|
||||
|
||||
.. _sample_current_process:
|
||||
|
||||
``windows.current_process``
|
||||
"""""""""""""""""""""""""""
|
||||
|
||||
.. literalinclude:: ..\..\samples\current_process.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python32.exe current_process.py
|
||||
current process is <windows.winobject.process.CurrentProcess object at 0x030A2590>
|
||||
current process is a <32> bits process
|
||||
current process is a SysWow64 process ? <True>
|
||||
current process pid <8264> and ppid <4100>
|
||||
Here are the current process threads: <[<WinThread 13540 owner "python.exe" at 0x32d3210>]>
|
||||
Let's execute some native code ! (0x41 + 1)
|
||||
Native code returned <0x42>
|
||||
Allocating memory in current process
|
||||
Allocated memory is at <0xd60000>
|
||||
Writing 'SOME STUFF' in allocation memory
|
||||
Reading memory : <'SOME STUFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'>
|
||||
|
||||
.. _sample_remote_process:
|
||||
|
||||
Remote process : :class:`WinProcess`
|
||||
""""""""""""""""""""""""""""""""""""
|
||||
|
||||
.. literalinclude:: ..\..\samples\remote_calc.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python.exe remote_calc.py
|
||||
Creating a calc
|
||||
Looking for calcs in the processes
|
||||
They are currently <1> calcs running on the system
|
||||
Let's play with our calc: <<WinProcess "calc.exe" pid 8052 at 0x27bd5d0>>
|
||||
Our calc pid is 8052
|
||||
Our calc is a <32> bits process
|
||||
Our calc is a SysWow64 process ? <True>
|
||||
Our calc have threads ! <[<WinThread 8552 owner "calc.exe" at 0x27f7f30>, <WinThread 3464 owner "calc.exe" at 0x27f7f80>, <WinThread 3840 owner "calc.exe" at 0x27fa030>]>
|
||||
Exploring our calc PEB ! <windows.winobject.RemotePEB object at 0x026DDD00>
|
||||
Command line is <RemoteWinUnicodeString ""C:\windows\system32\calc.exe"" at 0x26ddee0>
|
||||
Here are 3 loaded modules: [<RemoteLoadedModule "calc.exe" at 0x26dde40>, <RemoteLoadedModule "ntdll.dll" at 0x26ddf30>, <RemoteLoadedModule "kernel32.dll" at 0x26ddc60>]
|
||||
Allocating memory in our calc
|
||||
Allocated memory is at <0x5c90000>
|
||||
Writing 'SOME STUFF' in allocated memory
|
||||
Reading allocated memory : <'SOME STUFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'>
|
||||
Execution some native code in our calc (write 0x424242 at allocated address + return 0x1337
|
||||
Executing native code !
|
||||
Return code = 0x1337L
|
||||
Reading allocated memory : <'BBBB STUFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'>
|
||||
Executing python code !
|
||||
Reading allocated memory : <'HELLO FROM CALC\x00\x00\x00\x00\x00'>
|
||||
Trying to import in remote module 'FAKE_MODULE'
|
||||
Remote ERROR !
|
||||
Traceback (most recent call last):
|
||||
File "<string>", line 3, in <module>
|
||||
File "<string>", line 2, in func
|
||||
ImportError: No module named FAKE_MODULE
|
||||
|
||||
That's all ! killing the calc
|
||||
|
||||
|
||||
.. _sample_peb_exploration:
|
||||
|
||||
:class:`PEB` exploration
|
||||
""""""""""""""""""""""""
|
||||
|
||||
.. literalinclude:: ..\..\samples\peb.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python.exe peb.py
|
||||
Exploring the current process PEB
|
||||
PEB is <<windows.winobject.PEB object at 0x02649B70>>
|
||||
Commandline object is <WinUnicodeString "python.exe peb.py " at 0x2649c60>
|
||||
Commandline string is u'python.exe peb.py '
|
||||
Imagepath <WinUnicodeString "C:\Python27\python.exe" at 0x2649d50>
|
||||
Printing some modules: <LoadedModule "python.exe" at 0x272a030>
|
||||
<LoadedModule "ntdll.dll" at 0x272a080>
|
||||
<LoadedModule "kernel32.dll" at 0x272acb0>
|
||||
<LoadedModule "kernelbase.dll" at 0x272ad00>
|
||||
<LoadedModule "python27.dll" at 0x272ad50>
|
||||
<LoadedModule "msvcr90.dll" at 0x272ada0>
|
||||
=== K32 ===
|
||||
Looking for kernel32.dll
|
||||
Kernel32 module: <LoadedModule "kernel32.dll" at 0x272acb0>
|
||||
Module name = <kernel32.dll> | Fullname = <C:\Windows\SYSTEM32\KERNEL32.DLL>
|
||||
Kernel32 is loaded at address 0x774c0000
|
||||
=== K32 PE ===
|
||||
PE Representation of k32: <windows.pe_parse.PEFile object at 0x0272D350>
|
||||
Here are some exports {0: 2001566688L, u'CreateFileA': 2001635616L, 42: 2001647872L, u'VirtualAlloc': 2001570704L}
|
||||
Import DLL dependancies are (without api-*): [u'ntdll.dll', u'kernelbase.dll']
|
||||
IAT Entry for ntdll!NtCreateFile = <IATEntry "NtCreateFile" ordinal 253> | addr = 0x77541128L
|
||||
Sections: [<PESection ".text">, <PESection ".rdata">, <PESection ".data">, <PESection ".rsrc">, <PESection ".reloc">]
|
||||
|
||||
|
||||
|
||||
.. _sample_system:
|
||||
|
||||
|
||||
``windows.system``
|
||||
""""""""""""""""""
|
||||
|
||||
.. literalinclude:: ..\..\samples\system.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python system.py
|
||||
Basic system infos:
|
||||
version = (6, 3)
|
||||
bitness = 64
|
||||
computer_name = HAKRIL-PC
|
||||
product_type = VER_NT_WORKSTATION(0x1L)
|
||||
version_name = Windows 8.1
|
||||
|
||||
There is 117 processes
|
||||
There is 1246 threads
|
||||
|
||||
Dumping first logical drive:
|
||||
<LogicalDrive "C:\" (DRIVE_FIXED)>
|
||||
name = C:\
|
||||
type = DRIVE_FIXED(0x3L)
|
||||
path = \Device\HarddiskVolume2
|
||||
|
||||
Dumping first service:
|
||||
<ServiceA "ACPI">
|
||||
name = ACPI
|
||||
description = Microsoft ACPI Driver
|
||||
status = ServiceStatus(type=SERVICE_KERNEL_DRIVER(0x1L), state=SERVICE_RUNNING(0x4L), control_accepted=1L, flags=0L)
|
||||
process = None
|
||||
|
||||
Finding a service in a user process:
|
||||
<ServiceA "Appinfo">
|
||||
name = Appinfo
|
||||
description = Application Information
|
||||
status = ServiceStatus(type=SERVICE_WIN32_SHARE_PROCESS(0x20L), state=SERVICE_RUNNING(0x4L), control_accepted=129L, flags=0L)
|
||||
process = <WinProcess "svchost.exe" pid 988 at 0x2e64750>
|
||||
|
||||
Enumerating handles:
|
||||
There are 40664 handles:
|
||||
First handle is: <Handle value=<0x4> in process pid=4>
|
||||
Enumerating handles of the current process:
|
||||
There are 255 handles for this process
|
||||
Looking for a File handle:
|
||||
Handle is <Handle value=<0x4> in process pid=14340>
|
||||
Name is <\Device\ConDrv>
|
||||
|
||||
.. _sample_iat_hook:
|
||||
|
||||
IAT hooking
|
||||
"""""""""""
|
||||
|
||||
.. literalinclude:: ..\..\samples\iat_hook.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python iat_hook.py
|
||||
Asking for <MY_SECRET_KEY>
|
||||
<in hook> Hook called | hKey = 0x12d687 | lpSubKey = <MY_SECRET_KEY>
|
||||
<in hook> Secret key asked, returning magic handle 0x12345678
|
||||
Result = 0x12345678
|
||||
|
||||
Asking for <MY_FAIL_KEY>
|
||||
<in hook> Hook called | hKey = 0x12d687 | lpSubKey = <MY_FAIL_KEY>
|
||||
<in hook> Asked for a failing key: returning 0x2a
|
||||
WindowsError(42, 'Windows Error 0x2A')
|
||||
|
||||
Asking for <HKEY_CURRENT_USER/Software>
|
||||
<in hook> Hook called | hKey = 0x80000001L | lpSubKey = <Software>
|
||||
<in hook> Non-secret key : calling normal function
|
||||
Result = 0x108
|
||||
|
||||
.. _sample_network_exploration:
|
||||
|
||||
:class:`Network` - socket exploration
|
||||
"""""""""""""""""""""""""""""""""""""
|
||||
|
||||
.. literalinclude:: ..\..\samples\network.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python.exe network.py
|
||||
Working on ipv4
|
||||
== Listening ==
|
||||
Some listening connections: [<TCP IPV4 Listening socket on 0.0.0.0:80>, <TCP IPV4 Listening socket on 0.0.0.0:135>, <TCP IPV4 Listening socket on 0.0.0.0:443>]
|
||||
Listening ports are : [80, 135, 443, 445, 902, 912, 5357, 49152, 49153, 49154, 49155, 49157, 49159, 8307, 25340, 139, 139]
|
||||
== Established ==
|
||||
Some established connections: [<TCP IPV4 Connection 127.0.0.1:25340 -> 127.0.0.1:49472>, <TCP IPV4 Connection 127.0.0.1:49173 -> 127.0.0.1:49174>, <TCP IPV4 Connection 127.0.0.1:49174 -> 127.0.0.1:49173>]
|
||||
== connection to localhost:80 ==
|
||||
Our connection is [<TCP IPV4 Connection 127.0.0.1:49616 -> 127.0.0.1:80>]
|
||||
Sending YOP
|
||||
Closing socket
|
||||
Sending LAIT
|
||||
Traceback (most recent call last):
|
||||
File ".\network.py", line 45, in <module>
|
||||
s.send("LAIT")
|
||||
socket.error: [Errno 10054] An existing connection was forcibly closed by the remote host
|
||||
|
||||
|
||||
.. _sample_registry:
|
||||
|
||||
:class:`Registry`
|
||||
"""""""""""""""""
|
||||
|
||||
.. literalinclude:: ..\..\samples\registry.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python.exe registry.py
|
||||
Registry is <<windows.registry.Registry object at 0x02941290>>
|
||||
HKEY_CURRENT_USER is <<PyHKey "HKEY_CURRENT_USER">>
|
||||
HKEY_CURRENT_USER subkeys names are:
|
||||
['AppEvents',
|
||||
'AppXBackupContentType',
|
||||
'Console',
|
||||
'Control Panel',
|
||||
'Environment',
|
||||
'EUDC',
|
||||
'Identities',
|
||||
'Keyboard Layout',
|
||||
'Network',
|
||||
'Printers',
|
||||
'Software',
|
||||
'System',
|
||||
'Volatile Environment']
|
||||
Opening 'Software' in HKEY_CURRENT_USER: <PyHKey "HKEY_CURRENT_USER\Software">
|
||||
We can also open it in one access: <PyHKey "HKEY_CURRENT_USER\Sofware">
|
||||
Looking at CurrentVersion
|
||||
Key is <PyHKey "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion">
|
||||
values are:
|
||||
[KeyValue(name='SoftwareType', value=u'System', type=1),
|
||||
KeyValue(name='RegisteredOwner', value=u'hakril', type=1),
|
||||
KeyValue(name='InstallDate', value=0, type=4),
|
||||
...
|
||||
KeyValue(name='PathName', value=u'C:\\Windows', type=1)]
|
||||
registered owner = <KeyValue(name='RegisteredOwner', value=u'hakril', type=1)>
|
||||
|
||||
|
||||
.. _sample_wintrust:
|
||||
|
||||
``windows.wintrust``
|
||||
""""""""""""""""""""
|
||||
|
||||
.. literalinclude:: ..\..\samples\wintrust.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python .\wintrust.py
|
||||
Checking signature of <C:\windows\system32\ntdll.dll>
|
||||
is_signed: <True>
|
||||
check_signature: <0>
|
||||
full_signature_information:
|
||||
* signed <True>
|
||||
* catalog <C:\Windows\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\Package_35_for_KB3128650~31bf3856ad364e35~amd64~~6.3.1.2.cat>
|
||||
* catalogsigned <True>
|
||||
* additionalinfo <0>
|
||||
Checking signature of some loaded DLL
|
||||
<c:\python27\python.exe> : False (TRUST_E_NOSIGNATURE(0x800b0100L))
|
||||
<c:\windows\system32\ntdll.dll> : True
|
||||
<c:\windows\system32\kernel32.dll> : True
|
||||
<c:\windows\system32\kernelbase.dll> : True
|
||||
<c:\windows\system32\python27.dll> : False (TRUST_E_NOSIGNATURE(0x800b0100L))
|
||||
|
||||
.. _sample_vectoredexception:
|
||||
|
||||
:func:`VectoredException`
|
||||
"""""""""""""""""""""""""
|
||||
|
||||
In local process
|
||||
''''''''''''''''
|
||||
|
||||
.. literalinclude:: ..\..\samples\veh_segv.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python.exe veh_segv.py
|
||||
Protected page is at <0x1db0000>
|
||||
Setting page protection to <PAGE_NOACCESS>
|
||||
|
||||
==Entry of VEH handler==
|
||||
Instr at 0x1d1ab574 accessed to addr 0x1db0000
|
||||
Resetting page protection to <PAGE_READWRITE>
|
||||
==Entry of VEH handler==
|
||||
Exception of type EXCEPTION_SINGLE_STEP(0x80000004L)
|
||||
Resetting page protection to <PAGE_NOACCESS>
|
||||
Value 1 read
|
||||
|
||||
==Entry of VEH handler==
|
||||
Instr at 0x1d1ab574 accessed to addr 0x1db0010
|
||||
Resetting page protection to <PAGE_READWRITE>
|
||||
==Entry of VEH handler==
|
||||
Exception of type EXCEPTION_SINGLE_STEP(0x80000004L)
|
||||
Resetting page protection to <PAGE_NOACCESS>
|
||||
Value 2 read
|
||||
|
||||
|
||||
In remote process
|
||||
'''''''''''''''''
|
||||
|
||||
.. literalinclude:: ..\..\samples\remote_veh_segv.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python .exe.\samples\remote_veh_segv.py
|
||||
(In another console)
|
||||
|
||||
Tracing execution in module: <gdi32.dll>
|
||||
Protected page is at 0x7ffa3c700000L
|
||||
|
||||
Instr at 0x7ffa3c70f0f0L accessed to addr 0x7ffa3c70f0f0L (gdi32.dll)
|
||||
Exception of type EXCEPTION_SINGLE_STEP(0x80000004L)
|
||||
Resetting page protection to <PAGE_READWRITE>
|
||||
|
||||
Instr at 0x7ffa3c70f0f5L accessed to addr 0x7ffa3c70f0f5L (gdi32.dll)
|
||||
Exception of type EXCEPTION_SINGLE_STEP(0x80000004L)
|
||||
Resetting page protection to <PAGE_READWRITE>
|
||||
|
||||
Instr at 0x7ffa3c70f0faL accessed to addr 0x7ffa3c70f0faL (gdi32.dll)
|
||||
Exception of type EXCEPTION_SINGLE_STEP(0x80000004L)
|
||||
Resetting page protection to <PAGE_READWRITE>
|
||||
|
||||
Instr at 0x7ffa3c70f0ffL accessed to addr 0x7ffa3c70f0ffL (gdi32.dll)
|
||||
Exception of type EXCEPTION_SINGLE_STEP(0x80000004L)
|
||||
Resetting page protection to <PAGE_READWRITE>
|
||||
|
||||
Instr at 0x7ffa3c70f100L accessed to addr 0x7ffa3c70f100L (gdi32.dll)
|
||||
No more tracing !
|
||||
|
||||
|
||||
.. _sample_debugger:
|
||||
|
||||
Debugging
|
||||
"""""""""
|
||||
|
||||
:class:`Debugger`
|
||||
'''''''''''''''''
|
||||
|
||||
.. literalinclude:: ..\..\samples\debugger_print_LdrLoaddll.py
|
||||
|
||||
Ouput::
|
||||
|
||||
(cmd λ) python.exe .\samples\debugger_print_LdrLoaddll.py
|
||||
Loading <KERNEL32.DLL>
|
||||
Got exception EXCEPTION_BREAKPOINT(0x80000003L) at 0x77a73bad
|
||||
Loading <C:\Windows\system32\IMM32.DLL>
|
||||
Loading <C:\Windows\system32\uxtheme.dll>
|
||||
Loading <C:\Windows\system32\uxtheme.dll>
|
||||
Loading <C:\Windows\system32\uxtheme.dll>
|
||||
Loading <C:\Windows\system32\uxtheme.dll>
|
||||
Loading <kernel32.dll>
|
||||
Loading <C:\Windows\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.9600.17415_none_dad8722c5bcc2d8f\gdiplus.dll>
|
||||
Loading <comctl32.dll>
|
||||
Loading <comctl32.dll>
|
||||
Loading <comctl32.dll>
|
||||
Loading <C:\Windows\system32\shell32.dll>
|
||||
Loading <C:\Windows\SYSTEM32\WINMM.dll>
|
||||
Loading <C:\Windows\system32\ole32.dll>
|
||||
Ask to load <ole32.dll>: exiting process
|
||||
|
||||
|
||||
Single stepping
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
.. literalinclude:: ..\..\samples\debugger_membp_singlestep.py
|
||||
|
||||
Ouput::
|
||||
|
||||
(cmd λ) python.exe .\samples\debugger_membp_singlestep.py
|
||||
Got exception EXCEPTION_BREAKPOINT(0x80000003L) at 0x77ae3c7d
|
||||
Instruction at <0x8d0006> wrote at <0x8e0000>
|
||||
Got single_step EXCEPTION_SINGLE_STEP(0x80000004L) at 0x8d000c
|
||||
Got single_step EXCEPTION_SINGLE_STEP(0x80000004L) at 0x8d0011
|
||||
Instruction at <0x8d0011> wrote at <0x8e0004>
|
||||
Got single_step EXCEPTION_SINGLE_STEP(0x80000004L) at 0x8d0017
|
||||
Got single_step EXCEPTION_SINGLE_STEP(0x80000004L) at 0x8d001c
|
||||
Got single_step EXCEPTION_SINGLE_STEP(0x80000004L) at 0x8d0022
|
||||
Got single_step EXCEPTION_SINGLE_STEP(0x80000004L) at 0x8d0023
|
||||
No more single step: exiting
|
||||
|
||||
|
||||
:class:`windows.debug.FunctionBP`
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. literalinclude:: ..\..\samples\debug_functionbp.py
|
||||
|
||||
Ouput::
|
||||
|
||||
(cmd λ) python.exe .\samples\debug_functionbp.py
|
||||
NtCreateFile of <\??\C:\Windows\syswow64\en-US\calc.exe.mui>: handle = 0xac
|
||||
Handle manually found! typename=<File>, name=<\Device\HarddiskVolume2\Windows\SysWOW64\en-US\calc.exe.mui>
|
||||
|
||||
NtCreateFile of <\Device\DeviceApi\CMApi>: handle = 0x108
|
||||
Handle manually found! typename=<File>, name=<\Device\DeviceApi>
|
||||
|
||||
NtCreateFile of <\??\C:\Windows\Fonts\staticcache.dat>: handle = 0x154
|
||||
Handle manually found! typename=<File>, name=<\Device\HarddiskVolume2\Windows\Fonts\StaticCache.dat>
|
||||
|
||||
Exiting process
|
||||
|
||||
.. _sample_local_debugger:
|
||||
|
||||
|
||||
:class:`LocalDebugger`
|
||||
''''''''''''''''''''''
|
||||
|
||||
In current process
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. literalinclude:: ..\..\samples\local_debugger.py
|
||||
|
||||
Ouput::
|
||||
|
||||
(cmd λ) python.exe .\samples\local_debugger.py
|
||||
Code addr = 0xcf0002
|
||||
GOT AN HXBP at 0xcf0002
|
||||
EXCEPTION !!!! Got a EXCEPTION_SINGLE_STEP(0x80000004L) at 0xcf0003
|
||||
EXCEPTION !!!! Got a EXCEPTION_SINGLE_STEP(0x80000004L) at 0xcf0004
|
||||
EXCEPTION !!!! Got a EXCEPTION_SINGLE_STEP(0x80000004L) at 0xcf0005
|
||||
EXCEPTION !!!! Got a EXCEPTION_SINGLE_STEP(0x80000004L) at 0x770d7c04
|
||||
Done!
|
||||
|
||||
|
||||
In remote process
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. literalinclude:: ..\..\samples\local_debugger_remote_process.py
|
||||
|
||||
Ouput::
|
||||
|
||||
(cmd λ) python.exe .\samples\local_debugger_remote_process.py
|
||||
(In another console)
|
||||
I AM LOADING <C:\Windows\system32\uxtheme.dll>
|
||||
I AM LOADING <C:\Windows\system32\uxtheme.dll>
|
||||
I AM LOADING <C:\Windows\system32\uxtheme.dll>
|
||||
I AM LOADING <C:\Windows\system32\uxtheme.dll>
|
||||
I AM LOADING <kernel32.dll>
|
||||
I AM LOADING <C:\Windows\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.9600.17415_none_dad8722c5bcc2d8f\gdiplus.dll>
|
||||
I AM LOADING <comctl32.dll>
|
||||
I AM LOADING <comctl32.dll>
|
||||
I AM LOADING <comctl32.dll>
|
||||
I AM LOADING <comctl32.dll>
|
||||
I AM LOADING <comctl32.dll>
|
||||
I AM LOADING <comctl32>
|
||||
I AM LOADING <C:\Windows\SysWOW64\oleacc.dll>
|
||||
I AM LOADING <OLEAUT32.DLL>
|
||||
I AM LOADING <C:\Windows\system32\ole32.dll>
|
||||
I AM LOADING <C:\Windows\system32\MSCTF.dll>
|
||||
I AM LOADING <C:\Windows\SysWOW64\msxml6.dll>
|
||||
I AM LOADING <C:\Windows\system32\shell32.dll>
|
||||
I AM LOADING <C:\Windows\SYSTEM32\WINMM.dll>
|
||||
I AM LOADING <C:\Windows\system32\ole32.dll>
|
||||
|
||||
|
||||
.. _wmi_request:
|
||||
|
||||
Make WMI requests
|
||||
'''''''''''''''''
|
||||
|
||||
.. literalinclude:: ..\..\samples\wmi_request.py
|
||||
|
||||
|
||||
Ouput::
|
||||
|
||||
(cmd λ) python .\samples\wmi_request.py
|
||||
WMI requester is <windows.winobject.wmi.WmiRequester object at 0x02B37EF0>
|
||||
Selecting * from 'Win32_Process'
|
||||
They are <92> processes
|
||||
Looking for ourself via pid
|
||||
Some info about our process:
|
||||
* Name -> python.exe
|
||||
* ProcessId -> 7968
|
||||
* OSName -> Microsoft Windows 8.1 Pro|C:\Windows|\Device\Harddisk0\Partition2
|
||||
* UserModeTime -> 2812500
|
||||
* WindowsVersion -> 6.3.9600
|
||||
* CommandLine -> python.exe .\samples\wmi_request.py
|
||||
<Select Caption,FileSystem,FreeSpace from Win32_LogicalDisk>:
|
||||
* {'Caption': u'C:', 'FreeSpace': u'43991547904', 'FileSystem': u'NTFS'}
|
||||
* {'Caption': u'E:', 'FreeSpace': u'82776027136', 'FileSystem': u'NTFS'}
|
||||
* {'Caption': u'F:', 'FreeSpace': u'5711265792', 'FileSystem': u'FAT32'}
|
||||
* {'Caption': u'G:', 'FreeSpace': None, 'FileSystem': None}
|
||||
|
||||
.. _sample_com_firewall:
|
||||
|
||||
using COM: ``INetFwPolicy2``
|
||||
''''''''''''''''''''''''''''
|
||||
|
||||
.. literalinclude:: ..\..\samples\com_inetfwpolicy2.py
|
||||
|
||||
Output::
|
||||
|
||||
(cmd λ) python .\samples\com_inetfwpolicy2.py
|
||||
Initialisation of COM
|
||||
Creating INetFwPolicy2 variable
|
||||
<INetFwPolicy2 object at 0x02DC8210> (value = None)
|
||||
|
||||
Generating CLSID
|
||||
<IID "E2B3C97F-6AE1-41AC-817A-F6F92166D7DD">
|
||||
|
||||
Creating COM instance
|
||||
<INetFwPolicy2 object at 0x02DC8210> (value = 0x8984848)
|
||||
|
||||
Checking for enabled profiles
|
||||
* NET_FW_PROFILE2_DOMAIN(0x1L) -> True
|
||||
* NET_FW_PROFILE2_PRIVATE(0x2L) -> True
|
||||
* NET_FW_PROFILE2_PUBLIC(0x4L) -> True
|
||||
Vendored
-15
@@ -1,15 +0,0 @@
|
||||
Service
|
||||
=======
|
||||
|
||||
.. note::
|
||||
|
||||
See sample :ref:`sample_system`
|
||||
|
||||
.. module:: windows.winobject.service
|
||||
|
||||
.. autoclass:: ServiceStatus
|
||||
:exclude-members: count, index
|
||||
|
||||
.. autoclass:: ServiceA
|
||||
:show-inheritance:
|
||||
:inherited-members:
|
||||
Vendored
-34
@@ -1,34 +0,0 @@
|
||||
``windows.utils`` -- Windows Utilities
|
||||
***********************************************
|
||||
|
||||
.. module:: windows.utils
|
||||
|
||||
Context Managers
|
||||
""""""""""""""""
|
||||
|
||||
:mod:`windows.utils` provides some context managers wrapping `standard` contextual operations
|
||||
like ``VirtualProtect`` or ``SysWow Redirection``
|
||||
|
||||
VirtualProtected
|
||||
''''''''''''''''
|
||||
|
||||
.. autoclass:: windows.utils.VirtualProtected
|
||||
:no-show-inheritance:
|
||||
|
||||
DisableWow64FsRedirection
|
||||
'''''''''''''''''''''''''
|
||||
|
||||
.. autoclass:: windows.utils.DisableWow64FsRedirection
|
||||
:no-show-inheritance:
|
||||
|
||||
Helper functions
|
||||
""""""""""""""""
|
||||
|
||||
.. autofunction:: windows.utils.enable_privilege
|
||||
.. autofunction:: windows.utils.check_is_elevated
|
||||
.. autofunction:: windows.utils.check_debug
|
||||
.. autofunction:: windows.utils.create_process
|
||||
.. autofunction:: windows.utils.create_console
|
||||
.. autofunction:: windows.utils.pop_shell
|
||||
.. autofunction:: windows.utils.create_file_from_handle
|
||||
.. autofunction:: windows.utils.get_handle_from_file
|
||||
Vendored
-19
@@ -1,19 +0,0 @@
|
||||
The :mod:`windows` objects
|
||||
==========================
|
||||
|
||||
Through the :ref:`system <object_system>` object many classes representing various `Windows`
|
||||
parts are accessible.
|
||||
|
||||
This sections describes them by group of relation.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 3
|
||||
|
||||
process.rst
|
||||
exception.rst
|
||||
registry.rst
|
||||
network.rst
|
||||
service.rst
|
||||
volume.rst
|
||||
wmi.rst
|
||||
handle.rst
|
||||
Vendored
-16
@@ -1,16 +0,0 @@
|
||||
Volume -- The logical drives
|
||||
============================
|
||||
|
||||
.. note::
|
||||
|
||||
See sample :ref:`sample_system`
|
||||
|
||||
.. module:: windows.winobject.volume
|
||||
|
||||
.. autoclass:: LogicalDrive
|
||||
|
||||
.. data:: name
|
||||
|
||||
Name of the logical drive
|
||||
|
||||
:type: :class:`str`
|
||||
+1893
File diff suppressed because it is too large
Load Diff
+4
@@ -14,8 +14,12 @@ The defaults objects accessible in ``windows`` are:
|
||||
The submodules that you might use by themself are:
|
||||
* :mod:`windows.native_exec`
|
||||
* :mod:`windows.winproxy`
|
||||
* :mod:`windows.wintrust`
|
||||
* :mod:`windows.crypto`
|
||||
* :mod:`windows.utils`
|
||||
* :mod:`windows.debug`
|
||||
* :mod:`windows.alpc`
|
||||
* :mod:`windows.rpc`
|
||||
* :mod:`windows.com`
|
||||
|
||||
.. _object_system:
|
||||
|
||||
Vendored
-34
@@ -1,34 +0,0 @@
|
||||
The ``windows`` module
|
||||
**********************
|
||||
|
||||
The ``windows`` module is the module installed by :file:`setup.py`.
|
||||
|
||||
This module exports some objects representing the current state of the system.
|
||||
It also offers some submodules aimed to help the interfacing with ``Windows`` and native code execution.
|
||||
|
||||
The defaults objects accessible in ``windows`` are:
|
||||
* ``system`` of type :class:`windows.winobject.system.System`
|
||||
* ``current_process`` of type :class:`windows.winobject.process.CurrentProcess`
|
||||
* ``current_thread`` of type :class:`windows.winobject.process.CurrentThread`
|
||||
|
||||
The submodules that you might use by themself are:
|
||||
* :mod:`windows.native_exec`
|
||||
* :mod:`windows.winproxy`
|
||||
* :mod:`windows.utils`
|
||||
* :mod:`windows.debug`
|
||||
* :mod:`windows.com`
|
||||
|
||||
.. _object_system:
|
||||
|
||||
The ``system`` object
|
||||
"""""""""""""""""""""
|
||||
|
||||
.. note::
|
||||
|
||||
See sample :ref:`sample_system`
|
||||
|
||||
.. currentmodule:: windows.winobject
|
||||
|
||||
.. autoclass:: windows.winobject.system.System
|
||||
:no-show-inheritance:
|
||||
|
||||
+189
-1
@@ -103,6 +103,7 @@ Transparent proxies:
|
||||
* GetExitCodeProcess(hProcess, lpExitCode)
|
||||
* GetExitCodeThread(hThread, lpExitCode)
|
||||
* GetLastError()
|
||||
* GetLengthSid(pSid)
|
||||
* GetLogicalDriveStringsA(nBufferLength, lpBuffer)
|
||||
* GetLogicalDriveStringsW(nBufferLength, lpBuffer)
|
||||
* GetProcAddress(hModule, lpProcName)
|
||||
@@ -138,6 +139,7 @@ Transparent proxies:
|
||||
* Wow64RevertWow64FsRedirection(OldValue)
|
||||
* lstrcmpA(lpString1, lpString2)
|
||||
* lstrcmpW(lpString1, lpString2)
|
||||
|
||||
Functions:
|
||||
|
||||
* AddVectoredContinueHandler::
|
||||
@@ -201,6 +203,12 @@ Functions:
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* CertEnumCTLsInStore::
|
||||
|
||||
CertEnumCTLsInStore(hCertStore, pPrevCtlContext)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* CertEnumCertificateContextProperties::
|
||||
|
||||
CertEnumCertificateContextProperties(pCertContext, dwPropId)
|
||||
@@ -261,6 +269,12 @@ Functions:
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* CloseServiceHandle::
|
||||
|
||||
CloseServiceHandle(hSCObject)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* CoCreateInstance::
|
||||
|
||||
CoCreateInstance(rclsid, pUnkOuter=None, dwClsContext=tagCLSCTX.CLSCTX_INPROC_SERVER(0x1L), riid=NeededParameter, ppv=NeededParameter)
|
||||
@@ -333,6 +347,18 @@ Functions:
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* CreateProcessAsUserA::
|
||||
|
||||
CreateProcessAsUserA(hToken, lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* CreateProcessAsUserW::
|
||||
|
||||
CreateProcessAsUserW(hToken, lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* CreateProcessW::
|
||||
|
||||
CreateProcessW(lpApplicationName, lpCommandLine=None, lpProcessAttributes=None, lpThreadAttributes=None, bInheritHandles=False, dwCreationFlags=0, lpEnvironment=None, lpCurrentDirectory=None, lpStartupInfo=None, lpProcessInformation=None)
|
||||
@@ -357,6 +383,12 @@ Functions:
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* CreateWellKnownSid::
|
||||
|
||||
CreateWellKnownSid(WellKnownSidType, DomainSid=None, pSid=None, cbSid=NeededParameter)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* CryptAcquireCertificatePrivateKey::
|
||||
|
||||
CryptAcquireCertificatePrivateKey(pCert, dwFlags, pvParameters, phCryptProvOrNCryptKey, pdwKeySpec, pfCallerFreeProvOrNCryptKey)
|
||||
@@ -411,6 +443,24 @@ Functions:
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* CryptCATEnumerateAttr::
|
||||
|
||||
CryptCATEnumerateAttr(hCatalog, pCatMember, pPrevAttr)
|
||||
Errcheck:
|
||||
Nothing special
|
||||
|
||||
* CryptCATEnumerateCatAttr::
|
||||
|
||||
CryptCATEnumerateCatAttr(hCatalog, pPrevAttr)
|
||||
Errcheck:
|
||||
Nothing special
|
||||
|
||||
* CryptCATEnumerateMember::
|
||||
|
||||
CryptCATEnumerateMember(hCatalog, pPrevMember)
|
||||
Errcheck:
|
||||
Nothing special
|
||||
|
||||
* CryptDecodeObject::
|
||||
|
||||
CryptDecodeObject(dwCertEncodingType, lpszStructType, pbEncoded, cbEncoded, dwFlags, pvStructInfo, pcbStructInfo)
|
||||
@@ -471,6 +521,18 @@ Functions:
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* CryptUIDlgViewContext::
|
||||
|
||||
CryptUIDlgViewContext(dwContextType, pvContext, hwnd, pwszTitle, dwFlags, pvReserved)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* DeleteProcThreadAttributeList::
|
||||
|
||||
DeleteProcThreadAttributeList(lpAttributeList)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* DeviceIoControl::
|
||||
|
||||
DeviceIoControl(hDevice, dwIoControlCode, lpInBuffer, nInBufferSize=None, lpOutBuffer=NeededParameter, nOutBufferSize=None, lpBytesReturned=None, lpOverlapped=None)
|
||||
@@ -717,6 +779,22 @@ Functions:
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetWindowsDirectoryA::
|
||||
|
||||
GetWindowsDirectoryA(lpBuffer, uSize=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetWindowsDirectoryW::
|
||||
|
||||
GetWindowsDirectoryW(lpBuffer, uSize=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* InitializeProcThreadAttributeList::
|
||||
|
||||
InitializeProcThreadAttributeList(lpAttributeList=None, dwAttributeCount=NeededParameter, dwFlags=0, lpSize=NeededParameter)
|
||||
|
||||
* LdrLoadDll::
|
||||
|
||||
LdrLoadDll(PathToFile, Flags, ModuleFileName, ModuleHandle)
|
||||
@@ -733,6 +811,18 @@ Functions:
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* LookupPrivilegeNameA::
|
||||
|
||||
LookupPrivilegeNameA(lpSystemName, lpLuid, lpName, cchName)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* LookupPrivilegeNameW::
|
||||
|
||||
LookupPrivilegeNameW(lpSystemName, lpLuid, lpName, cchName)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* LookupPrivilegeValueA::
|
||||
|
||||
LookupPrivilegeValueA(lpSystemName=None, lpName=NeededParameter, lpLuid=NeededParameter)
|
||||
@@ -751,6 +841,18 @@ Functions:
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* MessageBoxA::
|
||||
|
||||
MessageBoxA(hWnd=0, lpText=NeededParameter, lpCaption=None, uType=0)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* MessageBoxW::
|
||||
|
||||
MessageBoxW(hWnd=0, lpText=NeededParameter, lpCaption=None, uType=0)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* NtAlpcAcceptConnectPort::
|
||||
|
||||
NtAlpcAcceptConnectPort(PortHandle, ConnectionPortHandle, Flags, ObjectAttributes, PortAttributes, PortContext, ConnectionRequest, ConnectionMessageAttributes, AcceptConnection)
|
||||
@@ -767,6 +869,30 @@ Functions:
|
||||
|
||||
NtAlpcCreatePort(PortHandle, ObjectAttributes, PortAttributes)
|
||||
|
||||
* NtAlpcCreatePortSection::
|
||||
|
||||
NtAlpcCreatePortSection(PortHandle, Flags, SectionHandle, SectionSize, AlpcSectionHandle, ActualSectionSize)
|
||||
|
||||
* NtAlpcCreateSectionView::
|
||||
|
||||
NtAlpcCreateSectionView(PortHandle, Flags, ViewAttributes)
|
||||
|
||||
* NtAlpcDeletePortSection::
|
||||
|
||||
NtAlpcDeletePortSection(PortHandle, Flags, SectionHandle)
|
||||
|
||||
* NtAlpcDeleteSectionView::
|
||||
|
||||
NtAlpcDeleteSectionView(PortHandle, Flags, ViewBase)
|
||||
|
||||
* NtAlpcDisconnectPort::
|
||||
|
||||
NtAlpcDisconnectPort(PortHandle, Flags)
|
||||
|
||||
* NtAlpcQueryInformation::
|
||||
|
||||
NtAlpcQueryInformation(PortHandle, PortInformationClass, PortInformation, Length, ReturnLength)
|
||||
|
||||
* NtAlpcSendWaitReceivePort::
|
||||
|
||||
NtAlpcSendWaitReceivePort(PortHandle, Flags, SendMessage, SendMessageAttributes, ReceiveMessage, BufferLength, ReceiveMessageAttributes, Timeout)
|
||||
@@ -775,6 +901,10 @@ Functions:
|
||||
|
||||
NtCreateFile(FileHandle, DesiredAccess, ObjectAttributes, IoStatusBlock, AllocationSize, FileAttributes, ShareAccess, CreateDisposition, CreateOptions, EaBuffer, EaLength)
|
||||
|
||||
* NtCreateSection::
|
||||
|
||||
NtCreateSection(SectionHandle, DesiredAccess, ObjectAttributes, MaximumSize, SectionPageProtection, AllocationAttributes, FileHandle)
|
||||
|
||||
* NtCreateThreadEx::
|
||||
|
||||
NtCreateThreadEx(ThreadHandle=None, DesiredAccess=2097151, ObjectAttributes=0, ProcessHandle=NeededParameter, lpStartAddress=NeededParameter, lpParameter=NeededParameter, CreateSuspended=0, dwStackSize=0, Unknown1=0, Unknown2=0, Unknown=0)
|
||||
@@ -783,6 +913,10 @@ Functions:
|
||||
|
||||
NtGetContextThread(hThread, lpContext)
|
||||
|
||||
* NtMapViewOfSection::
|
||||
|
||||
NtMapViewOfSection(SectionHandle, ProcessHandle, BaseAddress, ZeroBits, CommitSize, SectionOffset, ViewSize, InheritDisposition, AllocationType, Win32Protect)
|
||||
|
||||
* NtOpenDirectoryObject::
|
||||
|
||||
NtOpenDirectoryObject(DirectoryHandle, DesiredAccess, ObjectAttributes)
|
||||
@@ -791,6 +925,10 @@ Functions:
|
||||
|
||||
NtOpenEvent(EventHandle, DesiredAccess, ObjectAttributes)
|
||||
|
||||
* NtOpenSection::
|
||||
|
||||
NtOpenSection(SectionHandle, DesiredAccess, ObjectAttributes)
|
||||
|
||||
* NtOpenSymbolicLinkObject::
|
||||
|
||||
NtOpenSymbolicLinkObject(LinkHandle, DesiredAccess, ObjectAttributes)
|
||||
@@ -827,10 +965,18 @@ Functions:
|
||||
|
||||
NtQueryVirtualMemory(ProcessHandle, BaseAddress, MemoryInformationClass, MemoryInformation=NeededParameter, MemoryInformationLength=0, ReturnLength=None)
|
||||
|
||||
* NtReadVirtualMemory::
|
||||
|
||||
NtReadVirtualMemory(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead)
|
||||
|
||||
* NtSetContextThread::
|
||||
|
||||
NtSetContextThread(hThread, lpContext)
|
||||
|
||||
* NtUnmapViewOfSection::
|
||||
|
||||
NtUnmapViewOfSection(ProcessHandle, BaseAddress)
|
||||
|
||||
* NtWow64ReadVirtualMemory64::
|
||||
|
||||
NtWow64ReadVirtualMemory64(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead=None)
|
||||
@@ -876,6 +1022,18 @@ Functions:
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* OpenServiceA::
|
||||
|
||||
OpenServiceA(hSCManager, lpServiceName, dwDesiredAccess)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* OpenServiceW::
|
||||
|
||||
OpenServiceW(hSCManager, lpServiceName, dwDesiredAccess)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* OpenThread::
|
||||
|
||||
OpenThread(dwDesiredAccess=THREAD_ALL_ACCESS(0x1f03ffL), bInheritHandle=0, dwThreadId=NeededParameter)
|
||||
@@ -1008,6 +1166,12 @@ Functions:
|
||||
|
||||
RtlDecompressBuffer(CompressionFormat, UncompressedBuffer, UncompressedBufferSize, CompressedBuffer, CompressedBufferSize, FinalUncompressedSize)
|
||||
|
||||
* RtlGetUnloadEventTraceEx::
|
||||
|
||||
RtlGetUnloadEventTraceEx(ElementSize, ElementCount, EventTrace)
|
||||
Errcheck:
|
||||
Nothing special
|
||||
|
||||
* SetConsoleCtrlHandler::
|
||||
|
||||
SetConsoleCtrlHandler(HandlerRoutine, Add)
|
||||
@@ -1045,6 +1209,18 @@ Functions:
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* StartServiceA::
|
||||
|
||||
StartServiceA(hService, dwNumServiceArgs, lpServiceArgVectors)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* StartServiceW::
|
||||
|
||||
StartServiceW(hService, dwNumServiceArgs, lpServiceArgVectors)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* Thread32First::
|
||||
|
||||
Thread32First(hSnapshot, lpte)
|
||||
@@ -1059,6 +1235,18 @@ Functions:
|
||||
Errcheck:
|
||||
Nothing special
|
||||
|
||||
* TpCallbackSendAlpcMessageOnCompletion::
|
||||
|
||||
TpCallbackSendAlpcMessageOnCompletion(TpHandle, PortHandle, Flags, SendMessage)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is NOT 0
|
||||
|
||||
* UpdateProcThreadAttribute::
|
||||
|
||||
UpdateProcThreadAttribute(lpAttributeList, dwFlags=0, Attribute=NeededParameter, lpValue=NeededParameter, cbSize=NeededParameter, lpPreviousValue=None, lpReturnSize=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* VerQueryValueA::
|
||||
|
||||
VerQueryValueA(pBlock, lpSubBlock, lplpBuffer, puLen)
|
||||
@@ -1148,4 +1336,4 @@ Functions:
|
||||
WriteProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize=None, lpNumberOfBytesWritten=None)
|
||||
Computer nSize with len(lpBuffer) if not given
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
-830
@@ -1,830 +0,0 @@
|
||||
``windows.winproxy`` -- Windows API
|
||||
***********************************
|
||||
|
||||
.. module:: windows.winproxy
|
||||
|
||||
:mod:`windows.winproxy` tries to be a pythontic wrapper around windows API of various DLL.
|
||||
It also heavily relies on :mod:`ctypes` and :mod:`windows.generated_def.winfuncs`
|
||||
|
||||
Here are the things to know about :mod:`windows.winproxy`
|
||||
* All of this is based on :mod:`windows.generated_def.winfuncs`
|
||||
* DLL is loaded the first time an API of it is called
|
||||
* All parameters can be passed by ordinal or keyword
|
||||
* The call will fail if an argument with default value ``NeededParamater`` have been called without another value.
|
||||
* The call will raise a subclass of :class:`WindowsError` if it fails.
|
||||
* Some functions are 'transparent proxy' it means that all parameters are mandatory
|
||||
|
||||
Example: ``VirtualAlloc``
|
||||
"""""""""""""""""""""""""
|
||||
|
||||
Exemple with the function `VirtualAlloc` in :mod:`windows.winproxy`
|
||||
|
||||
Documentation:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
import windows
|
||||
windows.winproxy.VirtualAlloc
|
||||
# <function VirtualAlloc at 0x02ED63F0>
|
||||
|
||||
help(windows.winproxy.VirtualAlloc)
|
||||
# Help on function VirtualAlloc in module windows.winproxy:
|
||||
# VirtualAlloc(lpAddress=0, dwSize=NeededParameter, flAllocationType=MEM_COMMIT(0x1000L), flProtect=PAGE_EXECUTE_READWRITE(0x40L))
|
||||
# Errcheck:
|
||||
# raise Kernel32Error if result is 0
|
||||
|
||||
|
||||
Calling it
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
import windows
|
||||
|
||||
# Ordinal arguments
|
||||
windows.winproxy.VirtualAlloc(0, 0x1000)
|
||||
34537472
|
||||
|
||||
# Keyword arguments
|
||||
windows.winproxy.VirtualAlloc(dwSize=0x1000)
|
||||
34603008
|
||||
|
||||
# NeededParameter must be provided
|
||||
windows.winproxy.VirtualAlloc()
|
||||
"""
|
||||
Traceback (most recent call last):
|
||||
File "<stdin>", line 1, in <module>
|
||||
File "windows\winproxy.py", line 264, in VirtualAlloc
|
||||
return VirtualAlloc.ctypes_function(lpAddress, dwSize, flAllocationType, flProtect)
|
||||
File "windows\winproxy.py", line 130, in perform_call
|
||||
raise TypeError("{0}: Missing Mandatory parameter <{1}>".format(self.func_name, param_name))
|
||||
TypeError: VirtualAlloc: Missing Mandatory parameter <dwSize>
|
||||
"""
|
||||
|
||||
# Error raises exception
|
||||
windows.winproxy.VirtualAlloc(dwSize=0xffffffff)
|
||||
"""
|
||||
Traceback (most recent call last):
|
||||
File "<stdin>", line 1, in <module>
|
||||
File "windows\winproxy.py", line 264, in VirtualAlloc
|
||||
return VirtualAlloc.ctypes_function(lpAddress, dwSize, flAllocationType, flProtect)
|
||||
File "windows\winproxy.py", line 133, in perform_call
|
||||
return self._cprototyped(*args)
|
||||
File "windows\winproxy.py", line 59, in kernel32_error_check
|
||||
raise Kernel32Error(func_name)
|
||||
windows.winproxy.Kernel32Error: VirtualAlloc: [Error 8] Not enough storage is available to process this command.
|
||||
"""
|
||||
|
||||
|
||||
Functions in :mod:`windows.winproxy`
|
||||
""""""""""""""""""""""""""""""""""""
|
||||
|
||||
Transparent proxies:
|
||||
|
||||
* AllocConsole()
|
||||
* CloseHandle(hObject)
|
||||
* ContinueDebugEvent(dwProcessId, dwThreadId, dwContinueStatus)
|
||||
* DebugActiveProcess(dwProcessId)
|
||||
* DebugActiveProcessStop(dwProcessId)
|
||||
* DebugBreak()
|
||||
* DebugBreakProcess(Process)
|
||||
* DebugSetProcessKillOnExit(KillOnExit)
|
||||
* EnumWindows(lpEnumFunc, lParam)
|
||||
* ExitProcess(uExitCode)
|
||||
* ExitThread(dwExitCode)
|
||||
* FreeConsole()
|
||||
* GetComputerNameA(lpBuffer, lpnSize)
|
||||
* GetComputerNameW(lpBuffer, lpnSize)
|
||||
* GetCurrentProcess()
|
||||
* GetCurrentProcessorNumber()
|
||||
* GetCurrentThread()
|
||||
* GetCurrentThreadId()
|
||||
* GetDriveTypeA(lpRootPathName)
|
||||
* GetDriveTypeW(lpRootPathName)
|
||||
* GetExitCodeProcess(hProcess, lpExitCode)
|
||||
* GetExitCodeThread(hThread, lpExitCode)
|
||||
* GetLastError()
|
||||
* GetLogicalDriveStringsA(nBufferLength, lpBuffer)
|
||||
* GetLogicalDriveStringsW(nBufferLength, lpBuffer)
|
||||
* GetProcAddress(hModule, lpProcName)
|
||||
* GetProcessId(Process)
|
||||
* GetSidSubAuthority(pSid, nSubAuthority)
|
||||
* GetSidSubAuthorityCount(pSid)
|
||||
* GetStdHandle(nStdHandle)
|
||||
* GetSystemMetrics(nIndex)
|
||||
* GetThreadId(Thread)
|
||||
* GetVersionExA(lpVersionInformation)
|
||||
* GetVersionExW(lpVersionInformation)
|
||||
* GetVolumeNameForVolumeMountPointA(lpszVolumeMountPoint, lpszVolumeName, cchBufferLength)
|
||||
* GetVolumeNameForVolumeMountPointW(lpszVolumeMountPoint, lpszVolumeName, cchBufferLength)
|
||||
* GetWindowModuleFileNameA(hwnd, pszFileName, cchFileNameMax)
|
||||
* GetWindowModuleFileNameW(hwnd, pszFileName, cchFileNameMax)
|
||||
* GetWindowTextA(hWnd, lpString, nMaxCount)
|
||||
* GetWindowTextW(hWnd, lpString, nMaxCount)
|
||||
* LoadLibraryA(lpFileName)
|
||||
* LoadLibraryW(lpFileName)
|
||||
* QueryDosDeviceA(lpDeviceName, lpTargetPath, ucchMax)
|
||||
* QueryDosDeviceW(lpDeviceName, lpTargetPath, ucchMax)
|
||||
* ResumeThread(hThread)
|
||||
* SetStdHandle(nStdHandle, hHandle)
|
||||
* SetTcpEntry(pTcpRow)
|
||||
* SuspendThread(hThread)
|
||||
* TerminateProcess(hProcess, uExitCode)
|
||||
* TerminateThread(hThread, dwExitCode)
|
||||
* VirtualQueryEx(hProcess, lpAddress, lpBuffer, dwLength)
|
||||
* Wow64DisableWow64FsRedirection(OldValue)
|
||||
* Wow64EnableWow64FsRedirection(Wow64FsEnableRedirection)
|
||||
* Wow64GetThreadContext(hThread, lpContext)
|
||||
* Wow64RevertWow64FsRedirection(OldValue)
|
||||
* lstrcmpA(lpString1, lpString2)
|
||||
* lstrcmpW(lpString1, lpString2)
|
||||
|
||||
Functions:
|
||||
|
||||
* AddVectoredContinueHandler::
|
||||
|
||||
AddVectoredContinueHandler(FirstHandler=1, VectoredHandler=NeededParameter)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* AddVectoredExceptionHandler::
|
||||
|
||||
AddVectoredExceptionHandler(FirstHandler=1, VectoredHandler=NeededParameter)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* AdjustTokenPrivileges::
|
||||
|
||||
AdjustTokenPrivileges(TokenHandle, DisableAllPrivileges=False, NewState=NeededParameter, BufferLength=None, PreviousState=None, ReturnLength=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* AlpcGetMessageAttribute::
|
||||
|
||||
AlpcGetMessageAttribute(Buffer, AttributeFlag)
|
||||
Errcheck:
|
||||
Nothing special
|
||||
|
||||
* AlpcInitializeMessageAttribute::
|
||||
|
||||
AlpcInitializeMessageAttribute(AttributeFlags, Buffer, BufferSize, RequiredBufferSize)
|
||||
|
||||
* CoCreateInstance::
|
||||
|
||||
CoCreateInstance(rclsid, pUnkOuter=None, dwClsContext=tagCLSCTX.CLSCTX_INPROC_SERVER(0x1L), riid=NeededParameter, ppv=NeededParameter)
|
||||
Errcheck:
|
||||
Nothing special
|
||||
|
||||
* CoInitializeEx::
|
||||
|
||||
CoInitializeEx(pvReserved=None, dwCoInit=tagCOINIT.COINIT_MULTITHREADED(0x0L))
|
||||
Errcheck:
|
||||
Nothing special
|
||||
|
||||
* CoInitializeSecurity::
|
||||
|
||||
CoInitializeSecurity(pSecDesc, cAuthSvc, asAuthSvc, pReserved1, dwAuthnLevel, dwImpLevel, pAuthList, dwCapabilities, pReserved3)
|
||||
Errcheck:
|
||||
Nothing special
|
||||
|
||||
* CreateFileA::
|
||||
|
||||
CreateFileA(lpFileName, dwDesiredAccess=GENERIC_READ(0x80000000L), dwShareMode=0, lpSecurityAttributes=None, dwCreationDisposition=OPEN_EXISTING(0x3L), dwFlagsAndAttributes=FILE_ATTRIBUTE_NORMAL(0x80L), hTemplateFile=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is NOT 0
|
||||
|
||||
* CreateFileMappingA::
|
||||
|
||||
CreateFileMappingA(hFile, lpFileMappingAttributes=None, flProtect=PAGE_READWRITE(0x4L), dwMaximumSizeHigh=0, dwMaximumSizeLow=NeededParameter, lpName=NeededParameter)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* CreateFileMappingW::
|
||||
|
||||
CreateFileMappingW(hFile, lpFileMappingAttributes=None, flProtect=PAGE_READWRITE(0x4L), dwMaximumSizeHigh=0, dwMaximumSizeLow=0, lpName=NeededParameter)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* CreateFileW::
|
||||
|
||||
CreateFileW(lpFileName, dwDesiredAccess=GENERIC_READ(0x80000000L), dwShareMode=0, lpSecurityAttributes=None, dwCreationDisposition=OPEN_EXISTING(0x3L), dwFlagsAndAttributes=FILE_ATTRIBUTE_NORMAL(0x80L), hTemplateFile=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is NOT 0
|
||||
|
||||
* CreateProcessA::
|
||||
|
||||
CreateProcessA(lpApplicationName, lpCommandLine=None, lpProcessAttributes=None, lpThreadAttributes=None, bInheritHandles=False, dwCreationFlags=0, lpEnvironment=None, lpCurrentDirectory=None, lpStartupInfo=None, lpProcessInformation=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* CreateProcessW::
|
||||
|
||||
CreateProcessW(lpApplicationName, lpCommandLine=None, lpProcessAttributes=None, lpThreadAttributes=None, bInheritHandles=False, dwCreationFlags=0, lpEnvironment=None, lpCurrentDirectory=None, lpStartupInfo=None, lpProcessInformation=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* CreateRemoteThread::
|
||||
|
||||
CreateRemoteThread(hProcess=NeededParameter, lpThreadAttributes=None, dwStackSize=0, lpStartAddress=NeededParameter, lpParameter=NeededParameter, dwCreationFlags=0, lpThreadId=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* CreateThread::
|
||||
|
||||
CreateThread(lpThreadAttributes=None, dwStackSize=0, lpStartAddress=NeededParameter, lpParameter=NeededParameter, dwCreationFlags=0, lpThreadId=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* CreateToolhelp32Snapshot::
|
||||
|
||||
CreateToolhelp32Snapshot(dwFlags, th32ProcessID=0)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* CryptCATAdminAcquireContext::
|
||||
|
||||
CryptCATAdminAcquireContext(phCatAdmin, pgSubsystem, dwFlags)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* CryptCATAdminCalcHashFromFileHandle::
|
||||
|
||||
CryptCATAdminCalcHashFromFileHandle(hFile, pcbHash, pbHash, dwFlags)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* CryptCATAdminEnumCatalogFromHash::
|
||||
|
||||
CryptCATAdminEnumCatalogFromHash(hCatAdmin, pbHash, cbHash, dwFlags, phPrevCatInfo)
|
||||
Errcheck:
|
||||
Nothing special
|
||||
|
||||
* CryptCATAdminReleaseCatalogContext::
|
||||
|
||||
CryptCATAdminReleaseCatalogContext(hCatAdmin, hCatInfo, dwFlags)
|
||||
Errcheck:
|
||||
Nothing special
|
||||
|
||||
* CryptCATAdminReleaseContext::
|
||||
|
||||
CryptCATAdminReleaseContext(hCatAdmin, dwFlags)
|
||||
Errcheck:
|
||||
Nothing special
|
||||
|
||||
* CryptCATCatalogInfoFromContext::
|
||||
|
||||
CryptCATCatalogInfoFromContext(hCatInfo, psCatInfo, dwFlags)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* DeviceIoControl::
|
||||
|
||||
DeviceIoControl(hDevice, dwIoControlCode, lpInBuffer, nInBufferSize=None, lpOutBuffer=NeededParameter, nOutBufferSize=None, lpBytesReturned=None, lpOverlapped=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* DuplicateHandle::
|
||||
|
||||
DuplicateHandle(hSourceProcessHandle, hSourceHandle, hTargetProcessHandle, lpTargetHandle, dwDesiredAccess=0, bInheritHandle=False, dwOptions=0)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* EnumServicesStatusExA::
|
||||
|
||||
EnumServicesStatusExA(hSCManager, InfoLevel, dwServiceType, dwServiceState, lpServices, cbBufSize, pcbBytesNeeded, lpServicesReturned, lpResumeHandle, pszGroupName)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* EnumServicesStatusExW::
|
||||
|
||||
EnumServicesStatusExW(hSCManager, InfoLevel, dwServiceType, dwServiceState, lpServices, cbBufSize, pcbBytesNeeded, lpServicesReturned, lpResumeHandle, pszGroupName)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetExtendedTcpTable::
|
||||
|
||||
GetExtendedTcpTable(pTcpTable, pdwSize=None, bOrder=True, ulAf=NeededParameter, TableClass=_TCP_TABLE_CLASS.TCP_TABLE_OWNER_PID_ALL(0x5L), Reserved=0)
|
||||
Errcheck:
|
||||
raise IphlpapiError if result is NOT 0
|
||||
|
||||
* GetFileVersionInfoA::
|
||||
|
||||
GetFileVersionInfoA(lptstrFilename, dwHandle=0, dwLen=None, lpData=NeededParameter)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetFileVersionInfoSizeA::
|
||||
|
||||
GetFileVersionInfoSizeA(lptstrFilename, lpdwHandle=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetFileVersionInfoSizeW::
|
||||
|
||||
GetFileVersionInfoSizeW(lptstrFilename, lpdwHandle=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetFileVersionInfoW::
|
||||
|
||||
GetFileVersionInfoW(lptstrFilename, dwHandle=0, dwLen=None, lpData=NeededParameter)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetIfTable::
|
||||
|
||||
GetIfTable(pIfTable, pdwSize, bOrder=False)
|
||||
Errcheck:
|
||||
raise IphlpapiError if result is NOT 0
|
||||
|
||||
* GetInterfaceInfo::
|
||||
|
||||
GetInterfaceInfo(pIfTable, dwOutBufLen=None)
|
||||
Errcheck:
|
||||
raise IphlpapiError if result is NOT 0
|
||||
|
||||
* GetIpAddrTable::
|
||||
|
||||
GetIpAddrTable(pIpAddrTable, pdwSize, bOrder=False)
|
||||
Errcheck:
|
||||
raise IphlpapiError if result is NOT 0
|
||||
|
||||
* GetMappedFileNameAWrapper::
|
||||
|
||||
GetMappedFileNameAWrapper(hProcess, lpv, lpFilename, nSize=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetMappedFileNameAWrapper::
|
||||
|
||||
GetMappedFileNameAWrapper(hProcess, lpv, lpFilename, nSize=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetMappedFileNameWWrapper::
|
||||
|
||||
GetMappedFileNameWWrapper(hProcess, lpv, lpFilename, nSize=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetMappedFileNameWWrapper::
|
||||
|
||||
GetMappedFileNameWWrapper(hProcess, lpv, lpFilename, nSize=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetModuleBaseNameAWrapper::
|
||||
|
||||
GetModuleBaseNameAWrapper(hProcess, hModule, lpBaseName, nSize=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetModuleBaseNameAWrapper::
|
||||
|
||||
GetModuleBaseNameAWrapper(hProcess, hModule, lpBaseName, nSize=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetModuleBaseNameWWrapper::
|
||||
|
||||
GetModuleBaseNameWWrapper(hProcess, hModule, lpBaseName, nSize=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetModuleBaseNameWWrapper::
|
||||
|
||||
GetModuleBaseNameWWrapper(hProcess, hModule, lpBaseName, nSize=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetProcessImageFileNameAWrapper::
|
||||
|
||||
GetProcessImageFileNameAWrapper(hProcess, lpImageFileName, nSize=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetProcessImageFileNameAWrapper::
|
||||
|
||||
GetProcessImageFileNameAWrapper(hProcess, lpImageFileName, nSize=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetProcessImageFileNameWWrapper::
|
||||
|
||||
GetProcessImageFileNameWWrapper(hProcess, lpImageFileName, nSize=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetProcessImageFileNameWWrapper::
|
||||
|
||||
GetProcessImageFileNameWWrapper(hProcess, lpImageFileName, nSize=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetProcessTimes::
|
||||
|
||||
GetProcessTimes(hProcess, lpCreationTime, lpExitTime, lpKernelTime, lpUserTime)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetThreadContext::
|
||||
|
||||
GetThreadContext(hThread, lpContext=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetTokenInformation::
|
||||
|
||||
GetTokenInformation(TokenHandle=NeededParameter, TokenInformationClass=NeededParameter, TokenInformation=None, TokenInformationLength=0, ReturnLength=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetVolumeInformationA::
|
||||
|
||||
GetVolumeInformationA(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* GetVolumeInformationW::
|
||||
|
||||
GetVolumeInformationW(lpRootPathName, lpVolumeNameBuffer=None, nVolumeNameSize=0, lpVolumeSerialNumber=None, lpMaximumComponentLength=None, lpFileSystemFlags=None, lpFileSystemNameBuffer=None, nFileSystemNameSize=0)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* LdrLoadDll::
|
||||
|
||||
LdrLoadDll(PathToFile, Flags, ModuleFileName, ModuleHandle)
|
||||
|
||||
* LookupAccountSidA::
|
||||
|
||||
LookupAccountSidA(lpSystemName, lpSid, lpName, cchName, lpReferencedDomainName, cchReferencedDomainName, peUse)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* LookupAccountSidW::
|
||||
|
||||
LookupAccountSidW(lpSystemName, lpSid, lpName, cchName, lpReferencedDomainName, cchReferencedDomainName, peUse)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* LookupPrivilegeValueA::
|
||||
|
||||
LookupPrivilegeValueA(lpSystemName=None, lpName=NeededParameter, lpLuid=NeededParameter)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* LookupPrivilegeValueW::
|
||||
|
||||
LookupPrivilegeValueW(lpSystemName=None, lpName=NeededParameter, lpLuid=NeededParameter)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* MapViewOfFile::
|
||||
|
||||
MapViewOfFile(hFileMappingObject, dwDesiredAccess=FILE_MAP_ALL_ACCESS(0xf001fL), dwFileOffsetHigh=0, dwFileOffsetLow=0, dwNumberOfBytesToMap=NeededParameter)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* NtAlpcAcceptConnectPort::
|
||||
|
||||
NtAlpcAcceptConnectPort(PortHandle, ConnectionPortHandle, Flags, ObjectAttributes, PortAttributes, PortContext, ConnectionRequest, ConnectionMessageAttributes, AcceptConnection)
|
||||
|
||||
* NtAlpcConnectPort::
|
||||
|
||||
NtAlpcConnectPort(PortHandle, PortName, ObjectAttributes, PortAttributes, Flags, RequiredServerSid, ConnectionMessage, BufferLength, OutMessageAttributes, InMessageAttributes, Timeout)
|
||||
|
||||
* NtAlpcCreatePort::
|
||||
|
||||
NtAlpcCreatePort(PortHandle, ObjectAttributes, PortAttributes)
|
||||
|
||||
* NtAlpcSendWaitReceivePort::
|
||||
|
||||
NtAlpcSendWaitReceivePort(PortHandle, Flags, SendMessage, SendMessageAttributes, ReceiveMessage, BufferLength, ReceiveMessageAttributes, Timeout)
|
||||
|
||||
* NtCreateThreadEx::
|
||||
|
||||
NtCreateThreadEx(ThreadHandle=None, DesiredAccess=2097151, ObjectAttributes=0, ProcessHandle=NeededParameter, lpStartAddress=NeededParameter, lpParameter=NeededParameter, CreateSuspended=0, dwStackSize=0, Unknown1=0, Unknown2=0, Unknown=0)
|
||||
|
||||
* NtGetContextThread::
|
||||
|
||||
NtGetContextThread(hThread, lpContext)
|
||||
|
||||
* NtOpenDirectoryObject::
|
||||
|
||||
NtOpenDirectoryObject(DirectoryHandle, DesiredAccess, ObjectAttributes)
|
||||
|
||||
* NtOpenEvent::
|
||||
|
||||
NtOpenEvent(EventHandle, DesiredAccess, ObjectAttributes)
|
||||
|
||||
* NtOpenSymbolicLinkObject::
|
||||
|
||||
NtOpenSymbolicLinkObject(LinkHandle, DesiredAccess, ObjectAttributes)
|
||||
|
||||
* NtProtectVirtualMemory::
|
||||
|
||||
NtProtectVirtualMemory(ProcessHandle, BaseAddress, NumberOfBytesToProtect, NewAccessProtection, OldAccessProtection=None)
|
||||
|
||||
* NtQueryDirectoryObject::
|
||||
|
||||
NtQueryDirectoryObject(DirectoryHandle, Buffer, Length, ReturnSingleEntry, RestartScan, Context, ReturnLength)
|
||||
|
||||
* NtQueryInformationProcess::
|
||||
|
||||
NtQueryInformationProcess(ProcessHandle, ProcessInformationClass, ProcessInformation, ProcessInformationLength=0, ReturnLength=None)
|
||||
|
||||
* NtQueryInformationThread::
|
||||
|
||||
NtQueryInformationThread(ThreadHandle, ThreadInformationClass, ThreadInformation, ThreadInformationLength=0, ReturnLength=None)
|
||||
|
||||
* NtQueryObject::
|
||||
|
||||
NtQueryObject(Handle, ObjectInformationClass, ObjectInformation=None, ObjectInformationLength=0, ReturnLength=NeededParameter)
|
||||
|
||||
* NtQuerySymbolicLinkObject::
|
||||
|
||||
NtQuerySymbolicLinkObject(LinkHandle, LinkTarget, ReturnedLength)
|
||||
|
||||
* NtQuerySystemInformation::
|
||||
|
||||
NtQuerySystemInformation(SystemInformationClass, SystemInformation=None, SystemInformationLength=0, ReturnLength=NeededParameter)
|
||||
|
||||
* NtQueryVirtualMemory::
|
||||
|
||||
NtQueryVirtualMemory(ProcessHandle, BaseAddress, MemoryInformationClass, MemoryInformation=NeededParameter, MemoryInformationLength=0, ReturnLength=None)
|
||||
|
||||
* NtSetContextThread::
|
||||
|
||||
NtSetContextThread(hThread, lpContext)
|
||||
|
||||
* NtWow64ReadVirtualMemory64::
|
||||
|
||||
NtWow64ReadVirtualMemory64(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead=None)
|
||||
|
||||
* NtWow64WriteVirtualMemory64::
|
||||
|
||||
NtWow64WriteVirtualMemory64(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesWritten=None)
|
||||
|
||||
* OpenEventA::
|
||||
|
||||
OpenEventA(dwDesiredAccess, bInheritHandle, lpName)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* OpenEventW::
|
||||
|
||||
OpenEventW(dwDesiredAccess, bInheritHandle, lpName)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* OpenProcess::
|
||||
|
||||
OpenProcess(dwDesiredAccess=PROCESS_ALL_ACCESS(0x1f0fffL), bInheritHandle=0, dwProcessId=NeededParameter)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* OpenProcessToken::
|
||||
|
||||
OpenProcessToken(ProcessHandle=None, DesiredAccess=NeededParameter, TokenHandle=NeededParameter)
|
||||
If ProcessHandle is None: take the current process
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* OpenSCManagerA::
|
||||
|
||||
OpenSCManagerA(lpMachineName=None, lpDatabaseName=None, dwDesiredAccess=SC_MANAGER_ALL_ACCESS(0xf003fL))
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* OpenSCManagerW::
|
||||
|
||||
OpenSCManagerW(lpMachineName=None, lpDatabaseName=None, dwDesiredAccess=SC_MANAGER_ALL_ACCESS(0xf003fL))
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* OpenThread::
|
||||
|
||||
OpenThread(dwDesiredAccess=THREAD_ALL_ACCESS(0x1f03ffL), bInheritHandle=0, dwThreadId=NeededParameter)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* Process32First::
|
||||
|
||||
Process32First(hSnapshot, lpte)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* Process32Next::
|
||||
|
||||
Process32Next(hSnapshot, lpte)
|
||||
Errcheck:
|
||||
Nothing special
|
||||
|
||||
* QueryWorkingSetWrapper::
|
||||
|
||||
QueryWorkingSetWrapper(hProcess, pv, cb)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* QueryWorkingSetExWrapper::
|
||||
|
||||
QueryWorkingSetExWrapper(hProcess, pv, cb)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* QueryWorkingSetExWrapper::
|
||||
|
||||
QueryWorkingSetExWrapper(hProcess, pv, cb)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* QueryWorkingSetWrapper::
|
||||
|
||||
QueryWorkingSetWrapper(hProcess, pv, cb)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* ReadProcessMemory::
|
||||
|
||||
ReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* RegCloseKey::
|
||||
|
||||
RegCloseKey(hKey)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is NOT 0
|
||||
|
||||
* RegGetValueA::
|
||||
|
||||
RegGetValueA(hkey, lpSubKey, lpValue, dwFlags, pdwType, pvData, pcbData)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is NOT 0
|
||||
|
||||
* RegGetValueW::
|
||||
|
||||
RegGetValueW(hkey, lpSubKey=None, lpValue=NeededParameter, dwFlags=0, pdwType=None, pvData=None, pcbData=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is NOT 0
|
||||
|
||||
* RegOpenKeyExA::
|
||||
|
||||
RegOpenKeyExA(hKey, lpSubKey, ulOptions, samDesired, phkResult)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is NOT 0
|
||||
|
||||
* RegOpenKeyExW::
|
||||
|
||||
RegOpenKeyExW(hKey, lpSubKey, ulOptions, samDesired, phkResult)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is NOT 0
|
||||
|
||||
* RemoveVectoredExceptionHandler::
|
||||
|
||||
RemoveVectoredExceptionHandler(Handler)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* SetThreadAffinityMask::
|
||||
|
||||
SetThreadAffinityMask(hThread=None, dwThreadAffinityMask=NeededParameter)
|
||||
If hThread is not given, it will be the current thread
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* SetThreadContext::
|
||||
|
||||
SetThreadContext(hThread, lpContext)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* Thread32First::
|
||||
|
||||
Thread32First(hSnapshot, lpte)
|
||||
Set byref(lpte) if needed
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* Thread32Next::
|
||||
|
||||
Thread32Next(hSnapshot, lpte)
|
||||
Set byref(lpte) if needed
|
||||
Errcheck:
|
||||
Nothing special
|
||||
|
||||
* VerQueryValueA::
|
||||
|
||||
VerQueryValueA(pBlock, lpSubBlock, lplpBuffer, puLen)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* VerQueryValueW::
|
||||
|
||||
VerQueryValueW(pBlock, lpSubBlock, lplpBuffer, puLen)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* VirtualAlloc::
|
||||
|
||||
VirtualAlloc(lpAddress=0, dwSize=NeededParameter, flAllocationType=MEM_COMMIT(0x1000L), flProtect=PAGE_EXECUTE_READWRITE(0x40L))
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* VirtualAllocEx::
|
||||
|
||||
VirtualAllocEx(hProcess, lpAddress=0, dwSize=NeededParameter, flAllocationType=MEM_COMMIT(0x1000L), flProtect=PAGE_EXECUTE_READWRITE(0x40L))
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* VirtualFree::
|
||||
|
||||
VirtualFree(lpAddress, dwSize=0, dwFreeType=MEM_RELEASE(0x8000L))
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* VirtualFreeEx::
|
||||
|
||||
VirtualFreeEx(hProcess, lpAddress, dwSize=0, dwFreeType=MEM_RELEASE(0x8000L))
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* VirtualProtect::
|
||||
|
||||
VirtualProtect(lpAddress, dwSize, flNewProtect, lpflOldProtect=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* VirtualProtectEx::
|
||||
|
||||
VirtualProtectEx(hProcess, lpAddress, dwSize, flNewProtect, lpflOldProtect=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* WaitForDebugEvent::
|
||||
|
||||
WaitForDebugEvent(lpDebugEvent, dwMilliseconds=INFINITE(0xffffffffL))
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* WaitForSingleObject::
|
||||
|
||||
WaitForSingleObject(hHandle, dwMilliseconds=INFINITE(0xffffffffL))
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is NOT 0
|
||||
|
||||
* WinVerifyTrust::
|
||||
|
||||
WinVerifyTrust(hwnd, pgActionID, pWVTData)
|
||||
Errcheck:
|
||||
Nothing special
|
||||
|
||||
* Wow64SetThreadContext::
|
||||
|
||||
Wow64SetThreadContext(hThread, lpContext)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* WriteFile::
|
||||
|
||||
WriteFile(hFile, lpBuffer, nNumberOfBytesToWrite=None, lpNumberOfBytesWritten=None, lpOverlapped=None)
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
|
||||
* WriteProcessMemory::
|
||||
|
||||
WriteProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize=None, lpNumberOfBytesWritten=None)
|
||||
Computer nSize with len(lpBuffer) if not given
|
||||
Errcheck:
|
||||
raise Kernel32Error if result is 0
|
||||
+13070
File diff suppressed because it is too large
Load Diff
-40
@@ -1,40 +0,0 @@
|
||||
``windows.wintrust`` -- Checking signature
|
||||
******************************************
|
||||
|
||||
.. module:: windows.wintrust
|
||||
|
||||
.. note::
|
||||
|
||||
See sample :ref:`sample_wintrust`
|
||||
|
||||
The :mod:`wintrust` module offers wrapper around ``wintrust.dll``.
|
||||
It allows to check the signature of a file.
|
||||
|
||||
The signature of a file can be at two differents place:
|
||||
|
||||
* In the file itself (:func:`check_signature`)
|
||||
* In a catalog file (:func:`full_signature_information`)
|
||||
|
||||
.. note::
|
||||
|
||||
`Explanation about catalog files <https://msdn.microsoft.com/en-us/library/windows/hardware/ff537872(v=vs.85).aspx>`_
|
||||
|
||||
|
||||
API
|
||||
"""
|
||||
|
||||
.. autofunction:: is_signed
|
||||
|
||||
.. autofunction:: full_signature_information
|
||||
|
||||
.. autofunction:: check_signature
|
||||
|
||||
|
||||
SignatureData
|
||||
'''''''''''''
|
||||
|
||||
.. autoclass:: SignatureData
|
||||
:exclude-members: count, index
|
||||
|
||||
|
||||
|
||||
Vendored
-6
@@ -1,6 +0,0 @@
|
||||
Early Work In Progress
|
||||
======================
|
||||
|
||||
Here are some features that are still work in progress. Code might be unstable and/or ultra-ugly.
|
||||
|
||||
<Nothing right now>
|
||||
Vendored
-10
@@ -1,10 +0,0 @@
|
||||
WMI -- Make request to WMI
|
||||
==========================
|
||||
|
||||
.. module:: windows.winobject.wmi
|
||||
|
||||
.. note::
|
||||
|
||||
See sample :ref:`wmi_request`
|
||||
|
||||
.. autoclass:: WmiRequester
|
||||
-10308
File diff suppressed because it is too large
Load Diff
Vendored
+560
@@ -0,0 +1,560 @@
|
||||
<!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="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>10. windows.alpc – Advanced Local Procedure Call — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
SOURCELINK_SUFFIX: '.txt'
|
||||
};
|
||||
</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" />
|
||||
<link rel="next" title="11. windows.rpc – ALPC-based Windows RPC" href="rpc.html" />
|
||||
<link rel="prev" title="9. windows.crypto – CryptoAPI" href="crypto.html" />
|
||||
</head>
|
||||
<body role="document">
|
||||
<div class="related" role="navigation" aria-label="related navigation">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="genindex.html" title="General Index"
|
||||
accesskey="I">index</a></li>
|
||||
<li class="right" >
|
||||
<a href="py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="rpc.html" title="11. windows.rpc – ALPC-based Windows RPC"
|
||||
accesskey="N">next</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="crypto.html" title="9. windows.crypto – CryptoAPI"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body" role="main">
|
||||
|
||||
<div class="section" id="module-windows.alpc">
|
||||
<span id="windows-alpc-advanced-local-procedure-call"></span><h1>10. <code class="docutils literal"><span class="pre">windows.alpc</span></code> – Advanced Local Procedure Call<a class="headerlink" href="#module-windows.alpc" title="Permalink to this headline">¶</a></h1>
|
||||
<p>The <a class="reference internal" href="#module-windows.alpc" title="windows.alpc"><code class="xref py py-mod docutils literal"><span class="pre">windows.alpc</span></code></a> module regroups the classes that permits to send and receive
|
||||
ALPC messages over an ALPC port and the classes representing these messages.</p>
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p>See samples:</p>
|
||||
<blockquote class="last">
|
||||
<div><ul class="simple">
|
||||
<li><a class="reference internal" href="sample.html#sample-alpc"><span class="std std-ref">simple alpc communication</span></a></li>
|
||||
<li><a class="reference internal" href="sample.html#sample-advanced-alpc"><span class="std std-ref">advanced alpc communication</span></a></li>
|
||||
</ul>
|
||||
</div></blockquote>
|
||||
</div>
|
||||
<div class="section" id="alpc-message">
|
||||
<h2>10.1. ALPC Message<a class="headerlink" href="#alpc-message" title="Permalink to this headline">¶</a></h2>
|
||||
<dl class="class">
|
||||
<dt id="windows.alpc.AlpcMessage">
|
||||
<em class="property">class </em><code class="descclassname">windows.alpc.</code><code class="descname">AlpcMessage</code><span class="sig-paren">(</span><em>msg_or_size=4096</em>, <em>attributes=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/alpc.html#AlpcMessage"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.alpc.AlpcMessage" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Represent a full ALPC Message: a <a class="reference internal" href="#windows.alpc.AlpcMessagePort" title="windows.alpc.AlpcMessagePort"><code class="xref py py-class docutils literal"><span class="pre">AlpcMessagePort</span></code></a> and a <a class="reference internal" href="#windows.alpc.MessageAttribute" title="windows.alpc.MessageAttribute"><code class="xref py py-class docutils literal"><span class="pre">MessageAttribute</span></code></a></p>
|
||||
<dl class="attribute">
|
||||
<dt id="windows.alpc.AlpcMessage.allocated_attributes">
|
||||
<code class="descname">allocated_attributes</code><a class="headerlink" href="#windows.alpc.AlpcMessage.allocated_attributes" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The list of allocated attributes</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">[<a class="reference internal" href="generated.html#windows.generated_def.Flag" title="windows.generated_def.Flag"><code class="xref py py-class docutils literal"><span class="pre">Flag</span></code></a>]</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.alpc.AlpcMessage.context_attribute">
|
||||
<code class="descname">context_attribute</code><a class="headerlink" href="#windows.alpc.AlpcMessage.context_attribute" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The <a class="reference internal" href="windef_generated.html#windows.generated_def.ALPC_MESSAGE_CONTEXT_ATTRIBUTE" title="windows.generated_def.ALPC_MESSAGE_CONTEXT_ATTRIBUTE"><code class="xref py py-data docutils literal"><span class="pre">ALPC_MESSAGE_CONTEXT_ATTRIBUTE</span></code></a> of the message:</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><code class="xref py py-class docutils literal"><span class="pre">ALPC_CONTEXT_ATTR</span></code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.alpc.AlpcMessage.context_is_valid">
|
||||
<code class="descname">context_is_valid</code><a class="headerlink" href="#windows.alpc.AlpcMessage.context_is_valid" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>True if <a class="reference internal" href="windef_generated.html#windows.generated_def.ALPC_MESSAGE_CONTEXT_ATTRIBUTE" title="windows.generated_def.ALPC_MESSAGE_CONTEXT_ATTRIBUTE"><code class="xref py py-data docutils literal"><span class="pre">ALPC_MESSAGE_CONTEXT_ATTRIBUTE</span></code></a> is a ValidAttributes</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.alpc.AlpcMessage.data">
|
||||
<code class="descname">data</code><a class="headerlink" href="#windows.alpc.AlpcMessage.data" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The data of the message (located after the PORT_MESSAGE header)</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.alpc.AlpcMessage.handle_attribute">
|
||||
<code class="descname">handle_attribute</code><a class="headerlink" href="#windows.alpc.AlpcMessage.handle_attribute" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The <a class="reference internal" href="windef_generated.html#windows.generated_def.ALPC_MESSAGE_HANDLE_ATTRIBUTE" title="windows.generated_def.ALPC_MESSAGE_HANDLE_ATTRIBUTE"><code class="xref py py-data docutils literal"><span class="pre">ALPC_MESSAGE_HANDLE_ATTRIBUTE</span></code></a> of the message:</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><code class="xref py py-class docutils literal"><span class="pre">ALPC_HANDLE_ATTR</span></code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.alpc.AlpcMessage.handle_is_valid">
|
||||
<code class="descname">handle_is_valid</code><a class="headerlink" href="#windows.alpc.AlpcMessage.handle_is_valid" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>True if <a class="reference internal" href="windef_generated.html#windows.generated_def.ALPC_MESSAGE_HANDLE_ATTRIBUTE" title="windows.generated_def.ALPC_MESSAGE_HANDLE_ATTRIBUTE"><code class="xref py py-data docutils literal"><span class="pre">ALPC_MESSAGE_HANDLE_ATTRIBUTE</span></code></a> is a ValidAttributes</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.alpc.AlpcMessage.security_attribute">
|
||||
<code class="descname">security_attribute</code><a class="headerlink" href="#windows.alpc.AlpcMessage.security_attribute" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The <a class="reference internal" href="windef_generated.html#windows.generated_def.ALPC_MESSAGE_SECURITY_ATTRIBUTE" title="windows.generated_def.ALPC_MESSAGE_SECURITY_ATTRIBUTE"><code class="xref py py-data docutils literal"><span class="pre">ALPC_MESSAGE_SECURITY_ATTRIBUTE</span></code></a> of the message</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><code class="xref py py-class docutils literal"><span class="pre">ALPC_SECURITY_ATTR</span></code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.alpc.AlpcMessage.security_is_valid">
|
||||
<code class="descname">security_is_valid</code><a class="headerlink" href="#windows.alpc.AlpcMessage.security_is_valid" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>True if <a class="reference internal" href="windef_generated.html#windows.generated_def.ALPC_MESSAGE_SECURITY_ATTRIBUTE" title="windows.generated_def.ALPC_MESSAGE_SECURITY_ATTRIBUTE"><code class="xref py py-data docutils literal"><span class="pre">ALPC_MESSAGE_SECURITY_ATTRIBUTE</span></code></a> is a ValidAttributes</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.alpc.AlpcMessage.type">
|
||||
<code class="descname">type</code><a class="headerlink" href="#windows.alpc.AlpcMessage.type" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The type of the message (<code class="docutils literal"><span class="pre">PORT_MESSAGE.u2.s2.Type</span></code>)</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.alpc.AlpcMessage.valid_attributes">
|
||||
<code class="descname">valid_attributes</code><a class="headerlink" href="#windows.alpc.AlpcMessage.valid_attributes" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The list of valid attributes</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">[<a class="reference internal" href="generated.html#windows.generated_def.Flag" title="windows.generated_def.Flag"><code class="xref py py-class docutils literal"><span class="pre">Flag</span></code></a>]</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.alpc.AlpcMessage.view_attribute">
|
||||
<code class="descname">view_attribute</code><a class="headerlink" href="#windows.alpc.AlpcMessage.view_attribute" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The <a class="reference internal" href="windef_generated.html#windows.generated_def.ALPC_MESSAGE_VIEW_ATTRIBUTE" title="windows.generated_def.ALPC_MESSAGE_VIEW_ATTRIBUTE"><code class="xref py py-data docutils literal"><span class="pre">ALPC_MESSAGE_VIEW_ATTRIBUTE</span></code></a> of the message:</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><code class="xref py py-class docutils literal"><span class="pre">ALPC_DATA_VIEW_ATTR</span></code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.alpc.AlpcMessage.view_is_valid">
|
||||
<code class="descname">view_is_valid</code><a class="headerlink" href="#windows.alpc.AlpcMessage.view_is_valid" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>True if <a class="reference internal" href="windef_generated.html#windows.generated_def.ALPC_MESSAGE_VIEW_ATTRIBUTE" title="windows.generated_def.ALPC_MESSAGE_VIEW_ATTRIBUTE"><code class="xref py py-data docutils literal"><span class="pre">ALPC_MESSAGE_VIEW_ATTRIBUTE</span></code></a> is a ValidAttributes</p>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="windows.alpc.AlpcMessagePort">
|
||||
<em class="property">class </em><code class="descclassname">windows.alpc.</code><code class="descname">AlpcMessagePort</code><a class="reference internal" href="_modules/windows/alpc.html#AlpcMessagePort"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.alpc.AlpcMessagePort" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The effective ALPC Message composed of a <code class="docutils literal"><span class="pre">PORT_MESSAGE</span></code> structure followed by the data</p>
|
||||
<dl class="attribute">
|
||||
<dt id="windows.alpc.AlpcMessagePort.data">
|
||||
<code class="descname">data</code><a class="headerlink" href="#windows.alpc.AlpcMessagePort.data" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The data of the message (located after the header)</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.alpc.AlpcMessagePort.datalen">
|
||||
<code class="descname">datalen</code><a class="headerlink" href="#windows.alpc.AlpcMessagePort.datalen" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The length of the data</p>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="windows.alpc.MessageAttribute">
|
||||
<em class="property">class </em><code class="descclassname">windows.alpc.</code><code class="descname">MessageAttribute</code><a class="reference internal" href="_modules/windows/alpc.html#MessageAttribute"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.alpc.MessageAttribute" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The attributes of an ALPC message</p>
|
||||
<dl class="attribute">
|
||||
<dt id="windows.alpc.MessageAttribute.allocated_list">
|
||||
<code class="descname">allocated_list</code><a class="headerlink" href="#windows.alpc.MessageAttribute.allocated_list" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The list of allocated attributes</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">[<a class="reference internal" href="generated.html#windows.generated_def.Flag" title="windows.generated_def.Flag"><code class="xref py py-class docutils literal"><span class="pre">Flag</span></code></a>]</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.alpc.MessageAttribute.is_allocated">
|
||||
<code class="descname">is_allocated</code><span class="sig-paren">(</span><em>attribute</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/alpc.html#MessageAttribute.is_allocated"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.alpc.MessageAttribute.is_allocated" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Return <code class="docutils literal"><span class="pre">True</span></code> if <code class="docutils literal"><span class="pre">attribute</span></code> is allocated</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.alpc.MessageAttribute.is_valid">
|
||||
<code class="descname">is_valid</code><span class="sig-paren">(</span><em>attribute</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/alpc.html#MessageAttribute.is_valid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.alpc.MessageAttribute.is_valid" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Return <code class="docutils literal"><span class="pre">True</span></code> if <code class="docutils literal"><span class="pre">attribute</span></code> is valid</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.alpc.MessageAttribute.valid_list">
|
||||
<code class="descname">valid_list</code><a class="headerlink" href="#windows.alpc.MessageAttribute.valid_list" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The list of valid attributes</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">[<a class="reference internal" href="generated.html#windows.generated_def.Flag" title="windows.generated_def.Flag"><code class="xref py py-class docutils literal"><span class="pre">Flag</span></code></a>]</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="classmethod">
|
||||
<dt id="windows.alpc.MessageAttribute.with_all_attributes">
|
||||
<em class="property">classmethod </em><code class="descname">with_all_attributes</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/alpc.html#MessageAttribute.with_all_attributes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.alpc.MessageAttribute.with_all_attributes" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Create a new <a class="reference internal" href="#windows.alpc.MessageAttribute" title="windows.alpc.MessageAttribute"><code class="xref py py-class docutils literal"><span class="pre">MessageAttribute</span></code></a> with the following attributes allocated:</p>
|
||||
<ul class="simple">
|
||||
<li><code class="xref py py-class docutils literal"><span class="pre">ALPC_MESSAGE_SECURITY_ATTRIBUTE</span></code></li>
|
||||
<li><code class="xref py py-class docutils literal"><span class="pre">ALPC_MESSAGE_VIEW_ATTRIBUTE</span></code></li>
|
||||
<li><code class="xref py py-class docutils literal"><span class="pre">ALPC_MESSAGE_CONTEXT_ATTRIBUTE</span></code></li>
|
||||
<li><code class="xref py py-class docutils literal"><span class="pre">ALPC_MESSAGE_HANDLE_ATTRIBUTE</span></code></li>
|
||||
<li><code class="xref py py-class docutils literal"><span class="pre">ALPC_MESSAGE_TOKEN_ATTRIBUTE</span></code></li>
|
||||
<li><code class="xref py py-class docutils literal"><span class="pre">ALPC_MESSAGE_DIRECT_ATTRIBUTE</span></code></li>
|
||||
<li><code class="xref py py-class docutils literal"><span class="pre">ALPC_MESSAGE_WORK_ON_BEHALF_ATTRIBUTE</span></code></li>
|
||||
</ul>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><a class="reference internal" href="#windows.alpc.MessageAttribute" title="windows.alpc.MessageAttribute"><code class="xref py py-class docutils literal"><span class="pre">MessageAttribute</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="classmethod">
|
||||
<dt id="windows.alpc.MessageAttribute.with_attributes">
|
||||
<em class="property">classmethod </em><code class="descname">with_attributes</code><span class="sig-paren">(</span><em>attributes</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/alpc.html#MessageAttribute.with_attributes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.alpc.MessageAttribute.with_attributes" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Create a new <a class="reference internal" href="#windows.alpc.MessageAttribute" title="windows.alpc.MessageAttribute"><code class="xref py py-class docutils literal"><span class="pre">MessageAttribute</span></code></a> with <code class="docutils literal"><span class="pre">attributes</span></code> allocated</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><a class="reference internal" href="#windows.alpc.MessageAttribute" title="windows.alpc.MessageAttribute"><code class="xref py py-class docutils literal"><span class="pre">MessageAttribute</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
</div>
|
||||
<div class="section" id="alpc-client">
|
||||
<h2>10.2. ALPC client<a class="headerlink" href="#alpc-client" title="Permalink to this headline">¶</a></h2>
|
||||
<dl class="class">
|
||||
<dt id="windows.alpc.AlpcClient">
|
||||
<em class="property">class </em><code class="descclassname">windows.alpc.</code><code class="descname">AlpcClient</code><span class="sig-paren">(</span><em>port_name=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/alpc.html#AlpcClient"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.alpc.AlpcClient" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>An ALPC client able to connect to a port and send/receive messages</p>
|
||||
<dl class="method">
|
||||
<dt id="windows.alpc.AlpcClient.connect_to_port">
|
||||
<code class="descname">connect_to_port</code><span class="sig-paren">(</span><em>port_name</em>, <em>connect_message=None</em>, <em>port_attr=None</em>, <em>port_attr_flags=65536</em>, <em>obj_attr=None</em>, <em>flags=ALPC_MSGFLG_SYNC_REQUEST(0x20000L)</em>, <em>timeout=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/alpc.html#AlpcClient.connect_to_port"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.alpc.AlpcClient.connect_to_port" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Connect to the ALPC port <code class="docutils literal"><span class="pre">port_name</span></code>. Most of the parameters have defauls value is <code class="docutils literal"><span class="pre">None</span></code> is passed.</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
|
||||
<li><strong>connect_message</strong> (<a class="reference internal" href="#windows.alpc.AlpcMessage" title="windows.alpc.AlpcMessage"><em>AlpcMessage</em></a>) – The message send with the connection request, if not <code class="docutils literal"><span class="pre">None</span></code> the function will return an <a class="reference internal" href="#windows.alpc.AlpcMessage" title="windows.alpc.AlpcMessage"><code class="xref py py-class docutils literal"><span class="pre">AlpcMessage</span></code></a></li>
|
||||
<li><strong>port_attr</strong> (<em>ALPC_PORT_ATTRIBUTES</em>) – The port attributes, one with default value will be used if this parameter is <code class="docutils literal"><span class="pre">None</span></code></li>
|
||||
<li><strong>port_attr_flags</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) – <code class="docutils literal"><span class="pre">ALPC_PORT_ATTRIBUTES.Flags</span></code> used if <code class="docutils literal"><span class="pre">port_attr</span></code> is <code class="docutils literal"><span class="pre">None</span></code> (MUTUALY EXCLUSINVE WITH <code class="docutils literal"><span class="pre">port_attr</span></code>)</li>
|
||||
<li><strong>obj_attr</strong> (<a class="reference internal" href="winstructs_generated.html#windows.generated_def.OBJECT_ATTRIBUTES" title="windows.generated_def.OBJECT_ATTRIBUTES"><em>OBJECT_ATTRIBUTES</em></a>) – The attributes of the port (can be None)</li>
|
||||
<li><strong>flags</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) – The flags for <code class="xref py py-func docutils literal"><span class="pre">NtAlpcConnectPort()</span></code></li>
|
||||
<li><strong>timeout</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) – The timeout of the request</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.alpc.AlpcClient.recv">
|
||||
<code class="descname">recv</code><span class="sig-paren">(</span><em>receive_msg=None</em>, <em>flags=0</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.alpc.AlpcClient.recv" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Receive a message into <code class="docutils literal"><span class="pre">alpc_message</span></code> with <code class="docutils literal"><span class="pre">flags</span></code>.</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
|
||||
<li><strong>receive_msg</strong> (<a class="reference internal" href="#windows.alpc.AlpcMessage" title="windows.alpc.AlpcMessage"><em>AlpcMessage</em></a><em> or </em><a class="reference external" href="https://docs.python.org/2/library/constants.html#None" title="(in Python v2.7)"><em>None</em></a>) – The message to send. If <code class="docutils literal"><span class="pre">receive_msg</span></code> is a <code class="docutils literal"><span class="pre">None</span></code> it create and return a simple <a class="reference internal" href="#windows.alpc.AlpcMessage" title="windows.alpc.AlpcMessage"><code class="xref py py-class docutils literal"><span class="pre">AlpcMessage</span></code></a></li>
|
||||
<li><strong>flags</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) – The flags for <code class="xref py py-func docutils literal"><span class="pre">NtAlpcSendWaitReceivePort()</span></code></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.alpc.AlpcClient.send">
|
||||
<code class="descname">send</code><span class="sig-paren">(</span><em>alpc_message</em>, <em>flags=0</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.alpc.AlpcClient.send" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Send the <code class="docutils literal"><span class="pre">alpc_message</span></code> with <code class="docutils literal"><span class="pre">flags</span></code></p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
|
||||
<li><strong>alpc_message</strong> (<a class="reference internal" href="#windows.alpc.AlpcMessage" title="windows.alpc.AlpcMessage"><em>AlpcMessage</em></a><em> or </em><a class="reference internal" href="process.html#windows.winobject.process.WinUnicodeString.str" title="windows.winobject.process.WinUnicodeString.str"><em>str</em></a>) – The message to send. If <code class="docutils literal"><span class="pre">alpc_message</span></code> is a <a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><code class="xref py py-class docutils literal"><span class="pre">str</span></code></a> it build an AlpcMessage with the message as data.</li>
|
||||
<li><strong>flags</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) – The flags for <code class="xref py py-func docutils literal"><span class="pre">NtAlpcSendWaitReceivePort()</span></code></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.alpc.AlpcClient.send_receive">
|
||||
<code class="descname">send_receive</code><span class="sig-paren">(</span><em>alpc_message</em>, <em>receive_msg=None</em>, <em>flags=ALPC_MSGFLG_SYNC_REQUEST(0x20000L)</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.alpc.AlpcClient.send_receive" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Send and receive a message with <code class="docutils literal"><span class="pre">flags</span></code>.</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
|
||||
<li><strong>alpc_message</strong> (<a class="reference internal" href="#windows.alpc.AlpcMessage" title="windows.alpc.AlpcMessage"><em>AlpcMessage</em></a><em> or </em><a class="reference internal" href="process.html#windows.winobject.process.WinUnicodeString.str" title="windows.winobject.process.WinUnicodeString.str"><em>str</em></a>) – The message to send. If <code class="docutils literal"><span class="pre">alpc_message</span></code> is a <a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><code class="xref py py-class docutils literal"><span class="pre">str</span></code></a> it build an AlpcMessage with the message as data.</li>
|
||||
<li><strong>receive_msg</strong> (<a class="reference internal" href="#windows.alpc.AlpcMessage" title="windows.alpc.AlpcMessage"><em>AlpcMessage</em></a><em> or </em><a class="reference external" href="https://docs.python.org/2/library/constants.html#None" title="(in Python v2.7)"><em>None</em></a>) – The message to send. If <code class="docutils literal"><span class="pre">receive_msg</span></code> is a <code class="docutils literal"><span class="pre">None</span></code> it create and return a simple <a class="reference internal" href="#windows.alpc.AlpcMessage" title="windows.alpc.AlpcMessage"><code class="xref py py-class docutils literal"><span class="pre">AlpcMessage</span></code></a></li>
|
||||
<li><strong>flags</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) – The flags for <code class="xref py py-func docutils literal"><span class="pre">NtAlpcSendWaitReceivePort()</span></code></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
</div>
|
||||
<div class="section" id="alpc-server">
|
||||
<h2>10.3. ALPC Server<a class="headerlink" href="#alpc-server" title="Permalink to this headline">¶</a></h2>
|
||||
<dl class="class">
|
||||
<dt id="windows.alpc.AlpcServer">
|
||||
<em class="property">class </em><code class="descclassname">windows.alpc.</code><code class="descname">AlpcServer</code><span class="sig-paren">(</span><em>port_name=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/alpc.html#AlpcServer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.alpc.AlpcServer" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>An ALPC server able to create a port, accept connections and send/receive messages</p>
|
||||
<dl class="method">
|
||||
<dt id="windows.alpc.AlpcServer.accept_connection">
|
||||
<code class="descname">accept_connection</code><span class="sig-paren">(</span><em>msg</em>, <em>port_attr=None</em>, <em>port_context=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/alpc.html#AlpcServer.accept_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.alpc.AlpcServer.accept_connection" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Accept the connection for a <code class="docutils literal"><span class="pre">LPC_CONNECTION_REQUEST</span></code> message.
|
||||
<code class="docutils literal"><span class="pre">msg.MessageId</span></code> must be the same as the connection requesting message.</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
|
||||
<li><strong>msg</strong> (<a class="reference internal" href="#windows.alpc.AlpcMessage" title="windows.alpc.AlpcMessage"><em>AlpcMessage</em></a>) – The response message.</li>
|
||||
<li><strong>port_attr</strong> (<em>ALPC_PORT_ATTRIBUTES</em>) – The attributes of the port, one with default value will be used if this parameter is <code class="docutils literal"><span class="pre">None</span></code></li>
|
||||
<li><strong>port_context</strong> (<em>PVOID</em>) – A value that will be copied in <code class="docutils literal"><span class="pre">ALPC_CONTEXT_ATTR.PortContext</span></code> of every message on this connection.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.alpc.AlpcServer.create_port">
|
||||
<code class="descname">create_port</code><span class="sig-paren">(</span><em>port_name</em>, <em>msglen=None</em>, <em>port_attr_flags=0</em>, <em>obj_attr=None</em>, <em>port_attr=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/alpc.html#AlpcServer.create_port"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.alpc.AlpcServer.create_port" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Create the ALPC port <code class="docutils literal"><span class="pre">port_name</span></code>. Most of the parameters have defauls value is <code class="docutils literal"><span class="pre">None</span></code> is passed.</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
|
||||
<li><strong>port_name</strong> (<a class="reference internal" href="process.html#windows.winobject.process.WinUnicodeString.str" title="windows.winobject.process.WinUnicodeString.str"><em>str</em></a>) – The port’s name to create.</li>
|
||||
<li><strong>msglen</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) – <code class="docutils literal"><span class="pre">ALPC_PORT_ATTRIBUTES.MaxMessageLength</span></code> used if <code class="docutils literal"><span class="pre">port_attr</span></code> is <code class="docutils literal"><span class="pre">None</span></code> (MUTUALY EXCLUSINVE WITH <code class="docutils literal"><span class="pre">port_attr</span></code>)</li>
|
||||
<li><strong>port_attr_flags</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) – <code class="docutils literal"><span class="pre">ALPC_PORT_ATTRIBUTES.Flags</span></code> used if <code class="docutils literal"><span class="pre">port_attr</span></code> is <code class="docutils literal"><span class="pre">None</span></code> (MUTUALY EXCLUSINVE WITH <code class="docutils literal"><span class="pre">port_attr</span></code>)</li>
|
||||
<li><strong>obj_attr</strong> (<a class="reference internal" href="winstructs_generated.html#windows.generated_def.OBJECT_ATTRIBUTES" title="windows.generated_def.OBJECT_ATTRIBUTES"><em>OBJECT_ATTRIBUTES</em></a>) – The attributes of the port, one with default value will be used if this parameter is <code class="docutils literal"><span class="pre">None</span></code></li>
|
||||
<li><strong>port_attr</strong> (<em>ALPC_PORT_ATTRIBUTES</em>) – The port attributes, one with default value will be used if this parameter is <code class="docutils literal"><span class="pre">None</span></code></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.alpc.AlpcServer.recv">
|
||||
<code class="descname">recv</code><span class="sig-paren">(</span><em>receive_msg=None</em>, <em>flags=0</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.alpc.AlpcServer.recv" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Receive a message into <code class="docutils literal"><span class="pre">alpc_message</span></code> with <code class="docutils literal"><span class="pre">flags</span></code>.</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
|
||||
<li><strong>receive_msg</strong> (<a class="reference internal" href="#windows.alpc.AlpcMessage" title="windows.alpc.AlpcMessage"><em>AlpcMessage</em></a><em> or </em><a class="reference external" href="https://docs.python.org/2/library/constants.html#None" title="(in Python v2.7)"><em>None</em></a>) – The message to send. If <code class="docutils literal"><span class="pre">receive_msg</span></code> is a <code class="docutils literal"><span class="pre">None</span></code> it create and return a simple <a class="reference internal" href="#windows.alpc.AlpcMessage" title="windows.alpc.AlpcMessage"><code class="xref py py-class docutils literal"><span class="pre">AlpcMessage</span></code></a></li>
|
||||
<li><strong>flags</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) – The flags for <code class="xref py py-func docutils literal"><span class="pre">NtAlpcSendWaitReceivePort()</span></code></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.alpc.AlpcServer.send">
|
||||
<code class="descname">send</code><span class="sig-paren">(</span><em>alpc_message</em>, <em>flags=0</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.alpc.AlpcServer.send" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Send the <code class="docutils literal"><span class="pre">alpc_message</span></code> with <code class="docutils literal"><span class="pre">flags</span></code></p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
|
||||
<li><strong>alpc_message</strong> (<a class="reference internal" href="#windows.alpc.AlpcMessage" title="windows.alpc.AlpcMessage"><em>AlpcMessage</em></a><em> or </em><a class="reference internal" href="process.html#windows.winobject.process.WinUnicodeString.str" title="windows.winobject.process.WinUnicodeString.str"><em>str</em></a>) – The message to send. If <code class="docutils literal"><span class="pre">alpc_message</span></code> is a <a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><code class="xref py py-class docutils literal"><span class="pre">str</span></code></a> it build an AlpcMessage with the message as data.</li>
|
||||
<li><strong>flags</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) – The flags for <code class="xref py py-func docutils literal"><span class="pre">NtAlpcSendWaitReceivePort()</span></code></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.alpc.AlpcServer.send_receive">
|
||||
<code class="descname">send_receive</code><span class="sig-paren">(</span><em>alpc_message</em>, <em>receive_msg=None</em>, <em>flags=ALPC_MSGFLG_SYNC_REQUEST(0x20000L)</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.alpc.AlpcServer.send_receive" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Send and receive a message with <code class="docutils literal"><span class="pre">flags</span></code>.</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
|
||||
<li><strong>alpc_message</strong> (<a class="reference internal" href="#windows.alpc.AlpcMessage" title="windows.alpc.AlpcMessage"><em>AlpcMessage</em></a><em> or </em><a class="reference internal" href="process.html#windows.winobject.process.WinUnicodeString.str" title="windows.winobject.process.WinUnicodeString.str"><em>str</em></a>) – The message to send. If <code class="docutils literal"><span class="pre">alpc_message</span></code> is a <a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><code class="xref py py-class docutils literal"><span class="pre">str</span></code></a> it build an AlpcMessage with the message as data.</li>
|
||||
<li><strong>receive_msg</strong> (<a class="reference internal" href="#windows.alpc.AlpcMessage" title="windows.alpc.AlpcMessage"><em>AlpcMessage</em></a><em> or </em><a class="reference external" href="https://docs.python.org/2/library/constants.html#None" title="(in Python v2.7)"><em>None</em></a>) – The message to send. If <code class="docutils literal"><span class="pre">receive_msg</span></code> is a <code class="docutils literal"><span class="pre">None</span></code> it create and return a simple <a class="reference internal" href="#windows.alpc.AlpcMessage" title="windows.alpc.AlpcMessage"><code class="xref py py-class docutils literal"><span class="pre">AlpcMessage</span></code></a></li>
|
||||
<li><strong>flags</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) – The flags for <code class="xref py py-func docutils literal"><span class="pre">NtAlpcSendWaitReceivePort()</span></code></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<h3><a href="index.html">Table Of Contents</a></h3>
|
||||
<ul>
|
||||
<li><a class="reference internal" href="#">10. <code class="docutils literal"><span class="pre">windows.alpc</span></code> – Advanced Local Procedure Call</a><ul>
|
||||
<li><a class="reference internal" href="#alpc-message">10.1. ALPC Message</a></li>
|
||||
<li><a class="reference internal" href="#alpc-client">10.2. ALPC client</a></li>
|
||||
<li><a class="reference internal" href="#alpc-server">10.3. ALPC Server</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h4>Previous topic</h4>
|
||||
<p class="topless"><a href="crypto.html"
|
||||
title="previous chapter">9. <code class="docutils literal"><span class="pre">windows.crypto</span></code> – CryptoAPI</a></p>
|
||||
<h4>Next topic</h4>
|
||||
<p class="topless"><a href="rpc.html"
|
||||
title="next chapter">11. <code class="docutils literal"><span class="pre">windows.rpc</span></code> – ALPC-based Windows RPC</a></p>
|
||||
<div role="note" aria-label="source link">
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
<li><a href="_sources/alpc.rst.txt"
|
||||
rel="nofollow">Show Source</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchbox" style="display: none" role="search">
|
||||
<h3>Quick search</h3>
|
||||
<form class="search" action="search.html" method="get">
|
||||
<div><input type="text" name="q" /></div>
|
||||
<div><input type="submit" value="Go" /></div>
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="related" role="navigation" aria-label="related navigation">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="genindex.html" title="General Index"
|
||||
>index</a></li>
|
||||
<li class="right" >
|
||||
<a href="py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="rpc.html" title="11. windows.rpc – ALPC-based Windows RPC"
|
||||
>next</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="crypto.html" title="9. windows.crypto – CryptoAPI"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.5.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
+4
-4
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>8. windows.com - Component Object Model — PythonForWindows 0.2 documentation</title>
|
||||
<title>8. windows.com - Component Object Model — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -45,7 +45,7 @@
|
||||
<li class="right" >
|
||||
<a href="debug.html" title="7. windows.debug – Debugging"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -153,7 +153,7 @@ You can then use the instance to call whatever method you need.</p>
|
||||
<li class="right" >
|
||||
<a href="debug.html" title="7. windows.debug – Debugging"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
|
||||
Vendored
+35
-100
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>9. windows.crypto – CryptoAPI — PythonForWindows 0.2 documentation</title>
|
||||
<title>9. windows.crypto – CryptoAPI — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -26,7 +26,7 @@
|
||||
<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" />
|
||||
<link rel="next" title="10. IAT hooking" href="iat_hook.html" />
|
||||
<link rel="next" title="10. windows.alpc – Advanced Local Procedure Call" href="alpc.html" />
|
||||
<link rel="prev" title="8. windows.com - Component Object Model" href="com.html" />
|
||||
</head>
|
||||
<body role="document">
|
||||
@@ -40,12 +40,12 @@
|
||||
<a href="py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="iat_hook.html" title="10. IAT hooking"
|
||||
<a href="alpc.html" title="10. windows.alpc – Advanced Local Procedure Call"
|
||||
accesskey="N">next</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="com.html" title="8. windows.com - Component Object Model"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -133,6 +133,12 @@ vector <code class="docutils literal"><span class="pre">initvector</span></code>
|
||||
</div>
|
||||
<div class="section" id="certificate">
|
||||
<h2>9.2. Certificate<a class="headerlink" href="#certificate" title="Permalink to this headline">¶</a></h2>
|
||||
<div class="admonition warning">
|
||||
<p class="first admonition-title">Warning</p>
|
||||
<p>The classes described here are under heavy test and try.</p>
|
||||
<p class="last">The classes, methods and properties described here will problably change as I haven’t yet had the time
|
||||
to try it out in real cases and figure out the final look of the API I want to do.</p>
|
||||
</div>
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p class="last">See sample <a class="reference internal" href="sample.html#sample-crypto-certificate"><span class="std std-ref">Certificate demo</span></a></p>
|
||||
@@ -306,6 +312,12 @@ go from the <code class="docutils literal"><span class="pre">self</span></code>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.crypto.CertificateContext.version">
|
||||
<code class="descname">version</code><a class="headerlink" href="#windows.crypto.CertificateContext.version" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>TODO: doc</p>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
</div>
|
||||
@@ -335,6 +347,20 @@ go from the <code class="docutils literal"><span class="pre">self</span></code>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.crypto.EHCERTSTORE.find">
|
||||
<code class="descname">find</code><span class="sig-paren">(</span><em>issuer</em>, <em>serialnumber</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/crypto/certificate.html#EHCERTSTORE.find"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.crypto.EHCERTSTORE.find" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Return the certificate that match <cite>issuer</cite> and <cite>serialnumber</cite></p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><a class="reference internal" href="#windows.crypto.CertificateContext" title="windows.crypto.CertificateContext"><code class="xref py py-class docutils literal"><span class="pre">CertificateContext</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="classmethod">
|
||||
<dt id="windows.crypto.EHCERTSTORE.from_file">
|
||||
<em class="property">classmethod </em><code class="descname">from_file</code><span class="sig-paren">(</span><em>filename</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/crypto/certificate.html#EHCERTSTORE.from_file"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.crypto.EHCERTSTORE.from_file" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -370,97 +396,6 @@ go from the <code class="docutils literal"><span class="pre">self</span></code>
|
||||
<em class="property">class </em><code class="descclassname">windows.crypto.</code><code class="descname">CryptObject</code><span class="sig-paren">(</span><em>filename</em>, <em>content_type=CERT_QUERY_CONTENT_FLAG_ALL(0x3ffeL)</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/crypto/certificate.html#CryptObject"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.crypto.CryptObject" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Extract information from an CryptoAPI object.</p>
|
||||
<p>Current main use is extracting the signers certificates from a PE file.</p>
|
||||
<div class="admonition warning">
|
||||
<p class="first admonition-title">Warning</p>
|
||||
<p class="last">The methods and property of this class will problably change as I haven’t yet had the time
|
||||
to try it out in real cases.</p>
|
||||
</div>
|
||||
<dl class="attribute">
|
||||
<dt id="windows.crypto.CryptObject.cert">
|
||||
<code class="descname">cert</code><a class="headerlink" href="#windows.crypto.CryptObject.cert" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Return embded certificate number <code class="docutils literal"><span class="pre">index</span></code>.</p>
|
||||
<p>note: not all embded certificate are directly used to sign the <a class="reference internal" href="#windows.crypto.CryptObject" title="windows.crypto.CryptObject"><code class="xref py py-class docutils literal"><span class="pre">CryptObject</span></code></a>.</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><a class="reference internal" href="#windows.crypto.CertificateContext" title="windows.crypto.CertificateContext"><code class="xref py py-class docutils literal"><span class="pre">CertificateContext</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.crypto.CryptObject.get_cert">
|
||||
<code class="descname">get_cert</code><span class="sig-paren">(</span><em>index=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/crypto/certificate.html#CryptObject.get_cert"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.crypto.CryptObject.get_cert" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Return embded certificate number <code class="docutils literal"><span class="pre">index</span></code>.</p>
|
||||
<p>note: not all embded certificate are directly used to sign the <a class="reference internal" href="#windows.crypto.CryptObject" title="windows.crypto.CryptObject"><code class="xref py py-class docutils literal"><span class="pre">CryptObject</span></code></a>.</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><a class="reference internal" href="#windows.crypto.CertificateContext" title="windows.crypto.CertificateContext"><code class="xref py py-class docutils literal"><span class="pre">CertificateContext</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.crypto.CryptObject.get_signer_certificate">
|
||||
<code class="descname">get_signer_certificate</code><span class="sig-paren">(</span><em>index=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/crypto/certificate.html#CryptObject.get_signer_certificate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.crypto.CryptObject.get_signer_certificate" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Return the certificate used for signer nb <code class="docutils literal"><span class="pre">index</span></code></p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><a class="reference internal" href="#windows.crypto.CertificateContext" title="windows.crypto.CertificateContext"><code class="xref py py-class docutils literal"><span class="pre">CertificateContext</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.crypto.CryptObject.get_signer_data">
|
||||
<code class="descname">get_signer_data</code><span class="sig-paren">(</span><em>index=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/crypto/certificate.html#CryptObject.get_signer_data"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.crypto.CryptObject.get_signer_data" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Returns the signer informations for signer nb <code class="docutils literal"><span class="pre">index</span></code></p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><code class="xref py py-class docutils literal"><span class="pre">CMSG_SIGNER_INFO</span></code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.crypto.CryptObject.nb_cert">
|
||||
<code class="descname">nb_cert</code><a class="headerlink" href="#windows.crypto.CryptObject.nb_cert" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The number of certificate embded in the <a class="reference internal" href="#windows.crypto.CryptObject" title="windows.crypto.CryptObject"><code class="xref py py-class docutils literal"><span class="pre">CryptObject</span></code></a></p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><code class="xref py py-class docutils literal"><span class="pre">int</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.crypto.CryptObject.nb_signer">
|
||||
<code class="descname">nb_signer</code><a class="headerlink" href="#windows.crypto.CryptObject.nb_signer" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The number of signers for the CryptObject</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><code class="xref py py-class docutils literal"><span class="pre">int</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
</div>
|
||||
@@ -578,8 +513,8 @@ to try it out in real cases.</p>
|
||||
<p class="topless"><a href="com.html"
|
||||
title="previous chapter">8. <code class="docutils literal"><span class="pre">windows.com</span></code> - Component Object Model</a></p>
|
||||
<h4>Next topic</h4>
|
||||
<p class="topless"><a href="iat_hook.html"
|
||||
title="next chapter">10. IAT hooking</a></p>
|
||||
<p class="topless"><a href="alpc.html"
|
||||
title="next chapter">10. <code class="docutils literal"><span class="pre">windows.alpc</span></code> – Advanced Local Procedure Call</a></p>
|
||||
<div role="note" aria-label="source link">
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
@@ -611,12 +546,12 @@ to try it out in real cases.</p>
|
||||
<a href="py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="iat_hook.html" title="10. IAT hooking"
|
||||
<a href="alpc.html" title="10. windows.alpc – Advanced Local Procedure Call"
|
||||
>next</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="com.html" title="8. windows.com - Component Object Model"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
|
||||
Vendored
+81
-13
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>7. windows.debug – Debugging — PythonForWindows 0.2 documentation</title>
|
||||
<title>7. windows.debug – Debugging — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -45,7 +45,7 @@
|
||||
<li class="right" >
|
||||
<a href="wintrust.html" title="6. windows.wintrust – Checking signature"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -93,6 +93,10 @@ The <a class="reference internal" href="#windows.debug.Debugger" title="windows.
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p class="last">see <a class="reference internal" href="sample.html#sample-debugger-attach"><span class="std std-ref">Debugger.attach sample</span></a></p>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
@@ -233,49 +237,113 @@ and <code class="docutils literal"><span class="pre">DBG_EXCEPTION_NOT_HANDLED</
|
||||
<dl class="method">
|
||||
<dt id="windows.debug.Debugger.on_create_process">
|
||||
<code class="descname">on_create_process</code><span class="sig-paren">(</span><em>create_process</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/debugger.html#Debugger.on_create_process"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.Debugger.on_create_process" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Called on create_process event (for param type see <a class="reference external" href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms679286(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/windows/desktop/ms679286(v=vs.85).aspx</a>)</p>
|
||||
<dd><p>Called on create_process event</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>create_process</strong> (<a class="reference internal" href="winstructs_generated.html#windows.generated_def.CREATE_PROCESS_DEBUG_INFO" title="windows.generated_def.CREATE_PROCESS_DEBUG_INFO"><em>CREATE_PROCESS_DEBUG_INFO</em></a>) – </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.debug.Debugger.on_exit_process">
|
||||
<code class="descname">on_exit_process</code><span class="sig-paren">(</span><em>exit_process</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/debugger.html#Debugger.on_exit_process"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.Debugger.on_exit_process" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Called on exit_process event (for param type see <a class="reference external" href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms679334(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/windows/desktop/ms679334(v=vs.85).aspx</a>)</p>
|
||||
<dd><p>Called on exit_process event</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>exit_process</strong> (<a class="reference internal" href="winstructs_generated.html#windows.generated_def.EXIT_PROCESS_DEBUG_INFO" title="windows.generated_def.EXIT_PROCESS_DEBUG_INFO"><em>EXIT_PROCESS_DEBUG_INFO</em></a>) – </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.debug.Debugger.on_create_thread">
|
||||
<code class="descname">on_create_thread</code><span class="sig-paren">(</span><em>create_thread</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/debugger.html#Debugger.on_create_thread"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.Debugger.on_create_thread" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Called on create_thread event (for param type see <a class="reference external" href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms679287(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/windows/desktop/ms679287(v=vs.85).aspx</a>)</p>
|
||||
<dd><p>Called on create_thread event</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>create_thread</strong> (<a class="reference internal" href="winstructs_generated.html#windows.generated_def.CREATE_THREAD_DEBUG_INFO" title="windows.generated_def.CREATE_THREAD_DEBUG_INFO"><em>CREATE_THREAD_DEBUG_INFO</em></a>) – </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.debug.Debugger.on_exit_thread">
|
||||
<code class="descname">on_exit_thread</code><span class="sig-paren">(</span><em>exit_thread</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/debugger.html#Debugger.on_exit_thread"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.Debugger.on_exit_thread" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Called on exit_thread event (for param type see <a class="reference external" href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms679335(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/windows/desktop/ms679335(v=vs.85).aspx</a>)</p>
|
||||
<dd><p>Called on exit_thread event</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>exit_thread</strong> (<a class="reference internal" href="winstructs_generated.html#windows.generated_def.EXIT_THREAD_DEBUG_INFO" title="windows.generated_def.EXIT_THREAD_DEBUG_INFO"><em>EXIT_THREAD_DEBUG_INFO</em></a>) – </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.debug.Debugger.on_load_dll">
|
||||
<code class="descname">on_load_dll</code><span class="sig-paren">(</span><em>load_dll</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/debugger.html#Debugger.on_load_dll"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.Debugger.on_load_dll" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Called on load_dll event (for param type see <a class="reference external" href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms680351(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/windows/desktop/ms680351(v=vs.85).aspx</a>)</p>
|
||||
<dd><p>Called on load_dll event</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>load_dll</strong> (<a class="reference internal" href="winstructs_generated.html#windows.generated_def.LOAD_DLL_DEBUG_INFO" title="windows.generated_def.LOAD_DLL_DEBUG_INFO"><em>LOAD_DLL_DEBUG_INFO</em></a>) – </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.debug.Debugger.on_unload_dll">
|
||||
<code class="descname">on_unload_dll</code><span class="sig-paren">(</span><em>unload_dll</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/debugger.html#Debugger.on_unload_dll"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.Debugger.on_unload_dll" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Called on unload_dll event (for param type see <a class="reference external" href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms681403(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/windows/desktop/ms681403(v=vs.85).aspx</a>)</p>
|
||||
<dd><p>Called on unload_dll event</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>unload_dll</strong> (<a class="reference internal" href="winstructs_generated.html#windows.generated_def.UNLOAD_DLL_DEBUG_INFO" title="windows.generated_def.UNLOAD_DLL_DEBUG_INFO"><em>UNLOAD_DLL_DEBUG_INFO</em></a>) – </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.debug.Debugger.on_output_debug_string">
|
||||
<code class="descname">on_output_debug_string</code><span class="sig-paren">(</span><em>debug_string</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/debugger.html#Debugger.on_output_debug_string"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.Debugger.on_output_debug_string" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Called on debug_string event (for param type see <a class="reference external" href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms680545(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/windows/desktop/ms680545(v=vs.85).aspx</a>)</p>
|
||||
<dd><p>Called on debug_string event</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>debug_string</strong> (<a class="reference internal" href="winstructs_generated.html#windows.generated_def.OUTPUT_DEBUG_STRING_INFO" title="windows.generated_def.OUTPUT_DEBUG_STRING_INFO"><em>OUTPUT_DEBUG_STRING_INFO</em></a>) – </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.debug.Debugger.on_rip">
|
||||
<code class="descname">on_rip</code><span class="sig-paren">(</span><em>rip_info</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/debugger.html#Debugger.on_rip"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.Debugger.on_rip" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Called on rip_info event (for param type see <a class="reference external" href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms680587(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/windows/desktop/ms680587(v=vs.85).aspx</a>)</p>
|
||||
<dd><p>Called on rip_info event</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>rip_info</strong> (<a class="reference internal" href="winstructs_generated.html#windows.generated_def.RIP_INFO" title="windows.generated_def.RIP_INFO"><em>RIP_INFO</em></a>) – </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
@@ -412,7 +480,7 @@ It is based on <code class="xref py py-func docutils literal"><span class="pre">
|
||||
</div>
|
||||
<dl class="class">
|
||||
<dt id="windows.debug.FunctionBP">
|
||||
<em class="property">class </em><code class="descclassname">windows.debug.</code><code class="descname">FunctionBP</code><span class="sig-paren">(</span><em>target</em>, <em>addr=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/breakpoints.html#FunctionBP"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.FunctionBP" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="descclassname">windows.debug.</code><code class="descname">FunctionBP</code><span class="sig-paren">(</span><em>addr=None</em>, <em>target=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/breakpoints.html#FunctionBP"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.FunctionBP" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>A breakpoint that accepts a function from <a class="reference internal" href="winproxy.html#module-windows.winproxy" title="windows.winproxy"><code class="xref py py-mod docutils literal"><span class="pre">windows.winproxy</span></code></a> and able to:</p>
|
||||
<ul class="simple">
|
||||
<li>Extract the arguments of the functions</li>
|
||||
@@ -505,7 +573,7 @@ It is based on <code class="xref py py-func docutils literal"><span class="pre">
|
||||
<li class="right" >
|
||||
<a href="wintrust.html" title="6. windows.wintrust – Checking signature"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
|
||||
Vendored
+7
-7
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>2.4. Exception and Context related structures — PythonForWindows 0.2 documentation</title>
|
||||
<title>2.4. Exception and Context related structures — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -45,7 +45,7 @@
|
||||
<li class="right" >
|
||||
<a href="process.html" title="2.1. Processes and Threads"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="various.html" accesskey="U">2. The <code class="docutils literal"><span class="pre">windows</span></code> objects</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -306,7 +306,7 @@ Most of the structures are the Windows structure with a prefix <code class="docu
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">[(reg_name, value)] – A <a class="reference external" href="https://docs.python.org/2/library/functions.html#list" title="(in Python v2.7)"><code class="xref py py-class docutils literal"><span class="pre">list</span></code></a> of <code class="xref py py-class docutils literal"><span class="pre">tuple</span></code></td>
|
||||
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">[(reg_name, value)] – A <code class="xref py py-class docutils literal"><span class="pre">list</span></code> of <code class="xref py py-class docutils literal"><span class="pre">tuple</span></code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -383,7 +383,7 @@ Most of the structures are the Windows structure with a prefix <code class="docu
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">[(reg_name, value)] – A <a class="reference external" href="https://docs.python.org/2/library/functions.html#list" title="(in Python v2.7)"><code class="xref py py-class docutils literal"><span class="pre">list</span></code></a> of <code class="xref py py-class docutils literal"><span class="pre">tuple</span></code></td>
|
||||
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">[(reg_name, value)] – A <code class="xref py py-class docutils literal"><span class="pre">list</span></code> of <code class="xref py py-class docutils literal"><span class="pre">tuple</span></code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -467,7 +467,7 @@ Most of the structures are the Windows structure with a prefix <code class="docu
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">[(reg_name, value)] – A <a class="reference external" href="https://docs.python.org/2/library/functions.html#list" title="(in Python v2.7)"><code class="xref py py-class docutils literal"><span class="pre">list</span></code></a> of <code class="xref py py-class docutils literal"><span class="pre">tuple</span></code></td>
|
||||
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">[(reg_name, value)] – A <code class="xref py py-class docutils literal"><span class="pre">list</span></code> of <code class="xref py py-class docutils literal"><span class="pre">tuple</span></code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -635,7 +635,7 @@ Most of the structures are the Windows structure with a prefix <code class="docu
|
||||
<li class="right" >
|
||||
<a href="process.html" title="2.1. Processes and Threads"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="various.html" >2. The <code class="docutils literal"><span class="pre">windows</span></code> objects</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
Vendored
+194
@@ -0,0 +1,194 @@
|
||||
<!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="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>12. windows.generated_def – generated Windows defines and structures — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
SOURCELINK_SUFFIX: '.txt'
|
||||
};
|
||||
</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" />
|
||||
<link rel="next" title="12.1. Windef" href="windef_generated.html" />
|
||||
<link rel="prev" title="11. windows.rpc – ALPC-based Windows RPC" href="rpc.html" />
|
||||
</head>
|
||||
<body role="document">
|
||||
<div class="related" role="navigation" aria-label="related navigation">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="genindex.html" title="General Index"
|
||||
accesskey="I">index</a></li>
|
||||
<li class="right" >
|
||||
<a href="py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="windef_generated.html" title="12.1. Windef"
|
||||
accesskey="N">next</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="rpc.html" title="11. windows.rpc – ALPC-based Windows RPC"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body" role="main">
|
||||
|
||||
<div class="section" id="module-windows.generated_def">
|
||||
<span id="windows-generated-def-generated-windows-defines-and-structures"></span><h1>12. <code class="docutils literal"><span class="pre">windows.generated_def</span></code> – generated Windows defines and structures<a class="headerlink" href="#module-windows.generated_def" title="Permalink to this headline">¶</a></h1>
|
||||
<p><a class="reference internal" href="#module-windows.generated_def" title="windows.generated_def"><code class="xref py py-mod docutils literal"><span class="pre">windows.generated_def</span></code></a> contains <code class="docutils literal"><span class="pre">Python</span></code> files generated by <code class="docutils literal"><span class="pre">ctypes_generation</span></code>.</p>
|
||||
<p>Those generated files includes:</p>
|
||||
<blockquote>
|
||||
<div><ul class="simple">
|
||||
<li>some Windows structures and enums</li>
|
||||
<li>some Windows defines including some <code class="docutils literal"><span class="pre">NTSTATUS</span></code></li>
|
||||
<li>some Windows function prototypes</li>
|
||||
</ul>
|
||||
</div></blockquote>
|
||||
<p>Each value in <code class="docutils literal"><span class="pre">windef</span></code> and <code class="docutils literal"><span class="pre">ntstatus</span></code> is a <a class="reference internal" href="#windows.generated_def.Flag" title="windows.generated_def.Flag"><code class="xref py py-class docutils literal"><span class="pre">Flag</span></code></a> or a <a class="reference internal" href="#windows.generated_def.StrFlag" title="windows.generated_def.StrFlag"><code class="xref py py-class docutils literal"><span class="pre">StrFlag</span></code></a>.</p>
|
||||
<p>Here is every generated definition by type:</p>
|
||||
<div class="toctree-wrapper compound">
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="windef_generated.html">12.1. Windef</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="ntstatus_generated.html">12.2. Ntstatus</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="winstructs_generated.html">12.3. Winstructs</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="winstructs_generated.html#winenums">12.4. WinEnums</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<dl class="class">
|
||||
<dt id="windows.generated_def.Flag">
|
||||
<em class="property">class </em><code class="descclassname">windows.generated_def.</code><code class="descname">Flag</code><a class="reference internal" href="_modules/windows/generated_def/windef.html#Flag"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.generated_def.Flag" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>A <a class="reference external" href="https://docs.python.org/2/library/functions.html#long" title="(in Python v2.7)"><code class="xref py py-class docutils literal"><span class="pre">long</span></code></a> with a name</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="windows.generated_def.StrFlag">
|
||||
<em class="property">class </em><code class="descclassname">windows.generated_def.</code><code class="descname">StrFlag</code><a class="reference internal" href="_modules/windows/generated_def/windef.html#StrFlag"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.generated_def.StrFlag" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>A <a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><code class="xref py py-class docutils literal"><span class="pre">str</span></code></a> with a name</p>
|
||||
</dd></dl>
|
||||
|
||||
<div class="section" id="example">
|
||||
<h2>12.5. Example<a class="headerlink" href="#example" title="Permalink to this headline">¶</a></h2>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">import</span> <span class="nn">windows.generated_def</span>
|
||||
<span class="gp">>>> </span><span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="kn">as</span> <span class="nn">gdef</span>
|
||||
<span class="gp">>>> </span><span class="n">gdef</span>
|
||||
<span class="go"><module 'windows.generated_def' from 'c:\users\hakril\documents\work\pythonforwindows\windows\generated_def\__init__.pyc'></span>
|
||||
|
||||
<span class="gp">>>> </span><span class="n">gdef</span><span class="o">.</span><span class="n">PAGE_EXECUTE_READWRITE</span>
|
||||
<span class="go">PAGE_EXECUTE_READWRITE(0x40L)</span>
|
||||
|
||||
<span class="gp">>>> </span><span class="n">gdef</span><span class="o">.</span><span class="n">PAGE_EXECUTE_READWRITE</span> <span class="o">==</span> <span class="mh">0x40</span>
|
||||
<span class="go">True</span>
|
||||
|
||||
<span class="gp">>>> </span><span class="n">gdef</span><span class="o">.</span><span class="n">PAGE_EXECUTE_READWRITE</span> <span class="o">+</span> <span class="mi">1</span>
|
||||
<span class="go">65L</span>
|
||||
|
||||
<span class="gp">>>> </span><span class="n">gdef</span><span class="o">.</span><span class="n">STATUS_ACCESS_VIOLATION</span>
|
||||
<span class="go">STATUS_ACCESS_VIOLATION(0xc0000005L)</span>
|
||||
|
||||
<span class="gp">>>> </span><span class="n">gdef</span><span class="o">.</span><span class="n">LDR_DATA_TABLE_ENTRY</span>
|
||||
<span class="go"><class 'windows.generated_def.winstructs._LDR_DATA_TABLE_ENTRY'></span>
|
||||
|
||||
<span class="gp">>>> </span><span class="n">gdef</span><span class="o">.</span><span class="n">LDR_DATA_TABLE_ENTRY</span><span class="o">.</span><span class="n">_fields_</span>
|
||||
<span class="go">[('Reserved1', <class 'windows.generated_def.winstructs.c_void_p_Array_2'>), ...]</span>
|
||||
|
||||
<span class="gp">>>> </span><span class="n">gdef</span><span class="o">.</span><span class="n">MEMORY_INFORMATION_CLASS</span>
|
||||
<span class="go"><class 'windows.generated_def.winstructs._MEMORY_INFORMATION_CLASS'></span>
|
||||
|
||||
<span class="gp">>>> </span><span class="n">gdef</span><span class="o">.</span><span class="n">MEMORY_INFORMATION_CLASS</span><span class="o">.</span><span class="n">values</span>
|
||||
<span class="go">[_MEMORY_INFORMATION_CLASS.MemoryBasicInformation(0x0L), _MEMORY_INFORMATION_CLASS.MemoryWorkingSetList(0x1L),</span>
|
||||
<span class="go">_MEMORY_INFORMATION_CLASS.MemorySectionName(0x2L), _MEMORY_INFORMATION_CLASS.MemoryBasicVlmInformation(0x3L),</span>
|
||||
<span class="go">_MEMORY_INFORMATION_CLASS.MemoryWorkingSetListEx(0x4L)]</span>
|
||||
|
||||
<span class="gp">>>> </span><span class="n">gdef</span><span class="o">.</span><span class="n">MemoryBasicInformation</span>
|
||||
<span class="go">_MEMORY_INFORMATION_CLASS.MemoryBasicInformation(0x0L)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<h3><a href="index.html">Table Of Contents</a></h3>
|
||||
<ul>
|
||||
<li><a class="reference internal" href="#">12. <code class="docutils literal"><span class="pre">windows.generated_def</span></code> – generated Windows defines and structures</a><ul>
|
||||
<li><a class="reference internal" href="#example">12.5. Example</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h4>Previous topic</h4>
|
||||
<p class="topless"><a href="rpc.html"
|
||||
title="previous chapter">11. <code class="docutils literal"><span class="pre">windows.rpc</span></code> – ALPC-based Windows RPC</a></p>
|
||||
<h4>Next topic</h4>
|
||||
<p class="topless"><a href="windef_generated.html"
|
||||
title="next chapter">12.1. Windef</a></p>
|
||||
<div role="note" aria-label="source link">
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
<li><a href="_sources/generated.rst.txt"
|
||||
rel="nofollow">Show Source</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchbox" style="display: none" role="search">
|
||||
<h3>Quick search</h3>
|
||||
<form class="search" action="search.html" method="get">
|
||||
<div><input type="text" name="q" /></div>
|
||||
<div><input type="submit" value="Go" /></div>
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="related" role="navigation" aria-label="related navigation">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="genindex.html" title="General Index"
|
||||
>index</a></li>
|
||||
<li class="right" >
|
||||
<a href="py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="windef_generated.html" title="12.1. Windef"
|
||||
>next</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="rpc.html" title="11. windows.rpc – ALPC-based Windows RPC"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.5.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
+14358
-51
File diff suppressed because it is too large
Load Diff
Vendored
+4
-4
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>2.10. Handle – Processes handles — PythonForWindows 0.2 documentation</title>
|
||||
<title>2.10. Handle – Processes handles — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -45,7 +45,7 @@
|
||||
<li class="right" >
|
||||
<a href="wmi.html" title="2.9. WMI – Make request to WMI"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="various.html" accesskey="U">2. The <code class="docutils literal"><span class="pre">windows</span></code> objects</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -179,7 +179,7 @@
|
||||
<li class="right" >
|
||||
<a href="wmi.html" title="2.9. WMI – Make request to WMI"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="various.html" >2. The <code class="docutils literal"><span class="pre">windows</span></code> objects</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
Vendored
+25
-25
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>10. IAT hooking — PythonForWindows 0.2 documentation</title>
|
||||
<title>13. IAT hooking — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -26,8 +26,8 @@
|
||||
<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" />
|
||||
<link rel="next" title="11. Early Work In Progress" href="wip.html" />
|
||||
<link rel="prev" title="9. windows.crypto – CryptoAPI" href="crypto.html" />
|
||||
<link rel="next" title="14. Early Work In Progress" href="wip.html" />
|
||||
<link rel="prev" title="12.3. Winstructs" href="winstructs_generated.html" />
|
||||
</head>
|
||||
<body role="document">
|
||||
<div class="related" role="navigation" aria-label="related navigation">
|
||||
@@ -40,12 +40,12 @@
|
||||
<a href="py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="wip.html" title="11. Early Work In Progress"
|
||||
<a href="wip.html" title="14. Early Work In Progress"
|
||||
accesskey="N">next</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="crypto.html" title="9. windows.crypto – CryptoAPI"
|
||||
<a href="winstructs_generated.html" title="12.3. Winstructs"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -55,13 +55,13 @@
|
||||
<div class="body" role="main">
|
||||
|
||||
<div class="section" id="iat-hooking">
|
||||
<h1>10. IAT hooking<a class="headerlink" href="#iat-hooking" title="Permalink to this headline">¶</a></h1>
|
||||
<h1>13. IAT hooking<a class="headerlink" href="#iat-hooking" title="Permalink to this headline">¶</a></h1>
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p class="last">See sample <a class="reference internal" href="sample.html#sample-iat-hook"><span class="std std-ref">IAT hooking</span></a></p>
|
||||
</div>
|
||||
<div class="section" id="putting-an-iat-hook">
|
||||
<h2>10.1. Putting an IAT hook<a class="headerlink" href="#putting-an-iat-hook" title="Permalink to this headline">¶</a></h2>
|
||||
<h2>13.1. Putting an IAT hook<a class="headerlink" href="#putting-an-iat-hook" title="Permalink to this headline">¶</a></h2>
|
||||
<p>To setup your IAT hook you just need:</p>
|
||||
<blockquote>
|
||||
<div><ul class="simple">
|
||||
@@ -90,9 +90,9 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="hook-protocol">
|
||||
<span id="id1"></span><h2>10.2. Hook protocol<a class="headerlink" href="#hook-protocol" title="Permalink to this headline">¶</a></h2>
|
||||
<span id="id1"></span><h2>13.2. Hook protocol<a class="headerlink" href="#hook-protocol" title="Permalink to this headline">¶</a></h2>
|
||||
<div class="section" id="callback-arguments">
|
||||
<h3>10.2.1. Callback arguments<a class="headerlink" href="#callback-arguments" title="Permalink to this headline">¶</a></h3>
|
||||
<h3>13.2.1. Callback arguments<a class="headerlink" href="#callback-arguments" title="Permalink to this headline">¶</a></h3>
|
||||
<p>A hook callback must have the same number of argument as the hooked API, PLUS a last argument <code class="docutils literal"><span class="pre">real_function</span></code>.</p>
|
||||
<p>The <code class="docutils literal"><span class="pre">real_function</span></code> argument is a callable that represent the hooked API, it can be called in two ways:</p>
|
||||
<blockquote>
|
||||
@@ -113,7 +113,7 @@
|
||||
<p>A hook callback must also embed some <a class="reference internal" href="#type-information"><span class="std std-ref">Type Information</span></a></p>
|
||||
</div>
|
||||
<div class="section" id="callback-type-information">
|
||||
<span id="type-information"></span><h3>10.2.2. Callback type information<a class="headerlink" href="#callback-type-information" title="Permalink to this headline">¶</a></h3>
|
||||
<span id="type-information"></span><h3>13.2.2. Callback type information<a class="headerlink" href="#callback-type-information" title="Permalink to this headline">¶</a></h3>
|
||||
<p>In order make the magic behind hook callback, <a class="reference external" href="https://docs.python.org/2/library/ctypes.html#module-ctypes" title="(in Python v2.7)"><code class="xref py py-mod docutils literal"><span class="pre">ctypes</span></code></a> needs to have type information about the API parameters.</p>
|
||||
<p>There is (again) two ways to give those informations to your hook callback. Both techniques use a decorator to setup type information to the callback.</p>
|
||||
<blockquote>
|
||||
@@ -152,7 +152,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="module-windows.hooks">
|
||||
<span id="windows-hooks"></span><h2>10.3. <a class="reference internal" href="#module-windows.hooks" title="windows.hooks"><code class="xref py py-mod docutils literal"><span class="pre">windows.hooks</span></code></a><a class="headerlink" href="#module-windows.hooks" title="Permalink to this headline">¶</a></h2>
|
||||
<span id="windows-hooks"></span><h2>13.3. <a class="reference internal" href="#module-windows.hooks" title="windows.hooks"><code class="xref py py-mod docutils literal"><span class="pre">windows.hooks</span></code></a><a class="headerlink" href="#module-windows.hooks" title="Permalink to this headline">¶</a></h2>
|
||||
<dl class="class">
|
||||
<dt id="windows.hooks.Callback">
|
||||
<em class="property">class </em><code class="descclassname">windows.hooks.</code><code class="descname">Callback</code><span class="sig-paren">(</span><em>*types</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/hooks.html#Callback"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.hooks.Callback" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -188,24 +188,24 @@
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<h3><a href="index.html">Table Of Contents</a></h3>
|
||||
<ul>
|
||||
<li><a class="reference internal" href="#">10. IAT hooking</a><ul>
|
||||
<li><a class="reference internal" href="#putting-an-iat-hook">10.1. Putting an IAT hook</a></li>
|
||||
<li><a class="reference internal" href="#hook-protocol">10.2. Hook protocol</a><ul>
|
||||
<li><a class="reference internal" href="#callback-arguments">10.2.1. Callback arguments</a></li>
|
||||
<li><a class="reference internal" href="#callback-type-information">10.2.2. Callback type information</a></li>
|
||||
<li><a class="reference internal" href="#">13. IAT hooking</a><ul>
|
||||
<li><a class="reference internal" href="#putting-an-iat-hook">13.1. Putting an IAT hook</a></li>
|
||||
<li><a class="reference internal" href="#hook-protocol">13.2. Hook protocol</a><ul>
|
||||
<li><a class="reference internal" href="#callback-arguments">13.2.1. Callback arguments</a></li>
|
||||
<li><a class="reference internal" href="#callback-type-information">13.2.2. Callback type information</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#module-windows.hooks">10.3. <code class="docutils literal"><span class="pre">windows.hooks</span></code></a></li>
|
||||
<li><a class="reference internal" href="#module-windows.hooks">13.3. <code class="docutils literal"><span class="pre">windows.hooks</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h4>Previous topic</h4>
|
||||
<p class="topless"><a href="crypto.html"
|
||||
title="previous chapter">9. <code class="docutils literal"><span class="pre">windows.crypto</span></code> – CryptoAPI</a></p>
|
||||
<p class="topless"><a href="winstructs_generated.html"
|
||||
title="previous chapter">12.3. Winstructs</a></p>
|
||||
<h4>Next topic</h4>
|
||||
<p class="topless"><a href="wip.html"
|
||||
title="next chapter">11. Early Work In Progress</a></p>
|
||||
title="next chapter">14. Early Work In Progress</a></p>
|
||||
<div role="note" aria-label="source link">
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
@@ -237,12 +237,12 @@
|
||||
<a href="py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="wip.html" title="11. Early Work In Progress"
|
||||
<a href="wip.html" title="14. Early Work In Progress"
|
||||
>next</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="crypto.html" title="9. windows.crypto – CryptoAPI"
|
||||
<a href="winstructs_generated.html" title="12.3. Winstructs"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
|
||||
Vendored
+45
-23
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Welcome to PythonForWindows’s documentation! — PythonForWindows 0.2 documentation</title>
|
||||
<title>Welcome to PythonForWindows’s documentation! — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -41,7 +41,7 @@
|
||||
<li class="right" >
|
||||
<a href="windows.html" title="1. The windows module"
|
||||
accesskey="N">next</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="#">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="#">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -110,29 +110,51 @@
|
||||
<li class="toctree-l2"><a class="reference internal" href="crypto.html#module-windows.crypto.generation">9.3. Generating componants</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="iat_hook.html">10. IAT hooking</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="iat_hook.html#putting-an-iat-hook">10.1. Putting an IAT hook</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="iat_hook.html#hook-protocol">10.2. Hook protocol</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="iat_hook.html#module-windows.hooks">10.3. <code class="docutils literal"><span class="pre">windows.hooks</span></code></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="alpc.html">10. <code class="docutils literal"><span class="pre">windows.alpc</span></code> – Advanced Local Procedure Call</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="alpc.html#alpc-message">10.1. ALPC Message</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="alpc.html#alpc-client">10.2. ALPC client</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="alpc.html#alpc-server">10.3. ALPC Server</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="wip.html">11. Early Work In Progress</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="internals.html">12. Internals</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="internals.html#module-windows.remotectypes">12.1. remotectypes.py</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="internals.html#module-windows.syswow64">12.2. syswow64.py – Crossing the heaven gate</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="rpc.html">11. <code class="docutils literal"><span class="pre">windows.rpc</span></code> – ALPC-based Windows RPC</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="rpc.html#rpcclient">11.1. RPCClient</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="rpc.html#epmapper">11.2. Epmapper</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="rpc.html#module-windows.rpc.ndr">11.3. Ndr</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="sample.html">13. Samples of code</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#processes">13.1. Processes</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-system">13.2. <code class="docutils literal"><span class="pre">windows.system</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#network-socket-exploration">13.3. <code class="docutils literal"><span class="pre">Network</span></code> - socket exploration</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#registry">13.4. <code class="docutils literal"><span class="pre">Registry</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-wintrust">13.5. <code class="docutils literal"><span class="pre">windows.wintrust</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#vectoredexception">13.6. <code class="docutils literal"><span class="pre">VectoredException()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#debugging">13.7. Debugging</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#make-wmi-requests">13.8. Make WMI requests</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#using-com-inetfwpolicy2">13.9. using COM: <code class="docutils literal"><span class="pre">INetFwPolicy2</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-crypto">13.10. <code class="docutils literal"><span class="pre">windows.crypto</span></code></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="generated.html">12. <code class="docutils literal"><span class="pre">windows.generated_def</span></code> – generated Windows defines and structures</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="windef_generated.html">12.1. Windef</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="ntstatus_generated.html">12.2. Ntstatus</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="winstructs_generated.html">12.3. Winstructs</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="winstructs_generated.html#winenums">12.4. WinEnums</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="generated.html#example">12.5. Example</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="iat_hook.html">13. IAT hooking</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="iat_hook.html#putting-an-iat-hook">13.1. Putting an IAT hook</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="iat_hook.html#hook-protocol">13.2. Hook protocol</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="iat_hook.html#module-windows.hooks">13.3. <code class="docutils literal"><span class="pre">windows.hooks</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="wip.html">14. Early Work In Progress</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="internals.html">15. Internals</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="internals.html#module-windows.remotectypes">15.1. remotectypes.py</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="internals.html#module-windows.syswow64">15.2. syswow64.py – Crossing the heaven gate</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="sample.html">16. Samples of code</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#processes">16.1. Processes</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-system">16.2. <code class="docutils literal"><span class="pre">windows.system</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#network-socket-exploration">16.3. <code class="docutils literal"><span class="pre">Network</span></code> - socket exploration</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#registry">16.4. <code class="docutils literal"><span class="pre">Registry</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-wintrust">16.5. <code class="docutils literal"><span class="pre">windows.wintrust</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#vectoredexception">16.6. <code class="docutils literal"><span class="pre">VectoredException()</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#debugging">16.7. Debugging</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#wmi-requests">16.8. WMI requests</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#using-com-inetfwpolicy2">16.9. using COM: <code class="docutils literal"><span class="pre">INetFwPolicy2</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-crypto">16.10. <code class="docutils literal"><span class="pre">windows.crypto</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-alpc">16.11. <code class="docutils literal"><span class="pre">windows.alpc</span></code></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="sample.html#windows-rpc">16.12. <code class="docutils literal"><span class="pre">windows.rpc</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -195,7 +217,7 @@
|
||||
<li class="right" >
|
||||
<a href="windows.html" title="1. The windows module"
|
||||
>next</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="#">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="#">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
|
||||
Vendored
+18
-18
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>12. Internals — PythonForWindows 0.2 documentation</title>
|
||||
<title>15. Internals — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -26,8 +26,8 @@
|
||||
<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" />
|
||||
<link rel="next" title="13. Samples of code" href="sample.html" />
|
||||
<link rel="prev" title="11. Early Work In Progress" href="wip.html" />
|
||||
<link rel="next" title="16. Samples of code" href="sample.html" />
|
||||
<link rel="prev" title="14. Early Work In Progress" href="wip.html" />
|
||||
</head>
|
||||
<body role="document">
|
||||
<div class="related" role="navigation" aria-label="related navigation">
|
||||
@@ -40,12 +40,12 @@
|
||||
<a href="py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="sample.html" title="13. Samples of code"
|
||||
<a href="sample.html" title="16. Samples of code"
|
||||
accesskey="N">next</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="wip.html" title="11. Early Work In Progress"
|
||||
<a href="wip.html" title="14. Early Work In Progress"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -55,10 +55,10 @@
|
||||
<div class="body" role="main">
|
||||
|
||||
<div class="section" id="internals">
|
||||
<h1>12. Internals<a class="headerlink" href="#internals" title="Permalink to this headline">¶</a></h1>
|
||||
<h1>15. Internals<a class="headerlink" href="#internals" title="Permalink to this headline">¶</a></h1>
|
||||
<p>Because some horrible hacks of <code class="docutils literal"><span class="pre">PythonForWindows</span></code> are hidden and I wanted to talk about it.</p>
|
||||
<div class="section" id="module-windows.remotectypes">
|
||||
<span id="remotectypes-py"></span><h2>12.1. remotectypes.py<a class="headerlink" href="#module-windows.remotectypes" title="Permalink to this headline">¶</a></h2>
|
||||
<span id="remotectypes-py"></span><h2>15.1. remotectypes.py<a class="headerlink" href="#module-windows.remotectypes" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Performing parsing of PEB / PE in remote process may be painful and i didn’t want
|
||||
to have two versions of all my parsing code.</p>
|
||||
<p>So I made a wrapper around <a class="reference external" href="https://docs.python.org/2/library/ctypes.html#module-ctypes" title="(in Python v2.7)"><code class="xref py py-mod docutils literal"><span class="pre">ctypes</span></code></a> that is able to do two things:</p>
|
||||
@@ -109,7 +109,7 @@ The class.__init__ accept two arguments:</p>
|
||||
<p>I am pretty sure that this code does NOT handle all the cases, so it might break some day.</p>
|
||||
</div>
|
||||
<div class="section" id="module-windows.syswow64">
|
||||
<span id="syswow64-py-crossing-the-heaven-gate"></span><h2>12.2. syswow64.py – Crossing the heaven gate<a class="headerlink" href="#module-windows.syswow64" title="Permalink to this headline">¶</a></h2>
|
||||
<span id="syswow64-py-crossing-the-heaven-gate"></span><h2>15.2. syswow64.py – Crossing the heaven gate<a class="headerlink" href="#module-windows.syswow64" title="Permalink to this headline">¶</a></h2>
|
||||
<p>One of my goal with <code class="docutils literal"><span class="pre">PythonForWindows</span></code> is to have some abstraction of the bitness of the processes.
|
||||
It means being able to work on a <code class="docutils literal"><span class="pre">32bits</span> <span class="pre">Python</span></code> or a <code class="docutils literal"><span class="pre">64bits</span> <span class="pre">Python</span></code>.</p>
|
||||
<p>In the case of a 32bits python on a <code class="docutils literal"><span class="pre">64bits</span></code> system (<code class="docutils literal"><span class="pre">SysWow64</span></code>) it’s not trivial to perform operation on
|
||||
@@ -214,19 +214,19 @@ With these information we are able to know</p>
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<h3><a href="index.html">Table Of Contents</a></h3>
|
||||
<ul>
|
||||
<li><a class="reference internal" href="#">12. Internals</a><ul>
|
||||
<li><a class="reference internal" href="#module-windows.remotectypes">12.1. remotectypes.py</a></li>
|
||||
<li><a class="reference internal" href="#module-windows.syswow64">12.2. syswow64.py – Crossing the heaven gate</a></li>
|
||||
<li><a class="reference internal" href="#">15. Internals</a><ul>
|
||||
<li><a class="reference internal" href="#module-windows.remotectypes">15.1. remotectypes.py</a></li>
|
||||
<li><a class="reference internal" href="#module-windows.syswow64">15.2. syswow64.py – Crossing the heaven gate</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h4>Previous topic</h4>
|
||||
<p class="topless"><a href="wip.html"
|
||||
title="previous chapter">11. Early Work In Progress</a></p>
|
||||
title="previous chapter">14. Early Work In Progress</a></p>
|
||||
<h4>Next topic</h4>
|
||||
<p class="topless"><a href="sample.html"
|
||||
title="next chapter">13. Samples of code</a></p>
|
||||
title="next chapter">16. Samples of code</a></p>
|
||||
<div role="note" aria-label="source link">
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
@@ -258,12 +258,12 @@ With these information we are able to know</p>
|
||||
<a href="py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="sample.html" title="13. Samples of code"
|
||||
<a href="sample.html" title="16. Samples of code"
|
||||
>next</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="wip.html" title="11. Early Work In Progress"
|
||||
<a href="wip.html" title="14. Early Work In Progress"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
|
||||
Vendored
+5
-5
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>3. windows.native_exec – Native Code Execution — PythonForWindows 0.2 documentation</title>
|
||||
<title>3. windows.native_exec – Native Code Execution — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -45,7 +45,7 @@
|
||||
<li class="right" >
|
||||
<a href="handle.html" title="2.10. Handle – Processes handles"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -69,7 +69,7 @@ it also provides a simple assembler for x86 and x64.</p>
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
|
||||
<li><strong>code</strong> (<a class="reference internal" href="process.html#windows.winobject.process.WinUnicodeString.str" title="windows.winobject.process.WinUnicodeString.str"><em>str</em></a>) – Raw machine code that will be called</li>
|
||||
<li><strong>types</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) – Return type and parameters type (see <a class="reference external" href="https://docs.python.org/2/library/ctypes.html#module-ctypes" title="(in Python v2.7)"><code class="xref py py-mod docutils literal"><span class="pre">ctypes</span></code></a>)</li>
|
||||
<li><strong>types</strong> (<em>list</em>) – Return type and parameters type (see <a class="reference external" href="https://docs.python.org/2/library/ctypes.html#module-ctypes" title="(in Python v2.7)"><code class="xref py py-mod docutils literal"><span class="pre">ctypes</span></code></a>)</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -530,7 +530,7 @@ the end of your <code class="xref py py-class docutils literal"><span class="pre
|
||||
<li class="right" >
|
||||
<a href="handle.html" title="2.10. Handle – Processes handles"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
|
||||
Vendored
+4
-4
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>2.6. Network — PythonForWindows 0.2 documentation</title>
|
||||
<title>2.6. Network — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -45,7 +45,7 @@
|
||||
<li class="right" >
|
||||
<a href="registry.html" title="2.5. Registry"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="various.html" accesskey="U">2. The <code class="docutils literal"><span class="pre">windows</span></code> objects</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -610,7 +610,7 @@ Equals <code class="docutils literal"><span class="pre">remote_port</span></code
|
||||
<li class="right" >
|
||||
<a href="registry.html" title="2.5. Registry"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="various.html" >2. The <code class="docutils literal"><span class="pre">windows</span></code> objects</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+9089
File diff suppressed because it is too large
Load Diff
Vendored
+53
-11
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>2.1. Processes and Threads — PythonForWindows 0.2 documentation</title>
|
||||
<title>2.1. Processes and Threads — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -45,7 +45,7 @@
|
||||
<li class="right" >
|
||||
<a href="various.html" title="2. The windows objects"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="various.html" accesskey="U">2. The <code class="docutils literal"><span class="pre">windows</span></code> objects</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -213,7 +213,7 @@
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Yield:</th><td class="field-body"><code class="xref py py-class docutils literal"><span class="pre">MEMORY_BASIC_INFORMATION</span></code></td>
|
||||
<tr class="field-odd field"><th class="field-name">Yield:</th><td class="field-body"><a class="reference internal" href="winstructs_generated.html#windows.generated_def.MEMORY_BASIC_INFORMATION" title="windows.generated_def.MEMORY_BASIC_INFORMATION"><code class="xref py py-class docutils literal"><span class="pre">MEMORY_BASIC_INFORMATION</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -283,7 +283,7 @@
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><code class="xref py py-class docutils literal"><span class="pre">MEMORY_BASIC_INFORMATION</span></code></td>
|
||||
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference internal" href="winstructs_generated.html#windows.generated_def.MEMORY_BASIC_INFORMATION" title="windows.generated_def.MEMORY_BASIC_INFORMATION"><code class="xref py py-class docutils literal"><span class="pre">MEMORY_BASIC_INFORMATION</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -711,7 +711,7 @@ raises an exception if the remote thread raised one</p>
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Yield:</th><td class="field-body"><code class="xref py py-class docutils literal"><span class="pre">MEMORY_BASIC_INFORMATION</span></code></td>
|
||||
<tr class="field-odd field"><th class="field-name">Yield:</th><td class="field-body"><a class="reference internal" href="winstructs_generated.html#windows.generated_def.MEMORY_BASIC_INFORMATION" title="windows.generated_def.MEMORY_BASIC_INFORMATION"><code class="xref py py-class docutils literal"><span class="pre">MEMORY_BASIC_INFORMATION</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -809,7 +809,7 @@ raises an exception if the remote thread raised one</p>
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><code class="xref py py-class docutils literal"><span class="pre">MEMORY_BASIC_INFORMATION</span></code></td>
|
||||
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference internal" href="winstructs_generated.html#windows.generated_def.MEMORY_BASIC_INFORMATION" title="windows.generated_def.MEMORY_BASIC_INFORMATION"><code class="xref py py-class docutils literal"><span class="pre">MEMORY_BASIC_INFORMATION</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -992,8 +992,8 @@ raises an exception if the remote thread raised one</p>
|
||||
<h2>2.1.4. WinThread<a class="headerlink" href="#winthread" title="Permalink to this headline">¶</a></h2>
|
||||
<dl class="class">
|
||||
<dt id="windows.winobject.process.WinThread">
|
||||
<em class="property">class </em><code class="descclassname">windows.winobject.process.</code><code class="descname">WinThread</code><a class="reference internal" href="_modules/windows/winobject/process.html#WinThread"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.process.WinThread" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">windows.generated_def.winstructs.tagTHREADENTRY32</span></code>, <code class="xref py py-class docutils literal"><span class="pre">windows.winobject.process.AutoHandle</span></code></p>
|
||||
<em class="property">class </em><code class="descclassname">windows.winobject.process.</code><code class="descname">WinThread</code><span class="sig-paren">(</span><em>tid=None</em>, <em>handle=None</em>, <em>owner_pid=None</em>, <em>owner=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/process.html#WinThread"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.process.WinThread" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">windows.winobject.process.AutoHandle</span></code></p>
|
||||
<p>Represent a thread</p>
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.process.WinThread.context">
|
||||
@@ -1237,6 +1237,20 @@ raises an exception if the remote thread raised one</p>
|
||||
<dd><p>The computername of the token</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.winobject.process.Token.get_integrity">
|
||||
<code class="descname">get_integrity</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/process.html#Token.get_integrity"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.process.Token.get_integrity" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Return the integrity level of a token</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><code class="xref py py-class docutils literal"><span class="pre">int</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.process.Token.handle">
|
||||
<code class="descname">handle</code><a class="headerlink" href="#windows.winobject.process.Token.handle" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -1276,6 +1290,20 @@ raises an exception if the remote thread raised one</p>
|
||||
<dd><p><code class="docutils literal"><span class="pre">True</span></code> if process is Admin</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.winobject.process.Token.set_integrity">
|
||||
<code class="descname">set_integrity</code><span class="sig-paren">(</span><em>integrity</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/process.html#Token.set_integrity"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.process.Token.set_integrity" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Set the integrity level of a token</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>type</strong> – <a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><code class="xref py py-class docutils literal"><span class="pre">int</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.process.Token.username">
|
||||
<code class="descname">username</code><a class="headerlink" href="#windows.winobject.process.Token.username" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -1320,6 +1348,20 @@ The <a class="reference internal" href="#windows.winobject.process.PEB" title="w
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.process.PEB.exe">
|
||||
<code class="descname">exe</code><a class="headerlink" href="#windows.winobject.process.PEB.exe" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The executable of the process, as pointed by PEB.ImageBaseAddress</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference internal" href="#windows.pe_parse.PEFile" title="windows.pe_parse.PEFile"><code class="xref py py-class docutils literal"><span class="pre">windows.pe_parse.PEFile</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.process.PEB.imagepath">
|
||||
<code class="descname">imagepath</code><a class="headerlink" href="#windows.winobject.process.PEB.imagepath" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -1497,7 +1539,7 @@ The values are the addresses of the exports.</p>
|
||||
<dt id="windows.pe_parse.PEFile.imports">
|
||||
<code class="descname">imports</code><a class="headerlink" href="#windows.pe_parse.PEFile.imports" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The imports of the PE in a dict.
|
||||
Keys are the names of DLL to import from and values are <a class="reference external" href="https://docs.python.org/2/library/functions.html#list" title="(in Python v2.7)"><code class="xref py py-class docutils literal"><span class="pre">list</span></code></a>
|
||||
Keys are the names of DLL to import from and values are <code class="xref py py-class docutils literal"><span class="pre">list</span></code>
|
||||
of <a class="reference internal" href="#windows.pe_parse.IATEntry" title="windows.pe_parse.IATEntry"><code class="xref py py-class docutils literal"><span class="pre">IATEntry</span></code></a></p>
|
||||
<blockquote>
|
||||
<div><table class="docutils field-list" frame="void" rules="none">
|
||||
@@ -1664,7 +1706,7 @@ You MUST keep a reference to the hook while the hook is enabled.</p>
|
||||
<li class="right" >
|
||||
<a href="various.html" title="2. The windows objects"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="various.html" >2. The <code class="docutils literal"><span class="pre">windows</span></code> objects</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
Vendored
+24
-4
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Python Module Index — PythonForWindows 0.2 documentation</title>
|
||||
<title>Python Module Index — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -40,7 +40,7 @@
|
||||
<li class="right" >
|
||||
<a href="#" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -66,6 +66,11 @@
|
||||
<td>
|
||||
<code class="xref">windows</code></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr class="cg-1">
|
||||
<td></td>
|
||||
<td>   
|
||||
<a href="alpc.html#module-windows.alpc"><code class="xref">windows.alpc</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr class="cg-1">
|
||||
<td></td>
|
||||
<td>   
|
||||
@@ -86,6 +91,11 @@
|
||||
<td>   
|
||||
<a href="debug.html#module-windows.debug"><code class="xref">windows.debug</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr class="cg-1">
|
||||
<td></td>
|
||||
<td>   
|
||||
<a href="generated.html#module-windows.generated_def"><code class="xref">windows.generated_def</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr class="cg-1">
|
||||
<td></td>
|
||||
<td>   
|
||||
@@ -126,6 +136,16 @@
|
||||
<td>   
|
||||
<a href="internals.html#module-windows.remotectypes"><code class="xref">windows.remotectypes</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr class="cg-1">
|
||||
<td></td>
|
||||
<td>   
|
||||
<a href="rpc.html#module-windows.rpc"><code class="xref">windows.rpc</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr class="cg-1">
|
||||
<td></td>
|
||||
<td>   
|
||||
<a href="rpc.html#module-windows.rpc.ndr"><code class="xref">windows.rpc.ndr</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr class="cg-1">
|
||||
<td></td>
|
||||
<td>   
|
||||
@@ -217,7 +237,7 @@
|
||||
<li class="right" >
|
||||
<a href="#" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
|
||||
Vendored
+4
-4
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>2.5. Registry — PythonForWindows 0.2 documentation</title>
|
||||
<title>2.5. Registry — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -45,7 +45,7 @@
|
||||
<li class="right" >
|
||||
<a href="exception.html" title="2.4. Exception and Context related structures"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="various.html" accesskey="U">2. The <code class="docutils literal"><span class="pre">windows</span></code> objects</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -246,7 +246,7 @@
|
||||
<li class="right" >
|
||||
<a href="exception.html" title="2.4. Exception and Context related structures"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="various.html" >2. The <code class="docutils literal"><span class="pre">windows</span></code> objects</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
Vendored
+545
@@ -0,0 +1,545 @@
|
||||
<!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="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>11. windows.rpc – ALPC-based Windows RPC — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
SOURCELINK_SUFFIX: '.txt'
|
||||
};
|
||||
</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" />
|
||||
<link rel="next" title="12. windows.generated_def – generated Windows defines and structures" href="generated.html" />
|
||||
<link rel="prev" title="10. windows.alpc – Advanced Local Procedure Call" href="alpc.html" />
|
||||
</head>
|
||||
<body role="document">
|
||||
<div class="related" role="navigation" aria-label="related navigation">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="genindex.html" title="General Index"
|
||||
accesskey="I">index</a></li>
|
||||
<li class="right" >
|
||||
<a href="py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="generated.html" title="12. windows.generated_def – generated Windows defines and structures"
|
||||
accesskey="N">next</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="alpc.html" title="10. windows.alpc – Advanced Local Procedure Call"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body" role="main">
|
||||
|
||||
<div class="section" id="module-windows.rpc">
|
||||
<span id="windows-rpc-alpc-based-windows-rpc"></span><h1>11. <code class="docutils literal"><span class="pre">windows.rpc</span></code> – ALPC-based Windows RPC<a class="headerlink" href="#module-windows.rpc" title="Permalink to this headline">¶</a></h1>
|
||||
<p>The <a class="reference internal" href="#module-windows.rpc" title="windows.rpc"><code class="xref py py-mod docutils literal"><span class="pre">windows.rpc</span></code></a> allows to perform the basic for MS-RPC:</p>
|
||||
<blockquote>
|
||||
<div><ul class="simple">
|
||||
<li>find interface endpoints</li>
|
||||
<li>connect to it</li>
|
||||
<li>bind to interfaces</li>
|
||||
<li>perform call</li>
|
||||
<li>Marshall/Unmarshall NDR</li>
|
||||
</ul>
|
||||
</div></blockquote>
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p>See samples:</p>
|
||||
<blockquote class="last">
|
||||
<div><ul class="simple">
|
||||
<li><a class="reference internal" href="sample.html#sample-rpc-uac"><span class="std std-ref">Manual UAC</span></a></li>
|
||||
<li><a class="reference internal" href="sample.html#sample-rpc-lsass"><span class="std std-ref">Manual LsarEnumeratePrivileges</span></a></li>
|
||||
</ul>
|
||||
</div></blockquote>
|
||||
</div>
|
||||
<div class="section" id="rpcclient">
|
||||
<h2>11.1. RPCClient<a class="headerlink" href="#rpcclient" title="Permalink to this headline">¶</a></h2>
|
||||
<dl class="class">
|
||||
<dt id="windows.rpc.RPCClient">
|
||||
<em class="property">class </em><code class="descclassname">windows.rpc.</code><code class="descname">RPCClient</code><span class="sig-paren">(</span><em>port</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/client.html#RPCClient"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.RPCClient" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>A client for RPC-over-ALPC able to bind to interface and perform calls using NDR32 marshalling</p>
|
||||
<dl class="method">
|
||||
<dt id="windows.rpc.RPCClient.bind">
|
||||
<code class="descname">bind</code><span class="sig-paren">(</span><em>IID_str</em>, <em>version=(1</em>, <em>0)</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/client.html#RPCClient.bind"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.RPCClient.bind" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bind to the <code class="docutils literal"><span class="pre">IID_str</span></code> with the given <code class="docutils literal"><span class="pre">version</span></code></p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><a class="reference internal" href="winstructs_generated.html#windows.generated_def.IID" title="windows.generated_def.IID"><code class="xref py py-class docutils literal"><span class="pre">windows.generated_def.IID</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.rpc.RPCClient.call">
|
||||
<code class="descname">call</code><span class="sig-paren">(</span><em>IID</em>, <em>method_offset</em>, <em>params</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/client.html#RPCClient.call"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.RPCClient.call" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Call method number <code class="docutils literal"><span class="pre">method_offset</span></code> of interface <code class="docutils literal"><span class="pre">IID</span></code> with mashalled <code class="docutils literal"><span class="pre">params</span></code></p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
|
||||
<li><strong>IID</strong> (<a class="reference internal" href="winstructs_generated.html#windows.generated_def.IID" title="windows.generated_def.IID"><em>IID</em></a>) – An IID previously returned by <a class="reference internal" href="#windows.rpc.RPCClient.bind" title="windows.rpc.RPCClient.bind"><code class="xref py py-func docutils literal"><span class="pre">bind()</span></code></a></li>
|
||||
<li><strong>method_offset</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) – </li>
|
||||
<li><strong>params</strong> (<a class="reference internal" href="process.html#windows.winobject.process.WinUnicodeString.str" title="windows.winobject.process.WinUnicodeString.str"><em>str</em></a>) – The mashalled parameters (NDR32)</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last"><a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><code class="xref py py-class docutils literal"><span class="pre">str</span></code></a></p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
</div>
|
||||
<div class="section" id="epmapper">
|
||||
<h2>11.2. Epmapper<a class="headerlink" href="#epmapper" title="Permalink to this headline">¶</a></h2>
|
||||
<dl class="class">
|
||||
<dt id="windows.rpc.epmapper.UnpackTower">
|
||||
<em class="property">class </em><code class="descclassname">windows.rpc.epmapper.</code><code class="descname">UnpackTower</code><span class="sig-paren">(</span><em>protseq</em>, <em>endpoint</em>, <em>address</em>, <em>object</em>, <em>syntax</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.rpc.epmapper.UnpackTower" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><dl class="attribute">
|
||||
<dt id="windows.rpc.epmapper.UnpackTower.address">
|
||||
<code class="descname">address</code><a class="headerlink" href="#windows.rpc.epmapper.UnpackTower.address" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Alias for field number 2</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.rpc.epmapper.UnpackTower.endpoint">
|
||||
<code class="descname">endpoint</code><a class="headerlink" href="#windows.rpc.epmapper.UnpackTower.endpoint" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Alias for field number 1</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.rpc.epmapper.UnpackTower.object">
|
||||
<code class="descname">object</code><a class="headerlink" href="#windows.rpc.epmapper.UnpackTower.object" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Alias for field number 3</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.rpc.epmapper.UnpackTower.protseq">
|
||||
<code class="descname">protseq</code><a class="headerlink" href="#windows.rpc.epmapper.UnpackTower.protseq" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Alias for field number 0</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.rpc.epmapper.UnpackTower.syntax">
|
||||
<code class="descname">syntax</code><a class="headerlink" href="#windows.rpc.epmapper.UnpackTower.syntax" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Alias for field number 4</p>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<div class="section" id="find-alpc-endpoints">
|
||||
<h3>11.2.1. <a class="reference internal" href="#windows.rpc.find_alpc_endpoints" title="windows.rpc.find_alpc_endpoints"><code class="xref py py-func docutils literal"><span class="pre">find_alpc_endpoints()</span></code></a><a class="headerlink" href="#find-alpc-endpoints" title="Permalink to this headline">¶</a></h3>
|
||||
<dl class="function">
|
||||
<dt id="windows.rpc.find_alpc_endpoints">
|
||||
<code class="descclassname">windows.rpc.</code><code class="descname">find_alpc_endpoints</code><span class="sig-paren">(</span><em>targetiid</em>, <em>version=(1</em>, <em>0)</em>, <em>nb_response=1</em>, <em>sid=_WELL_KNOWN_SID_TYPE.WinLocalSystemSid(0x16L)</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/epmapper.html#find_alpc_endpoints"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.find_alpc_endpoints" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Ask the EPMapper for ALPC endpoints of <code class="docutils literal"><span class="pre">targetiid:version</span></code> (maximum of <code class="docutils literal"><span class="pre">nb_response</span></code>)</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
|
||||
<li><strong>targetiid</strong> (<a class="reference internal" href="process.html#windows.winobject.process.WinUnicodeString.str" title="windows.winobject.process.WinUnicodeString.str"><em>str</em></a>) – The IID of the requested interface</li>
|
||||
<li><strong>version</strong> (<em></em><em>(</em><a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a><em>,</em><a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a><em>)</em><em></em>) – The version requested interface</li>
|
||||
<li><strong>nb_response</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) – The maximum number of response</li>
|
||||
<li><strong>sid</strong> (<a class="reference internal" href="winstructs_generated.html#windows.generated_def.WELL_KNOWN_SID_TYPE" title="windows.generated_def.WELL_KNOWN_SID_TYPE"><em>WELL_KNOWN_SID_TYPE</em></a>) – The SID used to request the EPMapper</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last">[<a class="reference internal" href="#windows.rpc.epmapper.UnpackTower" title="windows.rpc.epmapper.UnpackTower"><code class="xref py py-class docutils literal"><span class="pre">UnpackTower</span></code></a>] – A list of <a class="reference internal" href="#windows.rpc.epmapper.UnpackTower" title="windows.rpc.epmapper.UnpackTower"><code class="xref py py-class docutils literal"><span class="pre">UnpackTower</span></code></a></p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<p>Example:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">import</span> <span class="nn">windows.rpc</span>
|
||||
<span class="gp">>>> </span><span class="n">UAC_UIID</span> <span class="o">=</span> <span class="s2">"201ef99a-7fa0-444c-9399-19ba84f12a1a"</span>
|
||||
<span class="gp">>>> </span><span class="n">windows</span><span class="o">.</span><span class="n">rpc</span><span class="o">.</span><span class="n">find_alpc_endpoints</span><span class="p">(</span><span class="n">UAC_UIID</span><span class="p">)</span>
|
||||
<span class="go">[UnpackTower(protseq='ncalrpc',</span>
|
||||
<span class="go"> endpoint=bytearray(b'LRPC-c30c67fef2afa1612b'),</span>
|
||||
<span class="go"> address=None,</span>
|
||||
<span class="go"> object=<RPC_IF_ID "201EF99A-7FA0-444C-9399-19BA84F12A1A" (1, 0)>,</span>
|
||||
<span class="go"> syntax=<RPC_IF_ID "8A885D04-1CEB-11C9-9FE8-08002B104860" (2, 0)>)]</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="find-alpc-endpoint-and-connect">
|
||||
<h3>11.2.2. <a class="reference internal" href="#windows.rpc.find_alpc_endpoint_and_connect" title="windows.rpc.find_alpc_endpoint_and_connect"><code class="xref py py-func docutils literal"><span class="pre">find_alpc_endpoint_and_connect()</span></code></a><a class="headerlink" href="#find-alpc-endpoint-and-connect" title="Permalink to this headline">¶</a></h3>
|
||||
<dl class="function">
|
||||
<dt id="windows.rpc.find_alpc_endpoint_and_connect">
|
||||
<code class="descclassname">windows.rpc.</code><code class="descname">find_alpc_endpoint_and_connect</code><span class="sig-paren">(</span><em>targetiid</em>, <em>version=(1</em>, <em>0)</em>, <em>sid=_WELL_KNOWN_SID_TYPE.WinLocalSystemSid(0x16L)</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/epmapper.html#find_alpc_endpoint_and_connect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.find_alpc_endpoint_and_connect" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Ask the EPMapper for ALPC endpoints of <code class="docutils literal"><span class="pre">targetiid:version</span></code> and connect to one of them.</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
|
||||
<li><strong>targetiid</strong> (<a class="reference internal" href="process.html#windows.winobject.process.WinUnicodeString.str" title="windows.winobject.process.WinUnicodeString.str"><em>str</em></a>) – The IID of the requested interface</li>
|
||||
<li><strong>version</strong> (<em></em><em>(</em><a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a><em>,</em><a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a><em>)</em><em></em>) – The version requested interface</li>
|
||||
<li><strong>sid</strong> (<a class="reference internal" href="winstructs_generated.html#windows.generated_def.WELL_KNOWN_SID_TYPE" title="windows.generated_def.WELL_KNOWN_SID_TYPE"><em>WELL_KNOWN_SID_TYPE</em></a>) – The SID used to request the EPMapper</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last">A connected <a class="reference internal" href="#windows.rpc.RPCClient" title="windows.rpc.RPCClient"><code class="xref py py-class docutils literal"><span class="pre">RPCClient</span></code></a></p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<p>Example:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">import</span> <span class="nn">windows.rpc</span>
|
||||
<span class="gp">>>> </span><span class="n">UAC_UIID</span> <span class="o">=</span> <span class="s2">"201ef99a-7fa0-444c-9399-19ba84f12a1a"</span>
|
||||
<span class="gp">>>> </span><span class="n">client</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">rpc</span><span class="o">.</span><span class="n">find_alpc_endpoint_and_connect</span><span class="p">(</span><span class="n">UAC_UIID</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="n">client</span>
|
||||
<span class="go"><windows.rpc.client.RPCClient object at 0x046A1470></span>
|
||||
<span class="gp">>>> </span><span class="n">client</span><span class="o">.</span><span class="n">alpc_client</span><span class="o">.</span><span class="n">portname</span>
|
||||
<span class="go">'\\RPC Control\\LRPC-c30c67fef2afa1612b'</span>
|
||||
<span class="gp">>>> </span><span class="n">iid</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">UAC_UIID</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="n">iid</span>
|
||||
<span class="go"><IID "201EF99A-7FA0-444C-9399-19BA84F12A1A"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="module-windows.rpc.ndr">
|
||||
<span id="ndr"></span><h2>11.3. Ndr<a class="headerlink" href="#module-windows.rpc.ndr" title="Permalink to this headline">¶</a></h2>
|
||||
<p>The <a class="reference internal" href="#module-windows.rpc.ndr" title="windows.rpc.ndr"><code class="xref py py-mod docutils literal"><span class="pre">windows.rpc.ndr</span></code></a> module offers some construction to help marshalling types and structures to NDR.</p>
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p class="last">The NDR supported for now is <code class="docutils literal"><span class="pre">8a885d04-1ceb-11c9-9fe8-08002b104860</span></code> version <code class="docutils literal"><span class="pre">2.0</span></code></p>
|
||||
</div>
|
||||
<p>Each NDR class has a function <code class="xref py py-func docutils literal"><span class="pre">pack()</span></code>.</p>
|
||||
<dl class="class">
|
||||
<dt id="windows.rpc.ndr.NdrSID">
|
||||
<em class="property">class </em><code class="descclassname">windows.rpc.ndr.</code><code class="descname">NdrSID</code><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrSID"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrSID" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><dl class="classmethod">
|
||||
<dt id="windows.rpc.ndr.NdrSID.pack">
|
||||
<em class="property">classmethod </em><code class="descname">pack</code><span class="sig-paren">(</span><em>psid</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrSID.pack"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrSID.pack" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Pack a PSID</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>psid</strong> (<em>PSID</em>) – </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="classmethod">
|
||||
<dt id="windows.rpc.ndr.NdrSID.unpack">
|
||||
<em class="property">classmethod </em><code class="descname">unpack</code><span class="sig-paren">(</span><em>stream</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrSID.unpack"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrSID.unpack" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Unpack a PSID, partial implementation that returns a <a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><code class="xref py py-class docutils literal"><span class="pre">str</span></code></a> and not a PSID</p>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="kn">as</span> <span class="nn">gdef</span>
|
||||
<span class="gp">>>> </span><span class="n">sid</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">get_known_sid</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">WinLocalSystemSid</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="n">sid</span>
|
||||
<span class="go">c_void_p(78304040)</span>
|
||||
<span class="gp">>>> </span><span class="n">psidstr</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">rpc</span><span class="o">.</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrSID</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">sid</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="n">psidstr</span>
|
||||
<span class="go">'\x01\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x05\x12\x00\x00\x00'</span>
|
||||
<span class="gp">>>> </span><span class="n">windows</span><span class="o">.</span><span class="n">rpc</span><span class="o">.</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrSID</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">rpc</span><span class="o">.</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrStream</span><span class="p">(</span><span class="n">psidstr</span><span class="p">))</span>
|
||||
<span class="go"># Implementation is partial for now and does not return a PSID but a string</span>
|
||||
<span class="go">'\x01\x01\x00\x00\x00\x00\x00\x05\x12\x00\x00\x00'</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<dl class="class">
|
||||
<dt id="windows.rpc.ndr.NdrWString">
|
||||
<em class="property">class </em><code class="descclassname">windows.rpc.ndr.</code><code class="descname">NdrWString</code><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrWString"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrWString" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="kn">import</span> <span class="n">ndr</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span> <span class="o">=</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrWString</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"Test-String</span><span class="se">\x00</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span>
|
||||
<span class="go">'\x0c\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00T\x00e\x00s\x00t\x00-\x00S\x00t\x00r\x00i\x00n\x00g\x00\x00\x00'</span>
|
||||
<span class="gp">>>> </span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrWString</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrStream</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
|
||||
<span class="go">u'Test-String\x00'</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<dl class="class">
|
||||
<dt id="windows.rpc.ndr.NdrCString">
|
||||
<em class="property">class </em><code class="descclassname">windows.rpc.ndr.</code><code class="descname">NdrCString</code><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrCString"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrCString" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="kn">import</span> <span class="n">ndr</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span> <span class="o">=</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrCString</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"Test-String</span><span class="se">\x00</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span>
|
||||
<span class="go">'\x0c\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00Test-String\x00'</span>
|
||||
<span class="go"># TODO: implem unpack</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<dl class="class">
|
||||
<dt id="windows.rpc.ndr.NdrLong">
|
||||
<em class="property">class </em><code class="descclassname">windows.rpc.ndr.</code><code class="descname">NdrLong</code><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrLong"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrLong" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="kn">import</span> <span class="n">ndr</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span> <span class="o">=</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrLong</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="mh">0x01020304</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span>
|
||||
<span class="go">'\x04\x03\x02\x01'</span>
|
||||
<span class="gp">>>> </span><span class="nb">hex</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrLong</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrStream</span><span class="p">(</span><span class="n">x</span><span class="p">)))</span>
|
||||
<span class="go">'0x1020304'</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<dl class="class">
|
||||
<dt id="windows.rpc.ndr.NdrHyper">
|
||||
<em class="property">class </em><code class="descclassname">windows.rpc.ndr.</code><code class="descname">NdrHyper</code><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrHyper"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrHyper" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="kn">import</span> <span class="n">ndr</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span> <span class="o">=</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrHyper</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="mh">0x0102030405060708</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span>
|
||||
<span class="go">'\x08\x07\x06\x05\x04\x03\x02\x01'</span>
|
||||
<span class="gp">>>> </span><span class="nb">hex</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrHyper</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrStream</span><span class="p">(</span><span class="n">x</span><span class="p">)))</span>
|
||||
<span class="go">'0x102030405060708L'</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<dl class="class">
|
||||
<dt id="windows.rpc.ndr.NdrShort">
|
||||
<em class="property">class </em><code class="descclassname">windows.rpc.ndr.</code><code class="descname">NdrShort</code><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrShort"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrShort" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="k">import</span> <span class="n">ndr</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span> <span class="o">=</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrShort</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="mh">0x0102</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span>
|
||||
<span class="go">'\x02\x01'</span>
|
||||
<span class="gp">>>> </span><span class="nb">hex</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrShort</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrStream</span><span class="p">(</span><span class="n">x</span><span class="p">)))</span>
|
||||
<span class="go">'0x102'</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="windows.rpc.ndr.NdrByte">
|
||||
<em class="property">class </em><code class="descclassname">windows.rpc.ndr.</code><code class="descname">NdrByte</code><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrByte"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrByte" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="kn">import</span> <span class="n">ndr</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span> <span class="o">=</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrByte</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="mh">0x42</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span>
|
||||
<span class="go">'B'</span>
|
||||
<span class="gp">>>> </span><span class="nb">hex</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrByte</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrStream</span><span class="p">(</span><span class="n">x</span><span class="p">)))</span>
|
||||
<span class="go">'0x42'</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<dl class="class">
|
||||
<dt id="windows.rpc.ndr.NdrUniquePTR">
|
||||
<em class="property">class </em><code class="descclassname">windows.rpc.ndr.</code><code class="descname">NdrUniquePTR</code><span class="sig-paren">(</span><em>subcls</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrUniquePTR"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrUniquePTR" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Create a UNIQUE PTR around a given Ndr type</p>
|
||||
</dd></dl>
|
||||
|
||||
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="kn">import</span> <span class="n">ndr</span>
|
||||
<span class="gp">>>> </span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrLong</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="mh">0x11111111</span><span class="p">)</span>
|
||||
<span class="go">'\x11\x11\x11\x11'</span>
|
||||
<span class="gp">>>> </span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrUniquePTR</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrLong</span><span class="p">)</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="mh">0x11111111</span><span class="p">)</span>
|
||||
<span class="go">'\x02\x02\x02\x02\x11\x11\x11\x11'</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<dl class="class">
|
||||
<dt id="windows.rpc.ndr.NdrConformantArray">
|
||||
<em class="property">class </em><code class="descclassname">windows.rpc.ndr.</code><code class="descname">NdrConformantArray</code><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrConformantArray"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrConformantArray" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="windows.rpc.ndr.NdrConformantVaryingArrays">
|
||||
<em class="property">class </em><code class="descclassname">windows.rpc.ndr.</code><code class="descname">NdrConformantVaryingArrays</code><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrConformantVaryingArrays"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrConformantVaryingArrays" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="windows.rpc.ndr.NdrLongConformantArray">
|
||||
<em class="property">class </em><code class="descclassname">windows.rpc.ndr.</code><code class="descname">NdrLongConformantArray</code><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrLongConformantArray"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrLongConformantArray" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">windows</span><span class="o">.</span><span class="n">rpc</span><span class="o">.</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrLongConformantArray</span><span class="o">.</span><span class="n">pack</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">])</span>
|
||||
<span class="go">'\x04\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00'</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<dl class="class">
|
||||
<dt id="windows.rpc.ndr.NdrByteConformantArray">
|
||||
<em class="property">class </em><code class="descclassname">windows.rpc.ndr.</code><code class="descname">NdrByteConformantArray</code><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrByteConformantArray"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrByteConformantArray" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">windows</span><span class="o">.</span><span class="n">rpc</span><span class="o">.</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrByteConformantArray</span><span class="o">.</span><span class="n">pack</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">])</span>
|
||||
<span class="go">'\x04\x00\x00\x00\x01\x02\x03\x04'</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<dl class="class">
|
||||
<dt id="windows.rpc.ndr.NdrStructure">
|
||||
<em class="property">class </em><code class="descclassname">windows.rpc.ndr.</code><code class="descname">NdrStructure</code><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrStructure"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrStructure" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>a NDR structure that tries to respect the rules of pointer packing, this class should be subclassed with
|
||||
an attribute <code class="docutils literal"><span class="pre">MEMBERS</span></code> describing the members of the class</p>
|
||||
<dl class="classmethod">
|
||||
<dt id="windows.rpc.ndr.NdrStructure.pack">
|
||||
<em class="property">classmethod </em><code class="descname">pack</code><span class="sig-paren">(</span><em>data</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrStructure.pack"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrStructure.pack" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Pack data into the struct, <code class="docutils literal"><span class="pre">data</span></code> size must equals the number of members in the structure</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="classmethod">
|
||||
<dt id="windows.rpc.ndr.NdrStructure.unpack">
|
||||
<em class="property">classmethod </em><code class="descname">unpack</code><span class="sig-paren">(</span><em>stream</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrStructure.unpack"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrStructure.unpack" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Unpack the structure from the stream</p>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="kn">import</span> <span class="n">ndr</span>
|
||||
<span class="gp">>>> </span><span class="k">class</span> <span class="nc">NDRTest</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrStructure</span><span class="p">):</span>
|
||||
<span class="gp">... </span> <span class="n">MEMBERS</span> <span class="o">=</span> <span class="p">[</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrLong</span><span class="p">,</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrLong</span><span class="p">,</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrWString</span><span class="p">]</span>
|
||||
<span class="gp">...</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span> <span class="o">=</span> <span class="n">NDRTest</span><span class="o">.</span><span class="n">pack</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">"Test</span><span class="se">\x00</span><span class="s2">"</span><span class="p">])</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span>
|
||||
<span class="go">'\x01\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00T\x00e\x00s\x00t\x00\x00\x00PP'</span>
|
||||
<span class="gp">>>> </span><span class="n">NDRTest</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrStream</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
|
||||
<span class="go">[1, 2, u'Test\x00']</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<dl class="class">
|
||||
<dt id="windows.rpc.ndr.NdrParameters">
|
||||
<em class="property">class </em><code class="descclassname">windows.rpc.ndr.</code><code class="descname">NdrParameters</code><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrParameters"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrParameters" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>a class to pack NDR parameters together to performs RPC call, this class should be subclassed with
|
||||
an attribute <code class="docutils literal"><span class="pre">MEMBERS</span></code> describing the members of the class</p>
|
||||
</dd></dl>
|
||||
|
||||
<div class="section" id="ndr-stream">
|
||||
<h3>11.3.1. NDR STREAM<a class="headerlink" href="#ndr-stream" title="Permalink to this headline">¶</a></h3>
|
||||
<dl class="class">
|
||||
<dt id="windows.rpc.ndr.NdrStream">
|
||||
<em class="property">class </em><code class="descclassname">windows.rpc.ndr.</code><code class="descname">NdrStream</code><span class="sig-paren">(</span><em>data</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrStream"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrStream" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>A stream of bytes used for NDR unpacking</p>
|
||||
<dl class="method">
|
||||
<dt id="windows.rpc.ndr.NdrStream.align">
|
||||
<code class="descname">align</code><span class="sig-paren">(</span><em>size</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrStream.align"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.ndr.NdrStream.align" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Discard some bytes to align the remaining stream on <code class="docutils literal"><span class="pre">size</span></code></p>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="kn">import</span> <span class="n">ndr</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span> <span class="o">=</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrStream</span><span class="p">(</span><span class="s2">"AAAABBBBCCCC"</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="nb">hex</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrLong</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
|
||||
<span class="go">'0x41414141'</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span><span class="o">.</span><span class="n">data</span>
|
||||
<span class="go">'BBBBCCCC'</span>
|
||||
<span class="gp">>>> </span><span class="nb">hex</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrShort</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
|
||||
<span class="go">'0x4242'</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span><span class="o">.</span><span class="n">data</span>
|
||||
<span class="go">'BBCCCC'</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span><span class="o">.</span><span class="n">align</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span><span class="o">.</span><span class="n">data</span>
|
||||
<span class="go">'CCCC'</span>
|
||||
<span class="gp">>>> </span><span class="nb">hex</span><span class="p">(</span><span class="n">ndr</span><span class="o">.</span><span class="n">NdrLong</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
|
||||
<span class="go">'0x43434343'</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<h3><a href="index.html">Table Of Contents</a></h3>
|
||||
<ul>
|
||||
<li><a class="reference internal" href="#">11. <code class="docutils literal"><span class="pre">windows.rpc</span></code> – ALPC-based Windows RPC</a><ul>
|
||||
<li><a class="reference internal" href="#rpcclient">11.1. RPCClient</a></li>
|
||||
<li><a class="reference internal" href="#epmapper">11.2. Epmapper</a><ul>
|
||||
<li><a class="reference internal" href="#find-alpc-endpoints">11.2.1. <code class="docutils literal"><span class="pre">find_alpc_endpoints()</span></code></a></li>
|
||||
<li><a class="reference internal" href="#find-alpc-endpoint-and-connect">11.2.2. <code class="docutils literal"><span class="pre">find_alpc_endpoint_and_connect()</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#module-windows.rpc.ndr">11.3. Ndr</a><ul>
|
||||
<li><a class="reference internal" href="#ndr-stream">11.3.1. NDR STREAM</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h4>Previous topic</h4>
|
||||
<p class="topless"><a href="alpc.html"
|
||||
title="previous chapter">10. <code class="docutils literal"><span class="pre">windows.alpc</span></code> – Advanced Local Procedure Call</a></p>
|
||||
<h4>Next topic</h4>
|
||||
<p class="topless"><a href="generated.html"
|
||||
title="next chapter">12. <code class="docutils literal"><span class="pre">windows.generated_def</span></code> – generated Windows defines and structures</a></p>
|
||||
<div role="note" aria-label="source link">
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
<li><a href="_sources/rpc.rst.txt"
|
||||
rel="nofollow">Show Source</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchbox" style="display: none" role="search">
|
||||
<h3>Quick search</h3>
|
||||
<form class="search" action="search.html" method="get">
|
||||
<div><input type="text" name="q" /></div>
|
||||
<div><input type="submit" value="Go" /></div>
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="related" role="navigation" aria-label="related navigation">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="genindex.html" title="General Index"
|
||||
>index</a></li>
|
||||
<li class="right" >
|
||||
<a href="py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="generated.html" title="12. windows.generated_def – generated Windows defines and structures"
|
||||
>next</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="alpc.html" title="10. windows.alpc – Advanced Local Procedure Call"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2015, Clement Rouault.
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.5.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
+717
-107
File diff suppressed because it is too large
Load Diff
Vendored
+4
-4
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Search — PythonForWindows 0.2 documentation</title>
|
||||
<title>Search — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -45,7 +45,7 @@
|
||||
<li class="right" >
|
||||
<a href="py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
<li class="right" >
|
||||
<a href="py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
|
||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+4
-4
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>2.7. Service — PythonForWindows 0.2 documentation</title>
|
||||
<title>2.7. Service — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -45,7 +45,7 @@
|
||||
<li class="right" >
|
||||
<a href="network.html" title="2.6. Network"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="various.html" accesskey="U">2. The <code class="docutils literal"><span class="pre">windows</span></code> objects</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -232,7 +232,7 @@
|
||||
<li class="right" >
|
||||
<a href="network.html" title="2.6. Network"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="various.html" >2. The <code class="docutils literal"><span class="pre">windows</span></code> objects</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
Vendored
+5
-5
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>5. windows.utils – Windows Utilities — PythonForWindows 0.2 documentation</title>
|
||||
<title>5. windows.utils – Windows Utilities — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -45,7 +45,7 @@
|
||||
<li class="right" >
|
||||
<a href="winproxy.html" title="4. windows.winproxy – Windows API"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -128,7 +128,7 @@ Useful in injection of GUI process</p>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="windows.utils.pop_shell">
|
||||
<code class="descclassname">windows.utils.</code><code class="descname">pop_shell</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/utils/winutils.html#pop_shell"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.utils.pop_shell" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="descclassname">windows.utils.</code><code class="descname">pop_shell</code><span class="sig-paren">(</span><em>locs=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/utils/winutils.html#pop_shell"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.utils.pop_shell" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Pop a console with an InterativeConsole</p>
|
||||
</dd></dl>
|
||||
|
||||
@@ -208,7 +208,7 @@ Useful in injection of GUI process</p>
|
||||
<li class="right" >
|
||||
<a href="winproxy.html" title="4. windows.winproxy – Windows API"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
|
||||
Vendored
+4
-4
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>2. The windows objects — PythonForWindows 0.2 documentation</title>
|
||||
<title>2. The windows objects — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -45,7 +45,7 @@
|
||||
<li class="right" >
|
||||
<a href="windows.html" title="1. The windows module"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -157,7 +157,7 @@ parts are accessible.</p>
|
||||
<li class="right" >
|
||||
<a href="windows.html" title="1. The windows module"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
|
||||
Vendored
+4
-4
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>2.8. Volume – The logical drives — PythonForWindows 0.2 documentation</title>
|
||||
<title>2.8. Volume – The logical drives — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -45,7 +45,7 @@
|
||||
<li class="right" >
|
||||
<a href="service.html" title="2.7. Service"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="various.html" accesskey="U">2. The <code class="docutils literal"><span class="pre">windows</span></code> objects</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -169,7 +169,7 @@
|
||||
<li class="right" >
|
||||
<a href="service.html" title="2.7. Service"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="various.html" >2. The <code class="docutils literal"><span class="pre">windows</span></code> objects</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+9564
File diff suppressed because it is too large
Load Diff
Vendored
+8
-4
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>1. The windows module — PythonForWindows 0.2 documentation</title>
|
||||
<title>1. The windows module — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -45,7 +45,7 @@
|
||||
<li class="right" >
|
||||
<a href="index.html" title="Welcome to PythonForWindows’s documentation!"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -71,8 +71,12 @@ It also offers some submodules aimed to help the interfacing with <code class="d
|
||||
<dd><ul class="first last simple">
|
||||
<li><a class="reference internal" href="native_exec.html#module-windows.native_exec" title="windows.native_exec"><code class="xref py py-mod docutils literal"><span class="pre">windows.native_exec</span></code></a></li>
|
||||
<li><a class="reference internal" href="winproxy.html#module-windows.winproxy" title="windows.winproxy"><code class="xref py py-mod docutils literal"><span class="pre">windows.winproxy</span></code></a></li>
|
||||
<li><a class="reference internal" href="wintrust.html#module-windows.wintrust" title="windows.wintrust"><code class="xref py py-mod docutils literal"><span class="pre">windows.wintrust</span></code></a></li>
|
||||
<li><a class="reference internal" href="crypto.html#module-windows.crypto" title="windows.crypto"><code class="xref py py-mod docutils literal"><span class="pre">windows.crypto</span></code></a></li>
|
||||
<li><a class="reference internal" href="utils.html#module-windows.utils" title="windows.utils"><code class="xref py py-mod docutils literal"><span class="pre">windows.utils</span></code></a></li>
|
||||
<li><a class="reference internal" href="debug.html#module-windows.debug" title="windows.debug"><code class="xref py py-mod docutils literal"><span class="pre">windows.debug</span></code></a></li>
|
||||
<li><a class="reference internal" href="alpc.html#module-windows.alpc" title="windows.alpc"><code class="xref py py-mod docutils literal"><span class="pre">windows.alpc</span></code></a></li>
|
||||
<li><a class="reference internal" href="rpc.html#module-windows.rpc" title="windows.rpc"><code class="xref py py-mod docutils literal"><span class="pre">windows.rpc</span></code></a></li>
|
||||
<li><a class="reference internal" href="com.html#module-windows.com" title="windows.com"><code class="xref py py-mod docutils literal"><span class="pre">windows.com</span></code></a></li>
|
||||
</ul>
|
||||
</dd>
|
||||
@@ -342,7 +346,7 @@ It also offers some submodules aimed to help the interfacing with <code class="d
|
||||
<li class="right" >
|
||||
<a href="index.html" title="Welcome to PythonForWindows’s documentation!"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
|
||||
Vendored
+226
-4
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>4. windows.winproxy – Windows API — PythonForWindows 0.2 documentation</title>
|
||||
<title>4. windows.winproxy – Windows API — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -45,7 +45,7 @@
|
||||
<li class="right" >
|
||||
<a href="native_exec.html" title="3. windows.native_exec – Native Code Execution"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -151,6 +151,7 @@ It also heavily relies on <a class="reference external" href="https://docs.pytho
|
||||
<li>GetExitCodeProcess(hProcess, lpExitCode)</li>
|
||||
<li>GetExitCodeThread(hThread, lpExitCode)</li>
|
||||
<li>GetLastError()</li>
|
||||
<li>GetLengthSid(pSid)</li>
|
||||
<li>GetLogicalDriveStringsA(nBufferLength, lpBuffer)</li>
|
||||
<li>GetLogicalDriveStringsW(nBufferLength, lpBuffer)</li>
|
||||
<li>GetProcAddress(hModule, lpProcName)</li>
|
||||
@@ -260,6 +261,13 @@ It also heavily relies on <a class="reference external" href="https://docs.pytho
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">CertEnumCTLsInStore:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">Kernel32Error</span> <span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="mi">0</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">CertEnumCertificateContextProperties:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
@@ -330,6 +338,13 @@ It also heavily relies on <a class="reference external" href="https://docs.pytho
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">CloseServiceHandle:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">CloseServiceHandle</span><span class="p">(</span><span class="n">hSCObject</span><span class="p">)</span>
|
||||
<span class="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">Kernel32Error</span> <span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="mi">0</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">CoCreateInstance:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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">tagCLSCTX</span><span class="o">.</span><span class="n">CLSCTX_INPROC_SERVER</span><span class="p">(</span><span class="mh">0x1</span><span class="n">L</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="n">Errcheck</span><span class="p">:</span>
|
||||
@@ -414,6 +429,20 @@ It also heavily relies on <a class="reference external" href="https://docs.pytho
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">CreateProcessAsUserA:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">Kernel32Error</span> <span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="mi">0</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">CreateProcessAsUserW:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">Kernel32Error</span> <span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="mi">0</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">CreateProcessW:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
@@ -442,6 +471,13 @@ It also heavily relies on <a class="reference external" href="https://docs.pytho
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">CreateWellKnownSid:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">Kernel32Error</span> <span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="mi">0</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">CryptAcquireCertificatePrivateKey:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
@@ -505,6 +541,27 @@ It also heavily relies on <a class="reference external" href="https://docs.pytho
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">CryptCATEnumerateAttr:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="n">Nothing</span> <span class="n">special</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">CryptCATEnumerateCatAttr:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="n">Nothing</span> <span class="n">special</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">CryptCATEnumerateMember:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="n">Nothing</span> <span class="n">special</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">CryptDecodeObject:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
@@ -575,6 +632,20 @@ It also heavily relies on <a class="reference external" href="https://docs.pytho
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">CryptUIDlgViewContext:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">Kernel32Error</span> <span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="mi">0</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">DeleteProcThreadAttributeList:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">DeleteProcThreadAttributeList</span><span class="p">(</span><span class="n">lpAttributeList</span><span class="p">)</span>
|
||||
<span class="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">Kernel32Error</span> <span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="mi">0</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">DeviceIoControl:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
@@ -858,6 +929,25 @@ It also heavily relies on <a class="reference external" href="https://docs.pytho
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">GetWindowsDirectoryA:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">Kernel32Error</span> <span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="mi">0</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">GetWindowsDirectoryW:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">Kernel32Error</span> <span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="mi">0</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">InitializeProcThreadAttributeList:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">LdrLoadDll:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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>
|
||||
</pre></div>
|
||||
@@ -877,6 +967,20 @@ It also heavily relies on <a class="reference external" href="https://docs.pytho
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">LookupPrivilegeNameA:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">Kernel32Error</span> <span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="mi">0</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">LookupPrivilegeNameW:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">Kernel32Error</span> <span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="mi">0</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">LookupPrivilegeValueA:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
@@ -898,6 +1002,20 @@ It also heavily relies on <a class="reference external" href="https://docs.pytho
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">MessageBoxA:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">Kernel32Error</span> <span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="mi">0</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">MessageBoxW:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">Kernel32Error</span> <span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="mi">0</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">NtAlpcAcceptConnectPort:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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>
|
||||
</pre></div>
|
||||
@@ -918,6 +1036,36 @@ It also heavily relies on <a class="reference external" href="https://docs.pytho
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">NtAlpcCreatePortSection:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">NtAlpcCreateSectionView:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">NtAlpcDeletePortSection:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">NtAlpcDeleteSectionView:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">NtAlpcDisconnectPort:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">NtAlpcDisconnectPort</span><span class="p">(</span><span class="n">PortHandle</span><span class="p">,</span> <span class="n">Flags</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">NtAlpcQueryInformation:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">NtAlpcSendWaitReceivePort:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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>
|
||||
</pre></div>
|
||||
@@ -928,6 +1076,11 @@ It also heavily relies on <a class="reference external" href="https://docs.pytho
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">NtCreateSection:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">NtCreateThreadEx:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="mi">2097151</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>
|
||||
</pre></div>
|
||||
@@ -938,6 +1091,11 @@ It also heavily relies on <a class="reference external" href="https://docs.pytho
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">NtMapViewOfSection:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">NtOpenDirectoryObject:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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>
|
||||
</pre></div>
|
||||
@@ -948,6 +1106,11 @@ It also heavily relies on <a class="reference external" href="https://docs.pytho
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">NtOpenSection:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">NtOpenSymbolicLinkObject:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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>
|
||||
</pre></div>
|
||||
@@ -993,11 +1156,21 @@ It also heavily relies on <a class="reference external" href="https://docs.pytho
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">NtReadVirtualMemory:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">NtSetContextThread:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">NtSetContextThread</span><span class="p">(</span><span class="n">hThread</span><span class="p">,</span> <span class="n">lpContext</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">NtUnmapViewOfSection:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">NtUnmapViewOfSection</span><span class="p">(</span><span class="n">ProcessHandle</span><span class="p">,</span> <span class="n">BaseAddress</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">NtWow64ReadVirtualMemory64:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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>
|
||||
</pre></div>
|
||||
@@ -1051,6 +1224,20 @@ It also heavily relies on <a class="reference external" href="https://docs.pytho
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">OpenServiceA:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">Kernel32Error</span> <span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="mi">0</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">OpenServiceW:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">Kernel32Error</span> <span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="mi">0</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">OpenThread:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="mh">0x1f03ff</span><span class="n">L</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="n">Errcheck</span><span class="p">:</span>
|
||||
@@ -1204,6 +1391,13 @@ It also heavily relies on <a class="reference external" href="https://docs.pytho
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">RtlGetUnloadEventTraceEx:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="n">Nothing</span> <span class="n">special</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">SetConsoleCtrlHandler:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
@@ -1247,6 +1441,20 @@ It also heavily relies on <a class="reference external" href="https://docs.pytho
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">StartServiceA:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">Kernel32Error</span> <span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="mi">0</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">StartServiceW:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">Kernel32Error</span> <span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="mi">0</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">Thread32First:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Set</span> <span class="n">byref</span><span class="p">(</span><span class="n">lpte</span><span class="p">)</span> <span class="k">if</span> <span class="n">needed</span>
|
||||
@@ -1263,6 +1471,20 @@ It also heavily relies on <a class="reference external" href="https://docs.pytho
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">TpCallbackSendAlpcMessageOnCompletion:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">Kernel32Error</span> <span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="n">NOT</span> <span class="mi">0</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">UpdateProcThreadAttribute:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">Kernel32Error</span> <span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="mi">0</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">VerQueryValueA:</p>
|
||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">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="n">Errcheck</span><span class="p">:</span>
|
||||
@@ -1430,7 +1652,7 @@ It also heavily relies on <a class="reference external" href="https://docs.pytho
|
||||
<li class="right" >
|
||||
<a href="native_exec.html" title="3. windows.native_exec – Native Code Execution"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
|
||||
+19157
File diff suppressed because it is too large
Load Diff
Vendored
+4
-4
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>6. windows.wintrust – Checking signature — PythonForWindows 0.2 documentation</title>
|
||||
<title>6. windows.wintrust – Checking signature — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -45,7 +45,7 @@
|
||||
<li class="right" >
|
||||
<a href="utils.html" title="5. windows.utils – Windows Utilities"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -227,7 +227,7 @@ It allows to check the signature of a file.</p>
|
||||
<li class="right" >
|
||||
<a href="utils.html" title="5. windows.utils – Windows Utilities"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
|
||||
Vendored
+13
-13
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>11. Early Work In Progress — PythonForWindows 0.2 documentation</title>
|
||||
<title>14. Early Work In Progress — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -26,8 +26,8 @@
|
||||
<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" />
|
||||
<link rel="next" title="12. Internals" href="internals.html" />
|
||||
<link rel="prev" title="10. IAT hooking" href="iat_hook.html" />
|
||||
<link rel="next" title="15. Internals" href="internals.html" />
|
||||
<link rel="prev" title="13. IAT hooking" href="iat_hook.html" />
|
||||
</head>
|
||||
<body role="document">
|
||||
<div class="related" role="navigation" aria-label="related navigation">
|
||||
@@ -40,12 +40,12 @@
|
||||
<a href="py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="internals.html" title="12. Internals"
|
||||
<a href="internals.html" title="15. Internals"
|
||||
accesskey="N">next</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="iat_hook.html" title="10. IAT hooking"
|
||||
<a href="iat_hook.html" title="13. IAT hooking"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
<div class="body" role="main">
|
||||
|
||||
<div class="section" id="early-work-in-progress">
|
||||
<h1>11. Early Work In Progress<a class="headerlink" href="#early-work-in-progress" title="Permalink to this headline">¶</a></h1>
|
||||
<h1>14. Early Work In Progress<a class="headerlink" href="#early-work-in-progress" title="Permalink to this headline">¶</a></h1>
|
||||
<p>Here are some features that are still work in progress. Code might be unstable and/or ultra-ugly.</p>
|
||||
<p><Nothing right now></p>
|
||||
</div>
|
||||
@@ -68,10 +68,10 @@
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<h4>Previous topic</h4>
|
||||
<p class="topless"><a href="iat_hook.html"
|
||||
title="previous chapter">10. IAT hooking</a></p>
|
||||
title="previous chapter">13. IAT hooking</a></p>
|
||||
<h4>Next topic</h4>
|
||||
<p class="topless"><a href="internals.html"
|
||||
title="next chapter">12. Internals</a></p>
|
||||
title="next chapter">15. Internals</a></p>
|
||||
<div role="note" aria-label="source link">
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
@@ -103,12 +103,12 @@
|
||||
<a href="py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="internals.html" title="12. Internals"
|
||||
<a href="internals.html" title="15. Internals"
|
||||
>next</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="iat_hook.html" title="10. IAT hooking"
|
||||
<a href="iat_hook.html" title="13. IAT hooking"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
|
||||
Vendored
+5
-5
@@ -6,7 +6,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>2.9. WMI – Make request to WMI — PythonForWindows 0.2 documentation</title>
|
||||
<title>2.9. WMI – Make request to WMI — PythonForWindows 0.3 documentation</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/classic.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
@@ -14,7 +14,7 @@
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: './',
|
||||
VERSION: '0.2',
|
||||
VERSION: '0.3',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
@@ -45,7 +45,7 @@
|
||||
<li class="right" >
|
||||
<a href="volume.html" title="2.8. Volume – The logical drives"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="various.html" accesskey="U">2. The <code class="docutils literal"><span class="pre">windows</span></code> objects</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -59,7 +59,7 @@
|
||||
<span id="wmi-make-request-to-wmi"></span><h1>2.9. WMI – Make request to WMI<a class="headerlink" href="#module-windows.winobject.wmi" title="Permalink to this headline">¶</a></h1>
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p class="last">See sample <a class="reference internal" href="sample.html#wmi-request"><span class="std std-ref">Make WMI requests</span></a></p>
|
||||
<p class="last">See sample <a class="reference internal" href="sample.html#wmi-request"><span class="std std-ref">WMI requests</span></a></p>
|
||||
</div>
|
||||
<dl class="class">
|
||||
<dt id="windows.winobject.wmi.WmiRequester">
|
||||
@@ -131,7 +131,7 @@
|
||||
<li class="right" >
|
||||
<a href="volume.html" title="2.8. Volume – The logical drives"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.2 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.3 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="various.html" >2. The <code class="docutils literal"><span class="pre">windows</span></code> objects</a> »</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+2
-2
@@ -66,9 +66,9 @@ copyright = u'2015, Clement Rouault'
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '0.2'
|
||||
version = '0.3'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '0.2'
|
||||
release = '0.3'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
||||
Reference in New Issue
Block a user