Files
hakril-PythonForWindows/docs/build/html/rpc.html
T
2024-11-05 09:34:04 +01:00

615 lines
63 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en" data-content_root="./">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>13. windows.rpc ALPC-based Windows RPC &#8212; PythonForWindows 1.0.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<link rel="stylesheet" type="text/css" href="_static/classic.css?v=def86cc0" />
<link rel="stylesheet" type="text/css" href="_static/css/mbasic.css?v=957880af" />
<script src="_static/documentation_options.js?v=292eb321"></script>
<script src="_static/doctools.js?v=9a2dae69"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="14. windows.generated_def generated Windows defines and structures" href="generated.html" />
<link rel="prev" title="12. windows.alpc Advanced Local Procedure Call" href="alpc.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="generated.html" title="14. windows.generated_def generated Windows defines and structures"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="alpc.html" title="12. windows.alpc Advanced Local Procedure Call"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 1.0.1 documentation</a> &#187;</li>
<li class="nav-item nav-item-this"><a href=""><span class="section-number">13. </span><code class="docutils literal notranslate"><span class="pre">windows.rpc</span></code> ALPC-based Windows RPC</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-windows.rpc">
<span id="windows-rpc-alpc-based-windows-rpc"></span><h1><span class="section-number">13. </span><code class="docutils literal notranslate"><span class="pre">windows.rpc</span></code> ALPC-based Windows RPC<a class="headerlink" href="#module-windows.rpc" title="Link to this heading"></a></h1>
<p>The <a class="reference internal" href="#module-windows.rpc" title="windows.rpc"><code class="xref py py-mod docutils literal notranslate"><span class="pre">windows.rpc</span></code></a> allows to perform the basic for MS-RPC:</p>
<blockquote>
<div><ul class="simple">
<li><p>find interface endpoints</p></li>
<li><p>connect to it</p></li>
<li><p>bind to interfaces</p></li>
<li><p>perform call</p></li>
<li><p>Marshall/Unmarshall NDR</p></li>
</ul>
</div></blockquote>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>See samples:</p>
<blockquote>
<div><ul class="simple">
<li><p><a class="reference internal" href="sample.html#sample-rpc-uac"><span class="std std-ref">Manual UAC</span></a></p></li>
<li><p><a class="reference internal" href="sample.html#sample-rpc-lsass"><span class="std std-ref">Manual LsarEnumeratePrivileges</span></a></p></li>
</ul>
</div></blockquote>
</div>
<section id="rpcclient">
<h2><span class="section-number">13.1. </span>RPCClient<a class="headerlink" href="#rpcclient" title="Link to this heading"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="windows.rpc.RPCClient">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">windows.rpc.</span></span><span class="sig-name descname"><span class="pre">RPCClient</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">port</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/client.html#RPCClient"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.RPCClient" title="Link 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="py attribute">
<dt class="sig sig-object py" id="windows.rpc.RPCClient.alpc_client">
<span class="sig-name descname"><span class="pre">alpc_client</span></span><a class="headerlink" href="#windows.rpc.RPCClient.alpc_client" title="Link to this definition"></a></dt>
<dd><p>The <a class="reference internal" href="alpc.html#windows.alpc.AlpcClient" title="windows.alpc.AlpcClient"><code class="xref py py-class docutils literal notranslate"><span class="pre">windows.alpc.AlpcClient</span></code></a> used to communicate with the server</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="windows.rpc.RPCClient.bind">
<span class="sig-name descname"><span class="pre">bind</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">iid</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">version</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">(1,</span> <span class="pre">0)</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/client.html#RPCClient.bind"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.RPCClient.bind" title="Link to this definition"></a></dt>
<dd><p>Bind to the <code class="docutils literal notranslate"><span class="pre">IID</span></code> with the given <code class="docutils literal notranslate"><span class="pre">version</span></code></p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p><code class="xref py py-class docutils literal notranslate"><span class="pre">windows.generated_def.IID</span></code></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="windows.rpc.RPCClient.call">
<span class="sig-name descname"><span class="pre">call</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">IID</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method_offset</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">params</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ipid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/client.html#RPCClient.call"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.RPCClient.call" title="Link to this definition"></a></dt>
<dd><p>Call method number <code class="docutils literal notranslate"><span class="pre">method_offset</span></code> of interface <code class="docutils literal notranslate"><span class="pre">IID</span></code> with mashalled <code class="docutils literal notranslate"><span class="pre">params</span></code>.
Handle <a class="reference external" href="https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dcom/db1d5ce1-a783-4f3d-854c-dc44308e78fb">ORPC calls</a> via the <cite>ipid</cite> parameter.</p>
<blockquote>
<div><dl class="field-list simple">
<dt class="field-odd">param IID IID<span class="colon">:</span></dt>
<dd class="field-odd"><p>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 notranslate"><span class="pre">bind()</span></code></a></p>
</dd>
<dt class="field-even">param int method_offset<span class="colon">:</span></dt>
<dd class="field-even"><p></p></dd>
<dt class="field-odd">param str params<span class="colon">:</span></dt>
<dd class="field-odd"><p>The mashalled parameters (NDR32)</p>
</dd>
<dt class="field-even">param GUID ipid<span class="colon">:</span></dt>
<dd class="field-even"><p>The IPID for <a class="reference external" href="https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dcom/db1d5ce1-a783-4f3d-854c-dc44308e78fb">ORPC calls</a></p>
</dd>
<dt class="field-odd">returns<span class="colon">:</span></dt>
<dd class="field-odd"><p><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></p>
</dd>
</dl>
</div></blockquote>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="windows.rpc.RPCClient.forge_alpc_request">
<span class="sig-name descname"><span class="pre">forge_alpc_request</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">IID</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method_offset</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">params</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ipid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/client.html#RPCClient.forge_alpc_request"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.RPCClient.forge_alpc_request" title="Link to this definition"></a></dt>
<dd><p>Craft an ALPC message containing an RPC request to call <code class="docutils literal notranslate"><span class="pre">method_offset</span></code> of interface <code class="docutils literal notranslate"><span class="pre">IID`</span>
<span class="pre">with</span> <span class="pre">``params</span></code>.
Can be used to craft request without directly sending it</p>
</dd></dl>
</dd></dl>
</section>
<section id="epmapper">
<h2><span class="section-number">13.2. </span>Epmapper<a class="headerlink" href="#epmapper" title="Link to this heading"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="windows.rpc.epmapper.UnpackTower">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">windows.rpc.epmapper.</span></span><span class="sig-name descname"><span class="pre">UnpackTower</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">protseq</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">endpoint</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">address</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">object</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">syntax</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#windows.rpc.epmapper.UnpackTower" title="Link to this definition"></a></dt>
<dd><dl class="py attribute">
<dt class="sig sig-object py" id="windows.rpc.epmapper.UnpackTower.address">
<span class="sig-name descname"><span class="pre">address</span></span><a class="headerlink" href="#windows.rpc.epmapper.UnpackTower.address" title="Link to this definition"></a></dt>
<dd><p>Alias for field number 2</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="windows.rpc.epmapper.UnpackTower.endpoint">
<span class="sig-name descname"><span class="pre">endpoint</span></span><a class="headerlink" href="#windows.rpc.epmapper.UnpackTower.endpoint" title="Link to this definition"></a></dt>
<dd><p>Alias for field number 1</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="windows.rpc.epmapper.UnpackTower.object">
<span class="sig-name descname"><span class="pre">object</span></span><a class="headerlink" href="#windows.rpc.epmapper.UnpackTower.object" title="Link to this definition"></a></dt>
<dd><p>Alias for field number 3</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="windows.rpc.epmapper.UnpackTower.protseq">
<span class="sig-name descname"><span class="pre">protseq</span></span><a class="headerlink" href="#windows.rpc.epmapper.UnpackTower.protseq" title="Link to this definition"></a></dt>
<dd><p>Alias for field number 0</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="windows.rpc.epmapper.UnpackTower.syntax">
<span class="sig-name descname"><span class="pre">syntax</span></span><a class="headerlink" href="#windows.rpc.epmapper.UnpackTower.syntax" title="Link to this definition"></a></dt>
<dd><p>Alias for field number 4</p>
</dd></dl>
</dd></dl>
<section id="find-alpc-endpoints">
<h3><span class="section-number">13.2.1. </span><a class="reference internal" href="#windows.rpc.find_alpc_endpoints" title="windows.rpc.find_alpc_endpoints"><code class="xref py py-func docutils literal notranslate"><span class="pre">find_alpc_endpoints()</span></code></a><a class="headerlink" href="#find-alpc-endpoints" title="Link to this heading"></a></h3>
<dl class="py function">
<dt class="sig sig-object py" id="windows.rpc.find_alpc_endpoints">
<span class="sig-prename descclassname"><span class="pre">windows.rpc.</span></span><span class="sig-name descname"><span class="pre">find_alpc_endpoints</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">targetiid</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">version</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">(1,</span> <span class="pre">0)</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nb_response</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">_WELL_KNOWN_SID_TYPE.WinLocalSystemSid(0x16)</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/epmapper.html#find_alpc_endpoints"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.find_alpc_endpoints" title="Link to this definition"></a></dt>
<dd><p>Ask the EPMapper for ALPC endpoints of <code class="docutils literal notranslate"><span class="pre">targetiid:version</span></code> (maximum of <code class="docutils literal notranslate"><span class="pre">nb_response</span></code>)</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>targetiid</strong> (<em>str</em>) The IID of the requested interface</p></li>
<li><p><strong>version</strong> (<em>(</em><em>int</em><em>,</em><em>int</em><em>)</em>) The version requested interface</p></li>
<li><p><strong>nb_response</strong> (<em>int</em>) The maximum number of response</p></li>
<li><p><strong>sid</strong> (<a class="reference internal" href="winstructs_generated.html#windows.generated_def.winstructs.WELL_KNOWN_SID_TYPE" title="windows.generated_def.winstructs.WELL_KNOWN_SID_TYPE"><em>WELL_KNOWN_SID_TYPE</em></a>) The SID used to request the EPMapper</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>[<a class="reference internal" href="#windows.rpc.epmapper.UnpackTower" title="windows.rpc.epmapper.UnpackTower"><code class="xref py py-class docutils literal notranslate"><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 notranslate"><span class="pre">UnpackTower</span></code></a></p>
</dd>
</dl>
</dd></dl>
<p>Example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">windows.rpc</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">UAC_UIID</span> <span class="o">=</span> <span class="s2">&quot;201ef99a-7fa0-444c-9399-19ba84f12a1a&quot;</span>
<span class="gp">&gt;&gt;&gt; </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=&#39;ncalrpc&#39;,</span>
<span class="go"> endpoint=bytearray(b&#39;LRPC-c30c67fef2afa1612b&#39;),</span>
<span class="go"> address=None,</span>
<span class="go"> object=&lt;RPC_IF_ID &quot;201EF99A-7FA0-444C-9399-19BA84F12A1A&quot; (1, 0)&gt;,</span>
<span class="go"> syntax=&lt;RPC_IF_ID &quot;8A885D04-1CEB-11C9-9FE8-08002B104860&quot; (2, 0)&gt;)]</span>
</pre></div>
</div>
</section>
<section id="find-alpc-endpoint-and-connect">
<h3><span class="section-number">13.2.2. </span><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 notranslate"><span class="pre">find_alpc_endpoint_and_connect()</span></code></a><a class="headerlink" href="#find-alpc-endpoint-and-connect" title="Link to this heading"></a></h3>
<dl class="py function">
<dt class="sig sig-object py" id="windows.rpc.find_alpc_endpoint_and_connect">
<span class="sig-prename descclassname"><span class="pre">windows.rpc.</span></span><span class="sig-name descname"><span class="pre">find_alpc_endpoint_and_connect</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">targetiid</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">version</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">(1,</span> <span class="pre">0)</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">_WELL_KNOWN_SID_TYPE.WinLocalSystemSid(0x16)</span></span></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"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.find_alpc_endpoint_and_connect" title="Link to this definition"></a></dt>
<dd><p>Ask the EPMapper for ALPC endpoints of <code class="docutils literal notranslate"><span class="pre">targetiid:version</span></code> and connect to one of them.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>targetiid</strong> (<em>str</em>) The IID of the requested interface</p></li>
<li><p><strong>version</strong> (<em>(</em><em>int</em><em>,</em><em>int</em><em>)</em>) The version requested interface</p></li>
<li><p><strong>sid</strong> (<a class="reference internal" href="winstructs_generated.html#windows.generated_def.winstructs.WELL_KNOWN_SID_TYPE" title="windows.generated_def.winstructs.WELL_KNOWN_SID_TYPE"><em>WELL_KNOWN_SID_TYPE</em></a>) The SID used to request the EPMapper</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>A connected <a class="reference internal" href="#windows.rpc.RPCClient" title="windows.rpc.RPCClient"><code class="xref py py-class docutils literal notranslate"><span class="pre">RPCClient</span></code></a></p>
</dd>
</dl>
</dd></dl>
<p>Example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">windows.rpc</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">UAC_UIID</span> <span class="o">=</span> <span class="s2">&quot;201ef99a-7fa0-444c-9399-19ba84f12a1a&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">client</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">rpc</span><span class="o">.</span><span class="n">find_alpc_endpoint_and_connect</span><span class="p">(</span><span class="n">UAC_UIID</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">client</span>
<span class="go">&lt;windows.rpc.client.RPCClient object at 0x046A1470&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">client</span><span class="o">.</span><span class="n">alpc_client</span><span class="o">.</span><span class="n">port_name</span>
<span class="go">&#39;\\RPC Control\\LRPC-c30c67fef2afa1612b&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">iid</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">UAC_UIID</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">iid</span>
<span class="go">&lt;IID &quot;201EF99A-7FA0-444C-9399-19BA84F12A1A&quot;&gt;</span>
</pre></div>
</div>
</section>
</section>
<section id="module-windows.rpc.ndr">
<span id="ndr"></span><h2><span class="section-number">13.3. </span>Ndr<a class="headerlink" href="#module-windows.rpc.ndr" title="Link to this heading"></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 notranslate"><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="admonition-title">Note</p>
<p>The NDR supported for now is <code class="docutils literal notranslate"><span class="pre">8a885d04-1ceb-11c9-9fe8-08002b104860</span></code> version <code class="docutils literal notranslate"><span class="pre">2.0</span></code></p>
</div>
<p>Each NDR class has a function <code class="xref py py-func docutils literal notranslate"><span class="pre">pack()</span></code>.</p>
<dl class="py class">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrSID">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">windows.rpc.ndr.</span></span><span class="sig-name descname"><span class="pre">NdrSID</span></span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrSID"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrSID" title="Link to this definition"></a></dt>
<dd><dl class="py method">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrSID.pack">
<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">pack</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">psid</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrSID.pack"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrSID.pack" title="Link to this definition"></a></dt>
<dd><p>Pack a PSID</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>psid</strong> (<a class="reference internal" href="winstructs_generated.html#windows.generated_def.winstructs.PSID" title="windows.generated_def.winstructs.PSID"><em>PSID</em></a>)</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrSID.unpack">
<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">unpack</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">stream</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrSID.unpack"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrSID.unpack" title="Link to this definition"></a></dt>
<dd><p>Unpack a PSID, partial implementation that returns a <code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code> and not a PSID</p>
</dd></dl>
</dd></dl>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sid</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">get_known_sid</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">WinLocalSystemSid</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">sid</span>
<span class="go">c_void_p(78304040)</span>
<span class="gp">&gt;&gt;&gt; </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">&gt;&gt;&gt; </span><span class="n">psidstr</span>
<span class="go">&#39;\x01\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x05\x12\x00\x00\x00&#39;</span>
<span class="gp">&gt;&gt;&gt; </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">&#39;\x01\x01\x00\x00\x00\x00\x00\x05\x12\x00\x00\x00&#39;</span>
</pre></div>
</div>
<dl class="py class">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrWString">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">windows.rpc.ndr.</span></span><span class="sig-name descname"><span class="pre">NdrWString</span></span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrWString"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrWString" title="Link to this definition"></a></dt>
<dd><dl class="py method">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrWString.pack">
<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">pack</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrWString.pack"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrWString.pack" title="Link to this definition"></a></dt>
<dd><p>Pack string <code class="docutils literal notranslate"><span class="pre">data</span></code>. append <code class="docutils literal notranslate"><span class="pre">\x00</span></code> if not present at the end of the string</p>
</dd></dl>
</dd></dl>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="kn">import</span> <span class="n">ndr</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span> <span class="o">=</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrWString</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">&quot;Test-String</span><span class="se">\x00</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span>
<span class="go">&#39;\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&#39;</span>
<span class="gp">&gt;&gt;&gt; </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&#39;Test-String\x00&#39;</span>
</pre></div>
</div>
<dl class="py class">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrCString">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">windows.rpc.ndr.</span></span><span class="sig-name descname"><span class="pre">NdrCString</span></span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrCString"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrCString" title="Link to this definition"></a></dt>
<dd><dl class="py method">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrCString.pack">
<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">pack</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrCString.pack"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrCString.pack" title="Link to this definition"></a></dt>
<dd><p>Pack string <code class="docutils literal notranslate"><span class="pre">data</span></code>. append <code class="docutils literal notranslate"><span class="pre">\x00</span></code> if not present at the end of the string</p>
</dd></dl>
</dd></dl>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="kn">import</span> <span class="n">ndr</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span> <span class="o">=</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrCString</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">&quot;Test-String</span><span class="se">\x00</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span>
<span class="go">&#39;\x0c\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00Test-String\x00&#39;</span>
<span class="go"># TODO: implem unpack</span>
</pre></div>
</div>
<dl class="py class">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrLong">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">windows.rpc.ndr.</span></span><span class="sig-name descname"><span class="pre">NdrLong</span></span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrLong"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrLong" title="Link to this definition"></a></dt>
<dd></dd></dl>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="kn">import</span> <span class="n">ndr</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span> <span class="o">=</span> <span class="n">ndr</span><span class="o">.</span><span class="n">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">&gt;&gt;&gt; </span><span class="n">x</span>
<span class="go">&#39;\x04\x03\x02\x01&#39;</span>
<span class="gp">&gt;&gt;&gt; </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">&#39;0x1020304&#39;</span>
</pre></div>
</div>
<dl class="py class">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrHyper">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">windows.rpc.ndr.</span></span><span class="sig-name descname"><span class="pre">NdrHyper</span></span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrHyper"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrHyper" title="Link to this definition"></a></dt>
<dd></dd></dl>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="kn">import</span> <span class="n">ndr</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span> <span class="o">=</span> <span class="n">ndr</span><span class="o">.</span><span class="n">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">&gt;&gt;&gt; </span><span class="n">x</span>
<span class="go">&#39;\x08\x07\x06\x05\x04\x03\x02\x01&#39;</span>
<span class="gp">&gt;&gt;&gt; </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">&#39;0x102030405060708L&#39;</span>
</pre></div>
</div>
<dl class="py class">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrShort">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">windows.rpc.ndr.</span></span><span class="sig-name descname"><span class="pre">NdrShort</span></span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrShort"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrShort" title="Link to this definition"></a></dt>
<dd><div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="kn">import</span> <span class="n">ndr</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span> <span class="o">=</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrShort</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="mh">0x0102</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span>
<span class="go">&#39;\x02\x01&#39;</span>
<span class="gp">&gt;&gt;&gt; </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">&#39;0x102&#39;</span>
</pre></div>
</div>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrByte">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">windows.rpc.ndr.</span></span><span class="sig-name descname"><span class="pre">NdrByte</span></span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrByte"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrByte" title="Link to this definition"></a></dt>
<dd></dd></dl>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="kn">import</span> <span class="n">ndr</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span> <span class="o">=</span> <span class="n">ndr</span><span class="o">.</span><span class="n">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">&gt;&gt;&gt; </span><span class="n">x</span>
<span class="go">&#39;B&#39;</span>
<span class="gp">&gt;&gt;&gt; </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">&#39;0x42&#39;</span>
</pre></div>
</div>
<dl class="py class">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrUniquePTR">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">windows.rpc.ndr.</span></span><span class="sig-name descname"><span class="pre">NdrUniquePTR</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">subcls</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrUniquePTR"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrUniquePTR" title="Link to this definition"></a></dt>
<dd><p>Create a UNIQUE PTR around a given Ndr type</p>
</dd></dl>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="kn">import</span> <span class="n">ndr</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">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">&#39;\x11\x11\x11\x11&#39;</span>
<span class="gp">&gt;&gt;&gt; </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">&#39;\x02\x02\x02\x02\x11\x11\x11\x11&#39;</span>
</pre></div>
</div>
<dl class="py class">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrConformantArray">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">windows.rpc.ndr.</span></span><span class="sig-name descname"><span class="pre">NdrConformantArray</span></span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrConformantArray"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrConformantArray" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrConformantVaryingArrays">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">windows.rpc.ndr.</span></span><span class="sig-name descname"><span class="pre">NdrConformantVaryingArrays</span></span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrConformantVaryingArrays"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrConformantVaryingArrays" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrLongConformantArray">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">windows.rpc.ndr.</span></span><span class="sig-name descname"><span class="pre">NdrLongConformantArray</span></span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrLongConformantArray"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrLongConformantArray" title="Link to this definition"></a></dt>
<dd></dd></dl>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">windows</span><span class="o">.</span><span class="n">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">&#39;\x04\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00&#39;</span>
</pre></div>
</div>
<dl class="py class">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrByteConformantArray">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">windows.rpc.ndr.</span></span><span class="sig-name descname"><span class="pre">NdrByteConformantArray</span></span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrByteConformantArray"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrByteConformantArray" title="Link to this definition"></a></dt>
<dd></dd></dl>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">windows</span><span class="o">.</span><span class="n">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">&#39;\x04\x00\x00\x00\x01\x02\x03\x04&#39;</span>
</pre></div>
</div>
<dl class="py class">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrStructure">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">windows.rpc.ndr.</span></span><span class="sig-name descname"><span class="pre">NdrStructure</span></span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrStructure"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrStructure" title="Link 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 notranslate"><span class="pre">MEMBERS</span></code> describing the members of the class</p>
<dl class="py method">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrStructure.pack">
<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">pack</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrStructure.pack"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrStructure.pack" title="Link to this definition"></a></dt>
<dd><p>Pack data into the struct, <code class="docutils literal notranslate"><span class="pre">data</span></code> size must equals the number of members in the structure</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrStructure.unpack">
<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">unpack</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">stream</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrStructure.unpack"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrStructure.unpack" title="Link to this definition"></a></dt>
<dd><p>Unpack the structure from the stream</p>
</dd></dl>
</dd></dl>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="kn">import</span> <span class="n">ndr</span>
<span class="gp">&gt;&gt;&gt; </span><span class="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">&gt;&gt;&gt; </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">&quot;Test</span><span class="se">\x00</span><span class="s2">&quot;</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span>
<span class="go">&#39;\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&#39;</span>
<span class="gp">&gt;&gt;&gt; </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&#39;Test\x00&#39;]</span>
</pre></div>
</div>
<dl class="py class">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrParameters">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">windows.rpc.ndr.</span></span><span class="sig-name descname"><span class="pre">NdrParameters</span></span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrParameters"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrParameters" title="Link 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 notranslate"><span class="pre">MEMBERS</span></code> describing the members of the class</p>
</dd></dl>
<section id="ndr-stream">
<h3><span class="section-number">13.3.1. </span>NDR STREAM<a class="headerlink" href="#ndr-stream" title="Link to this heading"></a></h3>
<dl class="py class">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrStream">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">windows.rpc.ndr.</span></span><span class="sig-name descname"><span class="pre">NdrStream</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrStream"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrStream" title="Link to this definition"></a></dt>
<dd><p>A stream of bytes used for NDR unpacking</p>
<dl class="py method">
<dt class="sig sig-object py" id="windows.rpc.ndr.NdrStream.align">
<span class="sig-name descname"><span class="pre">align</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">size</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/ndr.html#NdrStream.align"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#windows.rpc.ndr.NdrStream.align" title="Link to this definition"></a></dt>
<dd><p>Discard some bytes to align the remaining stream on <code class="docutils literal notranslate"><span class="pre">size</span></code></p>
</dd></dl>
</dd></dl>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="kn">import</span> <span class="n">ndr</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span> <span class="o">=</span> <span class="n">ndr</span><span class="o">.</span><span class="n">NdrStream</span><span class="p">(</span><span class="s2">&quot;AAAABBBBCCCC&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </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">&#39;0x41414141&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span><span class="o">.</span><span class="n">data</span>
<span class="go">&#39;BBBBCCCC&#39;</span>
<span class="gp">&gt;&gt;&gt; </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">&#39;0x4242&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span><span class="o">.</span><span class="n">data</span>
<span class="go">&#39;BBCCCC&#39;</span>
<span class="gp">&gt;&gt;&gt; </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">&gt;&gt;&gt; </span><span class="n">x</span><span class="o">.</span><span class="n">data</span>
<span class="go">&#39;CCCC&#39;</span>
<span class="gp">&gt;&gt;&gt; </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">&#39;0x43434343&#39;</span>
</pre></div>
</div>
</section>
</section>
</section>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<div>
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">13. <code class="docutils literal notranslate"><span class="pre">windows.rpc</span></code> ALPC-based Windows RPC</a><ul>
<li><a class="reference internal" href="#rpcclient">13.1. RPCClient</a><ul>
<li><a class="reference internal" href="#windows.rpc.RPCClient"><code class="docutils literal notranslate"><span class="pre">RPCClient</span></code></a><ul>
<li><a class="reference internal" href="#windows.rpc.RPCClient.alpc_client"><code class="docutils literal notranslate"><span class="pre">alpc_client</span></code></a></li>
<li><a class="reference internal" href="#windows.rpc.RPCClient.bind"><code class="docutils literal notranslate"><span class="pre">bind()</span></code></a></li>
<li><a class="reference internal" href="#windows.rpc.RPCClient.call"><code class="docutils literal notranslate"><span class="pre">call()</span></code></a></li>
<li><a class="reference internal" href="#windows.rpc.RPCClient.forge_alpc_request"><code class="docutils literal notranslate"><span class="pre">forge_alpc_request()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#epmapper">13.2. Epmapper</a><ul>
<li><a class="reference internal" href="#windows.rpc.epmapper.UnpackTower"><code class="docutils literal notranslate"><span class="pre">UnpackTower</span></code></a><ul>
<li><a class="reference internal" href="#windows.rpc.epmapper.UnpackTower.address"><code class="docutils literal notranslate"><span class="pre">address</span></code></a></li>
<li><a class="reference internal" href="#windows.rpc.epmapper.UnpackTower.endpoint"><code class="docutils literal notranslate"><span class="pre">endpoint</span></code></a></li>
<li><a class="reference internal" href="#windows.rpc.epmapper.UnpackTower.object"><code class="docutils literal notranslate"><span class="pre">object</span></code></a></li>
<li><a class="reference internal" href="#windows.rpc.epmapper.UnpackTower.protseq"><code class="docutils literal notranslate"><span class="pre">protseq</span></code></a></li>
<li><a class="reference internal" href="#windows.rpc.epmapper.UnpackTower.syntax"><code class="docutils literal notranslate"><span class="pre">syntax</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#find-alpc-endpoints">13.2.1. <code class="xref py py-func docutils literal notranslate"><span class="pre">find_alpc_endpoints()</span></code></a><ul>
<li><a class="reference internal" href="#windows.rpc.find_alpc_endpoints"><code class="docutils literal notranslate"><span class="pre">find_alpc_endpoints()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#find-alpc-endpoint-and-connect">13.2.2. <code class="xref py py-func docutils literal notranslate"><span class="pre">find_alpc_endpoint_and_connect()</span></code></a><ul>
<li><a class="reference internal" href="#windows.rpc.find_alpc_endpoint_and_connect"><code class="docutils literal notranslate"><span class="pre">find_alpc_endpoint_and_connect()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-windows.rpc.ndr">13.3. Ndr</a><ul>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrSID"><code class="docutils literal notranslate"><span class="pre">NdrSID</span></code></a><ul>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrSID.pack"><code class="docutils literal notranslate"><span class="pre">pack()</span></code></a></li>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrSID.unpack"><code class="docutils literal notranslate"><span class="pre">unpack()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrWString"><code class="docutils literal notranslate"><span class="pre">NdrWString</span></code></a><ul>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrWString.pack"><code class="docutils literal notranslate"><span class="pre">pack()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrCString"><code class="docutils literal notranslate"><span class="pre">NdrCString</span></code></a><ul>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrCString.pack"><code class="docutils literal notranslate"><span class="pre">pack()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrLong"><code class="docutils literal notranslate"><span class="pre">NdrLong</span></code></a></li>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrHyper"><code class="docutils literal notranslate"><span class="pre">NdrHyper</span></code></a></li>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrShort"><code class="docutils literal notranslate"><span class="pre">NdrShort</span></code></a></li>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrByte"><code class="docutils literal notranslate"><span class="pre">NdrByte</span></code></a></li>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrUniquePTR"><code class="docutils literal notranslate"><span class="pre">NdrUniquePTR</span></code></a></li>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrConformantArray"><code class="docutils literal notranslate"><span class="pre">NdrConformantArray</span></code></a></li>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrConformantVaryingArrays"><code class="docutils literal notranslate"><span class="pre">NdrConformantVaryingArrays</span></code></a></li>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrLongConformantArray"><code class="docutils literal notranslate"><span class="pre">NdrLongConformantArray</span></code></a></li>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrByteConformantArray"><code class="docutils literal notranslate"><span class="pre">NdrByteConformantArray</span></code></a></li>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrStructure"><code class="docutils literal notranslate"><span class="pre">NdrStructure</span></code></a><ul>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrStructure.pack"><code class="docutils literal notranslate"><span class="pre">pack()</span></code></a></li>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrStructure.unpack"><code class="docutils literal notranslate"><span class="pre">unpack()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrParameters"><code class="docutils literal notranslate"><span class="pre">NdrParameters</span></code></a></li>
<li><a class="reference internal" href="#ndr-stream">13.3.1. NDR STREAM</a><ul>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrStream"><code class="docutils literal notranslate"><span class="pre">NdrStream</span></code></a><ul>
<li><a class="reference internal" href="#windows.rpc.ndr.NdrStream.align"><code class="docutils literal notranslate"><span class="pre">align()</span></code></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="alpc.html"
title="previous chapter"><span class="section-number">12. </span><code class="docutils literal notranslate"><span class="pre">windows.alpc</span></code> Advanced Local Procedure Call</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="generated.html"
title="next chapter"><span class="section-number">14. </span><code class="docutils literal notranslate"><span class="pre">windows.generated_def</span></code> generated Windows defines and structures</a></p>
</div>
<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>
<search id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="generated.html" title="14. windows.generated_def generated Windows defines and structures"
>next</a> |</li>
<li class="right" >
<a href="alpc.html" title="12. windows.alpc Advanced Local Procedure Call"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 1.0.1 documentation</a> &#187;</li>
<li class="nav-item nav-item-this"><a href=""><span class="section-number">13. </span><code class="docutils literal notranslate"><span class="pre">windows.rpc</span></code> ALPC-based Windows RPC</a></li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2015-2020, Clement Rouault.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
</div>
</body>
</html>