mirror of
https://github.com/hakril/PythonForWindows
synced 2026-06-08 14:31:45 +00:00
Update generated def + documentation
This commit is contained in:
@@ -354,16 +354,20 @@ class WinErrorCtypesGenerator(DefineCtypesGenerator):
|
||||
|
||||
# TEST Documentation generator
|
||||
class DefineDocGenerator(NoTemplatedGenerator):
|
||||
DOCNAME = "WinDef"
|
||||
|
||||
def copy_template(self):
|
||||
self.emitline(".. currentmodule:: windows.generated_def")
|
||||
self.emitline("")
|
||||
self.emitline("Windef")
|
||||
self.emitline(self.DOCNAME)
|
||||
self.emitline("------")
|
||||
|
||||
def generate_for_file(self, file):
|
||||
for define in file.data:
|
||||
self.emitline(".. autodata:: {define.name}".format(define=define))
|
||||
|
||||
class WinErrorDocGenerator(DefineDocGenerator):
|
||||
DOCNAME = "WinError"
|
||||
|
||||
class NtStatusCtypesGenerator(CtypesGenerator):
|
||||
def generate_for_file(self, file):
|
||||
@@ -750,7 +754,7 @@ ntstatus_module_generator.generate()
|
||||
ntstatus_module_generator.generate_doc(from_here(r"..\docs\source\ntstatus_generated.rst"))
|
||||
|
||||
print("== Generating WinError ==")
|
||||
winerror_module_generator = ModuleGenerator(WINERROR_MODULE, DefinitionParsedFile, WinErrorCtypesGenerator, DefineDocGenerator, from_here(r"definitions\winerror.txt"))
|
||||
winerror_module_generator = ModuleGenerator(WINERROR_MODULE, DefinitionParsedFile, WinErrorCtypesGenerator, WinErrorDocGenerator, from_here(r"definitions\winerror.txt"))
|
||||
# Hardcoded template file (no dir for ntstatus) -- Need one dir ?
|
||||
winerror_module_generator.get_template_filename = lambda : from_here(r"definitions\winerror_template.py")
|
||||
winerror_module_generator.generate()
|
||||
|
||||
+7
-11
@@ -128,11 +128,6 @@
|
||||
<span class="p">]</span>
|
||||
<span class="n">_SetConsoleTitleW</span><span class="o">.</span><span class="n">restype</span> <span class="o">=</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">BOOL</span>
|
||||
|
||||
<span class="n">handles</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="n">STDOUT</span><span class="p">:</span> <span class="n">_GetStdHandle</span><span class="p">(</span><span class="n">STDOUT</span><span class="p">),</span>
|
||||
<span class="n">STDERR</span><span class="p">:</span> <span class="n">_GetStdHandle</span><span class="p">(</span><span class="n">STDERR</span><span class="p">),</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_winapi_test</span><span class="p">(</span><span class="n">handle</span><span class="p">):</span>
|
||||
<span class="n">csbi</span> <span class="o">=</span> <span class="n">CONSOLE_SCREEN_BUFFER_INFO</span><span class="p">()</span>
|
||||
<span class="n">success</span> <span class="o">=</span> <span class="n">_GetConsoleScreenBufferInfo</span><span class="p">(</span>
|
||||
@@ -140,17 +135,18 @@
|
||||
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="n">success</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">winapi_test</span><span class="p">():</span>
|
||||
<span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">_winapi_test</span><span class="p">(</span><span class="n">h</span><span class="p">)</span> <span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">handles</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
|
||||
<span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">_winapi_test</span><span class="p">(</span><span class="n">h</span><span class="p">)</span> <span class="k">for</span> <span class="n">h</span> <span class="ow">in</span>
|
||||
<span class="p">(</span><span class="n">_GetStdHandle</span><span class="p">(</span><span class="n">STDOUT</span><span class="p">),</span> <span class="n">_GetStdHandle</span><span class="p">(</span><span class="n">STDERR</span><span class="p">)))</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">GetConsoleScreenBufferInfo</span><span class="p">(</span><span class="n">stream_id</span><span class="o">=</span><span class="n">STDOUT</span><span class="p">):</span>
|
||||
<span class="n">handle</span> <span class="o">=</span> <span class="n">handles</span><span class="p">[</span><span class="n">stream_id</span><span class="p">]</span>
|
||||
<span class="n">handle</span> <span class="o">=</span> <span class="n">_GetStdHandle</span><span class="p">(</span><span class="n">stream_id</span><span class="p">)</span>
|
||||
<span class="n">csbi</span> <span class="o">=</span> <span class="n">CONSOLE_SCREEN_BUFFER_INFO</span><span class="p">()</span>
|
||||
<span class="n">success</span> <span class="o">=</span> <span class="n">_GetConsoleScreenBufferInfo</span><span class="p">(</span>
|
||||
<span class="n">handle</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">csbi</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">csbi</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">SetConsoleTextAttribute</span><span class="p">(</span><span class="n">stream_id</span><span class="p">,</span> <span class="n">attrs</span><span class="p">):</span>
|
||||
<span class="n">handle</span> <span class="o">=</span> <span class="n">handles</span><span class="p">[</span><span class="n">stream_id</span><span class="p">]</span>
|
||||
<span class="n">handle</span> <span class="o">=</span> <span class="n">_GetStdHandle</span><span class="p">(</span><span class="n">stream_id</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">_SetConsoleTextAttribute</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">attrs</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">SetConsoleCursorPosition</span><span class="p">(</span><span class="n">stream_id</span><span class="p">,</span> <span class="n">position</span><span class="p">,</span> <span class="n">adjust</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||||
@@ -168,11 +164,11 @@
|
||||
<span class="n">adjusted_position</span><span class="o">.</span><span class="n">Y</span> <span class="o">+=</span> <span class="n">sr</span><span class="o">.</span><span class="n">Top</span>
|
||||
<span class="n">adjusted_position</span><span class="o">.</span><span class="n">X</span> <span class="o">+=</span> <span class="n">sr</span><span class="o">.</span><span class="n">Left</span>
|
||||
<span class="c1"># Resume normal processing</span>
|
||||
<span class="n">handle</span> <span class="o">=</span> <span class="n">handles</span><span class="p">[</span><span class="n">stream_id</span><span class="p">]</span>
|
||||
<span class="n">handle</span> <span class="o">=</span> <span class="n">_GetStdHandle</span><span class="p">(</span><span class="n">stream_id</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">_SetConsoleCursorPosition</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">adjusted_position</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">FillConsoleOutputCharacter</span><span class="p">(</span><span class="n">stream_id</span><span class="p">,</span> <span class="n">char</span><span class="p">,</span> <span class="n">length</span><span class="p">,</span> <span class="n">start</span><span class="p">):</span>
|
||||
<span class="n">handle</span> <span class="o">=</span> <span class="n">handles</span><span class="p">[</span><span class="n">stream_id</span><span class="p">]</span>
|
||||
<span class="n">handle</span> <span class="o">=</span> <span class="n">_GetStdHandle</span><span class="p">(</span><span class="n">stream_id</span><span class="p">)</span>
|
||||
<span class="n">char</span> <span class="o">=</span> <span class="n">c_char</span><span class="p">(</span><span class="n">char</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
|
||||
<span class="n">length</span> <span class="o">=</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">DWORD</span><span class="p">(</span><span class="n">length</span><span class="p">)</span>
|
||||
<span class="n">num_written</span> <span class="o">=</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">DWORD</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
||||
@@ -183,7 +179,7 @@
|
||||
|
||||
<span class="k">def</span> <span class="nf">FillConsoleOutputAttribute</span><span class="p">(</span><span class="n">stream_id</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">length</span><span class="p">,</span> <span class="n">start</span><span class="p">):</span>
|
||||
<span class="sd">''' FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten )'''</span>
|
||||
<span class="n">handle</span> <span class="o">=</span> <span class="n">handles</span><span class="p">[</span><span class="n">stream_id</span><span class="p">]</span>
|
||||
<span class="n">handle</span> <span class="o">=</span> <span class="n">_GetStdHandle</span><span class="p">(</span><span class="n">stream_id</span><span class="p">)</span>
|
||||
<span class="n">attribute</span> <span class="o">=</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">WORD</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
|
||||
<span class="n">length</span> <span class="o">=</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">DWORD</span><span class="p">(</span><span class="n">length</span><span class="p">)</span>
|
||||
<span class="n">num_written</span> <span class="o">=</span> <span class="n">wintypes</span><span class="o">.</span><span class="n">DWORD</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
||||
|
||||
+16
-10
@@ -44,6 +44,7 @@
|
||||
<span class="kn">import</span> <span class="nn">windows</span>
|
||||
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
|
||||
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">generated_def</span> <span class="k">as</span> <span class="n">gdef</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.pycompat</span>
|
||||
|
||||
|
||||
<span class="c1">## For 64b python</span>
|
||||
@@ -60,7 +61,7 @@
|
||||
<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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">msg_or_size</span><span class="p">,</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">int_types</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">port_message_buffer_size</span> <span class="o">=</span> <span class="n">msg_or_size</span>
|
||||
<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>
|
||||
@@ -331,7 +332,7 @@
|
||||
<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="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="n">timeout</span><span class="o">=</span><span class="kc">None</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>
|
||||
@@ -340,15 +341,17 @@
|
||||
<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="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">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">anybuff</span><span class="p">):</span>
|
||||
<span class="n">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="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">alpc_message</span><span class="p">)</span> <span class="o">></span> <span class="mh">0x1000</span><span class="p">:</span>
|
||||
<span class="kn">import</span> <span class="nn">pdb</span><span class="p">;</span><span class="n">pdb</span><span class="o">.</span><span class="n">set_trace</span><span class="p">()</span>
|
||||
<span class="n">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="o">+</span> <span class="mh">0x200</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="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="n">timeout</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>
|
||||
@@ -358,7 +361,7 @@
|
||||
<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="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">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">anybuff</span><span class="p">):</span>
|
||||
<span class="n">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>
|
||||
@@ -385,7 +388,7 @@
|
||||
|
||||
<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="n">DEFAULT_MAX_MESSAGE_LENGTH</span> <span class="o">=</span> <span class="mh">0x9000</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">port_name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Init the :class:`AlpcClient` automatically connect to ``port_name`` using default values if given"""</span>
|
||||
@@ -435,7 +438,7 @@
|
||||
<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="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">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">anybuff</span><span class="p">):</span>
|
||||
<span class="n">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>
|
||||
@@ -471,7 +474,8 @@
|
||||
<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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_close_port</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">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>
|
||||
@@ -485,6 +489,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">port_name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">port_name</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">communication_port_list</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<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>
|
||||
|
||||
@@ -564,7 +569,8 @@
|
||||
<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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_close_port</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
|
||||
<span class="k">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>
|
||||
|
||||
|
||||
+54
-6
@@ -37,7 +37,8 @@
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for windows.com</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span> <span class="nn">struct</span>
|
||||
<span></span><span class="kn">import</span> <span class="nn">sys</span>
|
||||
<span class="kn">import</span> <span class="nn">struct</span>
|
||||
<span class="kn">import</span> <span class="nn">ctypes</span>
|
||||
<span class="kn">import</span> <span class="nn">functools</span>
|
||||
<span class="kn">from</span> <span class="nn">ctypes</span> <span class="k">import</span> <span class="n">HRESULT</span><span class="p">,</span> <span class="n">byref</span><span class="p">,</span> <span class="n">cast</span>
|
||||
@@ -51,6 +52,11 @@
|
||||
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="k">import</span> <span class="n">interfaces</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.generated_def.interfaces</span> <span class="k">import</span> <span class="n">generate_IID</span><span class="p">,</span> <span class="n">IID</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="k">import</span> <span class="n">int_types</span><span class="p">,</span> <span class="n">basestring</span>
|
||||
|
||||
<span class="c1"># We have windows.com.COMImplementation</span>
|
||||
<span class="c1"># So we need windows.com.COMInterface</span>
|
||||
<span class="n">COMInterface</span> <span class="o">=</span> <span class="n">interfaces</span><span class="o">.</span><span class="n">COMInterface</span>
|
||||
|
||||
<span class="c1"># Simple raw -> UUID</span>
|
||||
<span class="c1"># "-".join("{:02X}".format(c) for c in struct.unpack("<IHHHBBBBBB", x))</span>
|
||||
@@ -62,18 +68,54 @@
|
||||
<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">t</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span>
|
||||
<span class="k">if</span> <span class="n">t</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">t</span>
|
||||
<span class="k">return</span> <span class="n">t</span> <span class="o">&</span> <span class="mh">0xffffffff</span>
|
||||
<span class="k">return</span> <span class="n">initsecurity</span><span class="p">()</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">initsecurity</span><span class="p">():</span> <span class="c1"># Should take some parameters..</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CoInitializeSecurity</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">RPC_C_IMP_LEVEL_IMPERSONATE</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">Dispatch</span><span class="p">(</span><span class="n">interfaces</span><span class="o">.</span><span class="n">IDispatch</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">TypeInfoCount</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">count</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">UINT</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">GetTypeInfoCount</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">count</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">type_info</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">idx</span><span class="p">):</span>
|
||||
<span class="n">type_info</span> <span class="o">=</span> <span class="n">TypeInfo</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">GetTypeInfo</span><span class="p">(</span><span class="n">idx</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">type_info</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">type_info</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">TypeInfo</span><span class="p">(</span><span class="n">interfaces</span><span class="o">.</span><span class="n">ITypeInfo</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">idx</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">LPFUNCDESC</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">GetFuncDesc</span><span class="p">(</span><span class="n">idx</span><span class="p">,</span> <span class="n">res</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">attr</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">LPTYPEATTR</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">GetTypeAttr</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">memid</span><span class="p">):</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">UINT</span><span class="p">()</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span> <span class="o">*</span> <span class="mi">10</span><span class="p">)(</span><span class="o">*</span><span class="nb">tuple</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">()</span> <span class="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">10</span><span class="p">)))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">GetNames</span><span class="p">(</span><span class="n">memid</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">x</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="k">def</span> <span class="nf">docu</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</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">BSTR</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">GetDocumentation</span><span class="p">(</span><span class="nb">id</span><span class="p">,</span> <span class="n">res</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">return</span> <span class="n">res</span>
|
||||
|
||||
<div class="viewcode-block" id="create_instance"><a class="viewcode-back" href="../../com.html#windows.com.create_instance">[docs]</a><span class="k">def</span> <span class="nf">create_instance</span><span class="p">(</span><span class="n">clsiid</span><span class="p">,</span> <span class="n">targetinterface</span><span class="p">,</span> <span class="n">custom_iid</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">CLSCTX_INPROC_SERVER</span> <span class="o">|</span> <span class="n">CLSCTX_LOCAL_SERVER</span><span class="p">):</span>
|
||||
<span class="sd">"""A simple wrapper around ``CoCreateInstance <https://msdn.microsoft.com/en-us/library/windows/desktop/ms686615(v=vs.85).aspx>``"""</span>
|
||||
<span class="k">if</span> <span class="n">custom_iid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">custom_iid</span> <span class="o">=</span> <span class="n">targetinterface</span><span class="o">.</span><span class="n">IID</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CoCreateInstance</span><span class="p">(</span><span class="n">byref</span><span class="p">(</span><span class="n">clsiid</span><span class="p">),</span> <span class="kc">None</span><span class="p">,</span> <span class="n">context</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">custom_iid</span><span class="p">),</span> <span class="n">byref</span><span class="p">(</span><span class="n">targetinterface</span><span class="p">))</span></div>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">clsiid</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||||
<span class="n">clsiid</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">clsiid</span><span class="p">)</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">CoCreateInstance</span><span class="p">(</span><span class="n">byref</span><span class="p">(</span><span class="n">clsiid</span><span class="p">),</span> <span class="kc">None</span><span class="p">,</span> <span class="n">context</span><span class="p">,</span> <span class="n">byref</span><span class="p">(</span><span class="n">custom_iid</span><span class="p">),</span> <span class="n">byref</span><span class="p">(</span><span class="n">targetinterface</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">targetinterface</span></div>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">resolve_progid</span><span class="p">(</span><span class="n">progid</span><span class="p">):</span>
|
||||
@@ -142,11 +184,11 @@
|
||||
|
||||
<span class="k">def</span> <span class="nf">check_type_i4</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
|
||||
<span class="c1"># 31 ? as we may want to keep sign :)</span>
|
||||
<span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</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="ow">and</span> <span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">bit_length</span><span class="p">()</span> <span class="o"><=</span> <span class="mi">32</span>
|
||||
<span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">int_types</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">bit_length</span><span class="p">()</span> <span class="o"><=</span> <span class="mi">32</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">check_type_i8</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
|
||||
<span class="c1"># 63 ? as we may want to keep sign :)</span>
|
||||
<span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</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="ow">and</span> <span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">bit_length</span><span class="p">()</span> <span class="o"><=</span> <span class="mi">64</span>
|
||||
<span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">int_types</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">bit_length</span><span class="p">()</span> <span class="o"><=</span> <span class="mi">64</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">check_type_bstr</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">basestring</span><span class="p">)</span>
|
||||
@@ -226,6 +268,12 @@
|
||||
<span class="n">attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUICK_CHECK_TYPE</span><span class="p">[</span><span class="n">rawvt</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">attr</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">if</span> <span class="n">attr</span> <span class="o">==</span> <span class="s2">"punkVal"</span><span class="p">:</span>
|
||||
<span class="c1"># Quick hack for COM interface type</span>
|
||||
<span class="c1"># Do something clean with CHECK_TYPE ?</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IUnknown</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">punkVal</span><span class="p">)</span>
|
||||
<span class="n">x</span><span class="o">.</span><span class="n">AddRef</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">x</span>
|
||||
<span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">guess_type_and_set_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
||||
@@ -332,7 +380,7 @@
|
||||
|
||||
<div class="viewcode-block" id="COMImplementation.QueryInterface"><a class="viewcode-back" href="../../com.html#windows.com.COMImplementation.QueryInterface">[docs]</a> <span class="k">def</span> <span class="nf">QueryInterface</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">piid</span><span class="p">,</span> <span class="n">result</span><span class="p">):</span>
|
||||
<span class="sd">"""Default ``QueryInterface`` implementation that returns ``self`` if piid is the implemented interface"""</span>
|
||||
<span class="k">if</span> <span class="n">piid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="p">(</span><span class="n">IUnknown</span><span class="o">.</span><span class="n">IID</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">IMPLEMENT</span><span class="o">.</span><span class="n">IID</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">piid</span><span class="p">[</span><span class="mi">0</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">IUnknown</span><span class="o">.</span><span class="n">IID</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">IMPLEMENT</span><span class="o">.</span><span class="n">IID</span><span class="p">):</span>
|
||||
<span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">this</span>
|
||||
<span class="k">return</span> <span class="mi">1</span>
|
||||
<span class="k">return</span> <span class="n">E_NOINTERFACE</span></div>
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
<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>
|
||||
<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!r}</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>
|
||||
|
||||
|
||||
<span class="c1"># https://msdn.microsoft.com/en-us/library/windows/desktop/aa382037(v=vs.85).aspx</span>
|
||||
@@ -213,7 +213,10 @@
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">&</span> <span class="mh">0xffffffff</span> <span class="o">==</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">raise</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="k">return</span> <span class="n">Certificate</span><span class="o">.</span><span class="n">from_pointer</span><span class="p">(</span><span class="n">rawcertcontext</span><span class="p">)</span></div></div>
|
||||
<span class="k">return</span> <span class="n">Certificate</span><span class="o">.</span><span class="n">from_pointer</span><span class="p">(</span><span class="n">rawcertcontext</span><span class="p">)</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CertCloseStore</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="c1"># PKCS12_NO_PERSIST_KEY -> do not save it in a key container on disk</span>
|
||||
@@ -228,6 +231,7 @@
|
||||
<span class="c1"># By forcing PKCS12_ALWAYS_CNG_KSP we remove this as the key are directly linked to the correct CNG_KSP in the CertStore</span>
|
||||
<span class="c1"># Look like it's based on this part of the PFX:</span>
|
||||
<span class="c1"># Microsoft CSP Name: Microsoft Enhanced Cryptographic Provider v1.0</span>
|
||||
<span class="c1"># BUT this will not allow to decrypt RSA_RC4 ?</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="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PKCS12_ALWAYS_CNG_KSP</span><span class="p">):</span>
|
||||
<span class="sd">"""Import the file ``pfx`` with the ``password``.</span>
|
||||
@@ -238,7 +242,7 @@
|
||||
|
||||
<span class="sd"> :return: :class:`CertificateStore`</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="p">(</span><span class="n">basestring</span><span class="p">,</span> <span class="nb">bytearray</span><span class="p">)):</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">pfx</span><span class="p">,</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">anybuff</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">pfx</span><span class="p">,</span> <span class="nb">bytearray</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">CertificateStore</span><span class="p">(</span><span class="n">cert_store</span><span class="p">)</span></div>
|
||||
@@ -522,6 +526,8 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="c1"># class CertficateChain(object):</span>
|
||||
<span class="c1"># def __init__(self, pc_chain_context):</span>
|
||||
<span class="c1"># self.chain = pc_chain_context[0]</span>
|
||||
|
||||
+30
-1
@@ -139,7 +139,36 @@
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">recipients</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""TODO: DOC"""</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">get_recipient_data</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="bp">self</span><span class="o">.</span><span class="n">nb_recipient</span><span class="p">)]</span></div>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">get_recipient_data</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="bp">self</span><span class="o">.</span><span class="n">nb_recipient</span><span class="p">)]</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">content</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_param</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CMSG_CONTENT_PARAM</span><span class="p">)[:]</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">content_type</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="bp">self</span><span class="o">.</span><span class="n">get_param</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">CMSG_INNER_CONTENT_TYPE_PARAM</span><span class="p">)</span>
|
||||
<span class="k">assert</span> <span class="n">data</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span><span class="p">,</span> <span class="s2">"CMSG_INNER_CONTENT_TYPE_PARAM not NULL TERMINATED"</span>
|
||||
<span class="k">return</span> <span class="n">data</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">blob</span><span class="p">,</span> <span class="n">final</span><span class="p">):</span>
|
||||
<span class="c1"># Test isinstance string ?</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">blob</span><span class="p">,</span> <span class="p">(</span><span class="n">basestring</span><span class="p">,</span> <span class="nb">bytearray</span><span class="p">)):</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">BUFFER</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">BYTE</span><span class="p">)</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">blob</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CryptMsgUpdate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">buffer</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">blob</span><span class="p">),</span> <span class="n">final</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CryptMsgUpdate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">blob</span><span class="o">.</span><span class="n">pbData</span><span class="p">,</span> <span class="n">blob</span><span class="o">.</span><span class="n">cbData</span><span class="p">,</span> <span class="n">final</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># constructor</span>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">from_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="n">hmsg</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CryptMsgOpenToDecode</span><span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">crypto</span><span class="o">.</span><span class="n">DEFAULT_ENCODING</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="n">newmsg</span> <span class="o">=</span> <span class="n">CryptMessage</span><span class="p">(</span><span class="n">hmsg</span><span class="p">)</span>
|
||||
<span class="n">newmsg</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">final</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">newmsg</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CryptMsgClose</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
<span class="sd"> :return: :class:`bytearray`: The encrypted message</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">alg_ident</span> <span class="o">=</span> <span class="n">CRYPT_ALGORITHM_IDENTIFIER</span><span class="p">()</span>
|
||||
<span class="n">alg_ident</span><span class="o">.</span><span class="n">pszObjId</span> <span class="o">=</span> <span class="n">algo</span>
|
||||
<span class="n">alg_ident</span><span class="o">.</span><span class="n">pszObjId</span> <span class="o">=</span> <span class="n">algo</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="c1"># We want to have automatique translation of Certificate -> PCERT_CONTEXT</span>
|
||||
<span class="c1"># In order to simple create the 'PCERT_CONTEXT[] certs'</span>
|
||||
<span class="c1"># For that we need a tuple of X * 1-item-tuple</span>
|
||||
@@ -153,9 +153,9 @@
|
||||
<span class="n">dcryptsize</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">CryptDecryptMessage</span><span class="p">(</span><span class="n">dparam</span><span class="p">,</span> <span class="n">buf</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">buf</span><span class="p">),</span> <span class="kc">None</span><span class="p">,</span> <span class="n">dcryptsize</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="c1">#Decrypt the msg</span>
|
||||
<span class="n">dcryptbuff</span> <span class="o">=</span> <span class="p">(</span><span class="n">BYTE</span> <span class="o">*</span> <span class="n">dcryptsize</span><span class="o">.</span><span class="n">value</span><span class="p">)()</span>
|
||||
<span class="n">dcryptbuff</span> <span class="o">=</span> <span class="p">(</span><span class="n">BYTE</span> <span class="o">*</span> <span class="p">(</span><span class="n">dcryptsize</span><span class="o">.</span><span class="n">value</span> <span class="o">+</span> <span class="mh">0x1000</span><span class="p">))()</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">CryptDecryptMessage</span><span class="p">(</span><span class="n">dparam</span><span class="p">,</span> <span class="n">buf</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">buf</span><span class="p">),</span> <span class="n">dcryptbuff</span><span class="p">,</span> <span class="n">dcryptsize</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="nb">bytearray</span><span class="p">(</span><span class="n">dcryptbuff</span><span class="p">[:</span><span class="n">dcryptsize</span><span class="o">.</span><span class="n">value</span><span class="p">]))</span></div>
|
||||
<span class="k">return</span> <span class="nb">bytes</span><span class="p">(</span><span class="nb">bytearray</span><span class="p">(</span><span class="n">dcryptbuff</span><span class="p">[:</span><span class="n">dcryptsize</span><span class="o">.</span><span class="n">value</span><span class="p">]))</span></div>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
|
||||
+17
-10
@@ -147,11 +147,17 @@
|
||||
<span class="n">t</span> <span class="o">=</span> <span class="n">rt</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">cproc</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">t</span> <span class="o">=</span> <span class="n">rt</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="s2">"contents"</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">t</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="c1"># Will fail in py3..</span>
|
||||
<span class="n">content</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">content</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">contents</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="c1"># contents will fail on basic type</span>
|
||||
<span class="c1"># Not really an expected behavior</span>
|
||||
<span class="c1"># But it works for now.. (and since a while)</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="k">if</span> <span class="n">content</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">t</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="n">res</span><span class="p">[</span><span class="n">name</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="n">t</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
|
||||
@@ -251,16 +257,17 @@
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">initial_breakpoint</span><span class="o">.</span><span class="n">ret_trigger</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="k">class</span> <span class="nc">FunctionCallBP</span><span class="p">(</span><span class="n">Breakpoint</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">break_on_ret</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dbg</span><span class="p">,</span> <span class="n">exception</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="FunctionCallBP"><a class="viewcode-back" href="../../../debug.html#windows.debug.FunctionCallBP">[docs]</a><span class="k">class</span> <span class="nc">FunctionCallBP</span><span class="p">(</span><span class="n">Breakpoint</span><span class="p">):</span>
|
||||
<span class="sd">"""A Breakpoint that allow to trigger at the return of a function"""</span>
|
||||
<div class="viewcode-block" id="FunctionCallBP.break_on_ret"><a class="viewcode-back" href="../../../debug.html#windows.debug.FunctionCallBP.break_on_ret">[docs]</a> <span class="k">def</span> <span class="nf">break_on_ret</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dbg</span><span class="p">,</span> <span class="n">exception</span><span class="p">):</span>
|
||||
<span class="sd">"""Setup a breakpoint at the return address of the function, this breakpoint will call :func:`ret_trigger`"""</span>
|
||||
<span class="n">cproc</span> <span class="o">=</span> <span class="n">dbg</span><span class="o">.</span><span class="n">current_process</span>
|
||||
<span class="n">return_addr</span> <span class="o">=</span> <span class="n">dbg</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">read_ptr</span><span class="p">(</span><span class="n">dbg</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">sp</span><span class="p">)</span>
|
||||
<span class="n">dbg</span><span class="o">.</span><span class="n">add_bp</span><span class="p">(</span><span class="n">FunctionRetBP</span><span class="p">(</span><span class="n">return_addr</span><span class="p">,</span> <span class="bp">self</span><span class="p">),</span> <span class="n">target</span><span class="o">=</span><span class="n">dbg</span><span class="o">.</span><span class="n">current_process</span><span class="p">)</span>
|
||||
<span class="n">dbg</span><span class="o">.</span><span class="n">add_bp</span><span class="p">(</span><span class="n">FunctionRetBP</span><span class="p">(</span><span class="n">return_addr</span><span class="p">,</span> <span class="bp">self</span><span class="p">),</span> <span class="n">target</span><span class="o">=</span><span class="n">dbg</span><span class="o">.</span><span class="n">current_process</span><span class="p">)</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">ret_trigger</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dbg</span><span class="p">,</span> <span class="n">exception</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="FunctionCallBP.ret_trigger"><a class="viewcode-back" href="../../../debug.html#windows.debug.FunctionCallBP.ret_trigger">[docs]</a> <span class="k">def</span> <span class="nf">ret_trigger</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dbg</span><span class="p">,</span> <span class="n">exception</span><span class="p">):</span>
|
||||
<span class="sd">"""Called at the return of the function if :func:`break_on_ret` was called"""</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"ret_trigger"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"ret_trigger"</span><span class="p">)</span></div></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="FunctionBP"><a class="viewcode-back" href="../../../debug.html#windows.debug.FunctionBP">[docs]</a><span class="k">class</span> <span class="nc">FunctionBP</span><span class="p">(</span><span class="n">FunctionCallBP</span><span class="p">,</span> <span class="n">FunctionParamDumpBP</span><span class="p">):</span>
|
||||
|
||||
+63
-11
@@ -42,7 +42,9 @@
|
||||
<span class="kn">from</span> <span class="nn">contextlib</span> <span class="k">import</span> <span class="n">contextmanager</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">windows</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.winobject.exception</span> <span class="k">as</span> <span class="nn">winexception</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>
|
||||
|
||||
@@ -56,9 +58,13 @@
|
||||
<span class="c1">#from windows.syswow64 import CS_32bits</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.winobject.exception</span> <span class="k">import</span> <span class="n">VectoredException</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="k">import</span> <span class="n">basestring</span>
|
||||
|
||||
|
||||
<span class="n">PAGE_SIZE</span> <span class="o">=</span> <span class="mh">0x1000</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">DebuggerError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
|
||||
<span class="k">pass</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">DEBUG_EVENT</span><span class="p">(</span><span class="n">DEBUG_EVENT</span><span class="p">):</span>
|
||||
<span class="n">KNOWN_EVENT_CODE</span> <span class="o">=</span> <span class="nb">dict</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="p">[</span><span class="n">EXCEPTION_DEBUG_EVENT</span><span class="p">,</span>
|
||||
@@ -110,7 +116,8 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_watched_pages</span> <span class="o">=</span> <span class="p">{}</span><span class="c1"># Dict [page_modif] -> [mem bp on the page]</span>
|
||||
|
||||
<span class="c1"># [start] -> (size, current_proctection, original_prot)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_virtual_protected_memory</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1"># List of memory-range modified by a MemBP</span></div>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_virtual_protected_memory</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1"># List of memory-range modified by a MemBP</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_current_debug_event</span> <span class="o">=</span> <span class="kc">None</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="Debugger.attach"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.attach">[docs]</a> <span class="nd">@classmethod</span>
|
||||
@@ -138,7 +145,7 @@
|
||||
<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="c1"># Remove ref to process -> GC -> CloseHandle -> process is destroyed</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">tpid</span><span class="p">)</span>
|
||||
<span class="k">return</span>
|
||||
<span class="k">for</span> <span class="n">proc</span> <span class="ow">in</span> <span class="n">targets</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">proc</span> <span class="ow">in</span> <span class="nb">list</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">detach</span><span class="p">(</span><span class="n">proc</span><span class="p">)</span>
|
||||
<span class="k">del</span> <span class="n">targets</span>
|
||||
<span class="k">return</span>
|
||||
@@ -146,7 +153,7 @@
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Detach accept only WinProcess"</span><span class="p">)</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">disable_all_memory_breakpoints</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">bp</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">breakpoints</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="o">.</span><span class="n">values</span><span class="p">():</span>
|
||||
<span class="k">for</span> <span class="n">bp</span> <span class="ow">in</span> <span class="nb">list</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">target</span><span class="o">.</span><span class="n">pid</span><span class="p">]</span><span class="o">.</span><span class="n">values</span><span class="p">()):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">bp</span><span class="o">.</span><span class="n">apply_to_target</span><span class="p">(</span><span class="n">target</span><span class="p">):</span>
|
||||
<span class="n">target_threads</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">target</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="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">threads</span><span class="p">]</span>
|
||||
<span class="n">bp_threads</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
@@ -171,8 +178,8 @@
|
||||
<span class="k">del</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="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_module_by_process</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">if</span> <span class="n">target</span> <span class="ow">is</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">_finish_debug_event</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">REMOVE_ME_debug_event</span><span class="p">,</span> <span class="n">DBG_CONTINUE</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">target</span> <span class="ow">is</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_process</span><span class="p">:</span> <span class="c1"># Bug if CTRL+C and current_process changed ?</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_finish_debug_event</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current_debug_event</span><span class="p">,</span> <span class="n">DBG_CONTINUE</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="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>
|
||||
|
||||
@@ -209,19 +216,43 @@
|
||||
|
||||
<span class="k">def</span> <span class="nf">_debug_event_generator</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
|
||||
<span class="n">debug_event</span> <span class="o">=</span> <span class="n">DEBUG_EVENT</span><span class="p">()</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">WaitForDebugEvent</span><span class="p">(</span><span class="n">debug_event</span><span class="p">)</span>
|
||||
<span class="n">debug_event</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DEBUG_EVENT</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">WaitForDebugEvent</span><span class="p">(</span><span class="n">debug_event</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">KeyboardInterrupt</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="c1"># So we will go out of the loop because of a Ctrl+c</span>
|
||||
<span class="c1"># BP trigger will not be called.</span>
|
||||
<span class="c1"># So AT LEAST quit loop with a coherent context</span>
|
||||
<span class="c1"># Fix thread PC if we just triggered a BP</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="n">debug_event</span><span class="o">.</span><span class="n">dwDebugEventCode</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EXCEPTION_DEBUG_EVENT</span> <span class="ow">and</span>
|
||||
<span class="n">debug_event</span><span class="o">.</span><span class="n">u</span><span class="o">.</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="p">[</span><span class="n">gdef</span><span class="o">.</span><span class="n">EXCEPTION_BREAKPOINT</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">STATUS_WX86_BREAKPOINT</span><span class="p">]):</span>
|
||||
<span class="c1"># This is a breakpoint: One of ours ?</span>
|
||||
<span class="n">bp_addr</span> <span class="o">=</span> <span class="n">debug_event</span><span class="o">.</span><span class="n">u</span><span class="o">.</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="k">if</span> <span class="n">bp_addr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">breakpoints</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="c1"># Leave the thread in a coherent state for detach</span>
|
||||
<span class="c1"># Should it be done in detach ?</span>
|
||||
<span class="c1"># And just stock the "Interrupted debug_event" here ?</span>
|
||||
<span class="n">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>
|
||||
<span class="n">ctx</span> <span class="o">=</span> <span class="n">thread</span><span class="o">.</span><span class="n">context</span>
|
||||
<span class="n">ctx</span><span class="o">.</span><span class="n">pc</span> <span class="o">-=</span> <span class="mi">1</span>
|
||||
<span class="n">thread</span><span class="o">.</span><span class="n">set_context</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span>
|
||||
<span class="k">raise</span>
|
||||
<span class="k">finally</span><span class="p">:</span> <span class="c1"># If user Ctrl+c -> we could raise just at the return of WaitForDebugEvent</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_current_debug_event</span> <span class="o">=</span> <span class="n">debug_event</span>
|
||||
<span class="k">yield</span> <span class="n">debug_event</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_finish_debug_event</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">action</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="n">windef</span><span class="o">.</span><span class="n">DBG_CONTINUE</span><span class="p">,</span> <span class="n">windef</span><span class="o">.</span><span class="n">DBG_EXCEPTION_NOT_HANDLED</span><span class="p">]:</span>
|
||||
<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="bp">self</span><span class="o">.</span><span class="n">_current_debug_event</span> <span class="o">=</span> <span class="kc">None</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="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="o">.</span><span class="n">lower</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">exe_name</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">".exe"</span><span class="p">):</span>
|
||||
<span class="n">exe_name</span> <span class="o">=</span> <span class="n">exe_name</span><span class="p">[:</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="s2">".exe"</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>
|
||||
@@ -265,7 +296,13 @@
|
||||
<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 <</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">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="n">target_addr</span> <span class="o">=</span> <span class="n">exports</span><span class="p">[</span><span class="n">api</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">target_addr</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||||
<span class="n">target_string</span> <span class="o">=</span> <span class="n">target_addr</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"."</span><span class="p">,</span> <span class="s2">"!"</span><span class="p">)</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"<</span><span class="si">{0}</span><span class="s2">> is export proxy to <</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">addr</span><span class="p">,</span> <span class="n">target_string</span><span class="p">),</span> <span class="s2">"DBG"</span><span class="p">)</span>
|
||||
<span class="c1"># Possible infinite loop ?</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resolve</span><span class="p">(</span><span class="n">target_string</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">target_addr</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">add_pending_breakpoint</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="bp">self</span><span class="o">.</span><span class="n">_pending_breakpoints_new</span><span class="p">[</span><span class="n">target</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">bp</span><span class="p">)</span>
|
||||
@@ -299,6 +336,9 @@
|
||||
<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="c1"># raise DebuggerError("Could not set breakpoint {0} at <{1}>".format(bp, bp.addr))</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="k">return</span> <span class="kc">False</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"Setting soft-BP at <</span><span class="si">{0:#x}</span><span class="s2">> in <</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">addr</span><span class="p">,</span> <span class="n">target</span><span class="p">),</span> <span class="s2">"DBG"</span><span class="p">)</span>
|
||||
@@ -835,6 +875,9 @@
|
||||
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_breakpoint_to_reput</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">tid</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="n">retvalue</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_internal_on_load_dll</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">load_dll</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_handle_load_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 LOAD_DLL_DEBUG_EVENT"""</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>
|
||||
@@ -849,6 +892,7 @@
|
||||
<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">_internal_on_load_dll</span><span class="p">(</span><span class="n">load_dll</span><span class="p">)</span> <span class="c1"># Allow hook for symbol-debugger</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_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">try</span><span class="p">:</span>
|
||||
@@ -882,7 +926,6 @@
|
||||
<div class="viewcode-block" id="Debugger.loop"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.loop">[docs]</a> <span class="k">def</span> <span class="nf">loop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Debugging loop: handle event / dispatch to breakpoint. Returns when all targets are dead/detached"""</span>
|
||||
<span class="k">for</span> <span class="n">debug_event</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_debug_event_generator</span><span class="p">():</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">REMOVE_ME_debug_event</span> <span class="o">=</span> <span class="n">debug_event</span>
|
||||
<span class="n">dbg_continue_flag</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dispatch_debug_event</span><span class="p">(</span><span class="n">debug_event</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">dbg_continue_flag</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">dbg_continue_flag</span> <span class="o">=</span> <span class="n">DBG_CONTINUE</span>
|
||||
@@ -920,7 +963,7 @@
|
||||
<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="kc">None</span><span class="p">)</span>
|
||||
<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="ow">not</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</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="nb">list</span><span class="p">(</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="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="c1"># else:</span>
|
||||
@@ -1031,6 +1074,15 @@
|
||||
<span class="k">return</span> <span class="mi">32</span>
|
||||
<span class="k">return</span> <span class="mi">64</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Debugger.kill_on_exit"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.kill_on_exit">[docs]</a> <span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">kill_on_exit</span><span class="p">(</span><span class="n">choice</span><span class="p">):</span>
|
||||
<span class="sd">"""If set to True(default in Windows) will kill all attached process on thread exit.</span>
|
||||
<span class="sd"> Otherwise, the thread detaches from all processes being debugged on exit.</span>
|
||||
|
||||
<span class="sd"> See: https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-debugsetprocesskillonexit</span>
|
||||
<span class="sd"> """</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">DebugSetProcessKillOnExit</span><span class="p">(</span><span class="n">choice</span><span class="p">)</span></div>
|
||||
|
||||
<span class="c1"># Public callback</span>
|
||||
<div class="viewcode-block" id="Debugger.on_setup"><a class="viewcode-back" href="../../../debug.html#windows.debug.Debugger.on_setup">[docs]</a> <span class="k">def</span> <span class="nf">on_setup</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Called on the first breakpoint event occuring in the debugger.</span>
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
<h1>Source code for windows.generated_def.flag</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span> <span class="nn">sys</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="o">.</span><span class="n">major</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="o">.</span><span class="n">major</span> <span class="o">>=</span> <span class="mi">3</span><span class="p">:</span>
|
||||
<span class="n">long</span> <span class="o">=</span> <span class="nb">int</span>
|
||||
|
||||
|
||||
@@ -53,7 +53,12 @@
|
||||
<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">(</span><span class="si">{1:#x}</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="bp">self</span><span class="p">)</span>
|
||||
|
||||
<span class="fm">__str__</span> <span class="o">=</span> <span class="fm">__repr__</span>
|
||||
<span class="c1"># Custom __str__ removed for multiple reason</span>
|
||||
<span class="c1"># Main one -> it breaks the json encoding of structure with flags :)</span>
|
||||
<span class="c1"># Moving to a new politic -> if people want the name in a string use {x!r}</span>
|
||||
<span class="c1"># The __str__ of security descriptor & guid will change soon as well :)</span>
|
||||
|
||||
<span class="c1"># __str__ = __repr__</span>
|
||||
|
||||
<span class="c1"># Fix pickling with protocol 2</span>
|
||||
<span class="k">def</span> <span class="nf">__getnewargs__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
|
||||
|
||||
+7779
-4907
File diff suppressed because one or more lines are too long
-9
@@ -90,7 +90,6 @@
|
||||
|
||||
<div class="viewcode-block" id="IATHook"><a class="viewcode-back" href="../../iat_hook.html#windows.hooks.IATHook">[docs]</a><span class="k">class</span> <span class="nc">IATHook</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""Look at my hook <3"""</span>
|
||||
<span class="c1"># yolo = []</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">IAT_entry</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">types</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">types</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
@@ -107,7 +106,6 @@
|
||||
<span class="c1"># self.stub_addr = ctypes.cast(stub, PVOID) # Same problem as keep stub... (GC..)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">stub_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="bp">self</span><span class="o">.</span><span class="n">stub</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="c1"># Same problem as keep stub... (GC..)</span>
|
||||
<span class="c1"># IAT_entry.stub = stub</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">stub_addr</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">realfunction</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">WINFUNCTYPE</span><span class="p">(</span><span class="o">*</span><span class="n">types</span><span class="p">)(</span><span class="n">IAT_entry</span><span class="o">.</span><span class="n">nonhookvalue</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">is_enable</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
|
||||
@@ -123,7 +121,6 @@
|
||||
<div class="viewcode-block" id="IATHook.enable"><a class="viewcode-back" href="../../iat_hook.html#windows.hooks.IATHook.enable">[docs]</a> <span class="k">def</span> <span class="nf">enable</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Enable the IAT hook: you MUST keep a reference to the IATHook while the hook is enabled"""</span>
|
||||
<span class="k">with</span> <span class="n">utils</span><span class="o">.</span><span class="n">VirtualProtected</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">entry</span><span class="o">.</span><span class="n">addr</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">PVOID</span><span class="p">),</span> <span class="n">PAGE_EXECUTE_READWRITE</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">stub_addr</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">entry</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">stub_addr</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">is_enable</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">entry</span><span class="o">.</span><span class="n">enabled</span> <span class="o">=</span> <span class="kc">True</span></div>
|
||||
@@ -151,12 +148,6 @@
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">realfunction</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">callback</span><span class="p">(</span><span class="o">*</span><span class="n">adapted_args</span><span class="p">,</span> <span class="n">real_function</span><span class="o">=</span><span class="n">real_function</span><span class="p">)</span></div>
|
||||
|
||||
<span class="c1"># Use this tricks to prevent garbage collection of hook ?</span>
|
||||
<span class="c1"># That's dirty..</span>
|
||||
<span class="c1"># def __del__(self):</span>
|
||||
<span class="c1"># print("HAHAHA {0}".format(self.is_enable))</span>
|
||||
<span class="c1"># print("HELLO")</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>
|
||||
|
||||
@@ -37,9 +37,18 @@
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for windows.native_exec.simple_x86</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span> <span class="nn">collections</span>
|
||||
<span></span><span class="kn">import</span> <span class="nn">sys</span>
|
||||
<span class="kn">import</span> <span class="nn">collections</span>
|
||||
<span class="kn">import</span> <span class="nn">struct</span>
|
||||
<span class="kn">import</span> <span class="nn">binascii</span>
|
||||
|
||||
<span class="c1"># py3</span>
|
||||
<span class="n">is_py3</span> <span class="o">=</span> <span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="o">.</span><span class="n">major</span> <span class="o">>=</span> <span class="mi">3</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">is_py3</span><span class="p">:</span>
|
||||
<span class="n">basestring</span> <span class="o">=</span> <span class="nb">str</span>
|
||||
<span class="n">int_types</span> <span class="o">=</span> <span class="nb">int</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">int_types</span> <span class="o">=</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">long</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">BitArray</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">bits</span><span class="p">):</span>
|
||||
@@ -111,9 +120,15 @@
|
||||
<span class="k">def</span> <span class="nf">__add__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)(</span><span class="n">other</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_code_py3</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">bytes</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">PREFIX_VALUE</span><span class="p">])</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">get_code</span><span class="p">()</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_code</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">chr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PREFIX_VALUE</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">get_code</span><span class="p">()</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">is_py3</span><span class="p">:</span>
|
||||
<span class="n">get_code</span> <span class="o">=</span> <span class="n">get_code_py3</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">create_prefix</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
||||
<span class="n">prefix_type</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">name</span> <span class="o">+</span> <span class="s2">"Type"</span><span class="p">,</span> <span class="p">(</span><span class="n">Prefix</span><span class="p">,),</span> <span class="p">{</span><span class="s1">'PREFIX_VALUE'</span><span class="p">:</span> <span class="n">value</span><span class="p">})</span>
|
||||
@@ -139,6 +154,15 @@
|
||||
<span class="n">x86_segment_selectors</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'CS'</span><span class="p">:</span> <span class="n">CSPrefix</span><span class="p">,</span> <span class="s1">'DS'</span><span class="p">:</span> <span class="n">DSPrefix</span><span class="p">,</span> <span class="s1">'ES'</span><span class="p">:</span> <span class="n">ESPrefix</span><span class="p">,</span> <span class="s1">'SS'</span><span class="p">:</span> <span class="n">SSPrefix</span><span class="p">,</span>
|
||||
<span class="s1">'FS'</span><span class="p">:</span> <span class="n">FSPrefix</span><span class="p">,</span> <span class="s1">'GS'</span><span class="p">:</span> <span class="n">GSPrefix</span><span class="p">}</span>
|
||||
|
||||
<span class="c1"># Man intel -> Sreg (Vol 2.a 3-6)</span>
|
||||
<span class="n">x86_segment_selectors_number</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s2">"ES"</span><span class="p">:</span> <span class="s2">"000"</span><span class="p">,</span>
|
||||
<span class="s2">"CS"</span><span class="p">:</span> <span class="s2">"001"</span><span class="p">,</span>
|
||||
<span class="s2">"SS"</span><span class="p">:</span> <span class="s2">"010"</span><span class="p">,</span>
|
||||
<span class="s2">"DS"</span><span class="p">:</span> <span class="s2">"011"</span><span class="p">,</span>
|
||||
<span class="s2">"FS"</span><span class="p">:</span> <span class="s2">"100"</span><span class="p">,</span>
|
||||
<span class="s2">"GS"</span><span class="p">:</span> <span class="s2">"101"</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">X86</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="nd">@staticmethod</span>
|
||||
@@ -148,6 +172,13 @@
|
||||
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span> <span class="c1"># Not a string</span>
|
||||
<span class="k">return</span> <span class="kc">False</span>
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">is_seg_reg</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">x86_segment_selectors_number</span>
|
||||
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">False</span>
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">reg_size</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">x86_regs</span><span class="p">:</span>
|
||||
@@ -411,6 +442,9 @@
|
||||
<span class="k">return</span> <span class="p">(</span><span class="n">sizess</span> <span class="o">+</span> <span class="n">sizeabs</span><span class="p">,</span> <span class="n">dataabs</span> <span class="o">+</span> <span class="n">datass</span><span class="p">)</span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">ModRM</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sub_modrm</span><span class="p">,</span> <span class="n">accept_reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">has_direction_bit</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">accept_reverse</span> <span class="o">=</span> <span class="n">accept_reverse</span>
|
||||
@@ -443,6 +477,7 @@
|
||||
<span class="k">def</span> <span class="nf">match</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">X86</span><span class="o">.</span><span class="n">is_reg</span><span class="p">(</span><span class="n">arg1</span><span class="p">)</span> <span class="ow">and</span> <span class="n">X86</span><span class="o">.</span><span class="n">is_reg</span><span class="p">(</span><span class="n">arg2</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">,</span> <span class="nb">reversed</span><span class="p">,</span> <span class="n">instr_state</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">mod</span> <span class="o">=</span> <span class="n">BitArray</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="s2">"11"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">X86</span><span class="o">.</span><span class="n">reg_size</span><span class="p">(</span><span class="n">arg1</span><span class="p">)</span> <span class="o">!=</span> <span class="n">X86</span><span class="o">.</span><span class="n">reg_size</span><span class="p">(</span><span class="n">arg2</span><span class="p">):</span>
|
||||
@@ -454,6 +489,18 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">after</span> <span class="o">=</span> <span class="n">BitArray</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">direction</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">ModRM_REG__SEGREG</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">match</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">X86</span><span class="o">.</span><span class="n">is_reg</span><span class="p">(</span><span class="n">arg1</span><span class="p">)</span> <span class="ow">and</span> <span class="n">X86</span><span class="o">.</span><span class="n">is_seg_reg</span><span class="p">(</span><span class="n">arg2</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">,</span> <span class="nb">reversed</span><span class="p">,</span> <span class="n">instr_state</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">mod</span> <span class="o">=</span> <span class="n">BitArray</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="s2">"11"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">rm</span> <span class="o">=</span> <span class="n">X86RegisterSelector</span><span class="o">.</span><span class="n">get_reg_bits</span><span class="p">(</span><span class="n">arg1</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">reg</span> <span class="o">=</span> <span class="n">BitArray</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="n">x86_segment_selectors_number</span><span class="p">[</span><span class="n">arg2</span><span class="o">.</span><span class="n">upper</span><span class="p">()])</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">after</span> <span class="o">=</span> <span class="n">BitArray</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">direction</span> <span class="o">=</span> <span class="nb">reversed</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">ModRM_REG__MEM</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
|
||||
@@ -615,6 +662,13 @@
|
||||
<span class="n">prefix_opcode</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">PREFIX_VALUE</span><span class="p">)</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefix</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">prefix_opcode</span> <span class="o">+</span> <span class="nb">bytes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">value</span><span class="o">.</span><span class="n">dump</span><span class="p">())</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_code_py3</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">prefix_opcode</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">bytes</span><span class="p">([</span><span class="n">p</span><span class="o">.</span><span class="n">PREFIX_VALUE</span><span class="p">])</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefix</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">prefix_opcode</span> <span class="o">+</span> <span class="nb">bytes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">value</span><span class="o">.</span><span class="n">dump</span><span class="p">())</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">is_py3</span><span class="p">:</span>
|
||||
<span class="n">get_code</span> <span class="o">=</span> <span class="n">get_code_py3</span>
|
||||
|
||||
<span class="c1">#def __add__(self, other):</span>
|
||||
<span class="c1"># res = MultipleInstr()</span>
|
||||
<span class="c1"># res += self</span>
|
||||
@@ -622,7 +676,7 @@
|
||||
<span class="c1"># return res</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__mul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">long</span><span class="p">)):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">int_types</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">NotImplemented</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">MultipleInstr</span><span class="p">()</span>
|
||||
<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">value</span><span class="p">):</span>
|
||||
@@ -759,7 +813,8 @@
|
||||
<span class="k">class</span> <span class="nc">Mov</span><span class="p">(</span><span class="n">Instruction</span><span class="p">):</span>
|
||||
<span class="n">encoding</span> <span class="o">=</span> <span class="p">[(</span><span class="n">RawBits</span><span class="o">.</span><span class="n">from_int</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mh">0x89</span><span class="p">),</span> <span class="n">ModRM</span><span class="p">([</span><span class="n">ModRM_REG__REG</span><span class="p">,</span> <span class="n">ModRM_REG__MEM</span><span class="p">])),</span>
|
||||
<span class="p">(</span><span class="n">RawBits</span><span class="o">.</span><span class="n">from_int</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mh">0xc7</span><span class="p">),</span> <span class="n">Slash</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">Imm32</span><span class="p">()),</span>
|
||||
<span class="p">(</span><span class="n">RawBits</span><span class="o">.</span><span class="n">from_int</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mh">0xb8</span> <span class="o">>></span> <span class="mi">3</span><span class="p">),</span> <span class="n">X86RegisterSelector</span><span class="p">(),</span> <span class="n">Imm32</span><span class="p">()),</span>
|
||||
<span class="p">(</span><span class="n">RawBits</span><span class="o">.</span><span class="n">from_int</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mh">0xB8</span> <span class="o">>></span> <span class="mi">3</span><span class="p">),</span> <span class="n">X86RegisterSelector</span><span class="p">(),</span> <span class="n">Imm32</span><span class="p">()),</span>
|
||||
<span class="p">(</span><span class="n">RawBits</span><span class="o">.</span><span class="n">from_int</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mh">0x8C</span><span class="p">),</span> <span class="n">ModRM</span><span class="p">([</span><span class="n">ModRM_REG__SEGREG</span><span class="p">])),</span>
|
||||
<span class="p">(</span><span class="n">RawBits</span><span class="o">.</span><span class="n">from_int</span><span class="p">(</span><span class="mi">16</span><span class="p">,</span> <span class="mh">0x0f20</span><span class="p">),</span> <span class="n">ControlRegisterModRM</span><span class="p">(</span><span class="n">writecr</span><span class="o">=</span><span class="kc">False</span><span class="p">)),</span>
|
||||
<span class="p">(</span><span class="n">RawBits</span><span class="o">.</span><span class="n">from_int</span><span class="p">(</span><span class="mi">16</span><span class="p">,</span> <span class="mh">0x0f22</span><span class="p">),</span> <span class="n">ControlRegisterModRM</span><span class="p">(</span><span class="n">writecr</span><span class="o">=</span><span class="kc">True</span><span class="p">))]</span>
|
||||
|
||||
@@ -897,7 +952,8 @@
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">initial_args</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">initial_args</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"raw 'opcode' only accept one argument"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">initial_args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"hex"</span><span class="p">)</span>
|
||||
<span class="c1"># Accept space</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">binascii</span><span class="o">.</span><span class="n">unhexlify</span><span class="p">(</span><span class="n">initial_args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">" "</span><span class="p">,</span> <span class="s2">""</span><span class="p">))</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_code</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">data</span>
|
||||
@@ -1058,10 +1114,16 @@
|
||||
<span class="k">def</span> <span class="nf">__iadd__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">MultipleInstr</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">merge_shellcode</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assemble</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">add_instruction</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">assemble</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">code</span><span class="p">):</span>
|
||||
<span class="k">for</span> <span class="n">instr</span> <span class="ow">in</span> <span class="n">assemble_instructions_generator</span><span class="p">(</span><span class="n">code</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">add_instruction</span><span class="p">(</span><span class="n">instr</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">split_in_instruction</span><span class="p">(</span><span class="nb">str</span><span class="p">):</span>
|
||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">):</span>
|
||||
@@ -1072,9 +1134,7 @@
|
||||
<span class="k">continue</span>
|
||||
<span class="k">yield</span> <span class="n">instr</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">assemble</span><span class="p">(</span><span class="nb">str</span><span class="p">):</span>
|
||||
<span class="sd">"""Play test"""</span>
|
||||
<span class="n">shellcode</span> <span class="o">=</span> <span class="n">MultipleInstr</span><span class="p">()</span>
|
||||
<span class="k">def</span> <span class="nf">assemble_instructions_generator</span><span class="p">(</span><span class="nb">str</span><span class="p">):</span>
|
||||
<span class="k">for</span> <span class="n">instr</span> <span class="ow">in</span> <span class="n">split_in_instruction</span><span class="p">(</span><span class="nb">str</span><span class="p">):</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">instr</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">" "</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||
<span class="n">mnemo</span><span class="p">,</span> <span class="n">args_raw</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">data</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
||||
@@ -1095,9 +1155,19 @@
|
||||
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
|
||||
<span class="n">shellcode</span> <span class="o">+=</span> <span class="n">instr_object</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
|
||||
<span class="k">yield</span> <span class="n">instr_object</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">assemble</span><span class="p">(</span><span class="nb">str</span><span class="p">):</span>
|
||||
<span class="sd">"""Play test"""</span>
|
||||
<span class="n">shellcode</span> <span class="o">=</span> <span class="n">MultipleInstr</span><span class="p">()</span>
|
||||
<span class="n">shellcode</span> <span class="o">+=</span> <span class="nb">str</span>
|
||||
<span class="k">return</span> <span class="n">shellcode</span><span class="o">.</span><span class="n">get_code</span><span class="p">()</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">shellcode</span><span class="p">(</span><span class="nb">str</span><span class="p">):</span>
|
||||
<span class="n">shellcode</span> <span class="o">=</span> <span class="n">MultipleInstr</span><span class="p">()</span>
|
||||
<span class="n">shellcode</span> <span class="o">+=</span> <span class="nb">str</span>
|
||||
<span class="k">return</span> <span class="n">shellcode</span>
|
||||
|
||||
<span class="c1"># IDA : import windows.native_exec.simple_x86 as x86</span>
|
||||
<span class="c1"># IDA testing</span>
|
||||
|
||||
|
||||
+20
-349
@@ -85,345 +85,6 @@
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Unknow PE target machine <0x</span><span class="si">{0:x}</span><span class="s2">>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">machine</span><span class="p">))</span>
|
||||
|
||||
|
||||
<span class="c1"># def GetPEFile(baseaddr, target=None, force_bitness=None):</span>
|
||||
<span class="c1"># """Returns a :class:`PEFile` to explore a PE loaded at `baseaddr` in process `target`.</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># :rtype: :class:`PEFile`</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># .. note::</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># If target is ``None`` it refers to the curent process</span>
|
||||
<span class="c1"># """</span>
|
||||
<span class="c1"># proc_bitness = windows.current_process.bitness</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># if force_bitness is None:</span>
|
||||
<span class="c1"># targetedbitness = get_pe_bitness(baseaddr, target)</span>
|
||||
<span class="c1"># else:</span>
|
||||
<span class="c1"># targetedbitness = force_bitness</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># transformers = get_structure_transformer_for_target(target, targetedbitness)</span>
|
||||
<span class="c1"># ctypes_structure_transformer, create_structure_at = transformers</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># if targetedbitness == 32:</span>
|
||||
<span class="c1"># IMAGE_ORDINAL_FLAG = IMAGE_ORDINAL_FLAG32</span>
|
||||
<span class="c1"># else:</span>
|
||||
<span class="c1"># IMAGE_ORDINAL_FLAG = IMAGE_ORDINAL_FLAG64</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># def get_string(addr):</span>
|
||||
<span class="c1"># if target is None:</span>
|
||||
<span class="c1"># return ctypes.c_char_p(addr).value</span>
|
||||
<span class="c1"># return target.read_string(addr)</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># class RVA(DWORD):</span>
|
||||
<span class="c1"># @property</span>
|
||||
<span class="c1"># def addr(self):</span>
|
||||
<span class="c1"># return baseaddr + self.value</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># def __repr__(self):</span>
|
||||
<span class="c1"># return "<DWORD {0} (RVA to '{1}')>".format(self.value, hex(self.addr))</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># class StringRVa(RVA):</span>
|
||||
<span class="c1"># if target is None:</span>
|
||||
<span class="c1"># @property</span>
|
||||
<span class="c1"># def str(self):</span>
|
||||
<span class="c1"># return get_string(self.addr).decode()</span>
|
||||
<span class="c1"># else:</span>
|
||||
<span class="c1"># @property</span>
|
||||
<span class="c1"># def str(self):</span>
|
||||
<span class="c1"># return get_string(self.addr).decode()</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># def __repr__(self):</span>
|
||||
<span class="c1"># return "<DWORD {0} (String RVA to '{1}')>".format(self.value, self.str)</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># def __int__(self):</span>
|
||||
<span class="c1"># return self.value</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># class IMPORT_BY_NAME(ctypes.Structure):</span>
|
||||
<span class="c1"># _fields_ = [</span>
|
||||
<span class="c1"># ("Hint", WORD),</span>
|
||||
<span class="c1"># ("Name", BYTE)</span>
|
||||
<span class="c1"># ]</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># class THUNK_DATA(ctypes.Union):</span>
|
||||
<span class="c1"># _fields_ = [</span>
|
||||
<span class="c1"># ("Ordinal", PVOID),</span>
|
||||
<span class="c1"># ("AddressOfData", PVOID)</span>
|
||||
<span class="c1"># ]</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># class IATEntry(ctypes.Structure):</span>
|
||||
<span class="c1"># """Represent an entry in the IAT of a module</span>
|
||||
<span class="c1"># Can be used to get resolved value and setup hook</span>
|
||||
<span class="c1"># """</span>
|
||||
<span class="c1"># _fields_ = [</span>
|
||||
<span class="c1"># ("value", PVOID)]</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># @classmethod</span>
|
||||
<span class="c1"># def create(cls, addr, ord, name):</span>
|
||||
<span class="c1"># self = create_structure_at(cls, addr)</span>
|
||||
<span class="c1"># self.addr = addr</span>
|
||||
<span class="c1"># self.ord = ord</span>
|
||||
<span class="c1"># self.name = name</span>
|
||||
<span class="c1"># self.hook = None</span>
|
||||
<span class="c1"># self.nonhookvalue = self.value</span>
|
||||
<span class="c1"># return self</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># def __repr__(self):</span>
|
||||
<span class="c1"># return '<{0} "{1}" ordinal {2}>'.format(self.__class__.__name__, self.name, self.ord)</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># def set_hook(self, callback, types=None):</span>
|
||||
<span class="c1"># """Setup a hook on the entry and return it.</span>
|
||||
<span class="c1"># You MUST keep a reference to the hook while the hook is enabled.</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># :param callback: the hook</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># .. note::</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># see :ref:`hook_protocol`</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># :rtype: :class:`windows.hooks.IATHook`</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># .. warning::</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># This works only for PEFile with the current process as target.</span>
|
||||
<span class="c1"># """</span>
|
||||
<span class="c1"># if target is not None:</span>
|
||||
<span class="c1"># raise NotImplementedError("Setting hook in remote process (use python code injection)")</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># hook = hooks.IATHook(self, callback, types)</span>
|
||||
<span class="c1"># self.hook = hook</span>
|
||||
<span class="c1"># hook.enable()</span>
|
||||
<span class="c1"># return hook</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># def remove_hook(self):</span>
|
||||
<span class="c1"># """Remove the hook on the entry"""</span>
|
||||
<span class="c1"># if self.hook is None:</span>
|
||||
<span class="c1"># return False</span>
|
||||
<span class="c1"># self.hook.disable()</span>
|
||||
<span class="c1"># self.hook = None</span>
|
||||
<span class="c1"># return True</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># class PEFile(object):</span>
|
||||
<span class="c1"># """Represent a PE loaded in a process (current or remote)"""</span>
|
||||
<span class="c1"># #def __del__(self):</span>
|
||||
<span class="c1"># # print("YOLODEL")</span>
|
||||
<span class="c1"># # import pprint</span>
|
||||
<span class="c1"># # pprint.pprint(vars(self))</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># def __init__(self):</span>
|
||||
<span class="c1"># self.baseaddr = baseaddr</span>
|
||||
<span class="c1"># self.bitness = targetedbitness</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># def get_DOS_HEADER(self):</span>
|
||||
<span class="c1"># return create_structure_at(IMAGE_DOS_HEADER, baseaddr)</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># def get_NT_HEADER(self):</span>
|
||||
<span class="c1"># return self.get_DOS_HEADER().get_NT_HEADER()</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># def get_OptionalHeader(self):</span>
|
||||
<span class="c1"># return self.get_NT_HEADER().OptionalHeader</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># def get_DataDirectory(self):</span>
|
||||
<span class="c1"># # This won't work if we load a PE32 in a 64bit process</span>
|
||||
<span class="c1"># # PE32 .NET...</span>
|
||||
<span class="c1"># #return self.get_OptionalHeader().DataDirectory</span>
|
||||
<span class="c1"># DataDirectory_type = IMAGE_DATA_DIRECTORY * IMAGE_NUMBEROF_DIRECTORY_ENTRIES</span>
|
||||
<span class="c1"># SizeOfOptionalHeader = self.get_NT_HEADER().FileHeader.SizeOfOptionalHeader</span>
|
||||
<span class="c1"># if target is None:</span>
|
||||
<span class="c1"># opt_header_addr = ctypes.addressof(self.get_NT_HEADER().OptionalHeader)</span>
|
||||
<span class="c1"># else:</span>
|
||||
<span class="c1"># opt_header_addr = self.get_NT_HEADER().OptionalHeader._base_addr</span>
|
||||
<span class="c1"># DataDirectory_addr = opt_header_addr + SizeOfOptionalHeader - ctypes.sizeof(DataDirectory_type)</span>
|
||||
<span class="c1"># return create_structure_at(DataDirectory_type, DataDirectory_addr)</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># def get_IMPORT_DESCRIPTORS(self):</span>
|
||||
<span class="c1"># import_datadir = self.get_DataDirectory()[IMAGE_DIRECTORY_ENTRY_IMPORT]</span>
|
||||
<span class="c1"># if import_datadir.VirtualAddress == 0:</span>
|
||||
<span class="c1"># return []</span>
|
||||
<span class="c1"># import_descriptor_addr = RVA(import_datadir.VirtualAddress).addr</span>
|
||||
<span class="c1"># current_import_descriptor = create_structure_at(self.IMAGE_IMPORT_DESCRIPTOR, import_descriptor_addr)</span>
|
||||
<span class="c1"># res = []</span>
|
||||
<span class="c1"># while current_import_descriptor.FirstThunk:</span>
|
||||
<span class="c1"># res.append(current_import_descriptor)</span>
|
||||
<span class="c1"># import_descriptor_addr += ctypes.sizeof(self.IMAGE_IMPORT_DESCRIPTOR)</span>
|
||||
<span class="c1"># current_import_descriptor = create_structure_at(self.IMAGE_IMPORT_DESCRIPTOR, import_descriptor_addr)</span>
|
||||
<span class="c1"># return res</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># def get_EXPORT_DIRECTORY(self):</span>
|
||||
<span class="c1"># export_directory_rva = self.get_DataDirectory()[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress</span>
|
||||
<span class="c1"># if export_directory_rva == 0:</span>
|
||||
<span class="c1"># return None</span>
|
||||
<span class="c1"># export_directory_addr = baseaddr + export_directory_rva</span>
|
||||
<span class="c1"># return create_structure_at(self._IMAGE_EXPORT_DIRECTORY, export_directory_addr)</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># class PESection((IMAGE_SECTION_HEADER)):</span>
|
||||
<span class="c1"># if target is None:</span>
|
||||
<span class="c1"># @property</span>
|
||||
<span class="c1"># def name(self):</span>
|
||||
<span class="c1"># return get_string(ctypes.addressof(self.Name))[:8]</span>
|
||||
<span class="c1"># else:</span>
|
||||
<span class="c1"># @property</span>
|
||||
<span class="c1"># def name(self):</span>
|
||||
<span class="c1"># return get_string(self._base_addr)[:8]</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># @property</span>
|
||||
<span class="c1"># def start(self):</span>
|
||||
<span class="c1"># return baseaddr + self.VirtualAddress</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># @property</span>
|
||||
<span class="c1"># def size(self):</span>
|
||||
<span class="c1"># return self.VirtualSize</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># def __repr__(self):</span>
|
||||
<span class="c1"># return "<PESection \"{0}\">".format(self.name)</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># @utils.fixedpropety</span>
|
||||
<span class="c1"># def sections(self):</span>
|
||||
<span class="c1"># nt_header = self.get_NT_HEADER()</span>
|
||||
<span class="c1"># nb_section = nt_header.FileHeader.NumberOfSections</span>
|
||||
<span class="c1"># SizeOfOptionalHeader = self.get_NT_HEADER().FileHeader.SizeOfOptionalHeader</span>
|
||||
<span class="c1"># if target is None:</span>
|
||||
<span class="c1"># opt_header_addr = ctypes.addressof(self.get_NT_HEADER().OptionalHeader)</span>
|
||||
<span class="c1"># else:</span>
|
||||
<span class="c1"># opt_header_addr = self.get_NT_HEADER().OptionalHeader._base_addr</span>
|
||||
<span class="c1"># base_section = opt_header_addr + SizeOfOptionalHeader</span>
|
||||
<span class="c1"># sections_array = create_structure_at((self.PESection * nb_section), base_section)</span>
|
||||
<span class="c1"># return list(sections_array)</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># @utils.fixedpropety</span>
|
||||
<span class="c1"># def exports(self):</span>
|
||||
<span class="c1"># """The exports of the PE in a dict. Keys are ordinal (:class:`int`) and name (:class:`str`).</span>
|
||||
<span class="c1"># The values are the addresses of the exports.</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># :type: {(:class:`int` or :class:`str`) : :class:`int`}"""</span>
|
||||
<span class="c1"># res = {}</span>
|
||||
<span class="c1"># exp_dir = self.get_EXPORT_DIRECTORY()</span>
|
||||
<span class="c1"># if exp_dir is None:</span>
|
||||
<span class="c1"># return res</span>
|
||||
<span class="c1"># raw_exports = exp_dir.get_exports()</span>
|
||||
<span class="c1"># for id, rva_addr, rva_name in raw_exports:</span>
|
||||
<span class="c1"># res[id] = rva_addr.addr</span>
|
||||
<span class="c1"># if rva_name is not None:</span>
|
||||
<span class="c1"># res[rva_name.str] = rva_addr.addr</span>
|
||||
<span class="c1"># return res</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># @utils.fixedpropety</span>
|
||||
<span class="c1"># def export_name(self):</span>
|
||||
<span class="c1"># """The Name attribute of the ``EXPORT_DIRECTORY``"""</span>
|
||||
<span class="c1"># try:</span>
|
||||
<span class="c1"># return self.get_EXPORT_DIRECTORY().Name.str</span>
|
||||
<span class="c1"># except AttributeError:</span>
|
||||
<span class="c1"># return None</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># # TODO: get imports by parsing other modules exports if no INT</span>
|
||||
<span class="c1"># @utils.fixedpropety</span>
|
||||
<span class="c1"># def imports(self):</span>
|
||||
<span class="c1"># """The imports of the PE in a dict.</span>
|
||||
<span class="c1"># Keys are the names of DLL to import from and values are :class:`list`</span>
|
||||
<span class="c1"># of :class:`IATEntry`</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># :type: {:class:`str` : [:class:`IATEntry`]}"""</span>
|
||||
<span class="c1"># res = {}</span>
|
||||
<span class="c1"># for import_descriptor in self.get_IMPORT_DESCRIPTORS():</span>
|
||||
<span class="c1"># INT = import_descriptor.get_INT()</span>
|
||||
<span class="c1"># IAT = import_descriptor.get_IAT()</span>
|
||||
<span class="c1"># if INT is not None:</span>
|
||||
<span class="c1"># for iat_entry, (ord, name) in zip(IAT, INT):</span>
|
||||
<span class="c1"># # str(name.decode()) -> python2 and python3 compatible for str result</span>
|
||||
<span class="c1"># iat_entry.ord = ord</span>
|
||||
<span class="c1"># iat_entry.name = str(name.decode()) if name else ""</span>
|
||||
<span class="c1"># res.setdefault(import_descriptor.Name.str.lower(), []).extend(IAT)</span>
|
||||
<span class="c1"># return res</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># # Will be usable as `self.IMAGE_IMPORT_DESCRIPTOR`</span>
|
||||
<span class="c1"># class IMAGE_IMPORT_DESCRIPTOR(ctypes.Structure):</span>
|
||||
<span class="c1"># _fields_ = transform_ctypes_fields(IMAGE_IMPORT_DESCRIPTOR, {"Name": StringRVa, "OriginalFirstThunk": RVA, "FirstThunk": RVA})</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># def get_INT(self):</span>
|
||||
<span class="c1"># if not self.OriginalFirstThunk.value:</span>
|
||||
<span class="c1"># return None</span>
|
||||
<span class="c1"># int_addr = self.OriginalFirstThunk.addr</span>
|
||||
<span class="c1"># int_entry = create_structure_at(THUNK_DATA, int_addr)</span>
|
||||
<span class="c1"># res = []</span>
|
||||
<span class="c1"># while int_entry.Ordinal:</span>
|
||||
<span class="c1"># if int_entry.Ordinal & IMAGE_ORDINAL_FLAG:</span>
|
||||
<span class="c1"># res += [(int_entry.Ordinal & 0x7fffffff, None)]</span>
|
||||
<span class="c1"># else:</span>
|
||||
<span class="c1"># import_by_name = create_structure_at(IMPORT_BY_NAME, baseaddr + int_entry.AddressOfData)</span>
|
||||
<span class="c1"># name_address = baseaddr + int_entry.AddressOfData + type(import_by_name).Name.offset</span>
|
||||
<span class="c1"># if target is None:</span>
|
||||
<span class="c1"># name = get_string(name_address)</span>
|
||||
<span class="c1"># else:</span>
|
||||
<span class="c1"># name = get_string(name_address).decode()</span>
|
||||
<span class="c1"># res.append((import_by_name.Hint, name))</span>
|
||||
<span class="c1"># int_addr += ctypes.sizeof(type(int_entry))</span>
|
||||
<span class="c1"># int_entry = create_structure_at(THUNK_DATA, int_addr)</span>
|
||||
<span class="c1"># return res</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># def get_IAT(self):</span>
|
||||
<span class="c1"># iat_addr = self.FirstThunk.addr</span>
|
||||
<span class="c1"># iat_entry = create_structure_at(THUNK_DATA, iat_addr)</span>
|
||||
<span class="c1"># res = []</span>
|
||||
<span class="c1"># while iat_entry.Ordinal:</span>
|
||||
<span class="c1"># res.append(IATEntry.create(iat_addr, -1, "??"))</span>
|
||||
<span class="c1"># iat_addr += ctypes.sizeof(type(iat_entry))</span>
|
||||
<span class="c1"># iat_entry = create_structure_at(THUNK_DATA, iat_addr)</span>
|
||||
<span class="c1"># return res</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># # Will be usable as `self._IMAGE_EXPORT_DIRECTORY`</span>
|
||||
<span class="c1"># class _IMAGE_EXPORT_DIRECTORY(ctypes.Structure):</span>
|
||||
<span class="c1"># _fields_ = transform_ctypes_fields(IMAGE_EXPORT_DIRECTORY, {"Name": StringRVa, "AddressOfFunctions": RVA, "AddressOfNames": RVA, "AddressOfNameOrdinals": RVA})</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># def get_exports(self):</span>
|
||||
<span class="c1"># NameOrdinals = create_structure_at((WORD * self.NumberOfNames), self.AddressOfNameOrdinals.addr)</span>
|
||||
<span class="c1"># NameOrdinals = list(NameOrdinals)</span>
|
||||
<span class="c1"># Functions = create_structure_at((RVA * self.NumberOfFunctions), self.AddressOfFunctions.addr)</span>
|
||||
<span class="c1"># Names = create_structure_at((StringRVa * self.NumberOfNames), self.AddressOfNames.addr)</span>
|
||||
<span class="c1"># res = []</span>
|
||||
<span class="c1"># for nb, func in enumerate(Functions):</span>
|
||||
<span class="c1"># if nb in NameOrdinals:</span>
|
||||
<span class="c1"># name = Names[NameOrdinals.index(nb)]</span>
|
||||
<span class="c1"># else:</span>
|
||||
<span class="c1"># name = None</span>
|
||||
<span class="c1"># res.append((nb, func, name))</span>
|
||||
<span class="c1"># return res</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># current_pe = PEFile()</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># class IMAGE_DOS_HEADER(ctypes.Structure):</span>
|
||||
<span class="c1"># _fields_ = [</span>
|
||||
<span class="c1"># ("e_magic", CHAR * 2),</span>
|
||||
<span class="c1"># ("e_cblp", WORD),</span>
|
||||
<span class="c1"># ("e_cp", WORD),</span>
|
||||
<span class="c1"># ("e_crlc", WORD),</span>
|
||||
<span class="c1"># ("e_cparhdr", WORD),</span>
|
||||
<span class="c1"># ("e_minalloc", WORD),</span>
|
||||
<span class="c1"># ("e_maxalloc", WORD),</span>
|
||||
<span class="c1"># ("e_ss", WORD),</span>
|
||||
<span class="c1"># ("e_sp", WORD),</span>
|
||||
<span class="c1"># ("e_csum", WORD),</span>
|
||||
<span class="c1"># ("e_ip", WORD),</span>
|
||||
<span class="c1"># ("e_cs", WORD),</span>
|
||||
<span class="c1"># ("e_lfarlc", WORD),</span>
|
||||
<span class="c1"># ("e_ovno", WORD),</span>
|
||||
<span class="c1"># ("e_res", WORD * 4),</span>
|
||||
<span class="c1"># ("e_oemid", WORD),</span>
|
||||
<span class="c1"># ("e_oeminfo", WORD),</span>
|
||||
<span class="c1"># ("e_res2", WORD * 10),</span>
|
||||
<span class="c1"># ("e_lfanew", DWORD),</span>
|
||||
<span class="c1"># ]</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># def get_NT_HEADER(self):</span>
|
||||
<span class="c1"># if targetedbitness == 32:</span>
|
||||
<span class="c1"># return create_structure_at(IMAGE_NT_HEADERS32, baseaddr + self.e_lfanew)</span>
|
||||
<span class="c1"># return create_structure_at(IMAGE_NT_HEADERS64, baseaddr + self.e_lfanew)</span>
|
||||
<span class="c1"># return current_pe</span>
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="c1">## == PEPARSE V2 ==</span>
|
||||
|
||||
|
||||
@@ -467,7 +128,7 @@
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_string</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">addr</span><span class="p">):</span>
|
||||
<span class="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">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span><span class="o">.</span><span class="n">value</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"latin1"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">target</span><span class="o">.</span><span class="n">read_string</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span>
|
||||
|
||||
|
||||
@@ -476,8 +137,11 @@
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">get_string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">Name</span><span class="p">))[:</span><span class="mi">8</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="n">get_string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_base_addr</span><span class="p">)[:</span><span class="mi">8</span><span class="p">]</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="n">get_string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">Name</span><span class="p">))[:</span><span class="mi">8</span><span class="p">]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="n">get_string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_base_addr</span><span class="p">)[:</span><span class="mi">8</span><span class="p">]</span>
|
||||
<span class="c1"># Decode as UTF-8 as the MS doc say ?</span>
|
||||
<span class="k">return</span> <span class="n">name</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -590,7 +254,7 @@
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="n">get_string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="n">name_address</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="n">get_string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="n">name_address</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="n">get_string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="n">name_address</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">import_by_name</span><span class="o">.</span><span class="n">Hint</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span>
|
||||
<span class="n">int_addr</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="nb">type</span><span class="p">(</span><span class="n">int_entry</span><span class="p">))</span>
|
||||
<span class="n">int_entry</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">transformers</span><span class="o">.</span><span class="n">create_structure_at</span><span class="p">(</span><span class="n">THUNK_DATA</span><span class="p">,</span> <span class="n">int_addr</span><span class="p">)</span>
|
||||
@@ -626,6 +290,9 @@
|
||||
<span class="n">func</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">baseaddr</span>
|
||||
<span class="k">if</span> <span class="n">nb</span> <span class="ow">in</span> <span class="n">NameOrdinals</span><span class="p">:</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="n">get_string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="n">Names</span><span class="p">[</span><span class="n">NameOrdinals</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">nb</span><span class="p">)]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">baseaddr</span><span class="p">)</span>
|
||||
<span class="c1"># Export name should be ascii</span>
|
||||
<span class="c1"># Decode from ascii or return bytes ?</span>
|
||||
<span class="c1"># https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#export-address-table</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">nb</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span>
|
||||
@@ -677,11 +344,6 @@
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">IMAGE_ORDINAL_FLAG</span> <span class="o">=</span> <span class="n">IMAGE_ORDINAL_FLAG64</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_string</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="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span><span class="o">.</span><span class="n">value</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_string</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_DOS_HEADER</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">transformers</span><span class="o">.</span><span class="n">create_structure_at</span><span class="p">(</span><span class="n">IMAGE_DOS_HEADER</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">baseaddr</span><span class="p">)</span>
|
||||
|
||||
@@ -752,10 +414,19 @@
|
||||
<span class="sd"> :type: {(:class:`int` or :class:`str`) : :class:`int`}"""</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">exp_dir</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_EXPORT_DIRECTORY</span><span class="p">()</span>
|
||||
<span class="n">export_datadir</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_DataDirectory</span><span class="p">()[</span><span class="n">IMAGE_DIRECTORY_ENTRY_EXPORT</span><span class="p">]</span>
|
||||
<span class="n">export_start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">baseaddr</span> <span class="o">+</span> <span class="n">export_datadir</span><span class="o">.</span><span class="n">VirtualAddress</span>
|
||||
<span class="n">export_end</span> <span class="o">=</span> <span class="n">export_start</span> <span class="o">+</span> <span class="n">export_datadir</span><span class="o">.</span><span class="n">Size</span>
|
||||
<span class="k">if</span> <span class="n">exp_dir</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
<span class="c1"># import pdb;pdb.set_trace()</span>
|
||||
<span class="n">raw_exports</span> <span class="o">=</span> <span class="n">exp_dir</span><span class="o">.</span><span class="n">get_exports</span><span class="p">()</span>
|
||||
<span class="k">for</span> <span class="nb">id</span><span class="p">,</span> <span class="n">rva_addr</span><span class="p">,</span> <span class="n">rva_name</span> <span class="ow">in</span> <span class="n">raw_exports</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">export_start</span> <span class="o"><=</span> <span class="n">rva_addr</span> <span class="o"><</span> <span class="n">export_end</span><span class="p">:</span>
|
||||
<span class="c1"># Export proxy...</span>
|
||||
<span class="c1"># Contains the string to another Dll.Function</span>
|
||||
<span class="n">rva_addr</span> <span class="o">=</span> <span class="n">get_string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="n">rva_addr</span><span class="p">)</span> <span class="c1"># Put the string proxy instead</span>
|
||||
|
||||
<span class="n">res</span><span class="p">[</span><span class="nb">id</span><span class="p">]</span> <span class="o">=</span> <span class="n">rva_addr</span>
|
||||
<span class="k">if</span> <span class="n">rva_name</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">res</span><span class="p">[</span><span class="n">rva_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">rva_addr</span>
|
||||
@@ -787,7 +458,7 @@
|
||||
<span class="k">for</span> <span class="n">iat_entry</span><span class="p">,</span> <span class="p">(</span><span class="nb">ord</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">IAT</span><span class="p">,</span> <span class="n">INT</span><span class="p">):</span>
|
||||
<span class="c1"># str(name.decode()) -> python2 and python3 compatible for str result</span>
|
||||
<span class="n">iat_entry</span><span class="o">.</span><span class="n">ord</span> <span class="o">=</span> <span class="nb">ord</span>
|
||||
<span class="n">iat_entry</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
<span class="n">iat_entry</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="n">get_string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">baseaddr</span> <span class="o">+</span> <span class="n">import_descriptor</span><span class="o">.</span><span class="n">Name</span><span class="p">)</span>
|
||||
<span class="n">res</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="p">[])</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">IAT</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">res</span></div>
|
||||
|
||||
+35
-6
@@ -40,16 +40,24 @@
|
||||
<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">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
||||
<span class="kn">import</span> <span class="nn">ctypes</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">_multiprocessing</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="k">import</span> <span class="n">is_py3</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">is_py3</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">multiprocessing.connection</span> <span class="k">import</span> <span class="n">PipeConnection</span> <span class="k">as</span> <span class="n">native_PipeConnection</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">_multiprocessing</span> <span class="k">import</span> <span class="n">PipeConnection</span> <span class="k">as</span> <span class="n">native_PipeConnection</span>
|
||||
|
||||
<span class="c1"># Inspired from 'multiprocessing\connection.py'</span>
|
||||
|
||||
<div class="viewcode-block" id="full_pipe_address"><a class="viewcode-back" href="../../pipe.html#windows.pipe.full_pipe_address">[docs]</a><span class="k">def</span> <span class="nf">full_pipe_address</span><span class="p">(</span><span class="n">addr</span><span class="p">):</span>
|
||||
<span class="sd">"""Return the full address of the pipe `addr`"""</span>
|
||||
<span class="k">if</span> <span class="n">addr</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="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="nb">bytes</span><span class="p">):</span>
|
||||
<span class="n">addr</span> <span class="o">=</span> <span class="n">addr</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">"ascii"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">addr</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\\\\</span><span class="s2">"</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">addr</span>
|
||||
<span class="k">return</span> <span class="sa">r</span><span class="s2">"</span><span class="se">\\</span><span class="s2">.\pipe\</span><span class="si">{addr}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">addr</span><span class="o">=</span><span class="n">addr</span><span class="p">)</span></div>
|
||||
<span class="k">return</span> <span class="sa">br</span><span class="s2">"</span><span class="se">\\</span><span class="s2">.\pipe"</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\\</span><span class="s2">"</span><span class="o">.</span><span class="n">encode</span><span class="p">()</span> <span class="o">+</span> <span class="n">addr</span></div>
|
||||
|
||||
<div class="viewcode-block" id="PipeConnection"><a class="viewcode-back" href="../../pipe.html#windows.pipe.PipeConnection">[docs]</a><span class="k">class</span> <span class="nc">PipeConnection</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="c1"># Cannot inherit: crash the interpreter</span>
|
||||
<span class="sd">"""A wrapper arround :class:`_multiprocessing.PipeConnection` able to work as a ContextManager"""</span>
|
||||
@@ -64,22 +72,33 @@
|
||||
<div class="viewcode-block" id="PipeConnection.from_handle"><a class="viewcode-back" href="../../pipe.html#windows.pipe.PipeConnection.from_handle">[docs]</a> <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">phandle</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""Create a :class:`PipeConnection` from pipe handle `phandle`"""</span>
|
||||
<span class="n">connection</span> <span class="o">=</span> <span class="n">_multiprocessing</span><span class="o">.</span><span class="n">PipeConnection</span><span class="p">(</span><span class="n">phandle</span><span class="p">)</span>
|
||||
<span class="n">connection</span> <span class="o">=</span> <span class="n">native_PipeConnection</span><span class="p">(</span><span class="n">phandle</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">connection</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="PipeConnection.create"><a class="viewcode-back" href="../../pipe.html#windows.pipe.PipeConnection.create">[docs]</a> <span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">addr</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">security_descriptor</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Create a namedpipe pipe ``addr``</span>
|
||||
|
||||
<span class="sd"> :returns type: :class:`PipeConnection`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">addr</span> <span class="o">=</span> <span class="n">full_pipe_address</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span>
|
||||
|
||||
<span class="n">security_attributes</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">if</span> <span class="n">security_descriptor</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">security_descriptor</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||
<span class="n">security_descriptor</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">security</span><span class="o">.</span><span class="n">SecurityDescriptor</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">security_descriptor</span><span class="p">)</span>
|
||||
<span class="n">security_attributes</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SECURITY_ATTRIBUTES</span><span class="p">()</span>
|
||||
<span class="n">security_attributes</span><span class="o">.</span><span class="n">nLength</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">security_attributes</span><span class="p">)</span>
|
||||
<span class="n">security_attributes</span><span class="o">.</span><span class="n">lpSecurityDescriptor</span> <span class="o">=</span> <span class="n">security_descriptor</span> <span class="c1"># Accept as arg ?</span>
|
||||
<span class="n">security_attributes</span><span class="o">.</span><span class="n">bInheritHandle</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># Accept as arg ?</span>
|
||||
|
||||
|
||||
<span class="n">pipehandle</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CreateNamedPipeA</span><span class="p">(</span>
|
||||
<span class="n">addr</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PIPE_ACCESS_DUPLEX</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PIPE_TYPE_MESSAGE</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PIPE_READMODE_MESSAGE</span> <span class="o">|</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PIPE_WAIT</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PIPE_UNLIMITED_INSTANCES</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">BUFFER_SIZE</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">BUFFER_SIZE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">NMPWAIT_WAIT_FOREVER</span><span class="p">,</span> <span class="kc">None</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">NMPWAIT_WAIT_FOREVER</span><span class="p">,</span> <span class="n">security_attributes</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">from_handle</span><span class="p">(</span><span class="n">pipehandle</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">addr</span><span class="p">,</span> <span class="n">server</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
|
||||
|
||||
@@ -106,6 +125,16 @@
|
||||
<span class="sd">"""Wait for a client process to connect to the named pipe"""</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">ConnectNamedPipe</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="kc">None</span><span class="p">)</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_security_descriptor</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">security</span><span class="o">.</span><span class="n">SecurityDescriptor</span><span class="o">.</span><span class="n">from_handle</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">set_security_descriptor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sd</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sd</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||||
<span class="n">sd</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">security</span><span class="o">.</span><span class="n">SecurityDescriptor</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">sd</span><span class="p">)</span>
|
||||
<span class="n">sd</span><span class="o">.</span><span class="n">_apply_to_handle_and_type</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">security_descriptor</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_security_descriptor</span><span class="p">,</span> <span class="n">set_security_descriptor</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="PipeConnection.close"><a class="viewcode-back" href="../../pipe.html#windows.pipe.PipeConnection.close">[docs]</a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Close the handle of the pipe"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
||||
|
||||
+28
-5
@@ -46,6 +46,14 @@
|
||||
<span class="kn">import</span> <span class="nn">itertools</span>
|
||||
<span class="kn">from</span> <span class="nn">_ctypes</span> <span class="k">import</span> <span class="n">_SimpleCData</span>
|
||||
|
||||
<span class="c1"># No PFW deps in this file</span>
|
||||
<span class="kn">import</span> <span class="nn">sys</span>
|
||||
<span class="n">is_py3</span> <span class="o">=</span> <span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="o">.</span><span class="n">major</span> <span class="o">>=</span> <span class="mi">3</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">is_py3</span><span class="p">:</span>
|
||||
<span class="n">int_types</span> <span class="o">=</span> <span class="nb">int</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">int_types</span> <span class="o">=</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">long</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="c1"># ## Utils ### #</span>
|
||||
<span class="k">def</span> <span class="nf">is_pointer</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
|
||||
@@ -136,11 +144,11 @@
|
||||
<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>
|
||||
<span class="k">if</span> <span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span> <span class="ow">in</span> <span class="n">x</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="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">if</span> <span class="sa">b</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span> <span class="ow">in</span> <span class="n">x</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="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span>
|
||||
<span class="k">break</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">return</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="k">return</span> <span class="sa">b</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="k">class</span> <span class="nc">RemoteWCharP</span><span class="p">(</span><span class="n">RemotePtr</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span><span class="p">):</span>
|
||||
@@ -207,7 +215,7 @@
|
||||
|
||||
<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">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="nb">slice</span><span class="p">,</span> <span class="n">int_types</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"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>
|
||||
<span class="k">raise</span> <span class="ne">IndexError</span><span class="p">(</span><span class="s2">"Access to </span><span class="si">{0}</span><span class="s2"> for a RemoteArray of 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">slice</span><span class="p">,</span> <span class="nb">len</span><span class="p">))</span>
|
||||
@@ -332,6 +340,21 @@
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">contents</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="c1"># What if we have a non-struct pointer</span>
|
||||
<span class="c1"># Like a Ptr(DWORD) we would like to get the underlying value</span>
|
||||
<span class="n">realtype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">real_pointer_type</span><span class="o">.</span><span class="n">_sub_ctypes_</span>
|
||||
<span class="c1"># if _SimpleCData in realtype.__bases__:</span>
|
||||
<span class="c1"># A ctypes original value.</span>
|
||||
<span class="c1"># Returnthe real pointed value</span>
|
||||
<span class="c1"># Kind of a tricks for now compared to the real ctypes behavior</span>
|
||||
<span class="c1"># import pdb;pdb.set_trace()</span>
|
||||
<span class="c1"># if not self.value:</span>
|
||||
<span class="c1"># return None</span>
|
||||
<span class="c1"># targetptr = self.target.read_ptr(self.value)</span>
|
||||
<span class="c1"># if not targetptr:</span>
|
||||
<span class="c1"># return None</span>
|
||||
<span class="c1"># ss = self.target.read_memory(targetptr, ctypes.sizeof(realtype))</span>
|
||||
<span class="c1"># return realtype.from_buffer(bytearray(ss)).value</span>
|
||||
<span class="n">remote_pointed_type</span> <span class="o">=</span> <span class="n">transform_type_to_remote32bits</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">real_pointer_type</span><span class="o">.</span><span class="n">_sub_ctypes_</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">remote_pointed_type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">raw_value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">)</span>
|
||||
|
||||
@@ -393,7 +416,7 @@
|
||||
<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">return</span> <span class="n">s</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="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>
|
||||
|
||||
+44
-12
@@ -44,6 +44,9 @@
|
||||
<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="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">is_py3</span><span class="p">:</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="nb">bytes</span>
|
||||
|
||||
|
||||
<span class="n">KNOW_REQUEST_TYPE</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span><span class="n">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="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">RPC_RESPONSE_TYPE_FAIL</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">RPC_RESPONSE_TYPE_SUCCESS</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>
|
||||
@@ -93,10 +96,7 @@
|
||||
<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><span class="s2">"ORPC_IPID"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">GUID</span><span class="p">)</span>
|
||||
<span class="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>
|
||||
@@ -125,7 +125,20 @@
|
||||
<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>
|
||||
<div class="viewcode-block" id="RPCClient.forge_alpc_request"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.RPCClient.forge_alpc_request">[docs]</a> <span class="k">def</span> <span class="nf">forge_alpc_request</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="n">ipid</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Craft an ALPC message containing an RPC request to call ``method_offset`` of interface ``IID`</span>
|
||||
<span class="sd"> with ``params``.</span>
|
||||
<span class="sd"> Can be used to craft request without directly sending it</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="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">params</span><span class="p">)</span> <span class="o">></span> <span class="mh">0x900</span><span class="p">:</span> <span class="c1"># 0x1000 - size of meta-data</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_in_view</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">ipid</span><span class="o">=</span><span class="n">ipid</span><span class="p">)</span>
|
||||
<span class="k">else</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_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">ipid</span><span class="o">=</span><span class="n">ipid</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">request</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="n">ipid</span><span class="o">=</span><span class="kc">None</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>
|
||||
@@ -133,15 +146,14 @@
|
||||
<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">request</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">forge_alpc_request</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="n">ipid</span><span class="o">=</span><span class="n">ipid</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_SUCCESS</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_SUCCESS 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="p">[</span><span class="n">request_type</span><span class="p">]))</span>
|
||||
|
||||
<span class="c1"># windows.utils.sprint(ALPC_RPC_CALL.from_buffer_copy(response + "\x00" * 12))</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>
|
||||
@@ -150,7 +162,7 @@
|
||||
<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="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="n">ipid</span><span class="o">=</span><span class="kc">None</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>
|
||||
@@ -160,19 +172,39 @@
|
||||
<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">if</span> <span class="n">ipid</span><span class="p">:</span>
|
||||
<span class="n">req</span><span class="o">.</span><span class="n">ORPC_IPID</span> <span class="o">=</span> <span class="n">ipid</span>
|
||||
<span class="n">this</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ORPCTHIS</span><span class="p">()</span>
|
||||
<span class="n">this</span><span class="o">.</span><span class="n">version</span> <span class="o">=</span> <span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="mi">7</span><span class="p">)</span>
|
||||
<span class="n">this</span><span class="o">.</span><span class="n">flags</span> <span class="o">=</span> <span class="mi">1</span>
|
||||
<span class="n">lthis</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">LOCALTHIS</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">buffer</span><span class="p">(</span><span class="n">req</span><span class="p">)[:]</span> <span class="o">+</span> <span class="n">buffer</span><span class="p">(</span><span class="n">this</span><span class="p">)[:]</span> <span class="o">+</span> <span class="n">buffer</span><span class="p">(</span><span class="n">lthis</span><span class="p">)[:]</span> <span class="o">+</span> <span class="n">params</span>
|
||||
<span class="k">return</span> <span class="n">buffer</span><span class="p">(</span><span class="n">req</span><span class="p">)[:]</span> <span class="o">+</span> <span class="n">params</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_forge_call_request_in_view</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="n">ipid</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="c1"># import pdb;pdb.set_trace()</span>
|
||||
<span class="c1"># Version crade qui clean rien pour POC. GROS DOUTES :D</span>
|
||||
<span class="n">raw_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="s2">""</span><span class="p">)</span>
|
||||
<span class="n">p</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">alpc</span><span class="o">.</span><span class="n">AlpcMessage</span><span class="p">(</span><span class="mh">0x2000</span><span class="p">)</span>
|
||||
<span class="n">section</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">create_port_section</span><span class="p">(</span><span class="mh">0x40000</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">params</span><span class="p">))</span>
|
||||
<span class="n">view</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">map_section</span><span class="p">(</span><span class="n">section</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">len</span><span class="p">(</span><span class="n">params</span><span class="p">))</span>
|
||||
<span class="n">p</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_request</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">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">params</span><span class="p">)</span> <span class="o">+</span> <span class="mh">0x200</span><span class="p">)</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span> <span class="o">*</span> <span class="mi">40</span>
|
||||
<span class="n">p</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">ValidAttributes</span> <span class="o">|=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ALPC_MESSAGE_VIEW_ATTRIBUTE</span>
|
||||
<span class="n">p</span><span class="o">.</span><span class="n">view_attribute</span><span class="o">.</span><span class="n">Flags</span> <span class="o">=</span> <span class="mh">0x40000</span>
|
||||
<span class="n">p</span><span class="o">.</span><span class="n">view_attribute</span><span class="o">.</span><span class="n">ViewBase</span> <span class="o">=</span> <span class="n">view</span><span class="o">.</span><span class="n">ViewBase</span>
|
||||
<span class="n">p</span><span class="o">.</span><span class="n">view_attribute</span><span class="o">.</span><span class="n">SectionHandle</span> <span class="o">=</span> <span class="n">view</span><span class="o">.</span><span class="n">SectionHandle</span>
|
||||
<span class="n">p</span><span class="o">.</span><span class="n">view_attribute</span><span class="o">.</span><span class="n">ViewSize</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">params</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">view</span><span class="o">.</span><span class="n">ViewBase</span><span class="p">,</span> <span class="n">params</span><span class="p">)</span> <span class="c1"># Write NDR to view</span>
|
||||
<span class="k">return</span> <span class="n">p</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>
|
||||
|
||||
+9
-8
@@ -44,6 +44,7 @@
|
||||
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.rpc</span> <span class="k">import</span> <span class="n">ndr</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.dbgprint</span> <span class="k">import</span> <span class="n">dbgprint</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="k">import</span> <span class="n">basestring</span>
|
||||
|
||||
|
||||
|
||||
@@ -126,13 +127,13 @@
|
||||
<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="n">rhs</span> <span class="o">=</span> <span class="n">rhs</span><span class="p">[:</span><span class="n">rhs</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span><span class="p">)]</span>
|
||||
<span class="c1"># raise ValueError("ALPC Port name doest not end by \\x00")</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="k">return</span> <span class="n">UnpackTower</span><span class="p">(</span><span class="s2">"ncalrpc"</span><span class="p">,</span> <span class="nb">bytes</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="n">TOWER_PROTOCOL_IS_UUID</span> <span class="o">=</span> <span class="sa">b</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="sa">b</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="sa">b</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>
|
||||
@@ -153,11 +154,11 @@
|
||||
<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_lsh</span> <span class="o">=</span> <span class="sa">b</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_lsh</span> <span class="o">=</span> <span class="sa">b</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>
|
||||
@@ -187,7 +188,7 @@
|
||||
<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="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="sa">b</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>
|
||||
@@ -223,7 +224,7 @@
|
||||
<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="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="o">.</span><span class="n">decode</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>
|
||||
|
||||
+25
-9
@@ -63,7 +63,7 @@
|
||||
<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>
|
||||
<span class="k">return</span> <span class="n">s</span> <span class="o">+</span> <span class="p">(</span><span class="sa">b</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>
|
||||
@@ -127,7 +127,7 @@
|
||||
<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">return</span> <span class="n">dword_pad</span><span class="p">(</span><span class="sa">b</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>
|
||||
@@ -174,7 +174,7 @@
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">data</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s1">'</span><span class="se">\x00</span><span class="s1">'</span><span class="p">):</span>
|
||||
<span class="n">data</span> <span class="o">+=</span> <span class="s1">'</span><span class="se">\x00</span><span class="s1">'</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">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></div>
|
||||
@@ -304,7 +304,7 @@
|
||||
<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="k">return</span> <span class="n">dword_pad</span><span class="p">(</span><span class="sa">b</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="sa">b</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="sa">b</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>
|
||||
|
||||
<div class="viewcode-block" id="NdrStructure.unpack"><a class="viewcode-back" href="../../../rpc.html#windows.rpc.ndr.NdrStructure.unpack">[docs]</a> <span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">unpack</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">stream</span><span class="p">):</span>
|
||||
@@ -333,7 +333,11 @@
|
||||
<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="c1"># print("Applying deref unpack")</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="n">new_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="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="s2">"post_unpack"</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
|
||||
<span class="n">new_data</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">post_unpack</span><span class="p">(</span><span class="n">new_data</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">new_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">data</span><span class="p">)</span></div>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
@@ -359,7 +363,7 @@
|
||||
<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="k">return</span> <span class="sa">b</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>
|
||||
@@ -375,12 +379,12 @@
|
||||
<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="k">return</span> <span class="n">dword_pad</span><span class="p">(</span><span class="n">ndrsize</span> <span class="o">+</span> <span class="sa">b</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="n">ndrdata</span> <span class="o">=</span> <span class="n">dword_pad</span><span class="p">(</span><span class="sa">b</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>
|
||||
@@ -406,7 +410,7 @@
|
||||
<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="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="sa">b</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>
|
||||
@@ -449,6 +453,8 @@
|
||||
<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>
|
||||
|
||||
<span class="k">class</span> <span class="nc">NdrCharConformantVaryingArrays</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">NdrByte</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">NdrHyperConformantVaryingArrays</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">NdrHyper</span>
|
||||
@@ -469,6 +475,13 @@
|
||||
<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="nb">bytearray</span><span class="p">(</span><span class="n">result</span><span class="p">)</span></div>
|
||||
|
||||
<span class="k">class</span> <span class="nc">NdrWcharConformantArray</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">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="nb">bytearray</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">NdrGuidConformantArray</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">NdrGuid</span>
|
||||
|
||||
@@ -502,12 +515,15 @@
|
||||
|
||||
<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>
|
||||
<span class="c1"># print("align {0}: {1}".format(size, size_to_align))</span>
|
||||
<span class="k">return</span> <span class="n">size_to_align</span>
|
||||
<span class="c1"># print("align {0}: 0".format(size))</span>
|
||||
<span class="k">return</span> <span class="mi">0</span></div></div>
|
||||
|
||||
|
||||
|
||||
+318
-19
@@ -44,7 +44,7 @@
|
||||
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
||||
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">windows.winobject.token</span> <span class="k">import</span> <span class="n">Token</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.winobject.token</span> <span class="k">import</span> <span class="n">Token</span><span class="p">,</span> <span class="n">KNOW_INTEGRITY_LEVEL</span>
|
||||
|
||||
|
||||
<span class="c1"># Specific access right</span>
|
||||
@@ -125,7 +125,7 @@
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SEMAPHORE_MODIFY_STATE</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">SEMAPHORE_ACCESS_RIGHT</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span>
|
||||
<span class="n">TIMER_ACCESS_RIGHT</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">TIMER_QUERY_STATE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">TIMER_QUERY_STATE</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
@@ -184,25 +184,114 @@
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">JOB_ACCESS_RIGHT</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">JOB_OBJECT_ASSIGN_PROCESS</span> <span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">JOB_OBJECT_SET_ATTRIBUTES</span> <span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">JOB_OBJECT_QUERY</span> <span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">JOB_OBJECT_TERMINATE</span> <span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">JOB_OBJECT_ASSIGN_PROCESS</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">JOB_OBJECT_SET_ATTRIBUTES</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">JOB_OBJECT_QUERY</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">JOB_OBJECT_TERMINATE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">JOB_OBJECT_SET_SECURITY_ATTRIBUTES</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">KEY_ACCESS_RIGHT</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">KEY_QUERY_VALUE</span> <span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">KEY_SET_VALUE</span> <span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">KEY_CREATE_SUB_KEY</span> <span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">KEY_ENUMERATE_SUB_KEYS</span> <span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">KEY_NOTIFY</span> <span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">KEY_CREATE_LINK</span> <span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">KEY_WOW64_64KEY</span> <span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">KEY_WOW64_32KEY</span> <span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">KEY_QUERY_VALUE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">KEY_SET_VALUE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">KEY_CREATE_SUB_KEY</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">KEY_ENUMERATE_SUB_KEYS</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">KEY_NOTIFY</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">KEY_CREATE_LINK</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">KEY_WOW64_64KEY</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">KEY_WOW64_32KEY</span><span class="p">,</span>
|
||||
<span class="c1"># KEY_WOW64_RES (0x0300) # Just a mask of the 2 last</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">SECTION_ACCESS_RIGHT</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SECTION_QUERY</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SECTION_MAP_WRITE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SECTION_MAP_READ</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SECTION_MAP_EXECUTE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SECTION_EXTEND_SIZE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SECTION_MAP_EXECUTE_EXPLICIT</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">COM_ACCESS_RIGHT</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">COM_EXECUTE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">COM_EXECUTE_LOCAL</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">COM_EXECUTE_REMOTE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">COM_ACTIVATE_LOCAL</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">COM_ACTIVATE_REMOTE</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">SERVICE_ACCESS_RIGHT</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SERVICE_QUERY_CONFIG</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SERVICE_CHANGE_CONFIG</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SERVICE_QUERY_STATUS</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SERVICE_ENUMERATE_DEPENDENTS</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SERVICE_START</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SERVICE_STOP</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SERVICE_PAUSE_CONTINUE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SERVICE_INTERROGATE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SERVICE_USER_DEFINED_CONTROL</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">ADS_ACCESS_RIGHT</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ADS_RIGHT_DS_CREATE_CHILD</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ADS_RIGHT_DS_DELETE_CHILD</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ADS_RIGHT_ACTRL_DS_LIST</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ADS_RIGHT_DS_SELF</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ADS_RIGHT_DS_READ_PROP</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ADS_RIGHT_DS_WRITE_PROP</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ADS_RIGHT_DS_DELETE_TREE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ADS_RIGHT_DS_LIST_OBJECT</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ADS_RIGHT_DS_CONTROL_ACCESS</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
|
||||
<span class="n">SPECIFIC_ACCESS_RIGTH_BY_TYPE</span> <span class="o">=</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">FlagMapper</span><span class="p">(),</span>
|
||||
<span class="s2">"file"</span><span class="p">:</span> <span class="n">FILE_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="s2">"directory"</span><span class="p">:</span> <span class="n">DIRECTORY_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="s2">"named_pipe"</span><span class="p">:</span> <span class="n">NAMED_PIPE_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="s2">"token"</span><span class="p">:</span> <span class="n">TOKEN_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="s2">"cluster_api"</span><span class="p">:</span> <span class="n">CLUSTER_API_ACCESS_RIGH</span><span class="p">,</span>
|
||||
<span class="s2">"fax"</span><span class="p">:</span> <span class="n">FAX_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="s2">"callback"</span><span class="p">:</span> <span class="n">CALLBACK_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="s2">"mutant"</span><span class="p">:</span> <span class="n">MUTANT_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="s2">"event"</span><span class="p">:</span> <span class="n">EVENT_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="s2">"semaphore"</span><span class="p">:</span> <span class="n">SEMAPHORE_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="s2">"io_completion"</span><span class="p">:</span> <span class="n">IO_COMPLETION_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="s2">"port"</span><span class="p">:</span> <span class="n">PORT_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="s2">"object_manager_type"</span><span class="p">:</span> <span class="n">OBJECT_MANAGER_TYPE_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="s2">"object_manager_directory"</span><span class="p">:</span> <span class="n">OBJECT_MANAGER_DIRECTORY_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="s2">"object_manager_symlink"</span><span class="p">:</span> <span class="n">OBJECT_MANAGER_SIMLINK_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="s2">"process"</span><span class="p">:</span> <span class="n">PROCESS_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="s2">"thread"</span><span class="p">:</span> <span class="n">THREAD_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="s2">"job"</span><span class="p">:</span> <span class="n">JOB_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="s2">"key"</span><span class="p">:</span> <span class="n">KEY_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="s2">"com"</span><span class="p">:</span> <span class="n">COM_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="s2">"service"</span><span class="p">:</span> <span class="n">SERVICE_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="s2">"ad"</span><span class="p">:</span> <span class="n">ADS_ACCESS_RIGHT</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="c1"># SD</span>
|
||||
|
||||
<span class="n">SD_CONTROL_FLAGS</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SE_OWNER_DEFAULTED</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SE_GROUP_DEFAULTED</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SE_DACL_PRESENT</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SE_DACL_DEFAULTED</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SE_SACL_PRESENT</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SE_SACL_DEFAULTED</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SE_DACL_UNTRUSTED</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SE_SERVER_SECURITY</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SE_DACL_AUTO_INHERIT_REQ</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SE_SACL_AUTO_INHERIT_REQ</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SE_DACL_AUTO_INHERITED</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SE_SACL_AUTO_INHERITED</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SE_DACL_PROTECTED</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SE_SACL_PROTECTED</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SE_RM_CONTROL_VALID</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SE_SELF_RELATIVE</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># ACE</span>
|
||||
|
||||
<span class="n">ACE_FLAGS</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span>
|
||||
@@ -225,6 +314,13 @@
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">DELETE</span> <span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">WRITE_DAC</span> <span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">WRITE_OWNER</span> <span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SYNCHRONIZE</span> <span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">MANDATORY_LABEL_ACE_MASK</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SYSTEM_MANDATORY_LABEL_NO_WRITE_UP</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SYSTEM_MANDATORY_LABEL_NO_READ_UP</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="AceHeader"><a class="viewcode-back" href="../../security.html#windows.security.AceHeader">[docs]</a><span class="k">class</span> <span class="nc">AceHeader</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ACE_HEADER</span><span class="p">):</span>
|
||||
@@ -325,7 +421,16 @@
|
||||
<span class="n">selfptr</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">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="n">gdef</span><span class="o">.</span><span class="n">PUCHAR</span><span class="p">)</span>
|
||||
<span class="n">datastart</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="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">sid</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="mi">4</span>
|
||||
<span class="n">dataend</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">Header</span><span class="o">.</span><span class="n">AceSize</span>
|
||||
<span class="k">return</span> <span class="n">selfptr</span><span class="p">[</span><span class="n">datastart</span><span class="p">:</span> <span class="n">dataend</span><span class="p">]</span></div>
|
||||
<span class="k">return</span> <span class="n">selfptr</span><span class="p">[</span><span class="n">datastart</span><span class="p">:</span> <span class="n">dataend</span><span class="p">]</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">condition</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">buff</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">BUFFER</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">BYTE</span><span class="p">)</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">application_data</span><span class="p">)</span>
|
||||
<span class="n">resstr</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">LPWSTR</span><span class="p">()</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">GetStringConditionFromBinary</span><span class="p">(</span><span class="n">buff</span><span class="p">,</span> <span class="n">StringAceCondition</span><span class="o">=</span><span class="n">resstr</span><span class="p">)</span>
|
||||
<span class="n">condition</span> <span class="o">=</span> <span class="n">resstr</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">LocalFree</span><span class="p">(</span><span class="n">resstr</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">condition</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="ObjectRelatedACE"><a class="viewcode-back" href="../../security.html#windows.security.ObjectRelatedACE">[docs]</a><span class="k">class</span> <span class="nc">ObjectRelatedACE</span><span class="p">(</span><span class="n">MaskAndSidACE</span><span class="p">):</span>
|
||||
@@ -610,10 +715,20 @@
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">GROUP_SECURITY_INFORMATION</span> <span class="o">|</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">DACL_SECURITY_INFORMATION</span> <span class="o">|</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ATTRIBUTE_SECURITY_INFORMATION</span> <span class="o">|</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">LABEL_SECURITY_INFORMATION</span> <span class="o">|</span> <span class="c1"># Integrity</span>
|
||||
<span class="c1"># gdef.SACL_SECURITY_INFORMATION | # Need special rights</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SCOPE_SECURITY_INFORMATION</span> <span class="o">|</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PROCESS_TRUST_LABEL_SECURITY_INFORMATION</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># https://docs.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-queryserviceobjectsecurity</span>
|
||||
<span class="c1"># Default flags for services</span>
|
||||
<span class="n">SERVICE_SECURITY_INFORMATION</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">OWNER_SECURITY_INFORMATION</span> <span class="o">|</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">GROUP_SECURITY_INFORMATION</span> <span class="o">|</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">DACL_SECURITY_INFORMATION</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="sd">"""The default ``flags`` value for functions expecting a</span>
|
||||
<span class="sd"> `SECURITY_INFORMATION <https://docs.microsoft.com/en-us/windows/desktop/SecAuthZ/security-information>`_.</span>
|
||||
|
||||
@@ -625,6 +740,7 @@
|
||||
<span class="sd"> - ``ATTRIBUTE_SECURITY_INFORMATION``</span>
|
||||
<span class="sd"> - ``SCOPE_SECURITY_INFORMATION``</span>
|
||||
<span class="sd"> - ``PROCESS_TRUST_LABEL_SECURITY_INFORMATION``</span>
|
||||
<span class="sd"> - ``LABEL_SECURITY_INFORMATION``</span>
|
||||
|
||||
<span class="sd"> .. warning::</span>
|
||||
|
||||
@@ -727,7 +843,7 @@
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span> <span class="o">=</span> <span class="bp">cls</span><span class="p">()</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">ConvertStringSecurityDescriptorToSecurityDescriptorA</span><span class="p">(</span>
|
||||
<span class="n">sddl</span><span class="p">,</span>
|
||||
<span class="n">sddl</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">gdef</span><span class="o">.</span><span class="n">SDDL_REVISION_1</span><span class="p">,</span>
|
||||
<span class="bp">self</span><span class="p">,</span>
|
||||
<span class="kc">None</span><span class="p">)</span>
|
||||
@@ -773,15 +889,59 @@
|
||||
<span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">_apply_to_handle_and_type</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">objtype</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">SE_KERNEL_OBJECT</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="c1"># Make SecurityDescriptor method has_audit_ace ?</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">flags</span> <span class="ow">is</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">OWNER_SECURITY_INFORMATION</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">GROUP_SECURITY_INFORMATION</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DACL_SECURITY_INFORMATION</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">LABEL_SECURITY_INFORMATION</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sacl</span> <span class="ow">and</span>
|
||||
<span class="nb">any</span><span class="p">(</span><span class="n">ace</span><span class="o">.</span><span class="n">Header</span><span class="o">.</span><span class="n">AceType</span> <span class="o">!=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SYSTEM_MANDATORY_LABEL_ACE_TYPE</span> <span class="k">for</span> <span class="n">ace</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">sacl</span><span class="p">)):</span>
|
||||
<span class="n">flags</span> <span class="o">|=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SACL_SECURITY_INFORMATION</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">SetSecurityInfo</span><span class="p">(</span>
|
||||
<span class="n">handle</span><span class="p">,</span>
|
||||
<span class="n">objtype</span><span class="p">,</span>
|
||||
<span class="n">flags</span><span class="p">,</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="p">,</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">group</span><span class="p">,</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">dacl</span><span class="p">,</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">sacl</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="SecurityDescriptor.from_filename"><a class="viewcode-back" href="../../security.html#windows.security.SecurityDescriptor.from_filename">[docs]</a> <span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">from_filename</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">query_sacl</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">DEFAULT_SECURITY_INFORMATION</span><span class="p">):</span>
|
||||
<span class="sd">"""Retrieve the security descriptor for the file ``filename``"""</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_from_name_and_type</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SE_FILE_OBJECT</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">flags</span><span class="p">,</span> <span class="n">query_sacl</span><span class="o">=</span><span class="n">query_sacl</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="SecurityDescriptor.to_filename"><a class="viewcode-back" href="../../security.html#windows.security.SecurityDescriptor.to_filename">[docs]</a> <span class="k">def</span> <span class="nf">to_filename</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">flags</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
<span class="s2">"Test method: WILL CHANGE"</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">flags</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="p">:</span>
|
||||
<span class="n">flags</span> <span class="o">|=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">OWNER_SECURITY_INFORMATION</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">group</span><span class="p">:</span>
|
||||
<span class="n">flags</span> <span class="o">|=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">GROUP_SECURITY_INFORMATION</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dacl</span><span class="p">:</span>
|
||||
<span class="n">flags</span> <span class="o">|=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DACL_SECURITY_INFORMATION</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sacl</span><span class="p">:</span>
|
||||
<span class="n">flags</span> <span class="o">|=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SACL_SECURITY_INFORMATION</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">SetNamedSecurityInfoW</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SE_FILE_OBJECT</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">group</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dacl</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sacl</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="SecurityDescriptor.from_service"><a class="viewcode-back" href="../../security.html#windows.security.SecurityDescriptor.from_service">[docs]</a> <span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">from_service</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">query_sacl</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">SERVICE_SECURITY_INFORMATION</span><span class="p">):</span>
|
||||
<span class="sd">"""Retrieve the security descriptor for the service named ``service``"""</span>
|
||||
<span class="n">sd</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_from_name_and_type</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SE_SERVICE</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">flags</span><span class="p">,</span> <span class="n">query_sacl</span><span class="o">=</span><span class="n">query_sacl</span><span class="p">)</span>
|
||||
<span class="n">sd</span><span class="o">.</span><span class="n">obj_type</span> <span class="o">=</span> <span class="s2">"service"</span>
|
||||
<span class="k">return</span> <span class="n">sd</span></div>
|
||||
|
||||
<div class="viewcode-block" id="SecurityDescriptor.from_handle"><a class="viewcode-back" href="../../security.html#windows.security.SecurityDescriptor.from_handle">[docs]</a> <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="n">query_sacl</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">DEFAULT_SECURITY_INFORMATION</span><span class="p">):</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="n">query_sacl</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">DEFAULT_SECURITY_INFORMATION</span><span class="p">,</span> <span class="n">obj_type</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Retrieve the security descriptor for the kernel object described by``handle``"""</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_from_handle_and_type</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SE_KERNEL_OBJECT</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">flags</span><span class="p">,</span> <span class="n">query_sacl</span><span class="o">=</span><span class="n">query_sacl</span><span class="p">)</span></div>
|
||||
<span class="n">sd</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_from_handle_and_type</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SE_KERNEL_OBJECT</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">flags</span><span class="p">,</span> <span class="n">query_sacl</span><span class="o">=</span><span class="n">query_sacl</span><span class="p">)</span>
|
||||
<span class="n">sd</span><span class="o">.</span><span class="n">obj_type</span> <span class="o">=</span> <span class="n">obj_type</span> <span class="c1"># Test</span>
|
||||
<span class="k">return</span> <span class="n">sd</span></div>
|
||||
|
||||
<div class="viewcode-block" id="SecurityDescriptor.from_binary"><a class="viewcode-back" href="../../security.html#windows.security.SecurityDescriptor.from_binary">[docs]</a> <span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">from_binary</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
@@ -806,7 +966,9 @@
|
||||
<span class="kc">None</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">result_cstr</span><span class="o">.</span><span class="n">value</span> <span class="c1"># Retrieve a python-str copy</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">LocalFree</span><span class="p">(</span><span class="n">result_cstr</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">result</span></div></div>
|
||||
<span class="k">return</span> <span class="n">result</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span></div>
|
||||
|
||||
<span class="fm">__str__</span> <span class="o">=</span> <span class="n">to_string</span>
|
||||
|
||||
|
||||
<span class="c1"># TST</span>
|
||||
@@ -823,6 +985,143 @@
|
||||
<span class="c1"># print("FREE SELF")</span>
|
||||
<span class="c1"># self._close_function(self)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">explain</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">type</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="nb">type</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">"obj_type"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">explain_sd</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sdtype</span><span class="o">=</span><span class="nb">type</span><span class="p">)</span></div>
|
||||
|
||||
<span class="c1"># Explain SD POC</span>
|
||||
<span class="c1"># If ok -> new file</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">explain_sid</span><span class="p">(</span><span class="n">sid</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">sid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="s2">"None"</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">info</span> <span class="o">=</span> <span class="sa">u</span><span class="s2">"</span><span class="se">\\</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">lookup_sid</span><span class="p">(</span><span class="n">sid</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="nb">print</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
||||
<span class="n">info</span> <span class="o">=</span> <span class="sa">u</span><span class="s2">"<lookup failed>"</span>
|
||||
<span class="k">return</span> <span class="sa">u</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">info</span><span class="p">,</span> <span class="n">sid</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">explain_mask</span><span class="p">(</span><span class="n">mask</span><span class="p">,</span> <span class="n">sdtype</span><span class="p">):</span>
|
||||
<span class="n">mapper</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">security</span><span class="o">.</span><span class="n">SPECIFIC_ACCESS_RIGTH_BY_TYPE</span><span class="p">[</span><span class="n">sdtype</span><span class="p">]</span>
|
||||
<span class="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="nb">range</span><span class="p">(</span><span class="mi">32</span><span class="p">):</span> <span class="c1"># sizeof ACCESS_MASK * 8</span>
|
||||
<span class="n">v</span> <span class="o">=</span> <span class="n">mask</span> <span class="o">&</span> <span class="p">(</span><span class="mi">1</span> <span class="o"><<</span> <span class="n">i</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">v</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">mapper</span><span class="p">[</span><span class="n">ACE_MASKS</span><span class="p">[</span><span class="n">v</span><span class="p">]])</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">explain_simple_ace</span><span class="p">(</span><span class="n">ace</span><span class="p">,</span> <span class="n">sdtype</span><span class="p">):</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">"Type:"</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">" "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">ace</span><span class="o">.</span><span class="n">Header</span><span class="o">.</span><span class="n">AceType</span><span class="p">)</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">"Flags:"</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">" </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">ace</span><span class="o">.</span><span class="n">Header</span><span class="o">.</span><span class="n">AceFlags</span><span class="p">)</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">"SID:"</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">" "</span> <span class="o">+</span> <span class="n">explain_sid</span><span class="p">(</span><span class="n">ace</span><span class="o">.</span><span class="n">sid</span><span class="p">)</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">"Mask:"</span>
|
||||
<span class="n">mapper</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">security</span><span class="o">.</span><span class="n">SPECIFIC_ACCESS_RIGTH_BY_TYPE</span><span class="p">[</span><span class="n">sdtype</span><span class="p">]</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">" "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">mapper</span><span class="p">[</span><span class="n">x</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">ace</span><span class="o">.</span><span class="n">mask</span><span class="p">))</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">explain_mandatory_label_ace</span><span class="p">(</span><span class="n">ace</span><span class="p">,</span> <span class="n">sdtype</span><span class="p">):</span>
|
||||
<span class="k">assert</span> <span class="n">ace</span><span class="o">.</span><span class="n">Header</span><span class="o">.</span><span class="n">AceType</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SYSTEM_MANDATORY_LABEL_ACE_TYPE</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">"Type:"</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">" </span><span class="si">{0}</span><span class="s2"> (Integrity Level)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ace</span><span class="o">.</span><span class="n">Header</span><span class="o">.</span><span class="n">AceType</span><span class="p">)</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">"Flags:"</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">" </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">ace</span><span class="o">.</span><span class="n">Header</span><span class="o">.</span><span class="n">AceFlags</span><span class="p">)</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">"SID:"</span>
|
||||
<span class="n">sid</span> <span class="o">=</span> <span class="n">ace</span><span class="o">.</span><span class="n">sid</span>
|
||||
<span class="n">count</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">sid</span><span class="p">)</span>
|
||||
<span class="n">integrity</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">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">yield</span> <span class="sa">u</span><span class="s2">" </span><span class="si">{0}</span><span class="s2"> (Integrity Level: </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">sid</span><span class="p">,</span> <span class="n">KNOW_INTEGRITY_LEVEL</span><span class="p">[</span><span class="n">integrity</span><span class="p">])</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">"Mask:"</span>
|
||||
<span class="n">mapper</span> <span class="o">=</span> <span class="n">MANDATORY_LABEL_ACE_MASK</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">" "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">mapper</span><span class="p">[</span><span class="n">x</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">ace</span><span class="o">.</span><span class="n">mask</span><span class="p">))</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">explain_object_related_ace</span><span class="p">(</span><span class="n">ace</span><span class="p">,</span> <span class="n">sdtype</span><span class="p">):</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">"Type:"</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">" "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">ace</span><span class="o">.</span><span class="n">Header</span><span class="o">.</span><span class="n">AceType</span><span class="p">)</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">"HeaderFlags:"</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">" </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">ace</span><span class="o">.</span><span class="n">Header</span><span class="o">.</span><span class="n">AceFlags</span><span class="p">)</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">"SID:"</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">" "</span> <span class="o">+</span> <span class="n">explain_sid</span><span class="p">(</span><span class="n">ace</span><span class="o">.</span><span class="n">sid</span><span class="p">)</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">"Mask:"</span>
|
||||
<span class="n">mapper</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">security</span><span class="o">.</span><span class="n">SPECIFIC_ACCESS_RIGTH_BY_TYPE</span><span class="p">[</span><span class="n">sdtype</span><span class="p">]</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">" "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">mapper</span><span class="p">[</span><span class="n">x</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">ace</span><span class="o">.</span><span class="n">mask</span><span class="p">))</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">"Flag:"</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">" "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">ace</span><span class="o">.</span><span class="n">flags</span><span class="p">)</span>
|
||||
<span class="n">object_type</span> <span class="o">=</span> <span class="n">ace</span><span class="o">.</span><span class="n">object_type</span>
|
||||
<span class="n">inherited_object_type</span> <span class="o">=</span> <span class="n">ace</span><span class="o">.</span><span class="n">inherited_object_type</span>
|
||||
<span class="k">if</span> <span class="n">object_type</span><span class="p">:</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">"ObjectType"</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">" "</span> <span class="o">+</span> <span class="n">object_type</span>
|
||||
<span class="k">if</span> <span class="n">inherited_object_type</span><span class="p">:</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">"InheritedObjectType"</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">" "</span> <span class="o">+</span> <span class="n">inherited_object_type</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">explain_callback_ace</span><span class="p">(</span><span class="n">ace</span><span class="p">,</span> <span class="n">sdtype</span><span class="p">):</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">"Type:"</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">" "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">ace</span><span class="o">.</span><span class="n">Header</span><span class="o">.</span><span class="n">AceType</span><span class="p">)</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">"HeaderFlags:"</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">" </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">ace</span><span class="o">.</span><span class="n">Header</span><span class="o">.</span><span class="n">AceFlags</span><span class="p">)</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">"SID:"</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">" "</span> <span class="o">+</span> <span class="n">explain_sid</span><span class="p">(</span><span class="n">ace</span><span class="o">.</span><span class="n">sid</span><span class="p">)</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">"Mask:"</span>
|
||||
<span class="n">mapper</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">security</span><span class="o">.</span><span class="n">SPECIFIC_ACCESS_RIGTH_BY_TYPE</span><span class="p">[</span><span class="n">sdtype</span><span class="p">]</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">" "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">mapper</span><span class="p">[</span><span class="n">x</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">ace</span><span class="o">.</span><span class="n">mask</span><span class="p">))</span>
|
||||
<span class="k">yield</span> <span class="s2">"Application data:"</span>
|
||||
<span class="k">yield</span> <span class="s2">" "</span> <span class="o">+</span> <span class="nb">repr</span><span class="p">(</span><span class="n">ace</span><span class="o">.</span><span class="n">application_data</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span><span class="p">,</span> <span class="s2">""</span><span class="p">))</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">condition</span> <span class="o">=</span> <span class="n">ace</span><span class="o">.</span><span class="n">condition</span>
|
||||
<span class="k">yield</span> <span class="s2">"Condition:"</span>
|
||||
<span class="k">yield</span> <span class="s2">" "</span> <span class="o">+</span> <span class="n">condition</span>
|
||||
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
|
||||
|
||||
<span class="n">ACE_EXPLAINER</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ACCESS_ALLOWED_ACE_TYPE</span><span class="p">:</span> <span class="n">explain_simple_ace</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ACCESS_DENIED_ACE_TYPE</span><span class="p">:</span> <span class="n">explain_simple_ace</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SYSTEM_MANDATORY_LABEL_ACE_TYPE</span><span class="p">:</span> <span class="n">explain_mandatory_label_ace</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SYSTEM_AUDIT_ACE_TYPE</span><span class="p">:</span> <span class="n">explain_simple_ace</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ACCESS_ALLOWED_OBJECT_ACE_TYPE</span><span class="p">:</span> <span class="n">explain_object_related_ace</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ACCESS_DENIED_OBJECT_ACE_TYPE</span><span class="p">:</span> <span class="n">explain_object_related_ace</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">ACCESS_ALLOWED_CALLBACK_ACE_TYPE</span><span class="p">:</span> <span class="n">explain_callback_ace</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">explain_acl</span><span class="p">(</span><span class="n">acl</span><span class="p">,</span> <span class="n">sdtype</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">acl</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">"None"</span>
|
||||
<span class="k">for</span> <span class="n">ace</span> <span class="ow">in</span> <span class="n">acl</span><span class="o">.</span><span class="n">aces</span><span class="p">:</span>
|
||||
<span class="k">yield</span> <span class="nb">str</span><span class="p">(</span><span class="n">ace</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">ACE_EXPLAINER</span><span class="p">[</span><span class="n">ace</span><span class="o">.</span><span class="n">Header</span><span class="o">.</span><span class="n">AceType</span><span class="p">](</span><span class="n">ace</span><span class="p">,</span> <span class="n">sdtype</span><span class="p">):</span>
|
||||
<span class="k">yield</span> <span class="sa">u</span><span class="s2">" "</span> <span class="o">+</span> <span class="n">line</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">explain_sd</span><span class="p">(</span><span class="n">sd</span><span class="p">,</span> <span class="n">sdtype</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">u</span><span class="s2">"Security Descriptor: </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">sd</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">u</span><span class="s2">" Owner:"</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">u</span><span class="s2">" "</span> <span class="o">+</span> <span class="n">explain_sid</span><span class="p">(</span><span class="n">sd</span><span class="o">.</span><span class="n">owner</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">u</span><span class="s2">" Group:"</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">u</span><span class="s2">" "</span> <span class="o">+</span> <span class="n">explain_sid</span><span class="p">(</span><span class="n">sd</span><span class="o">.</span><span class="n">group</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">u</span><span class="s2">" Control:"</span><span class="p">)</span>
|
||||
<span class="n">control</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">control</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" </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">flag</span> <span class="k">for</span> <span class="n">flag</span> <span class="ow">in</span> <span class="n">SD_CONTROL_FLAGS</span> <span class="k">if</span> <span class="n">control</span> <span class="o">&</span> <span class="n">flag</span><span class="p">]))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">u</span><span class="s2">" Dacl: </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">sd</span><span class="o">.</span><span class="n">dacl</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="n">sd</span><span class="o">.</span><span class="n">dacl</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">explain_acl</span><span class="p">(</span><span class="n">sd</span><span class="o">.</span><span class="n">dacl</span><span class="p">,</span> <span class="n">sdtype</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">u</span><span class="s2">" "</span> <span class="o">+</span> <span class="n">line</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">UnicodeError</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" "</span> <span class="o">+</span> <span class="n">line</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">"cp1252"</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">u</span><span class="s2">" Sacl: </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">sd</span><span class="o">.</span><span class="n">sacl</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="n">sd</span><span class="o">.</span><span class="n">sacl</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">explain_acl</span><span class="p">(</span><span class="n">sd</span><span class="o">.</span><span class="n">sacl</span><span class="p">,</span> <span class="n">sdtype</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">u</span><span class="s2">" "</span> <span class="o">+</span> <span class="n">line</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">UnicodeError</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" "</span> <span class="o">+</span> <span class="n">line</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">"cp1252"</span><span class="p">))</span>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
|
||||
+11
-4
@@ -46,10 +46,11 @@
|
||||
<span class="kn">import</span> <span class="nn">windows</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.native_exec.simple_x86</span> <span class="k">as</span> <span class="nn">x86</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.native_exec.simple_x64</span> <span class="k">as</span> <span class="nn">x64</span>
|
||||
<span class="kn">from</span> <span class="nn">generated_def.winstructs</span> <span class="k">import</span> <span class="o">*</span>
|
||||
<span class="kn">from</span> <span class="nn">.generated_def.winstructs</span> <span class="k">import</span> <span class="o">*</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">process</span>
|
||||
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
|
||||
<span class="kn">from</span> <span class="nn">winproxy</span> <span class="k">import</span> <span class="n">NeededParameter</span>
|
||||
<span class="kn">from</span> <span class="nn">.winproxy</span> <span class="k">import</span> <span class="n">NeededParameter</span>
|
||||
<span class="kn">from</span> <span class="nn">.pycompat</span> <span class="k">import</span> <span class="n">int_types</span>
|
||||
|
||||
<span class="c1"># Special code for syswow64 process</span>
|
||||
<span class="n">CS_32bits</span> <span class="o">=</span> <span class="mh">0x23</span>
|
||||
@@ -72,6 +73,12 @@
|
||||
|
||||
<span class="n">transition</span> <span class="o">=</span> <span class="n">x86</span><span class="o">.</span><span class="n">MultipleInstr</span><span class="p">()</span>
|
||||
<span class="n">transition</span> <span class="o">+=</span> <span class="n">x86</span><span class="o">.</span><span class="n">Call</span><span class="p">(</span><span class="n">CS_64bits</span><span class="p">,</span> <span class="n">x64shellcodeaddr</span><span class="p">)</span>
|
||||
<span class="c1"># Reset the SS segment selector.</span>
|
||||
<span class="c1"># We need to do that due to a bug in AMD CPUs with RETF & SS</span>
|
||||
<span class="c1"># https://github.com/hakril/PythonForWindows/issues/10</span>
|
||||
<span class="c1"># http://blog.rewolf.pl/blog/?p=1484</span>
|
||||
<span class="n">transition</span> <span class="o">+=</span> <span class="n">x86</span><span class="o">.</span><span class="n">Mov</span><span class="p">(</span><span class="s2">"ECX"</span><span class="p">,</span> <span class="s2">"SS"</span><span class="p">)</span>
|
||||
<span class="n">transition</span> <span class="o">+=</span> <span class="n">x86</span><span class="o">.</span><span class="n">Mov</span><span class="p">(</span><span class="s2">"SS"</span><span class="p">,</span> <span class="s2">"ECX"</span><span class="p">)</span>
|
||||
<span class="n">transition</span> <span class="o">+=</span> <span class="n">x86</span><span class="o">.</span><span class="n">Ret</span><span class="p">()</span>
|
||||
|
||||
<span class="n">stubaddr</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">allocator</span><span class="o">.</span><span class="n">write_code</span><span class="p">(</span><span class="n">transition</span><span class="o">.</span><span class="n">get_code</span><span class="p">())</span>
|
||||
@@ -162,7 +169,7 @@
|
||||
<span class="c1"># Transform args (ctypes byref possibly) to int</span>
|
||||
<span class="n">writable_args</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">value</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">long</span><span class="p">)):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">int_types</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</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="n">value</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="n">value</span>
|
||||
<span class="k">except</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">ArgumentError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
@@ -278,7 +285,7 @@
|
||||
<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">WinproxyError</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="k">raise</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">WinproxyError</span><span class="p">(</span><span class="s2">"NtQuerySystemInformation failed with NTStatus </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">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>
|
||||
|
||||
+10
-1
@@ -59,6 +59,8 @@
|
||||
<span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cache_name</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="nb">property</span><span class="p">(</span><span class="n">prop</span><span class="p">,</span> <span class="n">doc</span><span class="o">=</span><span class="n">f</span><span class="o">.</span><span class="vm">__doc__</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># Slow fix of the typo :)</span>
|
||||
<span class="n">fixedproperty</span> <span class="o">=</span> <span class="n">fixedpropety</span>
|
||||
|
||||
<span class="c1"># type replacement based on name</span>
|
||||
<span class="k">def</span> <span class="nf">transform_ctypes_fields</span><span class="p">(</span><span class="n">struct</span><span class="p">,</span> <span class="n">replacement</span><span class="p">):</span>
|
||||
@@ -96,7 +98,14 @@
|
||||
<span class="nb">print</span><span class="p">(</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">name</span><span class="p">,</span> <span class="n">value</span><span class="p">))</span>
|
||||
<span class="k">return</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">fname</span><span class="p">,</span> <span class="n">ftype</span> <span class="ow">in</span> <span class="n">struct</span><span class="o">.</span><span class="n">_fields_</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">struct</span><span class="o">.</span><span class="n">_fields_</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">field</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
|
||||
<span class="n">fname</span><span class="p">,</span> <span class="n">ftype</span> <span class="o">=</span> <span class="n">field</span>
|
||||
<span class="n">nb_bits</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">field</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
|
||||
<span class="n">fname</span><span class="p">,</span> <span class="n">ftype</span><span class="p">,</span> <span class="n">nb_bits</span> <span class="o">=</span> <span class="n">field</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 ctypes field entry format <</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">field</span><span class="p">))</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">value</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">struct</span><span class="p">,</span> <span class="n">fname</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>
|
||||
|
||||
+138
-40
@@ -42,7 +42,9 @@
|
||||
<span class="kn">import</span> <span class="nn">os</span>
|
||||
<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">math</span>
|
||||
<span class="kn">import</span> <span class="nn">datetime</span>
|
||||
<span class="kn">import</span> <span class="nn">warnings</span>
|
||||
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">namedtuple</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">windows</span>
|
||||
@@ -90,7 +92,15 @@
|
||||
<span class="sd">"""Return a Python :class:`file` around a ``Windows`` HANDLE"""</span>
|
||||
<span class="n">flags</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">O_BINARY</span> <span class="k">if</span> <span class="s2">"b"</span> <span class="ow">in</span> <span class="n">mode</span> <span class="k">else</span> <span class="n">os</span><span class="o">.</span><span class="n">O_TEXT</span>
|
||||
<span class="n">fd</span> <span class="o">=</span> <span class="n">msvcrt</span><span class="o">.</span><span class="n">open_osfhandle</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">flags</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">fdopen</span><span class="p">(</span><span class="n">fd</span><span class="p">,</span> <span class="n">mode</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span></div>
|
||||
<span class="n">kwargs</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">is_py3</span> <span class="ow">and</span> <span class="n">flags</span> <span class="o">==</span> <span class="n">os</span><span class="o">.</span><span class="n">O_TEXT</span><span class="p">:</span>
|
||||
<span class="c1"># Buffering, encoding</span>
|
||||
<span class="n">args</span> <span class="o">=</span> <span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="s2">"ascii"</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># Buffering</span>
|
||||
<span class="n">args</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,)</span>
|
||||
<span class="c1"># In py2 os.fdopen do not accept kwargs</span>
|
||||
<span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">fdopen</span><span class="p">(</span><span class="n">fd</span><span class="p">,</span> <span class="n">mode</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="get_handle_from_file"><a class="viewcode-back" href="../../../utils.html#windows.utils.get_handle_from_file">[docs]</a><span class="k">def</span> <span class="nf">get_handle_from_file</span><span class="p">(</span><span class="n">f</span><span class="p">):</span>
|
||||
@@ -107,7 +117,7 @@
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span> <span class="o">=</span> <span class="n">console_stdout</span>
|
||||
|
||||
<span class="n">stdin_handle</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetStdHandle</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">STD_INPUT_HANDLE</span><span class="p">)</span>
|
||||
<span class="n">console_stdin</span> <span class="o">=</span> <span class="n">create_file_from_handle</span><span class="p">(</span><span class="n">stdin_handle</span><span class="p">,</span> <span class="s2">"r+"</span><span class="p">)</span>
|
||||
<span class="n">console_stdin</span> <span class="o">=</span> <span class="n">create_file_from_handle</span><span class="p">(</span><span class="n">stdin_handle</span><span class="p">,</span> <span class="s2">"r"</span><span class="p">)</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stdin</span> <span class="o">=</span> <span class="n">console_stdin</span>
|
||||
|
||||
<span class="n">stderr_handle</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetStdHandle</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">STD_ERROR_HANDLE</span><span class="p">)</span>
|
||||
@@ -126,7 +136,7 @@
|
||||
<span class="n">lpStartupInfo</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">StartupInfo</span><span class="p">)</span>
|
||||
<span class="n">lpCommandLine</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">if</span> <span class="n">args</span><span class="p">:</span>
|
||||
<span class="n">lpCommandLine</span> <span class="o">=</span> <span class="p">(</span><span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">args</span><span class="p">]))</span>
|
||||
<span class="n">lpCommandLine</span> <span class="o">=</span> <span class="p">(</span><span class="sa">b</span><span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">a</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">args</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">CreateProcessA</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">lpCommandLine</span><span class="o">=</span><span class="n">lpCommandLine</span><span class="p">,</span> <span class="n">dwCreationFlags</span><span class="o">=</span><span class="n">dwCreationFlags</span><span class="p">,</span> <span class="n">lpProcessInformation</span><span class="o">=</span><span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">proc_info</span><span class="p">),</span> <span class="n">lpStartupInfo</span><span class="o">=</span><span class="n">lpStartupInfo</span><span class="p">)</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"CreateProcessA new process handle </span><span class="si">{:#x}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">proc_info</span><span class="o">.</span><span class="n">hProcess</span><span class="p">),</span> <span class="s2">"HANDLE"</span><span class="p">)</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="s2">"CreateProcessA new thread handle </span><span class="si">{:#x}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">proc_info</span><span class="o">.</span><span class="n">hThread</span><span class="p">),</span> <span class="s2">"HANDLE"</span><span class="p">)</span>
|
||||
@@ -135,11 +145,22 @@
|
||||
<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">device_io_control</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">iocode</span><span class="p">,</span> <span class="n">buffer</span><span class="p">):</span>
|
||||
<span class="n">outbuffer</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_buffer</span><span class="p">(</span><span class="mh">0x1000</span><span class="p">)</span>
|
||||
<span class="n">returned_size</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">DeviceIoControl</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">iocode</span><span class="p">,</span> <span class="n">buffer</span><span class="p">,</span> <span class="n">lpOutBuffer</span><span class="o">=</span><span class="n">outbuffer</span><span class="p">,</span> <span class="n">lpBytesReturned</span><span class="o">=</span><span class="n">returned_size</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">outbuffer</span><span class="p">[:</span><span class="n">returned_size</span><span class="o">.</span><span class="n">value</span><span class="p">]</span>
|
||||
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">tmp_cp_as</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">token</span><span class="p">):</span>
|
||||
<span class="n">proc_info</span> <span class="o">=</span> <span class="n">PROCESS_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">CreateProcessAsUserA</span><span class="p">(</span><span class="n">token</span><span class="p">,</span> <span class="n">path</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">dwCreationFlags</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">CREATE_NEW_CONSOLE</span><span class="p">,</span> <span class="n">lpProcessInformation</span><span class="o">=</span><span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">proc_info</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="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>
|
||||
|
||||
<span class="k">def</span> <span class="nf">find_handle</span><span class="p">(</span><span class="n">proc</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">h</span> <span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">handles</span> <span class="k">if</span> <span class="n">h</span><span class="o">.</span><span class="n">dwProcessId</span> <span class="o">==</span> <span class="n">proc</span><span class="o">.</span><span class="n">pid</span> <span class="ow">and</span> <span class="n">h</span><span class="o">.</span><span class="n">wValue</span> <span class="o">==</span> <span class="n">value</span><span class="p">]</span>
|
||||
|
||||
<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>
|
||||
@@ -231,6 +252,11 @@
|
||||
|
||||
<span class="n">UNIX_EPOCH</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">(</span><span class="mi">1970</span><span class="p">,</span> <span class="mi">1</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="mi">0</span><span class="p">)</span>
|
||||
<span class="n">WINDOWS_EPOCH</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">(</span><span class="mi">1601</span><span class="p">,</span> <span class="mi">1</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="mi">0</span><span class="p">)</span>
|
||||
<span class="c1"># https://docs.microsoft.com/en-us/cpp/atl-mfc-shared/date-type?view=vs-2019</span>
|
||||
<span class="c1"># Why keep it simple and have only one epoch ? :D</span>
|
||||
<span class="c1"># I don't want to name this "DATE_EPOCH" as everything is a DATE</span>
|
||||
<span class="c1"># So let's go with COMDATE as this structure seems very related to COM/AUTOMATION</span>
|
||||
<span class="n">COMDATE_EPOCH</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">(</span><span class="mi">1899</span><span class="p">,</span> <span class="mi">12</span><span class="p">,</span> <span class="mi">30</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
|
||||
<span class="n">WIN_TO_UNIX_EPOCH_SECOND</span> <span class="o">=</span> <span class="nb">int</span><span class="p">((</span><span class="n">UNIX_EPOCH</span> <span class="o">-</span> <span class="n">WINDOWS_EPOCH</span><span class="p">)</span><span class="o">.</span><span class="n">total_seconds</span><span class="p">())</span>
|
||||
<span class="n">WIN_TICK_PER_SECOND_INT</span> <span class="o">=</span> <span class="mi">10</span><span class="o">**</span><span class="mi">7</span>
|
||||
@@ -241,19 +267,45 @@
|
||||
|
||||
<span class="k">def</span> <span class="nf">unix_timestamp_from_filetime</span><span class="p">(</span><span class="n">filetime</span><span class="p">):</span>
|
||||
<span class="c1"># Round the filetime</span>
|
||||
<span class="n">round_win_ticks</span> <span class="o">=</span> <span class="p">((</span><span class="n">filetime</span> <span class="o">/</span> <span class="mi">10</span><span class="p">)</span> <span class="o">+</span> <span class="nb">int</span><span class="p">(</span><span class="nb">round</span><span class="p">((</span><span class="n">filetime</span> <span class="o">%</span> <span class="mi">10</span><span class="p">)</span> <span class="o">/</span> <span class="mf">10.0</span><span class="p">)))</span> <span class="o">*</span> <span class="mi">10</span>
|
||||
<span class="n">last_number</span> <span class="o">=</span> <span class="p">(</span><span class="n">filetime</span> <span class="o">%</span> <span class="mi">10</span><span class="p">)</span>
|
||||
<span class="c1"># We do some sort of "manual rounding cause of py2 vs py3</span>
|
||||
<span class="c1"># PY2: round(0.5) == 1</span>
|
||||
<span class="c1"># PY3: round(0.5) == 0</span>
|
||||
<span class="k">if</span> <span class="n">last_number</span> <span class="o">==</span> <span class="mi">5</span><span class="p">:</span>
|
||||
<span class="n">rounding</span> <span class="o">=</span> <span class="mi">1</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">rounding</span> <span class="o">=</span> <span class="nb">round</span><span class="p">(</span><span class="n">last_number</span> <span class="o">/</span> <span class="mf">10.0</span><span class="p">)</span>
|
||||
<span class="n">round_win_ticks</span> <span class="o">=</span> <span class="p">((</span><span class="n">filetime</span> <span class="o">//</span> <span class="mi">10</span><span class="p">)</span> <span class="o">+</span> <span class="nb">int</span><span class="p">(</span><span class="n">rounding</span><span class="p">))</span> <span class="o">*</span> <span class="mi">10</span>
|
||||
<span class="k">return</span> <span class="nb">round</span><span class="p">((</span><span class="n">round_win_ticks</span> <span class="o">-</span> <span class="n">WIN_TO_UNIX_EPOCH_WIN_TICKS</span><span class="p">)</span> <span class="o">/</span> <span class="n">WIN_TICK_PER_SECOND_FLOAT</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">datetime_from_filetime</span><span class="p">(</span><span class="n">filetime</span><span class="p">):</span>
|
||||
<span class="sd">"""return a :class:`datetime.datetime` from a ``windows`` FILETIME int"""</span>
|
||||
<span class="c1"># Manual non-approx rounding as filetime will not have a perfect representation as Python float</span>
|
||||
<span class="n">round_microsecond</span> <span class="o">=</span> <span class="p">(</span><span class="n">filetime</span> <span class="o">/</span> <span class="mi">10</span><span class="p">)</span> <span class="o">+</span> <span class="nb">int</span><span class="p">(</span><span class="nb">round</span><span class="p">((</span><span class="n">filetime</span> <span class="o">%</span> <span class="mi">10</span><span class="p">)</span> <span class="o">/</span> <span class="mf">10.0</span><span class="p">))</span>
|
||||
<span class="c1"># We do some sort of "manual rounding cause of py2 vs py3</span>
|
||||
<span class="c1"># PY2: round(0.5) == 1</span>
|
||||
<span class="c1"># PY3: round(0.5) == 0</span>
|
||||
<span class="n">last_number</span> <span class="o">=</span> <span class="p">(</span><span class="n">filetime</span> <span class="o">%</span> <span class="mi">10</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">last_number</span> <span class="o">==</span> <span class="mi">5</span><span class="p">:</span>
|
||||
<span class="n">rounding</span> <span class="o">=</span> <span class="mi">1</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">rounding</span> <span class="o">=</span> <span class="nb">round</span><span class="p">(</span><span class="n">last_number</span> <span class="o">/</span> <span class="mf">10.0</span><span class="p">)</span>
|
||||
<span class="n">round_microsecond</span> <span class="o">=</span> <span class="p">(</span><span class="n">filetime</span> <span class="o">//</span> <span class="mi">10</span><span class="p">)</span> <span class="o">+</span> <span class="nb">int</span><span class="p">(</span><span class="n">rounding</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">WINDOWS_EPOCH</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">microseconds</span><span class="o">=</span><span class="n">round_microsecond</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">filetime_from_datetime</span><span class="p">(</span><span class="n">dtime</span><span class="p">):</span>
|
||||
<span class="sd">"""Return the FILETIME value from a :class:`datetime.datetime` in a python :class:`int`"""</span>
|
||||
<span class="k">return</span> <span class="nb">int</span><span class="p">((</span><span class="n">dtime</span> <span class="o">-</span> <span class="n">WINDOWS_EPOCH</span><span class="p">)</span><span class="o">.</span><span class="n">total_seconds</span><span class="p">())</span> <span class="o">*</span> <span class="n">WIN_TICK_PER_SECOND_INT</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">datetime_from_comdate</span><span class="p">(</span><span class="n">comtime</span><span class="p">):</span>
|
||||
<span class="c1"># Hour values are expressed as the absolute value of the fractional part of the number.</span>
|
||||
<span class="k">if</span> <span class="n">comtime</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="c1"># The date timeline becomes discontinuous for date values less than 0 (before 30 December 1899). This is because the whole-number portion of the date value is treated as signed, while the fractional part is treated as unsigned.</span>
|
||||
<span class="c1"># other words, the whole-number part of the date value may be positive or negative, while the fractional part of the date value is always added to the overall logical date.</span>
|
||||
<span class="c1"># WTF :D</span>
|
||||
<span class="n">dec</span><span class="p">,</span> <span class="n">nb</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">modf</span><span class="p">(</span><span class="n">comtime</span><span class="p">)</span>
|
||||
<span class="n">final_delta</span> <span class="o">=</span> <span class="n">nb</span> <span class="o">+</span> <span class="nb">abs</span><span class="p">(</span><span class="n">dec</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">COMDATE_EPOCH</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">final_delta</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">COMDATE_EPOCH</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">comtime</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">FixedInteractiveConsole</span><span class="p">(</span><span class="n">code</span><span class="o">.</span><span class="n">InteractiveConsole</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">raw_input</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prompt</span><span class="o">=</span><span class="s2">">>>"</span><span class="p">):</span>
|
||||
@@ -269,24 +321,8 @@
|
||||
<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>
|
||||
<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="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_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="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s2">"get_kernel_modules() will be removed: use windows.system.modules instead"</span><span class="p">,</span> <span class="ne">DeprecationWarning</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">modules</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">FileStreamInformation</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">FILE_STREAM_INFORMATION</span><span class="p">):</span>
|
||||
<span class="nd">@property</span>
|
||||
@@ -331,7 +367,7 @@
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">query_file_information</span><span class="p">(</span><span class="n">file_or_handle</span><span class="p">,</span> <span class="n">file_info_class</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">file_or_handle</span><span class="p">,</span> <span class="n">file</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">file_or_handle</span><span class="p">,</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">int_types</span><span class="p">):</span>
|
||||
<span class="n">file_or_handle</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">get_handle_from_file</span><span class="p">(</span><span class="n">file_or_handle</span><span class="p">)</span>
|
||||
<span class="n">handle</span> <span class="o">=</span> <span class="n">file_or_handle</span>
|
||||
<span class="n">io_status</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IO_STATUS_BLOCK</span><span class="p">()</span>
|
||||
@@ -341,7 +377,6 @@
|
||||
<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">NtQueryInformationFile</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">io_status</span><span class="p">,</span> <span class="n">pinfo</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">info</span><span class="p">),</span> <span class="n">FileInformationClass</span><span class="o">=</span><span class="n">file_info_class</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"># import pdb;pdb.set_trace()</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">&</span> <span class="mh">0xffffffff</span><span class="p">)</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">STATUS_BUFFER_OVERFLOW</span><span class="p">:</span>
|
||||
<span class="k">raise</span>
|
||||
<span class="c1"># STATUS_BUFFER_OVERFLOW -> Guess we have a FILE_NAME_INFORMATION somewhere that need a bigger buffer</span>
|
||||
@@ -358,9 +393,64 @@
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">NtQueryInformationFile</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">io_status</span><span class="p">,</span> <span class="n">buffer</span><span class="p">,</span> <span class="n">full_size</span><span class="p">,</span> <span class="n">FileInformationClass</span><span class="o">=</span><span class="n">file_info_class</span><span class="p">)</span>
|
||||
<span class="n">pinfo</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">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">ntqueryinformationfile_info_structs</span><span class="p">[</span><span class="n">file_info_class</span><span class="p">]))</span>
|
||||
<span class="n">info</span> <span class="o">=</span> <span class="n">pinfo</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="c1"># return list of ADS if FileStreamInformation ?</span>
|
||||
<span class="k">return</span> <span class="n">info</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">EAInfo</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">FILE_FULL_EA_INFORMATION</span><span class="p">):</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">LPCSTR</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="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">EaName</span><span class="o">.</span><span class="n">offset</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">value_addr</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">+</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">EaName</span><span class="o">.</span><span class="n">offset</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">EaNameLength</span> <span class="o">+</span> <span class="mi">1</span> <span class="c1"># +1 -> Name \x00</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_char</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">EaValueLength</span><span class="p">)</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="n">value_addr</span><span class="p">)[:]</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">next</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="c1"># NextEntryOffset is Relative to our current offset</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">NextEntryOffset</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="k">try</span><span class="p">:</span> <span class="c1"># First entry</span>
|
||||
<span class="n">raw_buffer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_b_base_</span><span class="o">.</span><span class="n">_raw_buffer_</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="n">raw_buffer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_raw_buffer_</span>
|
||||
<span class="n">curoffset</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">"_raw_buffer_offset_"</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
<span class="n">new</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">from_buffer</span><span class="p">(</span><span class="n">raw_buffer</span><span class="p">,</span> <span class="n">curoffset</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">NextEntryOffset</span><span class="p">)</span>
|
||||
<span class="c1"># Keep the underlying buffer easily accessible</span>
|
||||
<span class="n">new</span><span class="o">.</span><span class="n">_raw_buffer_</span> <span class="o">=</span> <span class="n">raw_buffer</span>
|
||||
<span class="n">new</span><span class="o">.</span><span class="n">_raw_buffer_offset_</span> <span class="o">=</span> <span class="n">curoffset</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">NextEntryOffset</span>
|
||||
<span class="k">return</span> <span class="n">new</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">while</span> <span class="bp">self</span><span class="p">:</span>
|
||||
<span class="k">yield</span> <span class="bp">self</span>
|
||||
<span class="bp">self</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">next</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s1">'<</span><span class="si">{0}</span><span class="s1"> name="</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="n">MAXIMUM_EA_SIZE</span> <span class="o">=</span> <span class="mh">0x0000ffff</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">query_extended_attributes</span><span class="p">(</span><span class="n">file_or_handle</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">file_or_handle</span><span class="p">,</span> <span class="n">file</span><span class="p">):</span>
|
||||
<span class="n">file_or_handle</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">get_handle_from_file</span><span class="p">(</span><span class="n">file_or_handle</span><span class="p">)</span>
|
||||
<span class="c1"># Check EaSize</span>
|
||||
<span class="n">x</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">query_file_information</span><span class="p">(</span><span class="n">file_or_handle</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FileEaInformation</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">x</span><span class="o">.</span><span class="n">EaSize</span><span class="p">:</span>
|
||||
<span class="k">return</span>
|
||||
<span class="n">io_status</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IO_STATUS_BLOCK</span><span class="p">()</span>
|
||||
<span class="c1"># Handle Win10 / Win7</span>
|
||||
<span class="c1"># Saw on Win10 -> EaSize > MAXIMUM_EA_SIZE</span>
|
||||
<span class="c1"># Saw on Win7 -> EaSize not enought (STATUS_BUFFER_OVERFLOW)</span>
|
||||
<span class="n">buffsize</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">MAXIMUM_EA_SIZE</span><span class="p">,</span> <span class="n">x</span><span class="o">.</span><span class="n">EaSize</span><span class="p">)</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">BUFFER</span><span class="p">(</span><span class="n">EAInfo</span><span class="p">)(</span><span class="n">size</span><span class="o">=</span><span class="n">buffsize</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">NtQueryEaFile</span><span class="p">(</span><span class="n">file_or_handle</span><span class="p">,</span> <span class="n">io_status</span><span class="p">,</span> <span class="n">buffer</span><span class="p">,</span> <span class="n">buffsize</span><span class="p">,</span> <span class="kc">False</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="kc">True</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">buffer</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -380,7 +470,7 @@
|
||||
<span class="c1"># TODO: FileFsDriverPathInformation</span>
|
||||
<span class="c1"># TODO: Extended FILE_FS_VOLUME_INFORMATION that can read the real value of 'VolumeLabel'</span>
|
||||
<span class="k">def</span> <span class="nf">query_volume_information</span><span class="p">(</span><span class="n">file_or_handle</span><span class="p">,</span> <span class="n">volume_info_class</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">file_or_handle</span><span class="p">,</span> <span class="n">file</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">file_or_handle</span><span class="p">,</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">int_types</span><span class="p">):</span>
|
||||
<span class="n">file_or_handle</span> <span class="o">=</span> <span class="n">get_handle_from_file</span><span class="p">(</span><span class="n">file_or_handle</span><span class="p">)</span>
|
||||
<span class="n">handle</span> <span class="o">=</span> <span class="n">file_or_handle</span>
|
||||
<span class="n">io_status</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IO_STATUS_BLOCK</span><span class="p">()</span>
|
||||
@@ -412,6 +502,18 @@
|
||||
<span class="k">return</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="p">(</span><span class="n">code</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="n">_WINERROR_BY_VALUE</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">def</span> <span class="nf">winerror</span><span class="p">(</span><span class="n">code</span><span class="p">):</span>
|
||||
<span class="k">global</span> <span class="n">_WINERROR_BY_VALUE</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">_WINERROR_BY_VALUE</span><span class="p">:</span> <span class="c1"># Lazy init</span>
|
||||
<span class="n">_WINERROR_BY_VALUE</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">gdef</span><span class="p">,</span> <span class="n">error</span><span class="p">)</span> <span class="k">for</span> <span class="n">error</span> <span class="ow">in</span> <span class="n">gdef</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">errors</span><span class="p">))</span>
|
||||
<span class="n">val</span> <span class="o">=</span> <span class="n">_WINERROR_BY_VALUE</span><span class="p">[</span><span class="n">code</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">val</span> <span class="ow">is</span> <span class="n">code</span><span class="p">:</span> <span class="c1"># Not found</span>
|
||||
<span class="n">val</span> <span class="o">=</span> <span class="n">_WINERROR_BY_VALUE</span><span class="p">[</span><span class="n">code</span> <span class="o">&</span> <span class="mh">0xffff</span><span class="p">]</span> <span class="c1"># Hresult: extract code (https://en.wikipedia.org/wiki/HRESULT)</span>
|
||||
<span class="k">return</span> <span class="n">val</span>
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="get_long_path"><a class="viewcode-back" href="../../../utils.html#windows.utils.get_long_path">[docs]</a><span class="k">def</span> <span class="nf">get_long_path</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
|
||||
<span class="sd">"""Return the long path form for ``path``.</span>
|
||||
|
||||
@@ -421,12 +523,8 @@
|
||||
<span class="sd"> :returns: :class:`str` | :obj:`unicode` -- same type as ``path`` parameter</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="mh">0x1000</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">unicode</span><span class="p">):</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_unicode_buffer</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
|
||||
<span class="n">rsize</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetLongPathNameW</span><span class="p">(</span><span class="n">path</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">else</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="n">rsize</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetLongPathNameA</span><span class="p">(</span><span class="n">path</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">buffer</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_unicode_buffer</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
|
||||
<span class="n">rsize</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetLongPathNameW</span><span class="p">(</span><span class="n">path</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">buffer</span><span class="p">[:</span><span class="n">rsize</span><span class="p">]</span></div>
|
||||
|
||||
|
||||
@@ -439,12 +537,8 @@
|
||||
<span class="sd"> :returns: :class:`str` | :obj:`unicode` -- same type as ``path`` parameter</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="mh">0x1000</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">unicode</span><span class="p">):</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_unicode_buffer</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
|
||||
<span class="n">rsize</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetShortPathNameW</span><span class="p">(</span><span class="n">path</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">else</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="n">rsize</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetShortPathNameA</span><span class="p">(</span><span class="n">path</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">buffer</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_unicode_buffer</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
|
||||
<span class="n">rsize</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetShortPathNameW</span><span class="p">(</span><span class="n">path</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">buffer</span><span class="p">[:</span><span class="n">rsize</span><span class="p">]</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">dospath_to_ntpath</span><span class="p">(</span><span class="n">dospath</span><span class="p">):</span>
|
||||
@@ -453,12 +547,16 @@
|
||||
<span class="k">return</span> <span class="n">ustring</span><span class="o">.</span><span class="n">str</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_shared_mapping</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mh">0x1000</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">get_shared_mapping</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">handle</span><span class="o">=</span><span class="n">INVALID_HANDLE_VALUE</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mh">0x1000</span><span class="p">):</span>
|
||||
<span class="c1"># TODO: real code</span>
|
||||
<span class="n">h</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">CreateFileMappingA</span><span class="p">(</span><span class="n">INVALID_HANDLE_VALUE</span><span class="p">,</span> <span class="n">dwMaximumSizeLow</span><span class="o">=</span><span class="n">size</span><span class="p">,</span> <span class="n">lpName</span><span class="o">=</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="n">h</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">CreateFileMappingA</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">dwMaximumSizeLow</span><span class="o">=</span><span class="n">size</span><span class="p">,</span> <span class="n">lpName</span><span class="o">=</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="n">addr</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">MapViewOfFile</span><span class="p">(</span><span class="n">h</span><span class="p">,</span> <span class="n">dwNumberOfBytesToMap</span><span class="o">=</span><span class="n">size</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">addr</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">create_file</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">access</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">GENERIC_READ</span><span class="p">,</span> <span class="n">share</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">FILE_SHARE_READ</span><span class="p">,</span> <span class="n">security</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">creation</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">OPEN_EXISTING</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">FILE_ATTRIBUTE_NORMAL</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">CreateFileA</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">access</span><span class="p">,</span> <span class="n">share</span><span class="p">,</span> <span class="n">security</span><span class="p">,</span> <span class="n">creation</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
|
||||
<span class="c1">#def mapfile(file):</span>
|
||||
<span class="c1"># fhandle = get_handle_from_file(file)</span>
|
||||
<span class="c1"># h = windows.winproxy.CreateFileMappingA(fhandle, None, PAGE_READONLY, 0, 1, None)</span>
|
||||
|
||||
+367
-17
@@ -45,6 +45,7 @@
|
||||
<span class="kn">import</span> <span class="nn">windows</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
||||
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="k">import</span> <span class="n">int_types</span>
|
||||
|
||||
|
||||
<span class="c1"># Helpers</span>
|
||||
@@ -89,8 +90,19 @@
|
||||
<span class="n">publishinfo</span> <span class="o">=</span> <span class="n">generate_query_function</span><span class="p">(</span><span class="n">winproxy</span><span class="o">.</span><span class="n">EvtGetPublisherMetadataProperty</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">EvtHandle</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EVT_HANDLE</span><span class="p">):</span>
|
||||
<span class="c1"># Class attribute function</span>
|
||||
<span class="c1"># Will pass (self) as first parameter (binding)</span>
|
||||
<span class="c1"># No need to pass any param to close ourself :)</span>
|
||||
<span class="n">_close_function</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">EvtClose</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_close_function</span><span class="p">()</span>
|
||||
|
||||
<span class="c1"># Class high-level API</span>
|
||||
<div class="viewcode-block" id="EvtQuery"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.EvtQuery">[docs]</a><span class="k">class</span> <span class="nc">EvtQuery</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EVT_HANDLE</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="EvtQuery"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.EvtQuery">[docs]</a><span class="k">class</span> <span class="nc">EvtQuery</span><span class="p">(</span><span class="n">EvtHandle</span><span class="p">):</span>
|
||||
<span class="sd">"""Represent an Event-log query"""</span>
|
||||
<span class="n">TIMEOUT</span> <span class="o">=</span> <span class="mh">0x1000</span>
|
||||
|
||||
@@ -109,11 +121,23 @@
|
||||
<span class="k">raise</span> <span class="ne">StopIteration</span>
|
||||
<span class="k">raise</span>
|
||||
<span class="k">assert</span> <span class="n">ret</span><span class="o">.</span><span class="n">value</span> <span class="o">==</span> <span class="mi">1</span>
|
||||
<span class="k">return</span> <span class="n">event</span>
|
||||
<span class="k">return</span> <span class="n">event</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">seek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">position</span><span class="p">,</span> <span class="n">seek_flags</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">seek_flags</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">position</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">seek_flags</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtSeekRelativeToFirst</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># -1 + EvtSeekRelativeToLast will give us the last 2 events</span>
|
||||
<span class="c1"># So passing (-1, None) will give us the last event only</span>
|
||||
<span class="c1"># If user do not want this calcul it can directly pass seek_flags</span>
|
||||
<span class="n">seek_flags</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtSeekRelativeToLast</span>
|
||||
<span class="n">position</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">EvtSeek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">position</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">seek_flags</span><span class="p">)</span>
|
||||
|
||||
<span class="nb">next</span> <span class="o">=</span> <span class="fm">__next__</span> <span class="c1"># Yep.. real name is 'next' in Py2 :D</span>
|
||||
|
||||
<div class="viewcode-block" id="EvtQuery.all"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.EvtQuery.all">[docs]</a> <span class="k">def</span> <span class="nf">all</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># SqlAlchemy like :)</span>
|
||||
@@ -131,7 +155,9 @@
|
||||
<span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span></div></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="EvtEvent"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.EvtEvent">[docs]</a><span class="k">class</span> <span class="nc">EvtEvent</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EVT_HANDLE</span><span class="p">):</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="EvtEvent"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.EvtEvent">[docs]</a><span class="k">class</span> <span class="nc">EvtEvent</span><span class="p">(</span><span class="n">EvtHandle</span><span class="p">):</span>
|
||||
<span class="sd">"""An Event log"""</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">channel</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">EvtEvent</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">handle</span><span class="p">)</span>
|
||||
@@ -199,7 +225,7 @@
|
||||
<span class="n">pwstr_rarray</span> <span class="o">=</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">LPWSTR</span> <span class="o">*</span> <span class="n">nbelt</span><span class="p">)(</span><span class="o">*</span><span class="n">pwstr_values</span><span class="p">)</span>
|
||||
<span class="c1"># https://msdn.microsoft.com/en-us/library/windows/desktop/aa385352(v=vs.85).aspx</span>
|
||||
<span class="c1"># An array of XPath expressions that uniquely identify a node or attribute in the event that you want to render.</span>
|
||||
<span class="c1"># Each value wil return 1 node :)</span>
|
||||
<span class="c1"># Each value will return 1 node :)</span>
|
||||
<span class="n">ctx</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">EvtCreateRenderContext</span><span class="p">(</span><span class="n">nbelt</span><span class="p">,</span> <span class="n">pwstr_rarray</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtRenderContextValues</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">ctx</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtRenderEventValues</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
@@ -271,9 +297,14 @@
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># What about classic channels where there is no event_metadata ?</span>
|
||||
<span class="c1"># Return a dict with [0-1-2-3-4] as key ? raise ?</span>
|
||||
<span class="c1"># Juste use the render_xml ?</span>
|
||||
<span class="n">event_data_name</span> <span class="o">=</span> <span class="p">(</span><span class="n">i</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="o">.</span><span class="n">event_data</span> <span class="k">if</span> <span class="n">i</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"data"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span><span class="n">v</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">event_data_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">event_values</span><span class="p">())}</span>
|
||||
|
||||
<span class="k">return</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span><span class="n">v</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="o">.</span><span class="n">event_data</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">event_values</span><span class="p">())}</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">date</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Event.time_created as a datetime"""</span>
|
||||
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">datetime_from_filetime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">time_created</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">creation_time</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">datetime_from_filetime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">time_created</span><span class="p">)</span>
|
||||
@@ -333,6 +364,27 @@
|
||||
<span class="n">v</span> <span class="o">=</span> <span class="n">v</span><span class="p">[:</span><span class="bp">self</span><span class="o">.</span><span class="n">Count</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="n">v</span>
|
||||
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">from_value</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">vtype</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">vtype</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="c1"># Guess type</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">int_types</span><span class="p">):</span>
|
||||
<span class="n">vtype</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtVarTypeUInt64</span>
|
||||
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||||
<span class="n">vtype</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtVarTypeString</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"LATER"</span><span class="p">)</span>
|
||||
<span class="bp">self</span> <span class="o">=</span> <span class="bp">cls</span><span class="p">()</span>
|
||||
<span class="c1"># import pdb;pdb.set_trace()</span>
|
||||
<span class="c1"># Yolo test :)</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">ImprovedEVT_VARIANT</span><span class="p">,</span> <span class="n">ImprovedEVT_VARIANT</span><span class="p">)</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="fm">__set__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">vtype</span><span class="p">)</span>
|
||||
<span class="c1"># super(ImprovedEVT_VARIANT, self).Type = vtype</span>
|
||||
<span class="n">attrname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">VALUE_MAPPER</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">Type</span><span class="p">]</span>
|
||||
<span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attrname</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">Type</span> <span class="ow">in</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtVarTypeBinary</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtVarTypeString</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">Count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s2">"<</span><span class="si">{0}</span><span class="s2"> of type=</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">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span>
|
||||
|
||||
@@ -388,7 +440,7 @@
|
||||
<span class="k">if</span> <span class="n">ids</span> <span class="ow">and</span> <span class="nb">filter</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"<ids> and <filter> are mutually exclusive"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">ids</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ids</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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ids</span><span class="p">,</span> <span class="n">int_types</span><span class="p">):</span>
|
||||
<span class="n">ids</span> <span class="o">=</span> <span class="p">(</span><span class="n">ids</span><span class="p">,)</span>
|
||||
<span class="n">ids_filter</span> <span class="o">=</span> <span class="s2">" or "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">"EventID=</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">id</span><span class="p">)</span> <span class="k">for</span> <span class="nb">id</span> <span class="ow">in</span> <span class="n">ids</span><span class="p">)</span>
|
||||
<span class="nb">filter</span> <span class="o">=</span> <span class="s2">"Event/System[</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">ids_filter</span><span class="p">)</span>
|
||||
@@ -451,7 +503,7 @@
|
||||
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Cannot retrieve the configuration of an EvtFile"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="ChannelConfig"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.ChannelConfig">[docs]</a><span class="k">class</span> <span class="nc">ChannelConfig</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EVT_HANDLE</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="ChannelConfig"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.ChannelConfig">[docs]</a><span class="k">class</span> <span class="nc">ChannelConfig</span><span class="p">(</span><span class="n">EvtHandle</span><span class="p">):</span>
|
||||
<span class="sd">"""The configuration of a event channel"""</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">ChannelConfig</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">handle</span><span class="p">)</span>
|
||||
@@ -471,6 +523,15 @@
|
||||
<span class="s2">"TEST"</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">EvtPublisher</span><span class="p">(</span><span class="n">pub</span><span class="p">)</span> <span class="k">for</span> <span class="n">pub</span> <span class="ow">in</span> <span class="n">chaninfo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtChannelPublisherList</span><span class="p">)</span><span class="o">.</span><span class="n">value</span><span class="p">]</span></div>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">keywords</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">chaninfo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtChannelPublishingConfigKeywords</span><span class="p">)</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">enabled</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="n">chaninfo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtChannelConfigEnabled</span><span class="p">)</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">classic</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""``True`` if the channel is a classic event channel (for example the Application or System log)"""</span>
|
||||
@@ -479,6 +540,130 @@
|
||||
<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">class</span> <span class="nc">PublisherMetadataChannel</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pub_metadata</span><span class="p">,</span> <span class="n">channel_id</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">PublisherMetadataChannel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">pub_metadata</span> <span class="o">=</span> <span class="n">pub_metadata</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_id</span> <span class="o">=</span> <span class="n">channel_id</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_query_channel_metadata_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">propertyid</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">pub_metadata</span><span class="o">.</span><span class="n">chanrefs</span><span class="o">.</span><span class="n">property</span><span class="p">(</span><span class="n">propertyid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_id</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">flags</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_channel_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataChannelReferenceFlags</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_channel_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataChannelReferencePath</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_channel_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataChannelReferenceID</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">index</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_channel_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataChannelReferenceIndex</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">message_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_channel_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataChannelReferenceMessageID</span><span class="p">))</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">PublisherMetadataLevel</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pub_metadata</span><span class="p">,</span> <span class="n">channel_id</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">PublisherMetadataLevel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">pub_metadata</span> <span class="o">=</span> <span class="n">pub_metadata</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_id</span> <span class="o">=</span> <span class="n">channel_id</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_query_level_metadata_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">propertyid</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">pub_metadata</span><span class="o">.</span><span class="n">levelrefs</span><span class="o">.</span><span class="n">property</span><span class="p">(</span><span class="n">propertyid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_id</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_level_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataLevelName</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_level_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataLevelValue</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">message_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_level_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataLevelMessageID</span><span class="p">))</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">PublisherMetadataOpcode</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pub_metadata</span><span class="p">,</span> <span class="n">channel_id</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">PublisherMetadataOpcode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">pub_metadata</span> <span class="o">=</span> <span class="n">pub_metadata</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_id</span> <span class="o">=</span> <span class="n">channel_id</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_query_opcode_metadata_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">propertyid</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">pub_metadata</span><span class="o">.</span><span class="n">opcoderefs</span><span class="o">.</span><span class="n">property</span><span class="p">(</span><span class="n">propertyid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_id</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_opcode_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataOpcodeName</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_opcode_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataOpcodeValue</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">message_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_opcode_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataOpcodeMessageID</span><span class="p">))</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">PublisherMetadataKeyword</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pub_metadata</span><span class="p">,</span> <span class="n">channel_id</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">PublisherMetadataKeyword</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">pub_metadata</span> <span class="o">=</span> <span class="n">pub_metadata</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_id</span> <span class="o">=</span> <span class="n">channel_id</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_query_keyword_metadata_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">propertyid</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">pub_metadata</span><span class="o">.</span><span class="n">keywordrefs</span><span class="o">.</span><span class="n">property</span><span class="p">(</span><span class="n">propertyid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_id</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_keyword_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataKeywordName</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_keyword_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataKeywordValue</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">message_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_keyword_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataKeywordMessageID</span><span class="p">))</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">PublisherMetadataTask</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pub_metadata</span><span class="p">,</span> <span class="n">channel_id</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">PublisherMetadataTask</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">pub_metadata</span> <span class="o">=</span> <span class="n">pub_metadata</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_id</span> <span class="o">=</span> <span class="n">channel_id</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_query_keyword_metadata_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">propertyid</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">pub_metadata</span><span class="o">.</span><span class="n">taskrefs</span><span class="o">.</span><span class="n">property</span><span class="p">(</span><span class="n">propertyid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_id</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_keyword_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataTaskName</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_keyword_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataTaskValue</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">event_guid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_query_keyword_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataTaskEventGuid</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">message_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_query_keyword_metadata_property</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataTaskMessageID</span><span class="p">))</span>
|
||||
|
||||
<div class="viewcode-block" id="EvtPublisher"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.EvtPublisher">[docs]</a><span class="k">class</span> <span class="nc">EvtPublisher</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""An Event provider"""</span>
|
||||
@@ -497,7 +682,7 @@
|
||||
<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>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="PublisherMetadata"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.PublisherMetadata">[docs]</a><span class="k">class</span> <span class="nc">PublisherMetadata</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EVT_HANDLE</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="PublisherMetadata"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.PublisherMetadata">[docs]</a><span class="k">class</span> <span class="nc">PublisherMetadata</span><span class="p">(</span><span class="n">EvtHandle</span><span class="p">):</span>
|
||||
<span class="sd">"""The metadata about an event provider"""</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">PublisherMetadata</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">handle</span><span class="p">)</span>
|
||||
@@ -508,6 +693,14 @@
|
||||
<span class="sd">"""The :class:`PublisherMetadata` for the publisher ``name``"""</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">winproxy</span><span class="o">.</span><span class="n">EvtOpenPublisherMetadata</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">name</span><span class="p">)</span></div>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">guid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The GUID associated with this provider</span>
|
||||
|
||||
<span class="sd"> :type: [:class:`GUID`] -- the GUID in a XXXXXXXXXX-YYYY-ZZZZ-TTTT-VVVVVVVVVV form</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">publishinfo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataPublisherGuid</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">chanrefs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Identifies the channels child element of the provider.</span>
|
||||
@@ -516,6 +709,78 @@
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">PropertyArray</span><span class="p">(</span><span class="n">publishinfo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataChannelReferences</span><span class="p">)</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">levelrefs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Identifies the levels child element of the provider.</span>
|
||||
|
||||
<span class="sd"> :type: :class:`PropertyArray`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">PropertyArray</span><span class="p">(</span><span class="n">publishinfo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataLevels</span><span class="p">)</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">opcoderefs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Identifies the opcodes child element of the provider.</span>
|
||||
|
||||
<span class="sd"> :type: :class:`PropertyArray`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">PropertyArray</span><span class="p">(</span><span class="n">publishinfo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataOpcodes</span><span class="p">)</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">keywordrefs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The list of keywords defined by this provider</span>
|
||||
|
||||
<span class="sd"> :type: :class:`PropertyArray`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">PropertyArray</span><span class="p">(</span><span class="n">publishinfo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataKeywords</span><span class="p">)</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">taskrefs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The list of tasks defined by this provider</span>
|
||||
|
||||
<span class="sd"> :type: :class:`PropertyArray`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">PropertyArray</span><span class="p">(</span><span class="n">publishinfo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataTasks</span><span class="p">)</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">channels_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The :class:`PublisherMetadataChannel` for each channel this provider defines</span>
|
||||
|
||||
<span class="sd"> :yield: :class:`PublisherMetadataChannel`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">PublisherMetadataChannel</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="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="bp">self</span><span class="o">.</span><span class="n">chanrefs</span><span class="o">.</span><span class="n">size</span><span class="p">)]</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">levels_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The :class:`PublisherMetadataLevel` for each level this provider defines</span>
|
||||
|
||||
<span class="sd"> :yield: :class:`PublisherMetadataLevel`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">PublisherMetadataLevel</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="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="bp">self</span><span class="o">.</span><span class="n">levelrefs</span><span class="o">.</span><span class="n">size</span><span class="p">)]</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">opcodes_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The :class:`PublisherMetadataOpcode` for each opcode this provider defines</span>
|
||||
|
||||
<span class="sd"> :yield: :class:`PublisherMetadataOpcode`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">PublisherMetadataOpcode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="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="bp">self</span><span class="o">.</span><span class="n">opcoderefs</span><span class="o">.</span><span class="n">size</span><span class="p">)]</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">tasks_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The :class:`PublisherMetadataTask` for each opcode this provider defines</span>
|
||||
|
||||
<span class="sd"> :yield: :class:`PublisherMetadataTask`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">PublisherMetadataTask</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="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="bp">self</span><span class="o">.</span><span class="n">taskrefs</span><span class="o">.</span><span class="n">size</span><span class="p">)]</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">keywords_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The :class:`PublisherMetadataKeyword` for each opcode this provider defines</span>
|
||||
|
||||
<span class="sd"> :yield: :class:`PublisherMetadataKeyword`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">PublisherMetadataKeyword</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="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="bp">self</span><span class="o">.</span><span class="n">keywordrefs</span><span class="o">.</span><span class="n">size</span><span class="p">)]</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">events_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The :class:`EventMetadata` for each event this provider defines</span>
|
||||
@@ -570,6 +835,31 @@
|
||||
<span class="k">raise</span>
|
||||
<span class="k">return</span> <span class="n">sbuff</span><span class="o">.</span><span class="n">value</span></div>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">message_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">publishinfo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataPublisherMessageID</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">message_filepath</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">publishinfo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataMessageFilePath</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">message_resource_filepath</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">publishinfo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataResourceFilePath</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">message_parameter_filepath</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">publishinfo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">EvtPublisherMetadataParameterFilePath</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">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>
|
||||
|
||||
@@ -585,7 +875,7 @@
|
||||
<span class="k">def</span> <span class="nf">property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">type</span><span class="p">,</span> <span class="n">index</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">arrayproperty</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">type</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span><span class="o">.</span><span class="n">value</span></div>
|
||||
|
||||
<div class="viewcode-block" id="EventMetadata"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.EventMetadata">[docs]</a><span class="k">class</span> <span class="nc">EventMetadata</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">EVT_HANDLE</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="EventMetadata"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.EventMetadata">[docs]</a><span class="k">class</span> <span class="nc">EventMetadata</span><span class="p">(</span><span class="n">EvtHandle</span><span class="p">):</span>
|
||||
<span class="sd">"""The Metadata about a given Event type</span>
|
||||
|
||||
|
||||
@@ -595,7 +885,14 @@
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The ID of the Event"""</span>
|
||||
<span class="k">return</span> <span class="n">eventinfo</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">EventMetadataEventID</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="c1"># https://docs.microsoft.com/en-us/windows/desktop/wes/eventschema-systempropertiestype-complextype</span>
|
||||
<span class="c1"># Qualifiers:</span>
|
||||
<span class="c1"># A legacy provider uses a 32-bit number to identify its events.</span>
|
||||
<span class="c1"># If the event is logged by a legacy provider, the value of EventID</span>
|
||||
<span class="c1"># element contains the low-order 16 bits of the event identifier and the</span>
|
||||
<span class="c1"># Qualifier attribute contains the high-order 16 bits of the event identifier.</span>
|
||||
<span class="c1"># [Question] Only true for legacy provider / channels ??</span>
|
||||
<span class="k">return</span> <span class="n">eventinfo</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">EventMetadataEventID</span><span class="p">)</span><span class="o">.</span><span class="n">value</span> <span class="o">&</span> <span class="mh">0xffff</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>
|
||||
@@ -604,9 +901,29 @@
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">channel_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The the Channel attribute of the Event definition"""</span>
|
||||
<span class="sd">"""The Channel attribute of the Event definition"""</span>
|
||||
<span class="k">return</span> <span class="n">eventinfo</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">EventMetadataEventChannel</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">keyword</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The keyword attribute of the Event definition"""</span>
|
||||
<span class="k">return</span> <span class="n">eventinfo</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">EventMetadataEventKeyword</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">opcode</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The opcode attribute of the Event definition"""</span>
|
||||
<span class="k">return</span> <span class="n">eventinfo</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">EventMetadataEventOpcode</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">level</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The level attribute of the Event definition"""</span>
|
||||
<span class="k">return</span> <span class="n">eventinfo</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">EventMetadataEventLevel</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">task</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The task attribute of the Event definition"""</span>
|
||||
<span class="k">return</span> <span class="n">eventinfo</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">EventMetadataEventTask</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">message_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Identifies the message attribute of the event definition."""</span>
|
||||
@@ -617,19 +934,52 @@
|
||||
<span class="sd">"""Identifies the template attribute of the event definition which is an XML string"""</span>
|
||||
<span class="k">return</span> <span class="n">eventinfo</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">EventMetadataEventTemplate</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_parse_event_template_data_element</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">element</span><span class="p">):</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"type"</span><span class="p">:</span> <span class="s2">"data"</span><span class="p">}</span>
|
||||
<span class="n">res</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span> <span class="o">=</span> <span class="n">element</span><span class="o">.</span><span class="n">attributes</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="n">res</span><span class="p">[</span><span class="s2">"inType"</span><span class="p">]</span> <span class="o">=</span> <span class="n">element</span><span class="o">.</span><span class="n">attributes</span><span class="p">[</span><span class="s2">"inType"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="n">res</span><span class="p">[</span><span class="s2">"outType"</span><span class="p">]</span> <span class="o">=</span> <span class="n">element</span><span class="o">.</span><span class="n">attributes</span><span class="p">[</span><span class="s2">"outType"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="n">count</span> <span class="o">=</span> <span class="n">element</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"count"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">count</span><span class="p">:</span>
|
||||
<span class="n">res</span><span class="p">[</span><span class="s2">"count"</span><span class="p">]</span> <span class="o">=</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="n">length</span> <span class="o">=</span> <span class="n">element</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"length"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">length</span><span class="p">:</span>
|
||||
<span class="n">res</span><span class="p">[</span><span class="s2">"length"</span><span class="p">]</span> <span class="o">=</span> <span class="n">length</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_parse_event_template_struct_element</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">element</span><span class="p">):</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"type"</span><span class="p">:</span> <span class="s2">"struct"</span><span class="p">}</span>
|
||||
<span class="n">res</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span> <span class="o">=</span> <span class="n">element</span><span class="o">.</span><span class="n">attributes</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="n">res</span><span class="p">[</span><span class="s2">"fields"</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">_parse_event_template_data_element</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">element</span><span class="o">.</span><span class="n">childNodes</span> <span class="k">if</span> <span class="n">elt</span><span class="o">.</span><span class="n">nodeType</span> <span class="o">==</span> <span class="n">elt</span><span class="o">.</span><span class="n">ELEMENT_NODE</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_event_data_generator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">template</span><span class="p">):</span>
|
||||
<span class="n">xmldoc</span> <span class="o">=</span> <span class="n">xml</span><span class="o">.</span><span class="n">dom</span><span class="o">.</span><span class="n">minidom</span><span class="o">.</span><span class="n">parseString</span><span class="p">(</span><span class="n">template</span><span class="p">)</span>
|
||||
<span class="n">xmltemplate</span> <span class="o">=</span> <span class="n">xmldoc</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s2">"template"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">for</span> <span class="n">element</span> <span class="ow">in</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">xmltemplate</span><span class="o">.</span><span class="n">childNodes</span> <span class="k">if</span> <span class="n">n</span><span class="o">.</span><span class="n">nodeType</span> <span class="o">==</span> <span class="n">n</span><span class="o">.</span><span class="n">ELEMENT_NODE</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">element</span><span class="o">.</span><span class="n">tagName</span> <span class="o">==</span> <span class="s2">"data"</span><span class="p">:</span>
|
||||
<span class="k">yield</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_event_template_data_element</span><span class="p">(</span><span class="n">element</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">element</span><span class="o">.</span><span class="n">tagName</span> <span class="o">==</span> <span class="s2">"struct"</span><span class="p">:</span>
|
||||
<span class="k">yield</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_event_template_struct_element</span><span class="p">(</span><span class="n">element</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">"Unexpected XML element <</span><span class="si">{0}</span><span class="s2">> in event template"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">tagName</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">event_data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The list of attribute specifique for this event.</span>
|
||||
<span class="sd"> Retrieved by parsing :data:`EventMetadata.template`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">template</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">template</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">template</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">{}</span>
|
||||
<span class="k">return</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">_event_data_generator</span><span class="p">(</span><span class="n">template</span><span class="p">))</span>
|
||||
|
||||
<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">template</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">template</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">template</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="n">xmltemplate</span> <span class="o">=</span> <span class="n">xml</span><span class="o">.</span><span class="n">dom</span><span class="o">.</span><span class="n">minidom</span><span class="o">.</span><span class="n">parseString</span><span class="p">(</span><span class="n">template</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">data</span> <span class="ow">in</span> <span class="n">xmltemplate</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s2">"data"</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="o">.</span><span class="n">attributes</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">result</span></div>
|
||||
<span class="k">return</span> <span class="n">xmltemplate</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="EvtlogManager"><a class="viewcode-back" href="../../../evtlog.html#windows.winobject.event_log.EvtlogManager">[docs]</a><span class="k">class</span> <span class="nc">EvtlogManager</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
|
||||
@@ -325,7 +325,7 @@
|
||||
<span class="sd"> temporary workaround or horrible hack ? choose your side</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">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">cls</span><span class="p">)</span>
|
||||
<span class="n">nb_qword</span> <span class="o">=</span> <span class="p">(</span><span class="n">size</span> <span class="o">+</span> <span class="mi">8</span><span class="p">)</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">ULONGLONG</span><span class="p">)</span>
|
||||
<span class="n">nb_qword</span> <span class="o">=</span> <span class="nb">int</span><span class="p">((</span><span class="n">size</span> <span class="o">+</span> <span class="mi">8</span><span class="p">)</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">ULONGLONG</span><span class="p">))</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="p">(</span><span class="n">nb_qword</span> <span class="o">*</span> <span class="n">ULONGLONG</span><span class="p">)()</span>
|
||||
<span class="n">struct_address</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">buffer</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="n">struct_address</span> <span class="o">&</span> <span class="mh">0xf</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">8</span><span class="p">]:</span>
|
||||
|
||||
+94
-38
@@ -43,15 +43,11 @@
|
||||
<span class="kn">import</span> <span class="nn">windows</span>
|
||||
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="k">import</span> <span class="n">windef</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.generated_def.winstructs</span> <span class="k">import</span> <span class="o">*</span>
|
||||
|
||||
<span class="c1"># Remove this ?</span>
|
||||
<span class="k">class</span> <span class="nc">EPUBLIC_OBJECT_TYPE_INFORMATION</span><span class="p">(</span><span class="n">PUBLIC_OBJECT_TYPE_INFORMATION</span><span class="p">):</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
||||
|
||||
<span class="n">current_process_pid</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getpid</span><span class="p">()</span>
|
||||
|
||||
<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="k">class</span> <span class="nc">BaseSystemHandle</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""A handle of the system"""</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">process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -62,6 +58,15 @@
|
||||
<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">@property</span>
|
||||
<span class="k">def</span> <span class="nf">pid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">dwProcessId</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wValue</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>
|
||||
<span class="sd">"""The name of the handle</span>
|
||||
@@ -83,35 +88,33 @@
|
||||
|
||||
<span class="k">def</span> <span class="nf">_get_object_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">lh</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_handle</span>
|
||||
<span class="n">size_needed</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">size_needed</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">yyy</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_buffer</span><span class="p">(</span><span class="mh">0x1000</span><span class="p">)</span>
|
||||
<span class="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">ObjectNameInformation</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">yyy</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">yyy</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">return</span> <span class="n">LSA_UNICODE_STRING</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">yyy</span><span class="p">[:</span><span class="n">size_needed</span><span class="o">.</span><span class="n">value</span><span class="p">])</span><span class="o">.</span><span class="n">str</span>
|
||||
<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">gdef</span><span class="o">.</span><span class="n">ObjectNameInformation</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">yyy</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">yyy</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">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">LSA_UNICODE_STRING</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">yyy</span><span class="p">[:</span><span class="n">size_needed</span><span class="o">.</span><span class="n">value</span><span class="p">])</span><span class="o">.</span><span class="n">str</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_get_object_type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">lh</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_handle</span>
|
||||
<span class="n">xxx</span> <span class="o">=</span> <span class="n">EPUBLIC_OBJECT_TYPE_INFORMATION</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">xxx</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PUBLIC_OBJECT_TYPE_INFORMATION</span><span class="p">()</span>
|
||||
<span class="n">size_needed</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<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="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">gdef</span><span class="o">.</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="c1"># print("ERROR WITH {0:x}".format(lh))</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">gdef</span><span class="o">.</span><span class="n">STATUS_INFO_LENGTH_MISMATCH</span><span class="p">:</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>
|
||||
<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">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">xxx</span> <span class="o">=</span> <span class="n">EPUBLIC_OBJECT_TYPE_INFORMATION</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span>
|
||||
<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">gdef</span><span class="o">.</span><span class="n">ObjectTypeInformation</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">xxx</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PUBLIC_OBJECT_TYPE_INFORMATION</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">xxx</span><span class="o">.</span><span class="n">TypeName</span><span class="o">.</span><span class="n">str</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_get_object_basic_infos</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="n">lh</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_handle</span>
|
||||
<span class="n">size_needed</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">basic_infos</span> <span class="o">=</span> <span class="n">PUBLIC_OBJECT_BASIC_INFORMATION</span><span class="p">()</span>
|
||||
<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">ObjectBasicInformation</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">basic_infos</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">basic_infos</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">size_needed</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">basic_infos</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PUBLIC_OBJECT_BASIC_INFORMATION</span><span class="p">()</span>
|
||||
<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">gdef</span><span class="o">.</span><span class="n">ObjectBasicInformation</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">basic_infos</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">basic_infos</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">return</span> <span class="n">basic_infos</span>
|
||||
<span class="c1">#PUBLIC_OBJECT_BASIC_INFORMATION</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">local_handle</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -120,8 +123,8 @@
|
||||
<span class="sd"> :type: :class:`int`"""</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wValue</span>
|
||||
<span class="n">res</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">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="n">res</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">HANDLE</span><span class="p">()</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">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">gdef</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>
|
||||
@@ -150,30 +153,83 @@
|
||||
<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>
|
||||
<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 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">gdef</span><span class="o">.</span><span class="n">SYSTEM_HANDLE</span><span class="p">,</span> <span class="n">BaseSystemHandle</span><span class="p">):</span>
|
||||
<span class="k">pass</span></div>
|
||||
|
||||
<span class="k">class</span> <span class="nc">HandleWow64</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SYSTEM_HANDLE64</span><span class="p">,</span> <span class="n">BaseSystemHandle</span><span class="p">):</span>
|
||||
<span class="k">pass</span> <span class="c1"># For wow64 process</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">enumerate_handles</span><span class="p">():</span>
|
||||
<span class="n">size_needed</span> <span class="o">=</span> <span class="n">ULONG</span><span class="p">()</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="mh">0x1000</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="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">enumerate_handles_syswow64</span><span class="p">()</span>
|
||||
<span class="n">size_needed</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ULONG</span><span class="p">()</span>
|
||||
<span class="c1"># Should at least be sizeof(gdef.SYSTEM_HANDLE_INFORMATION)</span>
|
||||
<span class="n">tmp_buffer</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">BUFFER</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SYSTEM_HANDLE_INFORMATION</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">NtQuerySystemInformation</span><span class="p">(</span><span class="mi">16</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">ReturnLength</span><span class="o">=</span><span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">size_needed</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">gdef</span><span class="o">.</span><span class="n">SystemHandleInformation</span><span class="p">,</span> <span class="n">tmp_buffer</span><span class="p">,</span> <span class="n">tmp_buffer</span><span class="o">.</span><span class="n">real_size</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="o">=</span><span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">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">pass</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="o">+</span> <span class="mh">0x1000</span> <span class="c1"># In case we have some more handle created</span>
|
||||
<span class="n">buf</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">BUFFER</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SYSTEM_HANDLE_INFORMATION</span><span class="p">)(</span><span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">)</span>
|
||||
<span class="n">size_needed</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtQuerySystemInformation</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SystemHandleInformation</span><span class="p">,</span> <span class="n">buf</span><span class="p">,</span> <span class="n">buf</span><span class="o">.</span><span class="n">real_size</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="o">=</span><span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">size_needed</span><span class="p">))</span>
|
||||
<span class="n">handle_array</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">resized_array</span><span class="p">(</span><span class="n">buf</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">Handles</span><span class="p">,</span> <span class="n">buf</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">HandleCount</span><span class="p">,</span> <span class="n">Handle</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">handle_array</span><span class="p">)</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="o">+</span> <span class="mh">0x1000</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="n">winproxy</span><span class="o">.</span><span class="n">NtQuerySystemInformation</span><span class="p">(</span><span class="mi">16</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">ReturnLength</span><span class="o">=</span><span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">size_needed</span><span class="p">))</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">SYSTEM_HANDLE_INFORMATION</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">class</span> <span class="nc">_GENERATED_SYSTEM_HANDLE_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="p">[</span>
|
||||
<span class="p">(</span><span class="s2">"HandleCount"</span><span class="p">,</span> <span class="n">ULONG</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"Handles"</span><span class="p">,</span> <span class="n">Handle</span> <span class="o">*</span> <span class="n">x</span><span class="o">.</span><span class="n">HandleCount</span><span class="p">),</span>
|
||||
<span class="p">]</span>
|
||||
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">_GENERATED_SYSTEM_HANDLE_INFORMATION</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">buffer</span><span class="p">[:</span><span class="n">size_needed</span><span class="o">.</span><span class="n">value</span><span class="p">])</span><span class="o">.</span><span class="n">Handles</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">enumerate_handles_syswow64</span><span class="p">():</span>
|
||||
<span class="n">size_needed</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ULONG</span><span class="p">()</span>
|
||||
<span class="c1"># Should at least be sizeof(gdef.SYSTEM_HANDLE_INFORMATION)</span>
|
||||
<span class="n">tmp_buffer</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">BUFFER</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SYSTEM_HANDLE_INFORMATION64</span><span class="p">)()</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">NtQuerySystemInformation_32_to_64</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SystemHandleInformation</span><span class="p">,</span> <span class="n">tmp_buffer</span><span class="p">,</span> <span class="n">tmp_buffer</span><span class="o">.</span><span class="n">real_size</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="o">=</span><span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">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">pass</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="o">+</span> <span class="mh">0x1000</span> <span class="c1"># In case we have some more handle created</span>
|
||||
<span class="n">buf</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">BUFFER</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SYSTEM_HANDLE_INFORMATION64</span><span class="p">)(</span><span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">)</span>
|
||||
<span class="n">size_needed</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">syswow64</span><span class="o">.</span><span class="n">NtQuerySystemInformation_32_to_64</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SystemHandleInformation</span><span class="p">,</span> <span class="n">buf</span><span class="p">,</span> <span class="n">buf</span><span class="o">.</span><span class="n">real_size</span><span class="p">,</span> <span class="n">ReturnLength</span><span class="o">=</span><span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">size_needed</span><span class="p">))</span>
|
||||
<span class="n">handle_array</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">resized_array</span><span class="p">(</span><span class="n">buf</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">Handles</span><span class="p">,</span> <span class="n">buf</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">HandleCount</span><span class="p">,</span> <span class="n">HandleWow64</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">handle_array</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">enumerate_type</span><span class="p">():</span>
|
||||
<span class="s2">"WIP: DO NOT USE"</span>
|
||||
<span class="n">size_needed</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">fsize</span> <span class="o">=</span> <span class="mi">8</span>
|
||||
<span class="n">fbuffer</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">fsize</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">NtQueryObject</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">ObjectTypesInformation</span><span class="p">,</span> <span class="n">fbuffer</span><span class="p">,</span> <span class="n">fsize</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="k">raise</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># We had enought memory ?</span>
|
||||
<span class="k">return</span>
|
||||
|
||||
<span class="c1"># Looks like the Wow64 syscall emulation is broken :D</span>
|
||||
<span class="c1"># It write AFTER the buffer if we are a wow64 process :D</span>
|
||||
<span class="c1"># So better allocate a standalone buffer (triggering a ACCESS_VIOLATION) that corrupting the heap</span>
|
||||
<span class="c1"># This is a worst case scenario, as we allocation more space it should not happen !</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="o">+</span> <span class="mh">0x200</span>
|
||||
<span class="n">size_needed</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
|
||||
<span class="k">with</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">allocated_memory</span><span class="p">(</span><span class="n">size</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PAGE_READWRITE</span><span class="p">)</span> <span class="k">as</span> <span class="n">buffer_base</span><span class="p">:</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtQueryObject</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">ObjectTypesInformation</span><span class="p">,</span> <span class="n">buffer_base</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="c1"># Cache some exceptions ?</span>
|
||||
<span class="c1"># Parse the buffer data in-place as string are addr-dependant</span>
|
||||
<span class="n">types_info</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">OBJECT_TYPES_INFORMATION</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="n">buffer_base</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">gdef</span><span class="o">.</span><span class="n">PVOID</span><span class="p">)</span> <span class="c1"># Looks like the size of the struct is PTR aligned as the struct is follower by other stuff</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">types_info</span><span class="o">.</span><span class="n">NumberOfTypes</span><span class="p">):</span>
|
||||
<span class="n">info</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PUBLIC_OBJECT_TYPE_INFORMATION</span><span class="o">.</span><span class="n">from_address</span><span class="p">(</span><span class="n">buffer_base</span> <span class="o">+</span> <span class="n">offset</span><span class="p">)</span>
|
||||
<span class="k">yield</span> <span class="n">info</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">gdef</span><span class="o">.</span><span class="n">PUBLIC_OBJECT_TYPE_INFORMATION</span><span class="p">)</span> <span class="o">+</span> <span class="n">info</span><span class="o">.</span><span class="n">TypeName</span><span class="o">.</span><span class="n">MaximumLength</span>
|
||||
<span class="k">if</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">gdef</span><span class="o">.</span><span class="n">PVOID</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">gdef</span><span class="o">.</span><span class="n">PVOID</span><span class="p">)</span> <span class="o">-</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">gdef</span><span class="o">.</span><span class="n">PVOID</span><span class="p">))</span>
|
||||
<span class="c1"># End-of ctx-manager</span>
|
||||
<span class="k">return</span>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
<span class="n">obj_attr</span><span class="o">.</span><span class="n">SecurityQualityOfService</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">HANDLE</span><span class="p">()</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">NtOpenSymbolicLinkObject</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DIRECTORY_QUERY</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">READ_CONTROL</span> <span class="p">,</span> <span class="n">obj_attr</span><span class="p">)</span>
|
||||
<span class="n">v</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">LSA_UNICODE_STRING</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span> <span class="o">*</span> <span class="mi">1000</span><span class="p">)</span>
|
||||
<span class="n">v</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">LSA_UNICODE_STRING</span><span class="o">.</span><span class="n">from_size</span><span class="p">(</span><span class="mi">1000</span><span class="p">)</span>
|
||||
<span class="n">s</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ULONG</span><span class="p">()</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtQuerySymbolicLinkObject</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">s</span><span class="p">)</span> <span class="c1"># Handle Buffer-too-small ?</span>
|
||||
<span class="k">return</span> <span class="n">v</span><span class="o">.</span><span class="n">str</span>
|
||||
@@ -65,7 +65,7 @@
|
||||
|
||||
<div class="viewcode-block" id="KernelObject"><a class="viewcode-back" href="../../../object_manager.html#windows.winobject.object_manager.KernelObject">[docs]</a><span class="k">class</span> <span class="nc">KernelObject</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""Represent an object in the Object Manager namespace"""</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="nb">type</span><span class="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">path</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">path</span> <span class="o">=</span> <span class="n">path</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
|
||||
<span class="k">if</span> <span class="n">path</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">path</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">"</span><span class="se">\\</span><span class="s2">"</span><span class="p">):</span>
|
||||
@@ -216,8 +216,7 @@
|
||||
<span class="k">elif</span> <span class="n">name</span> <span class="o">==</span> <span class="s2">"</span><span class="se">\\</span><span class="s2">"</span><span class="p">:</span> <span class="c1"># Ask for root ? return ourself</span>
|
||||
<span class="k">return</span> <span class="bp">self</span>
|
||||
<span class="k">else</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="mi">1</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="mi">1</span><span class="p">:]</span> <span class="c1"># Strip the leading \ and go to normal case</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span>
|
||||
<span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\\</span><span class="s2">"</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
@@ -226,6 +225,7 @@
|
||||
<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">gdef</span><span class="o">.</span><span class="n">STATUS_OBJECT_TYPE_MISMATCH</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="s2">"Could not find object <</span><span class="si">{0}</span><span class="s2">> under <</span><span class="si">{1}</span><span class="s2">> because it is a <</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="n">part</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">type</span><span class="p">))</span>
|
||||
<span class="k">raise</span> <span class="c1"># Something smart to do ?</span>
|
||||
<span class="k">return</span> <span class="n">obj</span></div></div>
|
||||
|
||||
|
||||
|
||||
+57
-12
@@ -66,7 +66,9 @@
|
||||
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">exception</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">apisetmap</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">token</span>
|
||||
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">security</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="k">import</span> <span class="n">raw_encode</span><span class="p">,</span> <span class="n">raw_decode</span>
|
||||
|
||||
<span class="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>
|
||||
@@ -183,12 +185,12 @@
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">exit_code</span> <span class="o">!=</span> <span class="n">STILL_ACTIVE</span>
|
||||
|
||||
<span class="nd">@contextmanager</span>
|
||||
<span class="k">def</span> <span class="nf">allocated_memory</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">def</span> <span class="nf">allocated_memory</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">"""ContextManager to allocate memory and free it</span>
|
||||
|
||||
<span class="sd"> :type: :class:`int` -- the address of the allocated memory</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">addr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">virtual_alloc</span><span class="p">(</span><span class="n">size</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">virtual_alloc</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">prot</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">yield</span> <span class="n">addr</span>
|
||||
<span class="k">finally</span><span class="p">:</span>
|
||||
@@ -394,11 +396,11 @@
|
||||
<span class="n">read_size</span> <span class="o">=</span> <span class="n">read_size</span> <span class="o">/</span> <span class="mi">2</span>
|
||||
<span class="k">continue</span>
|
||||
<span class="n">readden</span> <span class="o">+=</span> <span class="n">read_size</span>
|
||||
<span class="k">if</span> <span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span> <span class="ow">in</span> <span class="n">x</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="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">if</span> <span class="sa">b</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span> <span class="ow">in</span> <span class="n">x</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="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span>
|
||||
<span class="k">break</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">return</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="k">return</span> <span class="sa">b</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">decode</span><span class="p">(</span><span class="s2">"ascii"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">read_wstring</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">"""Read a windows UTF16 string at ``addr``"""</span>
|
||||
@@ -415,15 +417,19 @@
|
||||
<span class="c1"># handle read_wstring at end of page</span>
|
||||
<span class="c1"># Of read failed: read only the half of size</span>
|
||||
<span class="c1"># read_size must remain a multiple of 2</span>
|
||||
<span class="n">read_size</span> <span class="o">=</span> <span class="n">read_size</span> <span class="o">/</span> <span class="mi">2</span>
|
||||
<span class="n">read_size</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">read_size</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)</span>
|
||||
<span class="k">continue</span>
|
||||
<span class="n">readden</span> <span class="o">+=</span> <span class="n">read_size</span>
|
||||
<span class="n">utf16_chars</span> <span class="o">=</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">c</span><span class="p">)</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="nb">iter</span><span class="p">(</span><span class="n">x</span><span class="p">)]</span> <span class="o">*</span> <span class="mi">2</span><span class="p">)]</span>
|
||||
<span class="k">if</span> <span class="s2">"</span><span class="se">\x00\x00</span><span class="s2">"</span> <span class="ow">in</span> <span class="n">utf16_chars</span><span class="p">:</span>
|
||||
<span class="n">res</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">utf16_chars</span><span class="p">[:</span><span class="n">utf16_chars</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s2">"</span><span class="se">\x00\x00</span><span class="s2">"</span><span class="p">)])</span>
|
||||
<span class="c1"># Bytearray will work on py2 & py3</span>
|
||||
<span class="c1"># Py2: bytearray((0, 0)) == b"\x00\x00"</span>
|
||||
<span class="c1"># Py2: bytearray((0, 0)) == b"\x00\x00"</span>
|
||||
<span class="n">utf16_chars</span> <span class="o">=</span> <span class="p">[</span><span class="nb">bytearray</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="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="nb">iter</span><span class="p">(</span><span class="n">x</span><span class="p">)]</span> <span class="o">*</span> <span class="mi">2</span><span class="p">)]</span>
|
||||
<span class="k">if</span> <span class="sa">b</span><span class="s2">"</span><span class="se">\x00\x00</span><span class="s2">"</span> <span class="ow">in</span> <span class="n">utf16_chars</span><span class="p">:</span>
|
||||
<span class="c1"># Translate bytearray to str/bytes for both py2 & py3</span>
|
||||
<span class="n">res</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="nb">bytes</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">utf16_chars</span><span class="p">[:</span><span class="n">utf16_chars</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\x00\x00</span><span class="s2">"</span><span class="p">)])</span>
|
||||
<span class="k">break</span>
|
||||
<span class="n">res</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">x</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">res</span><span class="p">)</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="k">return</span> <span class="sa">b</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">decode</span><span class="p">(</span><span class="s1">'utf16'</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">write_byte</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">byte</span><span class="p">):</span>
|
||||
<span class="sd">"""write a byte at ``addr``"""</span>
|
||||
@@ -510,6 +516,38 @@
|
||||
|
||||
<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">doc</span><span class="o">=</span><span class="s2">"The process :class:`~windows.winobject.token.Token`"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_security_descriptor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query_sacl</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">security</span><span class="o">.</span><span class="n">SecurityDescriptor</span><span class="o">.</span><span class="n">DEFAULT_SECURITY_INFORMATION</span><span class="p">):</span>
|
||||
<span class="n">open_flags</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">READ_CONTROL</span>
|
||||
<span class="k">if</span> <span class="n">query_sacl</span><span class="p">:</span>
|
||||
<span class="n">open_flags</span> <span class="o">|=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ACCESS_SYSTEM_SECURITY</span>
|
||||
<span class="n">tmp_handle</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">OpenProcess</span><span class="p">(</span><span class="n">open_flags</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">security</span><span class="o">.</span><span class="n">SecurityDescriptor</span><span class="o">.</span><span class="n">from_handle</span><span class="p">(</span><span class="n">tmp_handle</span><span class="p">,</span> <span class="n">query_sacl</span><span class="o">=</span><span class="n">query_sacl</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">flags</span><span class="p">,</span> <span class="n">obj_type</span><span class="o">=</span><span class="s2">"process"</span><span class="p">)</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">CloseHandle</span><span class="p">(</span><span class="n">tmp_handle</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">set_security_descriptor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sd</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sd</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||||
<span class="n">sd</span> <span class="o">=</span> <span class="n">security</span><span class="o">.</span><span class="n">SecurityDescriptor</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">sd</span><span class="p">)</span>
|
||||
<span class="n">open_flags</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">WRITE_OWNER</span> <span class="o">|</span> <span class="n">gdef</span><span class="o">.</span><span class="n">WRITE_DAC</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="n">sd</span><span class="o">.</span><span class="n">sacl</span> <span class="ow">and</span>
|
||||
<span class="nb">any</span><span class="p">(</span><span class="n">ace</span><span class="o">.</span><span class="n">Header</span><span class="o">.</span><span class="n">AceType</span> <span class="o">!=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SYSTEM_MANDATORY_LABEL_ACE_TYPE</span> <span class="k">for</span> <span class="n">ace</span> <span class="ow">in</span> <span class="n">sd</span><span class="o">.</span><span class="n">sacl</span><span class="p">)):</span>
|
||||
<span class="c1"># Print error if requested but no SecurityPrivilege ?</span>
|
||||
<span class="n">open_flags</span> <span class="o">|=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ACCESS_SYSTEM_SECURITY</span>
|
||||
<span class="n">tmp_handle</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">OpenProcess</span><span class="p">(</span><span class="n">open_flags</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">sd</span><span class="o">.</span><span class="n">_apply_to_handle_and_type</span><span class="p">(</span><span class="n">tmp_handle</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SE_KERNEL_OBJECT</span><span class="p">)</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">CloseHandle</span><span class="p">(</span><span class="n">tmp_handle</span><span class="p">)</span>
|
||||
|
||||
<span class="n">security_descriptor</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_security_descriptor</span><span class="p">,</span> <span class="n">set_security_descriptor</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span> <span class="c1"># Document ?</span>
|
||||
<span class="k">def</span> <span class="nf">handles</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="bp">self</span><span class="o">.</span><span class="n">pid</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">h</span> <span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">handles</span> <span class="k">if</span> <span class="n">h</span><span class="o">.</span><span class="n">dwProcessId</span> <span class="o">==</span> <span class="n">pid</span><span class="p">]</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="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>
|
||||
@@ -625,6 +663,11 @@
|
||||
<span class="k">def</span> <span class="nf">_get_handle</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetCurrentProcess</span><span class="p">()</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">limited_handle</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetCurrentProcess</span><span class="p">()</span>
|
||||
|
||||
|
||||
<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">pass</span>
|
||||
|
||||
@@ -668,6 +711,7 @@
|
||||
|
||||
<div class="viewcode-block" id="CurrentProcess.write_memory"><a class="viewcode-back" href="../../../process.html#windows.winobject.process.CurrentProcess.write_memory">[docs]</a> <span class="k">def</span> <span class="nf">write_memory</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="sd">"""Write data at addr"""</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">raw_encode</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="c1"># buffertype = (c_char * len(data)).from_address(addr)</span>
|
||||
<span class="c1"># buffertype[:len(data)] = data</span>
|
||||
<span class="n">ctypes</span><span class="o">.</span><span class="n">memmove</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
|
||||
@@ -1003,13 +1047,13 @@
|
||||
<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="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>
|
||||
<div class="viewcode-block" id="WinProcess.virtual_alloc"><a class="viewcode-back" href="../../../process.html#windows.winobject.process.WinProcess.virtual_alloc">[docs]</a> <span class="k">def</span> <span class="nf">virtual_alloc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">prot</span><span class="o">=</span><span class="n">PAGE_EXECUTE_READWRITE</span><span class="p">,</span> <span class="n">addr</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Allocate memory in the process</span>
|
||||
|
||||
<span class="sd"> :return: The address of the allocated memory</span>
|
||||
<span class="sd"> :rtype: :class:`int`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">VirtualAllocEx</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">dwSize</span><span class="o">=</span><span class="n">size</span><span class="p">,</span> <span class="n">flProtect</span><span class="o">=</span><span class="n">prot</span><span class="p">)</span></div>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">VirtualAllocEx</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">lpAddress</span><span class="o">=</span><span class="n">addr</span><span class="p">,</span> <span class="n">dwSize</span><span class="o">=</span><span class="n">size</span><span class="p">,</span> <span class="n">flProtect</span><span class="o">=</span><span class="n">prot</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="WinProcess.virtual_free"><a class="viewcode-back" href="../../../process.html#windows.winobject.process.WinProcess.virtual_free">[docs]</a> <span class="k">def</span> <span class="nf">virtual_free</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">"""Free memory in the process by virtual_alloc"""</span>
|
||||
@@ -1017,6 +1061,7 @@
|
||||
|
||||
<div class="viewcode-block" id="WinProcess.write_memory"><a class="viewcode-back" href="../../../process.html#windows.winobject.process.WinProcess.write_memory">[docs]</a> <span class="k">def</span> <span class="nf">write_memory</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="sd">"""Write `data` at `addr`"""</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">raw_encode</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">current_process</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">32</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">64</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="ow">not</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">NtWow64WriteVirtualMemory64</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"NtWow64WriteVirtualMemory64 non available in ntdll: cannot write into 64bits processus"</span><span class="p">)</span>
|
||||
|
||||
+240
-44
@@ -37,13 +37,33 @@
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for windows.winobject.registry</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span> <span class="nn">_winreg</span>
|
||||
<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">itertools</span>
|
||||
<span class="kn">import</span> <span class="nn">struct</span>
|
||||
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">namedtuple</span>
|
||||
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">namedtuple</span><span class="p">,</span> <span class="n">defaultdict</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">windows</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.generated_def.windef</span> <span class="k">import</span> <span class="n">KEY_READ</span><span class="p">,</span> <span class="n">REG_QWORD</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.dbgprint</span> <span class="k">import</span> <span class="n">dbgprint</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
||||
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="k">import</span> <span class="n">basestring</span><span class="p">,</span> <span class="n">int_types</span><span class="p">,</span> <span class="n">is_py3</span>
|
||||
|
||||
<span class="n">WENCODING</span> <span class="o">=</span> <span class="s2">"utf-16-le"</span>
|
||||
|
||||
<span class="c1"># So _winreg does not handle unicode stuff in Py2 :(</span>
|
||||
<span class="c1"># Need to rewrite everything to get it working with unicode</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">WinRegistryKey</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">HKEY</span><span class="p">):</span>
|
||||
<span class="n">_close_function</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">winproxy</span><span class="o">.</span><span class="n">RegCloseKey</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">sys</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="c1"># Late shutdown (not sur winproxy is still up)</span>
|
||||
<span class="k">return</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="p">:</span> <span class="c1"># Not NULL handle ?</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="sa">u</span><span class="s2">"Closing registry key handle </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="bp">self</span><span class="o">.</span><span class="n">value</span><span class="p">),</span> <span class="s1">'REGISTRY'</span><span class="p">)</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="p">)</span>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -55,7 +75,107 @@
|
||||
<span class="k">pass</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">etype</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="n">tb</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="n">etype</span> <span class="o">==</span> <span class="ne">WindowsError</span> <span class="ow">and</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">errornumber</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="n">etype</span> <span class="ow">in</span> <span class="p">(</span><span class="n">winproxy</span><span class="o">.</span><span class="n">WinproxyError</span><span class="p">,</span> <span class="ne">WindowsError</span><span class="p">)</span> <span class="ow">and</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">errornumber</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># Translation reg-buffer <-> python methodes</span>
|
||||
<span class="k">def</span> <span class="nf">Reg2Py_QWORD</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">buffer</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">PULONG64</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">Py2Reg_QWORD</span><span class="p">(</span><span class="n">obj</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">obj</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">Reg2Py_DWORD</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="c1"># Check size ?</span>
|
||||
<span class="k">return</span> <span class="n">buffer</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">LPDWORD</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">Py2Reg_DWORD</span><span class="p">(</span><span class="n">obj</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">obj</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">Reg2Py_DWORD_BIG_ENDIAN</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="c1"># Check size ?</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="n">buffer</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o"><<</span> <span class="mi">24</span><span class="p">)</span> <span class="o">+</span> <span class="p">(</span><span class="n">buffer</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o"><<</span> <span class="mi">16</span><span class="p">)</span> <span class="o">+</span> <span class="p">(</span><span class="n">buffer</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o"><<</span> <span class="mi">8</span><span class="p">)</span> <span class="o">+</span> <span class="n">buffer</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">Py2Reg_DWORD_BIG_ENDIAN</span><span class="p">(</span><span class="n">obj</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">obj</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">Reg2Py_BINARY</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="nb">bytes</span><span class="p">(</span><span class="nb">bytearray</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">def</span> <span class="nf">Py2Reg_BINARY</span><span class="p">(</span><span class="n">obj</span><span class="p">):</span>
|
||||
<span class="c1"># latin-1 encoding if py3 & type is str ?</span>
|
||||
<span class="k">return</span> <span class="n">obj</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">Reg2Py_SZ</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="c1"># Buffer is UTF16. buffer is extended-buffer</span>
|
||||
<span class="k">if</span> <span class="n">size</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="sa">u</span><span class="s2">""</span>
|
||||
<span class="k">if</span> <span class="n">buffer</span><span class="p">[</span><span class="n">size</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="ow">and</span> <span class="n">buffer</span><span class="p">[</span><span class="n">size</span> <span class="o">-</span> <span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="c1"># NULL TERMINATED: EASY</span>
|
||||
<span class="k">return</span> <span class="n">buffer</span><span class="o">.</span><span class="n">as_wstring</span><span class="p">()</span>
|
||||
<span class="c1"># Not null terminated: keep last byte</span>
|
||||
<span class="k">assert</span> <span class="ow">not</span> <span class="n">size</span> <span class="o">%</span> <span class="mi">2</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">WCHAR</span> <span class="o">*</span> <span class="p">(</span><span class="n">size</span> <span class="o">//</span> <span class="mi">2</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">def</span> <span class="nf">Py2Reg_SZ</span><span class="p">(</span><span class="n">obj</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">obj</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="n">WENCODING</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">Reg2Py_Multi_SZ</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">if</span> <span class="ow">not</span> <span class="n">size</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">[]</span>
|
||||
<span class="c1"># Simple path</span>
|
||||
<span class="k">if</span> <span class="n">is_py3</span><span class="p">:</span>
|
||||
<span class="n">rawstr</span> <span class="o">=</span> <span class="nb">bytes</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">rawstr</span> <span class="o">=</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">chr</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">buffer</span><span class="p">[:</span><span class="n">size</span><span class="p">]])</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">unistr</span> <span class="o">=</span> <span class="n">rawstr</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="n">WENCODING</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">unistr</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="sa">u</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">u</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">UnicodeDecodeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="c1"># Complexe-path</span>
|
||||
<span class="c1"># This is not some valide UTF-16</span>
|
||||
<span class="c1"># Try our best to extract some stuff from raw</span>
|
||||
<span class="k">return</span> <span class="n">rawstr</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">Py2Reg_Multi_SZ</span><span class="p">(</span><span class="n">obj</span><span class="p">):</span>
|
||||
<span class="c1"># Work on encoded values (to prevent str/unicode errors)</span>
|
||||
<span class="n">uni_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">s</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="n">WENCODING</span><span class="p">)</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">obj</span><span class="p">]</span>
|
||||
<span class="c1"># Separate by UTF-16 NULL BYTE (2 \x00)</span>
|
||||
<span class="n">uni_str</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">"</span><span class="se">\x00\x00</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">uni_list</span><span class="p">)</span>
|
||||
<span class="c1"># Add UTF-16 NULL byte for final string + final UTF-16 \x00 (4 \x00)</span>
|
||||
<span class="k">return</span> <span class="n">uni_str</span> <span class="o">+</span> <span class="sa">b</span><span class="s2">"</span><span class="se">\x00\x00\x00\x00</span><span class="s2">"</span>
|
||||
|
||||
<span class="n">DECODE_METHOD</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">ENCODE_METHOD</span> <span class="o">=</span> <span class="mi">1</span>
|
||||
|
||||
|
||||
<span class="n">KNOWN_ENCODE_DECODE_METHODS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">REG_SZ</span><span class="p">:</span> <span class="p">(</span><span class="n">Reg2Py_SZ</span><span class="p">,</span> <span class="n">Py2Reg_SZ</span><span class="p">),</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">REG_EXPAND_SZ</span><span class="p">:</span> <span class="p">(</span><span class="n">Reg2Py_SZ</span><span class="p">,</span> <span class="n">Py2Reg_SZ</span><span class="p">),</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">REG_MULTI_SZ</span><span class="p">:</span> <span class="p">(</span><span class="n">Reg2Py_Multi_SZ</span><span class="p">,</span> <span class="n">Py2Reg_Multi_SZ</span><span class="p">),</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">REG_DWORD</span><span class="p">:</span> <span class="p">(</span><span class="n">Reg2Py_DWORD</span><span class="p">,</span> <span class="n">Py2Reg_DWORD</span><span class="p">),</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">REG_DWORD_BIG_ENDIAN</span><span class="p">:</span> <span class="p">(</span><span class="n">Reg2Py_DWORD_BIG_ENDIAN</span><span class="p">,</span> <span class="n">Py2Reg_DWORD_BIG_ENDIAN</span><span class="p">),</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">REG_QWORD</span><span class="p">:</span> <span class="p">(</span><span class="n">Reg2Py_QWORD</span><span class="p">,</span> <span class="n">Py2Reg_QWORD</span><span class="p">),</span>
|
||||
<span class="c1"># Binary formats</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">REG_LINK</span><span class="p">:</span> <span class="p">(</span><span class="n">Reg2Py_BINARY</span><span class="p">,</span> <span class="n">Py2Reg_BINARY</span><span class="p">),</span> <span class="c1"># TESTING</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">REG_BINARY</span><span class="p">:</span> <span class="p">(</span><span class="n">Reg2Py_BINARY</span><span class="p">,</span> <span class="n">Py2Reg_BINARY</span><span class="p">),</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">REG_NONE</span><span class="p">:</span> <span class="p">(</span><span class="n">Reg2Py_BINARY</span><span class="p">,</span> <span class="n">Py2Reg_BINARY</span><span class="p">),</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="c1"># All unknown format are seens as binary data</span>
|
||||
<span class="n">UNKNOWM_FORMAT</span> <span class="o">=</span> <span class="p">(</span><span class="n">Reg2Py_BINARY</span><span class="p">,</span> <span class="n">Py2Reg_BINARY</span><span class="p">)</span>
|
||||
<span class="n">ENCODE_DECODE_METHODS</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="n">UNKNOWM_FORMAT</span><span class="p">,</span> <span class="n">KNOWN_ENCODE_DECODE_METHODS</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">decode_registry_buffer</span><span class="p">(</span><span class="nb">type</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">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">ENCODE_DECODE_METHODS</span><span class="p">[</span><span class="nb">type</span><span class="p">][</span><span class="n">DECODE_METHOD</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">except</span> <span class="ne">UnicodeDecodeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="c1"># Best effort if any decoding error happen</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="nb">chr</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">buffer</span><span class="p">[:</span><span class="n">size</span><span class="p">])</span>
|
||||
|
||||
|
||||
<span class="n">KeyValue</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s2">"KeyValue"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"name"</span><span class="p">,</span> <span class="s2">"value"</span><span class="p">,</span> <span class="s2">"type"</span><span class="p">])</span>
|
||||
@@ -64,7 +184,7 @@
|
||||
|
||||
<div class="viewcode-block" id="PyHKey"><a class="viewcode-back" href="../../../registry.html#windows.winobject.registry.PyHKey">[docs]</a><span class="k">class</span> <span class="nc">PyHKey</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""A windows registry key"""</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">surkey</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">sam</span><span class="o">=</span><span class="n">KEY_READ</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">surkey</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">sam</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">KEY_READ</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">surkey</span> <span class="o">=</span> <span class="n">surkey</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">fullname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">surkey</span><span class="o">.</span><span class="n">fullname</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\\</span><span class="s2">"</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">surkey</span><span class="o">.</span><span class="n">name</span>
|
||||
@@ -75,27 +195,46 @@
|
||||
<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">'<PyHKey "</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="bp">self</span><span class="o">.</span><span class="n">fullname</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_open_key</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">sam</span><span class="p">):</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">WinRegistryKey</span><span class="p">()</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">RegOpenKeyExW</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">sam</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="sa">u</span><span class="s2">"Opening registry key <</span><span class="si">{0}</span><span class="s2">> (handle=</span><span class="si">{1:#x}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">result</span><span class="o">.</span><span class="n">value</span><span class="p">),</span> <span class="s2">"REGISTRY"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">result</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_create_key</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">sam</span><span class="p">):</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">WinRegistryKey</span><span class="p">()</span>
|
||||
<span class="n">flags</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">RegCreateKeyExW</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">name</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">flags</span><span class="p">,</span> <span class="n">sam</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">result</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="n">dbgprint</span><span class="p">(</span><span class="sa">u</span><span class="s2">"Creating registry key <</span><span class="si">{0}</span><span class="s2">> (handle=</span><span class="si">{1:#x}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">result</span><span class="o">.</span><span class="n">value</span><span class="p">),</span> <span class="s2">"REGISTRY"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">result</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">phkey</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">_phkey</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_phkey</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_phkey</span> <span class="o">=</span> <span class="n">_winreg</span><span class="o">.</span><span class="n">OpenKeyEx</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">surkey</span><span class="o">.</span><span class="n">phkey</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sam</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_phkey</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_open_key</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">surkey</span><span class="o">.</span><span class="n">phkey</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">sam</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">raise</span> <span class="ne">WindowsError</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">winerror</span><span class="p">,</span> <span class="s2">"Could not open registry key <</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="bp">self</span><span class="o">.</span><span class="n">fullname</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_phkey</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">exists</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="c1"># Best way todo ?</span>
|
||||
<span class="c1"># TODO: document</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_phkey</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="c1"># May have been deleted in between</span>
|
||||
<span class="c1"># So <self._phkey> tells use nothing</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_phkey</span><span class="p">:</span> <span class="c1"># Not None + pointer not NULL</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">get_key_size_info</span><span class="p">()</span>
|
||||
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_KEY_DELETED</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">False</span>
|
||||
<span class="k">raise</span>
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">tmpphkey</span> <span class="o">=</span> <span class="n">_winreg</span><span class="o">.</span><span class="n">OpenKeyEx</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">surkey</span><span class="o">.</span><span class="n">phkey</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">tmpphkey</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_open_key</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">surkey</span><span class="o">.</span><span class="n">phkey</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">gdef</span><span class="o">.</span><span class="n">KEY_READ</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">return</span> <span class="kc">False</span>
|
||||
<span class="n">_winreg</span><span class="o">.</span><span class="n">CloseKey</span><span class="p">(</span><span class="n">tmpphkey</span><span class="p">)</span>
|
||||
<span class="c1"># tmpphkey will be garbage collected and auto-closed</span>
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
@@ -105,32 +244,70 @@
|
||||
<span class="sd"> :type: [:class:`PyHKey`] - A list of keys"""</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">with</span> <span class="n">ExpectWindowsError</span><span class="p">(</span><span class="mi">259</span><span class="p">):</span>
|
||||
<span class="n">default_name_size</span> <span class="o">=</span> <span class="mi">256</span> <span class="o">+</span> <span class="mi">1</span>
|
||||
<span class="n">name_size</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">(</span><span class="n">default_name_size</span><span class="p">)</span>
|
||||
<span class="n">name_buffer</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_unicode_buffer</span><span class="p">(</span><span class="n">name_size</span><span class="o">.</span><span class="n">value</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">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">_winreg</span><span class="o">.</span><span class="n">EnumKey</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">phkey</span><span class="p">,</span> <span class="n">i</span><span class="p">))</span>
|
||||
<span class="n">name_size</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">default_name_size</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">RegEnumKeyExW</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">phkey</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">name_buffer</span><span class="p">,</span> <span class="n">name_size</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="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">name_buffer</span><span class="p">[:</span><span class="n">name_size</span><span class="o">.</span><span class="n">value</span><span class="p">])</span> <span class="c1"># Will allow key name with \x00 inside</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">PyHKey</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">res</span><span class="p">]</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_key_size_info</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">max_name_len</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">max_value_len</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">RegQueryInfoKeyW</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">phkey</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="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">max_name_len</span><span class="p">,</span> <span class="n">max_value_len</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">return</span> <span class="p">(</span><span class="n">max_name_len</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">max_value_len</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">values</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The values of the registry key</span>
|
||||
|
||||
<span class="sd"> :type: [:class:`KeyValue`] - A list of values"""</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="c1"># Get max info keys</span>
|
||||
|
||||
<span class="n">max_name_size</span><span class="p">,</span> <span class="n">max_data_size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_key_size_info</span><span class="p">()</span>
|
||||
<span class="c1"># Null terminators</span>
|
||||
<span class="n">max_name_size</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="n">max_data_size</span> <span class="o">+=</span> <span class="mi">2</span>
|
||||
<span class="k">with</span> <span class="n">ExpectWindowsError</span><span class="p">(</span><span class="mi">259</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">name_value_type</span> <span class="o">=</span> <span class="n">_winreg</span><span class="o">.</span><span class="n">EnumValue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">phkey</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
|
||||
<span class="c1"># _winreg doest not support REG_QWORD in python2</span>
|
||||
<span class="c1"># See http://bugs.python.org/issue23026</span>
|
||||
<span class="k">if</span> <span class="n">name_value_type</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="n">REG_QWORD</span><span class="p">:</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="n">name_value_type</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">value</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">name_value_type</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="nb">type</span> <span class="o">=</span> <span class="n">name_value_type</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
|
||||
<span class="n">name_value_type</span> <span class="o">=</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="nb">type</span>
|
||||
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">name_value_type</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">KeyValue</span><span class="p">(</span><span class="o">*</span><span class="n">r</span><span class="p">)</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">res</span><span class="p">]</span>
|
||||
<span class="n">value_type</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">namesize</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">max_name_size</span><span class="p">)</span>
|
||||
<span class="n">keyname</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_unicode_buffer</span><span class="p">(</span><span class="n">namesize</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="n">datasize</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">max_data_size</span><span class="p">)</span>
|
||||
<span class="n">databuffer</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">BUFFER</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">BYTE</span><span class="p">,</span> <span class="n">nbelt</span><span class="o">=</span><span class="n">datasize</span><span class="o">.</span><span class="n">value</span><span class="p">)()</span>
|
||||
<span class="c1"># A value can have been added in-between.</span>
|
||||
<span class="c1"># So recheck the size given by get_key_size_info :)</span>
|
||||
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">RegEnumValueW</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">phkey</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">keyname</span><span class="p">,</span> <span class="n">namesize</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">value_type</span><span class="p">,</span> <span class="n">databuffer</span><span class="p">,</span> <span class="n">datasize</span><span class="p">)</span>
|
||||
<span class="k">break</span>
|
||||
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">!=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_MORE_DATA</span><span class="p">:</span>
|
||||
<span class="k">raise</span>
|
||||
<span class="c1"># Update the sizes / buffers & try again :)</span>
|
||||
<span class="n">max_name_size</span><span class="p">,</span> <span class="n">max_data_size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_key_size_info</span><span class="p">()</span>
|
||||
<span class="n">max_name_size</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="n">max_data_size</span> <span class="o">+=</span> <span class="mi">2</span>
|
||||
<span class="n">namesize</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">max_name_size</span><span class="p">)</span>
|
||||
<span class="n">keyname</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_unicode_buffer</span><span class="p">(</span><span class="n">namesize</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="n">datasize</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">max_data_size</span><span class="p">)</span>
|
||||
<span class="n">databuffer</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">BUFFER</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">BYTE</span><span class="p">,</span> <span class="n">nbelt</span><span class="o">=</span><span class="n">datasize</span><span class="o">.</span><span class="n">value</span><span class="p">)()</span>
|
||||
<span class="n">vobj</span> <span class="o">=</span> <span class="n">decode_registry_buffer</span><span class="p">(</span><span class="n">value_type</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">databuffer</span><span class="p">,</span> <span class="n">datasize</span><span class="o">.</span><span class="n">value</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">KeyValue</span><span class="p">(</span><span class="n">keyname</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">vobj</span><span class="p">,</span> <span class="n">value_type</span><span class="o">.</span><span class="n">value</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">info</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">_winreg</span><span class="o">.</span><span class="n">QueryInfoKey</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">phkey</span><span class="p">)</span>
|
||||
<span class="c1"># Need other stuff ?</span>
|
||||
<span class="n">nb_key</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">nb_values</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">last_modif</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FILETIME</span><span class="p">()</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">RegQueryInfoKeyW</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">phkey</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">nb_key</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">nb_values</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">last_modif</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">nb_key</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">nb_values</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">last_modif</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">last_write</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -141,16 +318,28 @@
|
||||
|
||||
<span class="sd"> :rtype: :class:`KeyValue`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">value</span><span class="p">,</span> <span class="nb">type</span> <span class="o">=</span> <span class="n">_winreg</span><span class="o">.</span><span class="n">QueryValueEx</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">phkey</span><span class="p">,</span> <span class="n">value_name</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="nb">type</span> <span class="o">==</span> <span class="n">REG_QWORD</span><span class="p">:</span>
|
||||
<span class="n">value</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">value</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="n">KeyValue</span><span class="p">(</span><span class="n">value_name</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="nb">type</span><span class="p">)</span></div>
|
||||
|
||||
<span class="nb">type</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="mi">0</span><span class="p">)</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">(</span><span class="mh">0x100</span><span class="p">)</span>
|
||||
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">BUFFER</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">BYTE</span><span class="p">,</span> <span class="n">nbelt</span><span class="o">=</span><span class="n">size</span><span class="o">.</span><span class="n">value</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">RegQueryValueExW</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">phkey</span><span class="p">,</span> <span class="n">value_name</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="nb">type</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">break</span>
|
||||
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">!=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ERROR_MORE_DATA</span><span class="p">:</span>
|
||||
<span class="k">raise</span>
|
||||
<span class="n">size</span><span class="o">.</span><span class="n">value</span> <span class="o">*=</span> <span class="mi">2</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">BUFFER</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">BYTE</span><span class="p">,</span> <span class="n">nbelt</span><span class="o">=</span><span class="n">size</span><span class="o">.</span><span class="n">value</span><span class="p">)()</span>
|
||||
<span class="k">continue</span>
|
||||
<span class="n">vobj</span> <span class="o">=</span> <span class="n">decode_registry_buffer</span><span class="p">(</span><span class="nb">type</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">buffer</span><span class="p">,</span> <span class="n">size</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">KeyValue</span><span class="p">(</span><span class="n">value_name</span><span class="p">,</span> <span class="n">vobj</span><span class="p">,</span> <span class="nb">type</span><span class="o">.</span><span class="n">value</span><span class="p">)</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_guess_value_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">_winreg</span><span class="o">.</span><span class="n">REG_SZ</span>
|
||||
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">long</span><span class="p">)):</span>
|
||||
<span class="k">return</span> <span class="n">_winreg</span><span class="o">.</span><span class="n">REG_DWORD</span>
|
||||
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">REG_SZ</span>
|
||||
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">int_types</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">REG_DWORD</span>
|
||||
<span class="c1"># elif isinstance(value, (list, tuple)):</span>
|
||||
<span class="c1"># if all(isinstance(v, basestring) in value):</span>
|
||||
<span class="c1"># return _winreg.REG_MULTI_SZ</span>
|
||||
@@ -161,13 +350,16 @@
|
||||
<span class="sd">"""Set the value for ``name`` to ``value``. if ``type`` is None try to guess items"""</span>
|
||||
<span class="k">if</span> <span class="nb">type</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="nb">type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_guess_value_type</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="nb">type</span> <span class="o">==</span> <span class="n">REG_QWORD</span><span class="p">:</span>
|
||||
<span class="n">value</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">"<Q"</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">_winreg</span><span class="o">.</span><span class="n">SetValueEx</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">phkey</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">type</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="n">ENCODE_DECODE_METHODS</span><span class="p">[</span><span class="nb">type</span><span class="p">][</span><span class="n">ENCODE_METHOD</span><span class="p">](</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">buffer</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">):</span> <span class="c1"># Should not be unicode at this point</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">BUFFER</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">BYTE</span><span class="p">)</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">RegSetValueExW</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">phkey</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">type</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></div>
|
||||
|
||||
<div class="viewcode-block" id="PyHKey.delete_value"><a class="viewcode-back" href="../../../registry.html#windows.winobject.registry.PyHKey.delete_value">[docs]</a> <span class="k">def</span> <span class="nf">delete_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="sd">"""Delete the value with ``name``"""</span>
|
||||
<span class="k">return</span> <span class="n">_winreg</span><span class="o">.</span><span class="n">DeleteValue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">phkey</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span></div>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">RegDeleteValueW</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">phkey</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="PyHKey.open_subkey"><a class="viewcode-back" href="../../../registry.html#windows.winobject.registry.PyHKey.open_subkey">[docs]</a> <span class="k">def</span> <span class="nf">open_subkey</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">sam</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
@@ -189,24 +381,28 @@
|
||||
<div class="viewcode-block" id="PyHKey.create"><a class="viewcode-back" href="../../../registry.html#windows.winobject.registry.PyHKey.create">[docs]</a> <span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Create the registry key"""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_phkey</span> <span class="o">=</span> <span class="n">_winreg</span><span class="o">.</span><span class="n">CreateKeyEx</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">surkey</span><span class="o">.</span><span class="n">phkey</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sam</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_phkey</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_key</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">surkey</span><span class="o">.</span><span class="n">phkey</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">sam</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">raise</span> <span class="ne">WindowsError</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">winerror</span><span class="p">,</span> <span class="s2">"Could not create registry key <</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="bp">self</span><span class="o">.</span><span class="n">fullname</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="bp">self</span></div>
|
||||
|
||||
<div class="viewcode-block" id="PyHKey.delete"><a class="viewcode-back" href="../../../registry.html#windows.winobject.registry.PyHKey.delete">[docs]</a> <span class="k">def</span> <span class="nf">delete</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Delete the registry key"""</span>
|
||||
<span class="c1"># Allow a 'recursive' param to empty before delete ?</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">_winreg</span><span class="o">.</span><span class="n">DeleteKeyEx</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">surkey</span><span class="o">.</span><span class="n">phkey</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">sam</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">RegDeleteKeyExW</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">surkey</span><span class="o">.</span><span class="n">phkey</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">sam</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">WindowsError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">WindowsError</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">winerror</span><span class="p">,</span> <span class="s2">"Could not delete registry key <</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="bp">self</span><span class="o">.</span><span class="n">fullname</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="kc">None</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">empty</span><span class="p">(</span><span class="bp">self</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">RegDeleteTreeW</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">phkey</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="PyHKey.__setitem__"><a class="viewcode-back" href="../../../registry.html#windows.winobject.registry.PyHKey.__setitem__">[docs]</a> <span class="k">def</span> <span class="nf">__setitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
||||
<span class="n">rtype</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">long</span><span class="p">,</span> <span class="n">basestring</span><span class="p">)):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">basestring</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">int_types</span><span class="p">)):</span>
|
||||
<span class="n">value</span><span class="p">,</span> <span class="n">rtype</span> <span class="o">=</span> <span class="n">value</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">rtype</span><span class="p">)</span></div>
|
||||
|
||||
@@ -223,12 +419,12 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
|
||||
|
||||
|
||||
<span class="n">HKEY_LOCAL_MACHINE</span> <span class="o">=</span> <span class="n">PyHKey</span><span class="p">(</span><span class="n">DummyPHKEY</span><span class="p">(</span><span class="n">_winreg</span><span class="o">.</span><span class="n">HKEY_LOCAL_MACHINE</span><span class="p">,</span> <span class="s2">"HKEY_LOCAL_MACHINE"</span><span class="p">),</span> <span class="s2">""</span><span class="p">,</span> <span class="n">_winreg</span><span class="o">.</span><span class="n">KEY_READ</span><span class="p">)</span>
|
||||
<span class="n">HKEY_CLASSES_ROOT</span> <span class="o">=</span> <span class="n">PyHKey</span><span class="p">(</span><span class="n">DummyPHKEY</span><span class="p">(</span><span class="n">_winreg</span><span class="o">.</span><span class="n">HKEY_CLASSES_ROOT</span><span class="p">,</span> <span class="s2">"HKEY_CLASSES_ROOT"</span><span class="p">),</span> <span class="s2">""</span><span class="p">,</span> <span class="n">_winreg</span><span class="o">.</span><span class="n">KEY_READ</span> <span class="p">)</span>
|
||||
<span class="n">HKEY_CURRENT_USER</span> <span class="o">=</span> <span class="n">PyHKey</span><span class="p">(</span><span class="n">DummyPHKEY</span><span class="p">(</span><span class="n">_winreg</span><span class="o">.</span><span class="n">HKEY_CURRENT_USER</span><span class="p">,</span> <span class="s2">"HKEY_CURRENT_USER"</span><span class="p">),</span> <span class="s2">""</span><span class="p">,</span> <span class="n">_winreg</span><span class="o">.</span><span class="n">KEY_READ</span><span class="p">)</span>
|
||||
<span class="n">HKEY_DYN_DATA</span> <span class="o">=</span> <span class="n">PyHKey</span><span class="p">(</span><span class="n">DummyPHKEY</span><span class="p">(</span><span class="n">_winreg</span><span class="o">.</span><span class="n">HKEY_DYN_DATA</span><span class="p">,</span> <span class="s2">"HKEY_DYN_DATA"</span><span class="p">),</span> <span class="s2">""</span><span class="p">,</span> <span class="n">_winreg</span><span class="o">.</span><span class="n">KEY_READ</span><span class="p">)</span>
|
||||
<span class="n">HKEY_PERFORMANCE_DATA</span> <span class="o">=</span> <span class="n">PyHKey</span><span class="p">(</span><span class="n">DummyPHKEY</span><span class="p">(</span><span class="n">_winreg</span><span class="o">.</span><span class="n">HKEY_PERFORMANCE_DATA</span><span class="p">,</span> <span class="s2">"HKEY_PERFORMANCE_DATA"</span><span class="p">),</span> <span class="s2">""</span><span class="p">,</span> <span class="n">_winreg</span><span class="o">.</span><span class="n">KEY_READ</span><span class="p">)</span>
|
||||
<span class="n">HKEY_USERS</span> <span class="o">=</span> <span class="n">PyHKey</span><span class="p">(</span><span class="n">DummyPHKEY</span><span class="p">(</span><span class="n">_winreg</span><span class="o">.</span><span class="n">HKEY_USERS</span><span class="p">,</span> <span class="s2">"HKEY_USERS"</span><span class="p">),</span> <span class="s2">""</span><span class="p">,</span> <span class="n">_winreg</span><span class="o">.</span><span class="n">KEY_READ</span> <span class="p">)</span>
|
||||
<span class="n">HKEY_LOCAL_MACHINE</span> <span class="o">=</span> <span class="n">PyHKey</span><span class="p">(</span><span class="n">DummyPHKEY</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">HKEY_LOCAL_MACHINE</span><span class="p">,</span> <span class="s2">"HKEY_LOCAL_MACHINE"</span><span class="p">),</span> <span class="s2">""</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">KEY_READ</span><span class="p">)</span>
|
||||
<span class="n">HKEY_CLASSES_ROOT</span> <span class="o">=</span> <span class="n">PyHKey</span><span class="p">(</span><span class="n">DummyPHKEY</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">HKEY_CLASSES_ROOT</span><span class="p">,</span> <span class="s2">"HKEY_CLASSES_ROOT"</span><span class="p">),</span> <span class="s2">""</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">KEY_READ</span> <span class="p">)</span>
|
||||
<span class="n">HKEY_CURRENT_USER</span> <span class="o">=</span> <span class="n">PyHKey</span><span class="p">(</span><span class="n">DummyPHKEY</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">HKEY_CURRENT_USER</span><span class="p">,</span> <span class="s2">"HKEY_CURRENT_USER"</span><span class="p">),</span> <span class="s2">""</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">KEY_READ</span><span class="p">)</span>
|
||||
<span class="n">HKEY_DYN_DATA</span> <span class="o">=</span> <span class="n">PyHKey</span><span class="p">(</span><span class="n">DummyPHKEY</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">HKEY_DYN_DATA</span><span class="p">,</span> <span class="s2">"HKEY_DYN_DATA"</span><span class="p">),</span> <span class="s2">""</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">KEY_READ</span><span class="p">)</span>
|
||||
<span class="n">HKEY_PERFORMANCE_DATA</span> <span class="o">=</span> <span class="n">PyHKey</span><span class="p">(</span><span class="n">DummyPHKEY</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">HKEY_PERFORMANCE_DATA</span><span class="p">,</span> <span class="s2">"HKEY_PERFORMANCE_DATA"</span><span class="p">),</span> <span class="s2">""</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">KEY_READ</span><span class="p">)</span>
|
||||
<span class="n">HKEY_USERS</span> <span class="o">=</span> <span class="n">PyHKey</span><span class="p">(</span><span class="n">DummyPHKEY</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">HKEY_USERS</span><span class="p">,</span> <span class="s2">"HKEY_USERS"</span><span class="p">),</span> <span class="s2">""</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">KEY_READ</span> <span class="p">)</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="Registry"><a class="viewcode-back" href="../../../registry.html#windows.winobject.registry.Registry">[docs]</a><span class="k">class</span> <span class="nc">Registry</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
@@ -243,7 +439,7 @@
|
||||
<span class="s2">"HKEY_USERS"</span> <span class="p">:</span> <span class="n">HKEY_USERS</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sam</span><span class="o">=</span><span class="n">KEY_READ</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sam</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">KEY_READ</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">sam</span> <span class="o">=</span> <span class="n">sam</span>
|
||||
|
||||
<div class="viewcode-block" id="Registry.reopen"><a class="viewcode-back" href="../../../registry.html#windows.winobject.registry.Registry.reopen">[docs]</a> <span class="nd">@classmethod</span>
|
||||
|
||||
+102
-78
@@ -46,14 +46,9 @@
|
||||
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">utils</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.generated_def</span> <span class="k">import</span> <span class="o">*</span>
|
||||
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">security</span>
|
||||
|
||||
|
||||
<span class="n">SERVICE_TYPE</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span><span class="n">SERVICE_KERNEL_DRIVER</span><span class="p">,</span> <span class="n">SERVICE_FILE_SYSTEM_DRIVER</span><span class="p">,</span> <span class="n">SERVICE_WIN32_OWN_PROCESS</span><span class="p">,</span> <span class="n">SERVICE_WIN32_SHARE_PROCESS</span><span class="p">,</span> <span class="n">SERVICE_INTERACTIVE_PROCESS</span><span class="p">)</span>
|
||||
<span class="n">SERVICE_STATE</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span><span class="n">SERVICE_STOPPED</span><span class="p">,</span> <span class="n">SERVICE_START_PENDING</span><span class="p">,</span> <span class="n">SERVICE_STOP_PENDING</span><span class="p">,</span> <span class="n">SERVICE_RUNNING</span><span class="p">,</span> <span class="n">SERVICE_CONTINUE_PENDING</span><span class="p">,</span> <span class="n">SERVICE_PAUSE_PENDING</span><span class="p">,</span> <span class="n">SERVICE_PAUSED</span><span class="p">)</span>
|
||||
<span class="n">SERVICE_CONTROLE_ACCEPTED</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">()</span>
|
||||
<span class="n">SERVICE_FLAGS</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span><span class="n">SERVICE_RUNS_IN_SYSTEM_PROCESS</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="c1"># TODO: RM :)</span>
|
||||
<span class="n">ServiceStatus</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s2">"ServiceStatus"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"type"</span><span class="p">,</span> <span class="s2">"state"</span><span class="p">,</span> <span class="s2">"control_accepted"</span><span class="p">,</span> <span class="s2">"flags"</span><span class="p">])</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd">``type`` might be one of:</span>
|
||||
@@ -81,82 +76,37 @@
|
||||
|
||||
<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="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="k">class</span> <span class="nc">ServiceManager</span><span class="p">(</span><span class="n">utils</span><span class="o">.</span><span class="n">AutoHandle</span><span class="p">):</span>
|
||||
<span class="n">_close_function</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CloseServiceHandle</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The name of the service</span>
|
||||
<span class="k">def</span> <span class="nf">_get_handle</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">OpenSCManagerA</span><span class="p">(</span><span class="n">dwDesiredAccess</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">MAXIMUM_ALLOWED</span><span class="p">)</span>
|
||||
|
||||
<span class="sd"> :type: :class:`str`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">lpServiceName</span>
|
||||
<span class="k">def</span> <span class="nf">open_service</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">access</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">MAXIMUM_ALLOWED</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">OpenServiceA</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">access</span><span class="p">)</span> <span class="c1"># Check service exists :)</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</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="sd">"""The description of the service</span>
|
||||
<span class="k">def</span> <span class="nf">get_service</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">access</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">MAXIMUM_ALLOWED</span><span class="p">):</span>
|
||||
<span class="n">handle</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">open_service</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">access</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">NewService</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="n">handle</span><span class="p">)</span>
|
||||
|
||||
<span class="sd"> :type: :class:`str`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">lpDisplayName</span>
|
||||
<span class="fm">__getitem__</span> <span class="o">=</span> <span class="n">get_service</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">status</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The status of the service</span>
|
||||
<span class="k">def</span> <span class="nf">get_service_display_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="c1"># This API is strange..</span>
|
||||
<span class="c1"># Why can't we retrieve the display name for a service handle ?</span>
|
||||
<span class="n">BUFFER_SIZE</span> <span class="o">=</span> <span class="mh">0x1000</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="p">(</span><span class="n">CHAR</span> <span class="o">*</span> <span class="n">BUFFER_SIZE</span><span class="p">)()</span>
|
||||
<span class="n">size_needed</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">(</span><span class="n">BUFFER_SIZE</span><span class="p">)</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">GetServiceDisplayNameA</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">result</span><span class="p">,</span> <span class="n">size_needed</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">result</span><span class="o">.</span><span class="n">value</span>
|
||||
|
||||
<span class="sd"> :type: :class:`ServiceStatus`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">status</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ServiceStatusProcess</span>
|
||||
<span class="n">stype</span> <span class="o">=</span> <span class="n">SERVICE_TYPE</span><span class="p">[</span><span class="n">status</span><span class="o">.</span><span class="n">dwServiceType</span><span class="p">]</span>
|
||||
<span class="n">sstate</span> <span class="o">=</span> <span class="n">SERVICE_STATE</span><span class="p">[</span><span class="n">status</span><span class="o">.</span><span class="n">dwCurrentState</span><span class="p">]</span>
|
||||
<span class="n">scontrol</span> <span class="o">=</span> <span class="n">status</span><span class="o">.</span><span class="n">dwControlsAccepted</span>
|
||||
<span class="n">sflags</span> <span class="o">=</span> <span class="n">SERVICE_FLAGS</span><span class="p">[</span><span class="n">status</span><span class="o">.</span><span class="n">dwServiceFlags</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="n">ServiceStatus</span><span class="p">(</span><span class="n">stype</span><span class="p">,</span> <span class="n">sstate</span><span class="p">,</span> <span class="n">scontrol</span><span class="p">,</span> <span class="n">sflags</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">process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The process running the service (if any)</span>
|
||||
|
||||
<span class="sd"> :type: :class:`WinProcess <windows.winobject.process.WinProcess>` or ``None``</span>
|
||||
<span class="sd"> """</span>
|
||||
<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="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">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="k">with</span> <span class="n">scmanagera</span><span class="p">(</span><span class="n">SC_MANAGER_ENUMERATE_SERVICE</span><span class="p">)</span> <span class="k">as</span> <span class="n">scm</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">def</span> <span class="nf">_enumerate_services_generator</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">size_needed</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">nb_services</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">counter</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
|
||||
<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">scm</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="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="bp">self</span><span class="o">.</span><span class="n">handle</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>
|
||||
|
||||
@@ -164,11 +114,85 @@
|
||||
<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="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">scm</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="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="bp">self</span><span class="o">.</span><span class="n">handle</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>
|
||||
<span class="n">return_type</span> <span class="o">=</span> <span class="p">(</span><span class="n">ServiceA</span> <span class="o">*</span> <span class="n">nb_services</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">return_type</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">break</span>
|
||||
<span class="n">services_array</span> <span class="o">=</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ENUM_SERVICE_STATUS_PROCESSA</span> <span class="o">*</span> <span class="n">nb_services</span><span class="o">.</span><span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">from_buffer</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">service_info</span> <span class="ow">in</span> <span class="n">services_array</span><span class="p">:</span>
|
||||
<span class="n">shandle</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">open_service</span><span class="p">(</span><span class="n">service_info</span><span class="o">.</span><span class="n">lpServiceName</span><span class="p">)</span>
|
||||
<span class="k">yield</span> <span class="n">NewService</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">shandle</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">service_info</span><span class="o">.</span><span class="n">lpServiceName</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="n">service_info</span><span class="o">.</span><span class="n">lpDisplayName</span><span class="p">)</span>
|
||||
<span class="k">return</span>
|
||||
|
||||
<span class="fm">__iter__</span> <span class="o">=</span> <span class="n">_enumerate_services_generator</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">enumerate_services</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_enumerate_services_generator</span><span class="p">())</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">NewService</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SC_HANDLE</span><span class="p">):</span>
|
||||
<span class="c1"># close_function = windows.winproxy.CloseServiceHandle</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">NewService</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">handle</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
|
||||
<span class="sd">"""The name of the service</span>
|
||||
|
||||
<span class="sd"> :type: :class:`str`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">description</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">_description</span> <span class="o">=</span> <span class="n">description</span> <span class="c1"># Setup fixedpropety</span>
|
||||
|
||||
<span class="nd">@property</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="sd">"""The description of the service</span>
|
||||
|
||||
<span class="sd"> :type: :class:`str`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">ServiceManager</span><span class="p">()</span><span class="o">.</span><span class="n">get_service_display_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="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">status</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">BUFFER</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SERVICE_STATUS_PROCESS</span><span class="p">)()</span>
|
||||
<span class="n">size_needed</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">QueryServiceStatusEx</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SC_STATUS_PROCESS_INFO</span><span class="p">,</span> <span class="n">buffer</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">LPBYTE</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">buffer</span><span class="p">),</span> <span class="n">size_needed</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">buffer</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The process running the service (if any)</span>
|
||||
|
||||
<span class="sd"> :type: :class:`WinProcess <windows.winobject.process.WinProcess>` or ``None``</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">pid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">status</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="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>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">security_descriptor</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">security</span><span class="o">.</span><span class="n">SecurityDescriptor</span><span class="o">.</span><span class="n">from_service</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="n">nbelt</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="k">if</span> <span class="n">args</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||||
<span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">args</span><span class="p">]</span>
|
||||
<span class="n">nbelt</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
|
||||
<span class="n">args</span> <span class="o">=</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">LPCSTR</span> <span class="o">*</span> <span class="p">(</span><span class="n">nbelt</span><span class="p">))(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">StartServiceA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nbelt</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">status</span> <span class="o">=</span> <span class="n">SERVICE_STATUS</span><span class="p">()</span>
|
||||
<span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">ControlService</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">SERVICE_CONTROL_STOP</span><span class="p">,</span> <span class="n">status</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">status</span>
|
||||
|
||||
<span class="k">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"> "</span><span class="si">{1}</span><span class="s2">" </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">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">state</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winproxy</span><span class="o">.</span><span class="n">CloseServiceHandle</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
|
||||
+147
-119
@@ -48,6 +48,8 @@
|
||||
|
||||
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
||||
|
||||
|
||||
|
||||
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">process</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">network</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">registry</span>
|
||||
@@ -58,10 +60,11 @@
|
||||
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">object_manager</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">handle</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">event_log</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">event_trace</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">task_scheduler</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">system_module</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.winobject</span> <span class="k">import</span> <span class="n">bits</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">windows.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>
|
||||
@@ -97,12 +100,12 @@
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">volume</span><span class="o">.</span><span class="n">enum_logical_drive</span><span class="p">()</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">services</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The list of services</span>
|
||||
|
||||
<span class="sd"> :type: [:class:`~windows.winobject.service.ServiceA`] -- A list of Service"""</span>
|
||||
<span class="k">return</span> <span class="n">service</span><span class="o">.</span><span class="n">enumerate_services</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">service</span><span class="o">.</span><span class="n">ServiceManager</span><span class="p">()</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">handles</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -143,6 +146,10 @@
|
||||
<span class="k">def</span> <span class="nf">event_log</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">event_log</span><span class="o">.</span><span class="n">EvtlogManager</span><span class="p">()</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">etw</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">event_trace</span><span class="o">.</span><span class="n">EtwManager</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">task_scheduler</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -167,6 +174,10 @@
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">windows</span><span class="o">.</span><span class="n">winobject</span><span class="o">.</span><span class="n">object_manager</span><span class="o">.</span><span class="n">ObjectManager</span><span class="p">()</span>
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">bits</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">bits</span><span class="o">.</span><span class="n">create_manager</span><span class="p">()</span>
|
||||
|
||||
<span class="c1">#TODO: use GetComputerNameExA ? and recover other names ?</span>
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">computer_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -174,9 +185,14 @@
|
||||
|
||||
<span class="sd"> :type: :class:`str`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">(</span><span class="mh">0x1000</span><span class="p">)</span>
|
||||
<span class="n">buf</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">GetComputerNameA</span><span class="p">(</span><span class="n">buf</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</span><span class="p">))</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DWORD</span><span class="p">(</span><span class="mh">0x1000</span><span class="p">)</span>
|
||||
<span class="c1"># For now I don't know what is best as A vs W APIs...</span>
|
||||
<span class="k">if</span> <span class="n">windows</span><span class="o">.</span><span class="n">pycompat</span><span class="o">.</span><span class="n">is_py3</span><span class="p">:</span>
|
||||
<span class="n">buf</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_unicode_buffer</span><span class="p">(</span><span class="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">GetComputerNameW</span><span class="p">(</span><span class="n">buf</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</span><span class="p">))</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">buf</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_string_buffer</span><span class="p">(</span><span class="n">size</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">GetComputerNameA</span><span class="p">(</span><span class="n">buf</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</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">buf</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="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
@@ -218,7 +234,7 @@
|
||||
<span class="sd"> :type: :class:`str`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">version</span>
|
||||
<span class="n">is_workstation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">product_type</span> <span class="o">==</span> <span class="n">VER_NT_WORKSTATION</span>
|
||||
<span class="n">is_workstation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">product_type</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">VER_NT_WORKSTATION</span>
|
||||
<span class="k">if</span> <span class="n">version</span> <span class="o">==</span> <span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">0</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="s2">"Windows Server 2016"</span><span class="p">,</span> <span class="s2">"Windows 10"</span><span class="p">][</span><span class="n">is_workstation</span><span class="p">]</span>
|
||||
<span class="k">elif</span> <span class="n">version</span> <span class="o">==</span> <span class="p">(</span><span class="mi">6</span><span class="p">,</span> <span class="mi">3</span><span class="p">):</span>
|
||||
@@ -230,7 +246,7 @@
|
||||
<span class="k">elif</span> <span class="n">version</span> <span class="o">==</span> <span class="p">(</span><span class="mi">6</span><span class="p">,</span> <span class="mi">0</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="s2">"Windows Server 2008"</span><span class="p">,</span> <span class="s2">"Windows Vista"</span><span class="p">][</span><span class="n">is_workstation</span><span class="p">]</span>
|
||||
<span class="k">elif</span> <span class="n">version</span> <span class="o">==</span> <span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span>
|
||||
<span class="n">metric</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetSystemMetrics</span><span class="p">(</span><span class="n">SM_SERVERR2</span><span class="p">)</span>
|
||||
<span class="n">metric</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetSystemMetrics</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SM_SERVERR2</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">is_workstation</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">bitness</span> <span class="o">==</span> <span class="mi">64</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="s2">"Windows XP Professional x64 Edition"</span>
|
||||
@@ -247,7 +263,7 @@
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="s2">"Unknow Windows <version=</span><span class="si">{0}</span><span class="s2"> | is_workstation=</span><span class="si">{1}</span><span class="s2">>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">version</span><span class="p">,</span> <span class="n">is_workstation</span><span class="p">)</span>
|
||||
|
||||
<span class="n">VERSION_MAPPER</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span><span class="n">VER_NT_WORKSTATION</span><span class="p">,</span> <span class="n">VER_NT_DOMAIN_CONTROLLER</span><span class="p">,</span> <span class="n">VER_NT_SERVER</span><span class="p">)</span>
|
||||
<span class="n">VERSION_MAPPER</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">VER_NT_WORKSTATION</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">VER_NT_DOMAIN_CONTROLLER</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">VER_NT_SERVER</span><span class="p">)</span>
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">product_type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The product type, value might be:</span>
|
||||
@@ -262,97 +278,97 @@
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">VERSION_MAPPER</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">EDITION_MAPPER</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span><span class="n">PRODUCT_UNDEFINED</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_ULTIMATE</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_HOME_BASIC</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_HOME_PREMIUM</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_ENTERPRISE</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_HOME_BASIC_N</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_BUSINESS</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_STANDARD_SERVER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_DATACENTER_SERVER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_SMALLBUSINESS_SERVER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_ENTERPRISE_SERVER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_STARTER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_DATACENTER_SERVER_CORE</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_STANDARD_SERVER_CORE</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_ENTERPRISE_SERVER_CORE</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_ENTERPRISE_SERVER_IA64</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_BUSINESS_N</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_WEB_SERVER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_CLUSTER_SERVER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_HOME_SERVER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_STORAGE_EXPRESS_SERVER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_STORAGE_STANDARD_SERVER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_STORAGE_WORKGROUP_SERVER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_STORAGE_ENTERPRISE_SERVER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_SERVER_FOR_SMALLBUSINESS</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_SMALLBUSINESS_SERVER_PREMIUM</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_HOME_PREMIUM_N</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_ENTERPRISE_N</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_ULTIMATE_N</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_WEB_SERVER_CORE</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_SERVER_FOUNDATION</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_HOME_PREMIUM_SERVER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_SERVER_FOR_SMALLBUSINESS_V</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_STANDARD_SERVER_V</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_DATACENTER_SERVER_V</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_ENTERPRISE_SERVER_V</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_DATACENTER_SERVER_CORE_V</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_STANDARD_SERVER_CORE_V</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_ENTERPRISE_SERVER_CORE_V</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_HYPERV</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_STORAGE_EXPRESS_SERVER_CORE</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_STORAGE_STANDARD_SERVER_CORE</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_STORAGE_WORKGROUP_SERVER_CORE</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_STARTER_N</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_PROFESSIONAL</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_PROFESSIONAL_N</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_SB_SOLUTION_SERVER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_SERVER_FOR_SB_SOLUTIONS</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_STANDARD_SERVER_SOLUTIONS</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_SB_SOLUTION_SERVER_EM</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_SOLUTION_EMBEDDEDSERVER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_CLUSTER_SERVER_V</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_EMBEDDED</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_STARTER_E</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_HOME_BASIC_E</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_HOME_PREMIUM_E</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_PROFESSIONAL_E</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_ENTERPRISE_E</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_ULTIMATE_E</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_ENTERPRISE_EVALUATION</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_MULTIPOINT_STANDARD_SERVER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_MULTIPOINT_PREMIUM_SERVER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_STANDARD_EVALUATION_SERVER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_DATACENTER_EVALUATION_SERVER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_ENTERPRISE_N_EVALUATION</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_CORE_ARM</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_CORE_N</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_CORE_COUNTRYSPECIFIC</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_CORE_LANGUAGESPECIFIC</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_CORE</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_PROFESSIONAL_WMC</span><span class="p">,</span>
|
||||
<span class="n">PRODUCT_UNLICENSED</span><span class="p">)</span>
|
||||
<span class="n">EDITION_MAPPER</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_UNDEFINED</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ULTIMATE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_HOME_BASIC</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_HOME_PREMIUM</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ENTERPRISE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_HOME_BASIC_N</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_BUSINESS</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STANDARD_SERVER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_DATACENTER_SERVER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SMALLBUSINESS_SERVER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ENTERPRISE_SERVER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STARTER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_DATACENTER_SERVER_CORE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STANDARD_SERVER_CORE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ENTERPRISE_SERVER_CORE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ENTERPRISE_SERVER_IA64</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_BUSINESS_N</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_WEB_SERVER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_CLUSTER_SERVER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_HOME_SERVER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STORAGE_EXPRESS_SERVER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STORAGE_STANDARD_SERVER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STORAGE_WORKGROUP_SERVER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STORAGE_ENTERPRISE_SERVER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SERVER_FOR_SMALLBUSINESS</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SMALLBUSINESS_SERVER_PREMIUM</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_HOME_PREMIUM_N</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ENTERPRISE_N</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ULTIMATE_N</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_WEB_SERVER_CORE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SERVER_FOUNDATION</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_HOME_PREMIUM_SERVER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SERVER_FOR_SMALLBUSINESS_V</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STANDARD_SERVER_V</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_DATACENTER_SERVER_V</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ENTERPRISE_SERVER_V</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_DATACENTER_SERVER_CORE_V</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STANDARD_SERVER_CORE_V</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ENTERPRISE_SERVER_CORE_V</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_HYPERV</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STORAGE_EXPRESS_SERVER_CORE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STORAGE_STANDARD_SERVER_CORE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STORAGE_WORKGROUP_SERVER_CORE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STARTER_N</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_PROFESSIONAL</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_PROFESSIONAL_N</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SB_SOLUTION_SERVER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SERVER_FOR_SB_SOLUTIONS</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STANDARD_SERVER_SOLUTIONS</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SB_SOLUTION_SERVER_EM</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SOLUTION_EMBEDDEDSERVER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_CLUSTER_SERVER_V</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_EMBEDDED</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STARTER_E</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_HOME_BASIC_E</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_HOME_PREMIUM_E</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_PROFESSIONAL_E</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ENTERPRISE_E</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ULTIMATE_E</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ENTERPRISE_EVALUATION</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_MULTIPOINT_STANDARD_SERVER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_MULTIPOINT_PREMIUM_SERVER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STANDARD_EVALUATION_SERVER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_DATACENTER_EVALUATION_SERVER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_ENTERPRISE_N_EVALUATION</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_CORE_ARM</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_CORE_N</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_CORE_COUNTRYSPECIFIC</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_CORE_LANGUAGESPECIFIC</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_CORE</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_PROFESSIONAL_WMC</span><span class="p">,</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_UNLICENSED</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">edition</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># Find a better name ?</span>
|
||||
<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="n">edition</span> <span class="o">=</span> <span class="n">DWORD</span><span class="p">()</span>
|
||||
<span class="n">edition</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">winproxy</span><span class="o">.</span><span class="n">GetProductInfo</span><span class="p">(</span><span class="n">version</span><span class="o">.</span><span class="n">dwMajorVersion</span><span class="p">,</span>
|
||||
<span class="n">version</span><span class="o">.</span><span class="n">dwMinorVersion</span><span class="p">,</span>
|
||||
@@ -368,8 +384,8 @@
|
||||
<span class="k">def</span> <span class="nf">_edition_windows_xp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="c1"># Emulate standard response from IsOS(gdef.OS_PROFESSIONAL)</span>
|
||||
<span class="k">if</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">IsOS</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">OS_PROFESSIONAL</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">PRODUCT_PROFESSIONAL</span>
|
||||
<span class="k">return</span> <span class="n">PRODUCT_HOME_BASIC</span>
|
||||
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_PROFESSIONAL</span>
|
||||
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PRODUCT_HOME_BASIC</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>
|
||||
@@ -378,9 +394,9 @@
|
||||
<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">gdef</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>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">GetVersionExA</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">pointer</span><span class="p">(</span><span class="n">data</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">generated_def</span><span class="o">.</span><span class="n">OSVERSIONINFOA</span><span class="p">)))</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">GetVersionExA</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">pointer</span><span class="p">(</span><span class="n">data</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">OSVERSIONINFOA</span><span class="p">)))</span>
|
||||
<span class="k">return</span> <span class="n">data</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_file_version</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
@@ -388,35 +404,47 @@
|
||||
<span class="n">buf</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="n">winproxy</span><span class="o">.</span><span class="n">GetFileVersionInfoA</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">buf</span><span class="p">)</span>
|
||||
|
||||
<span class="n">bufptr</span> <span class="o">=</span> <span class="n">PVOID</span><span class="p">()</span>
|
||||
<span class="n">bufsize</span> <span class="o">=</span> <span class="n">UINT</span><span class="p">()</span>
|
||||
<span class="n">bufptr</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">PVOID</span><span class="p">()</span>
|
||||
<span class="n">bufsize</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">UINT</span><span class="p">()</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">VerQueryValueA</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="s2">"</span><span class="se">\\</span><span class="s2">VarFileInfo</span><span class="se">\\</span><span class="s2">Translation"</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">bufptr</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">bufsize</span><span class="p">))</span>
|
||||
<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="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">gdef</span><span class="o">.</span><span class="n">LPCSTR</span><span class="p">)</span>
|
||||
<span class="n">tup</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">"<HH"</span><span class="p">,</span> <span class="n">bufstr</span><span class="o">.</span><span class="n">value</span><span class="p">[:</span><span class="mi">4</span><span class="p">])</span>
|
||||
<span class="n">req</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{0:04x}{1:04x}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">*</span><span class="n">tup</span><span class="p">)</span>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">VerQueryValueA</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="s2">"</span><span class="se">\\</span><span class="s2">StringFileInfo</span><span class="se">\\</span><span class="si">{0}</span><span class="se">\\</span><span class="s2">ProductVersion"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">req</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">bufptr</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">bufsize</span><span class="p">))</span>
|
||||
<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="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">gdef</span><span class="o">.</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="c1"># This returns the last version where ntdll was updated</span>
|
||||
<span class="c1"># return self.get_file_version("comctl32")</span>
|
||||
|
||||
<span class="c1"># Fallback on self.get_file_version("comctl32") is key/values not presents ?</span>
|
||||
<span class="n">curver_key</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">registry</span><span class="p">(</span><span class="sa">r</span><span class="s2">"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion"</span><span class="p">)</span>
|
||||
<span class="n">major</span> <span class="o">=</span> <span class="n">curver_key</span><span class="p">[</span><span class="s2">"CurrentMajorVersionNumber"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="n">minor</span> <span class="o">=</span> <span class="n">curver_key</span><span class="p">[</span><span class="s2">"CurrentMinorVersionNumber"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="n">build</span> <span class="o">=</span> <span class="n">curver_key</span><span class="p">[</span><span class="s2">"CurrentBuildNumber"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="c1"># Update Build Revision</span>
|
||||
<span class="n">ubr</span> <span class="o">=</span> <span class="n">curver_key</span><span class="p">[</span><span class="s2">"UBR"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="k">return</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="si">{2}</span><span class="s2">.</span><span class="si">{3}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">major</span><span class="p">,</span> <span class="n">minor</span><span class="p">,</span> <span class="n">build</span><span class="p">,</span> <span class="n">ubr</span><span class="p">)</span>
|
||||
<span class="c1"># Best effort. use get_file_version if registry code fails</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="c1"># Does not works on Win7..</span>
|
||||
<span class="c1"># Missing CurrentMajorVersionNumber/CurrentMinorVersionNumber/UBR</span>
|
||||
<span class="c1"># We have CurrentVersion instead</span>
|
||||
<span class="c1"># Use this code and get_file_version as a backup ?</span>
|
||||
<span class="n">curver_key</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">registry</span><span class="p">(</span><span class="sa">r</span><span class="s2">"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion"</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">major</span> <span class="o">=</span> <span class="n">curver_key</span><span class="p">[</span><span class="s2">"CurrentMajorVersionNumber"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="n">minor</span> <span class="o">=</span> <span class="n">curver_key</span><span class="p">[</span><span class="s2">"CurrentMinorVersionNumber"</span><span class="p">]</span><span class="o">.</span><span class="n">value</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">version</span> <span class="o">=</span> <span class="n">curver_key</span><span class="p">[</span><span class="s2">"CurrentVersion"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="c1"># May raise ValueError if no "."</span>
|
||||
<span class="n">major</span><span class="p">,</span> <span class="n">minor</span> <span class="o">=</span> <span class="n">version</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">build</span> <span class="o">=</span> <span class="n">curver_key</span><span class="p">[</span><span class="s2">"CurrentBuildNumber"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="c1"># Update Build Revision</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">ubr</span> <span class="o">=</span> <span class="n">curver_key</span><span class="p">[</span><span class="s2">"UBR"</span><span class="p">]</span><span class="o">.</span><span class="n">value</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">ubr</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># Not present on Win7</span>
|
||||
<span class="k">return</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="si">{2}</span><span class="s2">.</span><span class="si">{3}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">major</span><span class="p">,</span> <span class="n">minor</span><span class="p">,</span> <span class="n">build</span><span class="p">,</span> <span class="n">ubr</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="p">(</span><span class="ne">WindowsError</span><span class="p">,</span> <span class="ne">ValueError</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">gdef</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">gdef</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">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>
|
||||
@@ -431,7 +459,7 @@
|
||||
<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">gdef</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">gdef</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>
|
||||
@@ -460,7 +488,7 @@
|
||||
<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">gdef</span><span class="o">.</span><span class="n">TH32CS_SNAPTHREAD</span> <span class="o">|</span> <span class="n">gdef</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">gdef</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>
|
||||
@@ -471,7 +499,7 @@
|
||||
<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">gdef</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>
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
<span class="n">raw_buffer</span> <span class="o">=</span> <span class="p">(</span><span class="n">cbsize</span><span class="o">.</span><span class="n">value</span> <span class="o">*</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BYTE</span><span class="p">)()</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="n">gdef</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>
|
||||
<span class="n">winproxy</span><span class="o">.</span><span class="n">NtQuerySystemInformation</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SystemModuleInformation</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</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="n">raw_buffer</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">cbsize</span><span class="p">))</span>
|
||||
<span class="n">modules</span> <span class="o">=</span> <span class="p">(</span><span class="n">SystemModule</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">ctypes</span><span class="o">.</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">gdef</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="n">modules</span> <span class="o">=</span> <span class="p">(</span><span class="n">SystemModule</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_buffer</span><span class="p">(</span><span class="n">raw_buffer</span><span class="p">,</span> <span class="n">gdef</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">enumerate_kernel_modules_syswow64</span><span class="p">():</span>
|
||||
@@ -88,7 +88,7 @@
|
||||
<span class="n">raw_buffer</span> <span class="o">=</span> <span class="p">(</span><span class="n">cbsize</span><span class="o">.</span><span class="n">value</span> <span class="o">*</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BYTE</span><span class="p">)()</span>
|
||||
<span class="n">buffer</span> <span class="o">=</span> <span class="n">gdef</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">gdef</span><span class="o">.</span><span class="n">SystemModuleInformation</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">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="n">raw_buffer</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">cbsize</span><span class="p">))</span>
|
||||
<span class="n">modules</span> <span class="o">=</span> <span class="p">(</span><span class="n">SystemModuleWow64</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">ctypes</span><span class="o">.</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">gdef</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="n">modules</span> <span class="o">=</span> <span class="p">(</span><span class="n">SystemModuleWow64</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_buffer</span><span class="p">(</span><span class="n">raw_buffer</span><span class="p">,</span> <span class="n">gdef</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>
|
||||
</pre></div>
|
||||
|
||||
|
||||
@@ -206,6 +206,27 @@
|
||||
<span class="n">ITEM_TYPE</span> <span class="o">=</span> <span class="n">Trigger</span></div>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">TaskRegistrationInfo</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">IRegistrationInfo</span><span class="p">):</span>
|
||||
<span class="n">author</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_Author"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
|
||||
<span class="n">description</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_Description"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
|
||||
<span class="n">date</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_Date"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
|
||||
<span class="n">source</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_Source"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
|
||||
<span class="n">documentation</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_Documentation"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
|
||||
<span class="n">uri</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_URI"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
|
||||
<span class="n">version</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_Version"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># Return WindowsError: [Error -2147467263] Not implemented</span>
|
||||
<span class="n">xml</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_XmlText"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
|
||||
<span class="c1"># security_descriptor = generate_simple_getter("get_SecurityDescriptor", gdef.BSTR)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">TaskPrincipal</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">IPrincipal</span><span class="p">):</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_DisplayName"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
|
||||
<span class="nb">id</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_Id"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
|
||||
<span class="n">user_id</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_UserId"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
|
||||
<span class="n">group_id</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_GroupId"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
|
||||
<span class="n">run_level</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_RunLevel"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">TASK_RUNLEVEL_TYPE</span><span class="p">)</span>
|
||||
<span class="n">logon_type</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_LogonType"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">TASK_LOGON_TYPE</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="TaskDefinition"><a class="viewcode-back" href="../../../task_scheduler.html#windows.winobject.task_scheduler.TaskDefinition">[docs]</a><span class="k">class</span> <span class="nc">TaskDefinition</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">ITaskDefinition</span><span class="p">):</span>
|
||||
<span class="sd">"""The definition of a task"""</span>
|
||||
<span class="n">actions</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_Actions"</span><span class="p">,</span> <span class="n">ActionCollection</span><span class="p">,</span> <span class="n">extract_value</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
@@ -217,8 +238,18 @@
|
||||
<span class="sd">"""The list of triggers of the task</span>
|
||||
|
||||
<span class="sd"> :type: :class:`TriggerCollection`</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">registration_info</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_RegistrationInfo"</span><span class="p">,</span> <span class="n">TaskRegistrationInfo</span><span class="p">,</span> <span class="n">extract_value</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
<span class="n">principal</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_Principal"</span><span class="p">,</span> <span class="n">TaskPrincipal</span><span class="p">,</span> <span class="n">extract_value</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
<span class="n">xml</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_XmlText"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
|
||||
<span class="sd">"""The XML representig the task definition</span>
|
||||
|
||||
<span class="sd"> :type: :class:`str`</span>
|
||||
<span class="sd"> """</span></div>
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="Task"><a class="viewcode-back" href="../../../task_scheduler.html#windows.winobject.task_scheduler.Task">[docs]</a><span class="k">class</span> <span class="nc">Task</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">IRegisteredTask</span><span class="p">):</span>
|
||||
<span class="sd">"""A scheduled task"""</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_Name"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
|
||||
@@ -228,12 +259,26 @@
|
||||
<span class="n">state</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_State"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">TASK_STATE</span><span class="p">)</span>
|
||||
<span class="sd">"""The state of the task</span>
|
||||
|
||||
|
||||
<span class="sd"> :type: :class:`~windows.generated_def.winstructs.TASK_STATE`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">enabled</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_Enabled"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">VARIANT_BOOL</span><span class="p">)</span>
|
||||
<span class="sd">"""``True`` is the task is enabled"""</span>
|
||||
<span class="n">last_runtime</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_LastRunTime"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DATE</span><span class="p">)</span>
|
||||
<span class="sd">"""Gets the last time the registered task was last run."""</span>
|
||||
<span class="n">next_runtime</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_NextRunTime"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">DATE</span><span class="p">)</span>
|
||||
<span class="sd">"""Gets the next time the registered task will be run."""</span>
|
||||
|
||||
<span class="n">definition</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_Definition"</span><span class="p">,</span> <span class="n">TaskDefinition</span><span class="p">,</span> <span class="n">extract_value</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
<span class="sd">"""The definition of the task</span>
|
||||
|
||||
<span class="sd"> :type: :class:`TaskDefinition`</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">xml</span> <span class="o">=</span> <span class="n">generate_simple_getter</span><span class="p">(</span><span class="s2">"get_Xml"</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">BSTR</span><span class="p">)</span>
|
||||
<span class="sd">"""The XML representig the task</span>
|
||||
|
||||
<span class="sd"> :type: :class:`str`</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">params</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">TASK_RUN_NO_FLAGS</span><span class="p">,</span> <span class="n">sessionid</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">user</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
@@ -242,6 +287,11 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">RunEx</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="n">sessionid</span><span class="p">,</span> <span class="n">user</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">result</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_security_descriptor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">secinfo</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">BSTR</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">GetSecurityDescriptor</span><span class="p">(</span><span class="n">secinfo</span><span class="p">,</span> <span class="n">res</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">res</span><span class="o">.</span><span class="n">value</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s2">"""<</span><span class="si">{0}</span><span class="s2"> "</span><span class="si">{1}</span><span class="s2">" at </span><span class="si">{2:#x}</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">name</span><span class="p">,</span> <span class="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span></div>
|
||||
|
||||
|
||||
+3
-2
@@ -39,13 +39,13 @@
|
||||
<h1>Source code for windows.winobject.token</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span> <span class="nn">ctypes</span>
|
||||
<span class="kn">import</span> <span class="nn">functools</span>
|
||||
<span class="kn">from</span> <span class="nn">__builtin__</span> <span class="k">import</span> <span class="nb">type</span> <span class="k">as</span> <span class="n">bltn_type</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">windows</span>
|
||||
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">utils</span>
|
||||
<span class="kn">from</span> <span class="nn">windows</span> <span class="k">import</span> <span class="n">winproxy</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
||||
|
||||
<span class="n">bltn_type</span> <span class="o">=</span> <span class="nb">type</span>
|
||||
|
||||
<span class="n">KNOW_INTEGRITY_LEVEL</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">FlagMapper</span><span class="p">(</span>
|
||||
<span class="n">gdef</span><span class="o">.</span><span class="n">SECURITY_MANDATORY_UNTRUSTED_RID</span><span class="p">,</span>
|
||||
@@ -504,7 +504,8 @@
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">mandatory_label</span> <span class="o">=</span> <span class="n">gdef</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">gdef</span><span class="o">.</span><span class="n">PSID</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="c1"># cast integrity to int to accept SECURITY_MANDATORY_LOW_RID & other Flags</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">gdef</span><span class="o">.</span><span class="n">PSID</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="nb">int</span><span class="p">(</span><span class="n">integrity</span><span class="p">)))</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">set_informations</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</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_PROPERTY_DOC</span> <span class="o">=</span> <span class="s2">"""The integrity of the token as an int (extracted from integrity PSID)</span>
|
||||
|
||||
+2
-2
@@ -110,7 +110,7 @@
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="mh">0x100</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="n">rsize</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">GetLogicalDriveStringsA</span><span class="p">(</span><span class="mh">0x1000</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">rsize</span><span class="p">]</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</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="k">return</span> <span class="n">buffer</span><span class="p">[:</span><span class="n">rsize</span><span class="p">]</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_info</span><span class="p">(</span><span class="n">drivename</span><span class="p">):</span>
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="mh">0x1000</span>
|
||||
@@ -124,7 +124,7 @@
|
||||
<span class="n">size</span> <span class="o">=</span> <span class="mh">0x1000</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="n">rsize</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">QueryDosDeviceA</span><span class="p">(</span><span class="n">name</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">buffer</span><span class="p">[:</span><span class="n">rsize</span><span class="p">]</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</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="k">return</span> <span class="n">buffer</span><span class="p">[:</span><span class="n">rsize</span><span class="p">]</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\x00</span><span class="s2">"</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
|
||||
+63
-5
@@ -41,6 +41,7 @@
|
||||
<span class="kn">import</span> <span class="nn">ctypes</span>
|
||||
<span class="kn">import</span> <span class="nn">struct</span>
|
||||
<span class="kn">import</span> <span class="nn">functools</span>
|
||||
<span class="kn">from</span> <span class="nn">functools</span> <span class="k">import</span> <span class="n">partial</span>
|
||||
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">namedtuple</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">ctypes.wintypes</span> <span class="k">import</span> <span class="o">*</span>
|
||||
@@ -48,7 +49,8 @@
|
||||
<span class="kn">import</span> <span class="nn">windows.com</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.generated_def.winstructs</span> <span class="k">import</span> <span class="o">*</span>
|
||||
<span class="kn">from</span> <span class="nn">functools</span> <span class="k">import</span> <span class="n">partial</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="k">import</span> <span class="n">basestring</span>
|
||||
|
||||
<span class="c1"># Common error check for all WMI COM interfaces</span>
|
||||
<span class="c1"># This 'just' add the corresponding 'WBEMSTATUS' to the hresult error code</span>
|
||||
@@ -57,9 +59,44 @@
|
||||
<span class="k">def</span> <span class="nf">errcheck</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="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">result</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">wmitag</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">WBEMSTATUS</span><span class="o">.</span><span class="n">mapper</span><span class="p">[</span><span class="n">result</span> <span class="o">&</span> <span class="mh">0xffffffff</span><span class="p">]</span>
|
||||
<span class="k">raise</span> <span class="ne">WindowsError</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">wmitag</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">WinError</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">wmitag</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">args</span>
|
||||
|
||||
<span class="n">sentinel</span> <span class="o">=</span> <span class="nb">object</span><span class="p">()</span>
|
||||
<span class="c1"># POC</span>
|
||||
<span class="k">class</span> <span class="nc">QualifierSet</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">IWbemQualifierSet</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">get_variant</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="sd">"""Retrieve the value of property ``name`` as a :class:`~windows.com.Variant`</span>
|
||||
|
||||
<span class="sd"> :return: :class:`~windows.com.Variant`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||||
<span class="n">nametype</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span>
|
||||
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">"WmiObject attributes name must be str, not <</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">nametype</span><span class="p">))</span>
|
||||
<span class="n">variant_res</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">Variant</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">Get</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">variant_res</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">variant_res</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">sentinel</span><span class="p">):</span>
|
||||
<span class="sd">"""Return the value of the property ``name``. The return value depends of the type of the property and can vary"""</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_variant</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
|
||||
<span class="k">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="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="o">!=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">WBEM_E_NOT_FOUND</span><span class="p">:</span>
|
||||
<span class="k">raise</span>
|
||||
<span class="k">if</span> <span class="n">default</span> <span class="ow">is</span> <span class="n">sentinel</span><span class="p">:</span>
|
||||
<span class="k">raise</span>
|
||||
<span class="k">return</span> <span class="n">default</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">names</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">POINTER</span><span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">com</span><span class="o">.</span><span class="n">SafeArray</span><span class="p">)()</span>
|
||||
<span class="n">x</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">res</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">GetNames</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">cast</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">POINTER</span><span class="p">(</span><span class="n">POINTER</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">SAFEARRAY</span><span class="p">))))</span>
|
||||
<span class="c1"># need to free the safearray / unlock ?</span>
|
||||
<span class="n">properties</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">res</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">to_list</span><span class="p">(</span><span class="n">BSTR</span><span class="p">)]</span>
|
||||
<span class="k">return</span> <span class="n">properties</span>
|
||||
|
||||
|
||||
<span class="c1"># https://docs.microsoft.com/en-us/windows/desktop/api/wbemcli/nn-wbemcli-iwbemclassobject</span>
|
||||
|
||||
<span class="n">WmiMethod</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s2">"WmiMethod"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"inparam"</span><span class="p">,</span> <span class="s2">"outparam"</span><span class="p">])</span>
|
||||
@@ -127,7 +164,6 @@
|
||||
<span class="k">return</span> <span class="n">gdef</span><span class="o">.</span><span class="n">tag_WBEM_GENUS_TYPE</span><span class="o">.</span><span class="n">mapper</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"__GENUS"</span><span class="p">)]</span>
|
||||
|
||||
<span class="c1">## Higher level API</span>
|
||||
|
||||
<div class="viewcode-block" id="WmiObject.get_properties"><a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiObject.get_properties">[docs]</a> <span class="k">def</span> <span class="nf">get_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">system_properties</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<span class="sd">"""Return the list of properties names available for the current object.</span>
|
||||
<span class="sd"> If ``system_properties`` is ``False`` property names begining with ``_`` are ignored.</span>
|
||||
@@ -147,6 +183,17 @@
|
||||
|
||||
<span class="n">properties</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_properties</span><span class="p">)</span> <span class="c1">#: The properties of the object (exclude system properties)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">qualifier_set</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># changer de nom ?</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">QualifierSet</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">GetQualifierSet</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_p_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span> <span class="c1"># Changer de nom ?</span>
|
||||
<span class="n">res</span> <span class="o">=</span> <span class="n">QualifierSet</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">GetPropertyQualifierSet</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">res</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">res</span>
|
||||
|
||||
<span class="c1"># Make WmiObject a mapping object</span>
|
||||
|
||||
<div class="viewcode-block" id="WmiObject.keys"><a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiObject.keys">[docs]</a> <span class="k">def</span> <span class="nf">keys</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -170,7 +217,12 @@
|
||||
<span class="k">return</span> <span class="s2">"""<</span><span class="si">{0}</span><span class="s2"> (NULL)>"""</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,)</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">genus</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">WBEM_GENUS_CLASS</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="s2">"""<</span><span class="si">{0}</span><span class="s2"> class "</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">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">get</span><span class="p">(</span><span class="s2">"__Class"</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="s2">"""<</span><span class="si">{0}</span><span class="s2"> instance of "</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">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">get</span><span class="p">(</span><span class="s2">"__Class"</span><span class="p">))</span></div>
|
||||
<span class="k">return</span> <span class="s2">"""<</span><span class="si">{0}</span><span class="s2"> instance of "</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">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">get</span><span class="p">(</span><span class="s2">"__Class"</span><span class="p">))</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__sprint__</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="se">\n</span><span class="s2"></span>
|
||||
<span class="s2"> </span><span class="si">{1}</span><span class="s2"></span>
|
||||
<span class="s2"> """</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="p">),</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</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">x</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">])])</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">items</span><span class="p">())))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="WmiEnumeration"><a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiEnumeration">[docs]</a><span class="k">class</span> <span class="nc">WmiEnumeration</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">IEnumWbemClassObject</span><span class="p">,</span> <span class="n">WmiComInterface</span><span class="p">):</span>
|
||||
@@ -189,7 +241,7 @@
|
||||
<span class="n">return_count</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">ULONG</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
||||
<span class="n">error</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">Next</span><span class="p">(</span><span class="n">timeout</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">return_count</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">error</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">WBEM_S_TIMEDOUT</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">WindowsError</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">WBEM_S_TIMEDOUT</span><span class="p">,</span> <span class="s2">"Wmi timeout"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">WinError</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">WBEM_S_TIMEDOUT</span><span class="p">,</span> <span class="s2">"Wmi timeout"</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">error</span> <span class="o">==</span> <span class="n">WBEM_S_FALSE</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
@@ -376,6 +428,12 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">PutInstance</span><span class="p">(</span><span class="n">instance</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">res</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">res</span></div>
|
||||
|
||||
<div class="viewcode-block" id="WmiNamespace.delete_instance"><a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiNamespace.delete_instance">[docs]</a> <span class="k">def</span> <span class="nf">delete_instance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance</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">"""TODO: Document"""</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">IWbemClassObject</span><span class="p">):</span>
|
||||
<span class="n">instance</span> <span class="o">=</span> <span class="n">instance</span><span class="p">[</span><span class="s2">"__Path"</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">DeleteInstance</span><span class="p">(</span><span class="n">instance</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></div>
|
||||
|
||||
<div class="viewcode-block" id="WmiNamespace.exec_method"><a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiNamespace.exec_method">[docs]</a> <span class="k">def</span> <span class="nf">exec_method</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="n">inparam</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">"""Exec method named on ``object`` with ``inparam``.</span>
|
||||
|
||||
|
||||
-2125
File diff suppressed because it is too large
Load Diff
+4
-10
@@ -41,6 +41,8 @@
|
||||
<span class="kn">import</span> <span class="nn">functools</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
||||
<span class="kn">from</span> <span class="nn">.error</span> <span class="k">import</span> <span class="n">ExportNotFound</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="k">import</span> <span class="n">is_py3</span>
|
||||
|
||||
<span class="c1"># Utils</span>
|
||||
<div class="viewcode-block" id="is_implemented"><a class="viewcode-back" href="../../../winproxy.html#windows.winproxy.is_implemented">[docs]</a><span class="k">def</span> <span class="nf">is_implemented</span><span class="p">(</span><span class="n">apiproxy</span><span class="p">):</span>
|
||||
@@ -60,18 +62,10 @@
|
||||
<div class="viewcode-block" id="resolve"><a class="viewcode-back" href="../../../winproxy.html#windows.winproxy.resolve">[docs]</a><span class="k">def</span> <span class="nf">resolve</span><span class="p">(</span><span class="n">apiproxy</span><span class="p">):</span>
|
||||
<span class="sd">"""Resolve the address of ``apiproxy``. Might raise if ``apiproxy`` is not implemented"""</span>
|
||||
<span class="n">apiproxy</span><span class="o">.</span><span class="n">force_resolution</span><span class="p">()</span>
|
||||
<span class="n">func</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">WinDLL</span><span class="p">(</span><span class="n">dll_name</span><span class="p">)[</span><span class="n">func_name</span><span class="p">]</span>
|
||||
<span class="n">func</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">WinDLL</span><span class="p">(</span><span class="n">apiproxy</span><span class="o">.</span><span class="n">target_dll</span><span class="p">)[</span><span class="n">apiproxy</span><span class="o">.</span><span class="n">target_func</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">func</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></div>
|
||||
|
||||
|
||||
<span class="c1"># ApiProxy stuff</span>
|
||||
<span class="k">class</span> <span class="nc">ExportNotFound</span><span class="p">(</span><span class="ne">RuntimeError</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func_name</span><span class="p">,</span> <span class="n">api_name</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">func_name</span> <span class="o">=</span> <span class="n">func_name</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">api_name</span> <span class="o">=</span> <span class="n">api_name</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">ExportNotFound</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">"Function </span><span class="si">{0}</span><span class="s2"> not found into </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="n">api_name</span><span class="p">))</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">NeededParameterType</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="n">_inst</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
@@ -149,7 +143,7 @@
|
||||
|
||||
<span class="c1"># "argument 2: <type 'exceptions.TypeError'>: wrong type"</span>
|
||||
<span class="c1"># Thx ctypes..</span>
|
||||
<span class="n">argnbstr</span><span class="p">,</span> <span class="n">ecx</span><span class="p">,</span> <span class="n">reason</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">message</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">argnbstr</span><span class="p">,</span> <span class="n">ecx</span><span class="p">,</span> <span class="n">reason</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">":"</span><span class="p">)</span> <span class="c1"># py2 / py3 compat :)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">argnbstr</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"argument "</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="c1"># Don't knnow if it can happen</span>
|
||||
<span class="n">argnb</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">argnbstr</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="s2">"argument "</span><span class="p">):])</span>
|
||||
|
||||
@@ -42,6 +42,15 @@
|
||||
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
||||
<span class="kn">from</span> <span class="nn">windows.generated_def.ntstatus</span> <span class="k">import</span> <span class="n">NtStatusException</span>
|
||||
|
||||
|
||||
<span class="c1"># ApiProxy stuff</span>
|
||||
<span class="k">class</span> <span class="nc">ExportNotFound</span><span class="p">(</span><span class="ne">RuntimeError</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func_name</span><span class="p">,</span> <span class="n">api_name</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">func_name</span> <span class="o">=</span> <span class="n">func_name</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">api_name</span> <span class="o">=</span> <span class="n">api_name</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">ExportNotFound</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">"Function </span><span class="si">{0}</span><span class="s2"> not found into </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="n">api_name</span><span class="p">))</span>
|
||||
|
||||
|
||||
<span class="c1"># PFW Winproxy Exception type</span>
|
||||
<div class="viewcode-block" id="WinproxyError"><a class="viewcode-back" href="../../../winproxy.html#windows.winproxy.WinproxyError">[docs]</a><span class="k">class</span> <span class="nc">WinproxyError</span><span class="p">(</span><span class="ne">WindowsError</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">func_name</span><span class="p">,</span> <span class="n">error_code</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
|
||||
@@ -106,6 +106,7 @@
|
||||
<span class="n">win_trust_data</span><span class="o">.</span><span class="n">pSIPClientData</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">win_trust_data</span><span class="o">.</span><span class="n">dwUIChoice</span> <span class="o">=</span> <span class="n">WTD_UI_NONE</span>
|
||||
<span class="n">win_trust_data</span><span class="o">.</span><span class="n">fdwRevocationChecks</span> <span class="o">=</span> <span class="n">WTD_REVOKE_NONE</span>
|
||||
<span class="n">win_trust_data</span><span class="o">.</span><span class="n">fdwRevocationChecks</span> <span class="o">=</span> <span class="n">WTD_REVOKE_WHOLECHAIN</span>
|
||||
<span class="n">win_trust_data</span><span class="o">.</span><span class="n">dwUnionChoice</span> <span class="o">=</span> <span class="n">WTD_CHOICE_FILE</span>
|
||||
<span class="n">win_trust_data</span><span class="o">.</span><span class="n">dwStateAction</span> <span class="o">=</span> <span class="n">WTD_STATEACTION_VERIFY</span>
|
||||
<span class="n">win_trust_data</span><span class="o">.</span><span class="n">hWVTStateData</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
+15
-1
@@ -82,7 +82,21 @@ When a breakpoint is hit, its ``trigger`` function is called with the debugger a
|
||||
|
||||
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:: FunctionCallBP
|
||||
:members:
|
||||
:inherited-members:
|
||||
:special-members: __init__
|
||||
|
||||
.. note::
|
||||
|
||||
See sample :ref:`sample_debugger_bp_functioncallbp`
|
||||
|
||||
.. autoclass:: FunctionBP
|
||||
:members:
|
||||
:inherited-members:
|
||||
:special-members: __init__
|
||||
:special-members: __init__
|
||||
|
||||
.. note::
|
||||
|
||||
See sample :ref:`sample_debugger_bp_functionbp`
|
||||
+1
@@ -22,6 +22,7 @@ Here is every generated definition by type:
|
||||
windef_generated.rst
|
||||
ntstatus_generated.rst
|
||||
winstructs_generated.rst
|
||||
winerror_generated.rst
|
||||
|
||||
|
||||
|
||||
|
||||
+14
@@ -261,6 +261,20 @@ Output
|
||||
.. literalinclude:: samples_output\debug_debugger_membp_singlestep.txt
|
||||
|
||||
|
||||
|
||||
.. _sample_debugger_bp_functioncallbp:
|
||||
|
||||
:class:`windows.debug.FunctionCallBP`
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. literalinclude:: ..\..\samples\debug\change_function_ret_value.py
|
||||
|
||||
Output
|
||||
|
||||
.. literalinclude:: samples_output\debug_change_function_ret_value.txt
|
||||
|
||||
.. _sample_debugger_bp_functionbp:
|
||||
|
||||
:class:`windows.debug.FunctionBP`
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
+1204
-1524
File diff suppressed because it is too large
Load Diff
+6894
File diff suppressed because it is too large
Load Diff
+9318
-2713
File diff suppressed because it is too large
Load Diff
Vendored
+2
-2
@@ -359,7 +359,7 @@ ALPC messages over an ALPC port and the classes representing these messages.</p>
|
||||
|
||||
<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(0x20000)</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.alpc.AlpcClient.send_receive" title="Permalink to this definition">¶</a></dt>
|
||||
<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(0x20000)</em>, <em>timeout=None</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 notranslate"><span class="pre">flags</span></code>.</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
@@ -464,7 +464,7 @@ ALPC messages over an ALPC port and the classes representing these messages.</p>
|
||||
|
||||
<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(0x20000)</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.alpc.AlpcServer.send_receive" title="Permalink to this definition">¶</a></dt>
|
||||
<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(0x20000)</em>, <em>timeout=None</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 notranslate"><span class="pre">flags</span></code>.</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
|
||||
Vendored
+46
@@ -196,6 +196,14 @@ Useful when debugingg a 32b process from a 64bits one</p>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="staticmethod">
|
||||
<dt id="windows.debug.Debugger.kill_on_exit">
|
||||
<em class="property">static </em><code class="descname">kill_on_exit</code><span class="sig-paren">(</span><em>choice</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/debugger.html#Debugger.kill_on_exit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.Debugger.kill_on_exit" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>If set to True(default in Windows) will kill all attached process on thread exit.
|
||||
Otherwise, the thread detaches from all processes being debugged on exit.</p>
|
||||
<p>See: <a class="reference external" href="https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-debugsetprocesskillonexit">https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-debugsetprocesskillonexit</a></p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.debug.Debugger.on_setup">
|
||||
<code class="descname">on_setup</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/debugger.html#Debugger.on_setup"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.Debugger.on_setup" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -483,6 +491,40 @@ It is based on <code class="xref py py-func docutils literal notranslate"><span
|
||||
<p class="last">This means that a MEMBP at address <code class="docutils literal notranslate"><span class="pre">X</span></code> won’t be triggered by a write of size 4 at address <code class="docutils literal notranslate"><span class="pre">X</span> <span class="pre">-</span> <span class="pre">1</span></code>. it’s sad I know.</p>
|
||||
</div>
|
||||
<dl class="class">
|
||||
<dt id="windows.debug.FunctionCallBP">
|
||||
<em class="property">class </em><code class="descclassname">windows.debug.</code><code class="descname">FunctionCallBP</code><span class="sig-paren">(</span><em>addr</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/breakpoints.html#FunctionCallBP"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.FunctionCallBP" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>A Breakpoint that allow to trigger at the return of a function</p>
|
||||
<dl class="method">
|
||||
<dt id="windows.debug.FunctionCallBP.__init__">
|
||||
<code class="descname">__init__</code><span class="sig-paren">(</span><em>addr</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.debug.FunctionCallBP.__init__" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>x.__init__(…) initializes x; see help(type(x)) for signature</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.debug.FunctionCallBP.break_on_ret">
|
||||
<code class="descname">break_on_ret</code><span class="sig-paren">(</span><em>dbg</em>, <em>exception</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/breakpoints.html#FunctionCallBP.break_on_ret"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.FunctionCallBP.break_on_ret" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Setup a breakpoint at the return address of the function, this breakpoint will call <a class="reference internal" href="#windows.debug.FunctionCallBP.ret_trigger" title="windows.debug.FunctionCallBP.ret_trigger"><code class="xref py py-func docutils literal notranslate"><span class="pre">ret_trigger()</span></code></a></p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.debug.FunctionCallBP.ret_trigger">
|
||||
<code class="descname">ret_trigger</code><span class="sig-paren">(</span><em>dbg</em>, <em>exception</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/debug/breakpoints.html#FunctionCallBP.ret_trigger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.debug.FunctionCallBP.ret_trigger" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Called at the return of the function if <a class="reference internal" href="#windows.debug.FunctionCallBP.break_on_ret" title="windows.debug.FunctionCallBP.break_on_ret"><code class="xref py py-func docutils literal notranslate"><span class="pre">break_on_ret()</span></code></a> was called</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.debug.FunctionCallBP.trigger">
|
||||
<code class="descname">trigger</code><span class="sig-paren">(</span><em>dbg</em>, <em>exception</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.debug.FunctionCallBP.trigger" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Called when breakpoint is hit</p>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p class="last">See sample <a class="reference internal" href="sample.html#sample-debugger-bp-functioncallbp"><span class="std std-ref">windows.debug.FunctionCallBP</span></a></p>
|
||||
</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>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 notranslate"><span class="pre">windows.winproxy</span></code></a> and able to:</p>
|
||||
@@ -528,6 +570,10 @@ It is based on <code class="xref py py-func docutils literal notranslate"><span
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p class="last">See sample <a class="reference internal" href="sample.html#sample-debugger-bp-functionbp"><span class="std std-ref">windows.debug.FunctionBP</span></a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
Vendored
+191
-1
@@ -309,6 +309,20 @@
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.PublisherMetadata.channels_metadata">
|
||||
<code class="descname">channels_metadata</code><a class="headerlink" href="#windows.winobject.event_log.PublisherMetadata.channels_metadata" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The <code class="xref py py-class docutils literal notranslate"><span class="pre">PublisherMetadataChannel</span></code> for each channel this provider defines</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">Yield:</th><td class="field-body"><code class="xref py py-class docutils literal notranslate"><span class="pre">PublisherMetadataChannel</span></code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.PublisherMetadata.chanrefs">
|
||||
<code class="descname">chanrefs</code><a class="headerlink" href="#windows.winobject.event_log.PublisherMetadata.chanrefs" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -343,12 +357,158 @@
|
||||
<dd><p>The <a class="reference internal" href="#windows.winobject.event_log.PublisherMetadata" title="windows.winobject.event_log.PublisherMetadata"><code class="xref py py-class docutils literal notranslate"><span class="pre">PublisherMetadata</span></code></a> for the publisher <code class="docutils literal notranslate"><span class="pre">name</span></code></p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.PublisherMetadata.guid">
|
||||
<code class="descname">guid</code><a class="headerlink" href="#windows.winobject.event_log.PublisherMetadata.guid" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The GUID associated with this provider</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">[<code class="xref py py-class docutils literal notranslate"><span class="pre">GUID</span></code>] – the GUID in a XXXXXXXXXX-YYYY-ZZZZ-TTTT-VVVVVVVVVV form</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.PublisherMetadata.keywordrefs">
|
||||
<code class="descname">keywordrefs</code><a class="headerlink" href="#windows.winobject.event_log.PublisherMetadata.keywordrefs" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The list of keywords defined by this provider</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference internal" href="#windows.winobject.event_log.PropertyArray" title="windows.winobject.event_log.PropertyArray"><code class="xref py py-class docutils literal notranslate"><span class="pre">PropertyArray</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.PublisherMetadata.keywords_metadata">
|
||||
<code class="descname">keywords_metadata</code><a class="headerlink" href="#windows.winobject.event_log.PublisherMetadata.keywords_metadata" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The <code class="xref py py-class docutils literal notranslate"><span class="pre">PublisherMetadataKeyword</span></code> for each opcode this provider defines</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">Yield:</th><td class="field-body"><code class="xref py py-class docutils literal notranslate"><span class="pre">PublisherMetadataKeyword</span></code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.PublisherMetadata.levelrefs">
|
||||
<code class="descname">levelrefs</code><a class="headerlink" href="#windows.winobject.event_log.PublisherMetadata.levelrefs" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Identifies the levels child element of the provider.</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference internal" href="#windows.winobject.event_log.PropertyArray" title="windows.winobject.event_log.PropertyArray"><code class="xref py py-class docutils literal notranslate"><span class="pre">PropertyArray</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.PublisherMetadata.levels_metadata">
|
||||
<code class="descname">levels_metadata</code><a class="headerlink" href="#windows.winobject.event_log.PublisherMetadata.levels_metadata" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The <code class="xref py py-class docutils literal notranslate"><span class="pre">PublisherMetadataLevel</span></code> for each level this provider defines</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">Yield:</th><td class="field-body"><code class="xref py py-class docutils literal notranslate"><span class="pre">PublisherMetadataLevel</span></code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.winobject.event_log.PublisherMetadata.message">
|
||||
<code class="descname">message</code><span class="sig-paren">(</span><em>msgid</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/event_log.html#PublisherMetadata.message"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.event_log.PublisherMetadata.message" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>TODO</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.PublisherMetadata.message_filepath">
|
||||
<code class="descname">message_filepath</code><a class="headerlink" href="#windows.winobject.event_log.PublisherMetadata.message_filepath" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.PublisherMetadata.message_id">
|
||||
<code class="descname">message_id</code><a class="headerlink" href="#windows.winobject.event_log.PublisherMetadata.message_id" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.PublisherMetadata.message_parameter_filepath">
|
||||
<code class="descname">message_parameter_filepath</code><a class="headerlink" href="#windows.winobject.event_log.PublisherMetadata.message_parameter_filepath" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.PublisherMetadata.message_resource_filepath">
|
||||
<code class="descname">message_resource_filepath</code><a class="headerlink" href="#windows.winobject.event_log.PublisherMetadata.message_resource_filepath" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.PublisherMetadata.opcoderefs">
|
||||
<code class="descname">opcoderefs</code><a class="headerlink" href="#windows.winobject.event_log.PublisherMetadata.opcoderefs" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Identifies the opcodes child element of the provider.</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference internal" href="#windows.winobject.event_log.PropertyArray" title="windows.winobject.event_log.PropertyArray"><code class="xref py py-class docutils literal notranslate"><span class="pre">PropertyArray</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.PublisherMetadata.opcodes_metadata">
|
||||
<code class="descname">opcodes_metadata</code><a class="headerlink" href="#windows.winobject.event_log.PublisherMetadata.opcodes_metadata" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The <code class="xref py py-class docutils literal notranslate"><span class="pre">PublisherMetadataOpcode</span></code> for each opcode this provider defines</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">Yield:</th><td class="field-body"><code class="xref py py-class docutils literal notranslate"><span class="pre">PublisherMetadataOpcode</span></code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.PublisherMetadata.taskrefs">
|
||||
<code class="descname">taskrefs</code><a class="headerlink" href="#windows.winobject.event_log.PublisherMetadata.taskrefs" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The list of tasks defined by this provider</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference internal" href="#windows.winobject.event_log.PropertyArray" title="windows.winobject.event_log.PropertyArray"><code class="xref py py-class docutils literal notranslate"><span class="pre">PropertyArray</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.PublisherMetadata.tasks_metadata">
|
||||
<code class="descname">tasks_metadata</code><a class="headerlink" href="#windows.winobject.event_log.PublisherMetadata.tasks_metadata" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The <code class="xref py py-class docutils literal notranslate"><span class="pre">PublisherMetadataTask</span></code> for each opcode this provider defines</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">Yield:</th><td class="field-body"><code class="xref py py-class docutils literal notranslate"><span class="pre">PublisherMetadataTask</span></code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.PublisherMetadata.value">
|
||||
<code class="descname">value</code><a class="headerlink" href="#windows.winobject.event_log.PublisherMetadata.value" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -459,6 +619,12 @@
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.EvtEvent.date">
|
||||
<code class="descname">date</code><a class="headerlink" href="#windows.winobject.event_log.EvtEvent.date" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Event.time_created as a datetime</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.EvtEvent.id">
|
||||
<code class="descname">id</code><a class="headerlink" href="#windows.winobject.event_log.EvtEvent.id" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -536,7 +702,7 @@
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.EventMetadata.channel_id">
|
||||
<code class="descname">channel_id</code><a class="headerlink" href="#windows.winobject.event_log.EventMetadata.channel_id" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The the Channel attribute of the Event definition</p>
|
||||
<dd><p>The Channel attribute of the Event definition</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
@@ -552,12 +718,36 @@ Retrieved by parsing <a class="reference internal" href="#windows.winobject.even
|
||||
<dd><p>The ID of the Event</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.EventMetadata.keyword">
|
||||
<code class="descname">keyword</code><a class="headerlink" href="#windows.winobject.event_log.EventMetadata.keyword" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The keyword attribute of the Event definition</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.EventMetadata.level">
|
||||
<code class="descname">level</code><a class="headerlink" href="#windows.winobject.event_log.EventMetadata.level" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The level attribute of the Event definition</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.EventMetadata.message_id">
|
||||
<code class="descname">message_id</code><a class="headerlink" href="#windows.winobject.event_log.EventMetadata.message_id" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Identifies the message attribute of the event definition.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.EventMetadata.opcode">
|
||||
<code class="descname">opcode</code><a class="headerlink" href="#windows.winobject.event_log.EventMetadata.opcode" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The opcode attribute of the Event definition</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.EventMetadata.task">
|
||||
<code class="descname">task</code><a class="headerlink" href="#windows.winobject.event_log.EventMetadata.task" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The task attribute of the Event definition</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.event_log.EventMetadata.template">
|
||||
<code class="descname">template</code><a class="headerlink" href="#windows.winobject.event_log.EventMetadata.template" title="Permalink to this definition">¶</a></dt>
|
||||
|
||||
Vendored
+8
-7
@@ -16,7 +16,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="14.1. Windef" href="windef_generated.html" />
|
||||
<link rel="next" title="14.1. WinDef" href="windef_generated.html" />
|
||||
<link rel="prev" title="13. windows.rpc – ALPC-based Windows RPC" href="rpc.html" />
|
||||
</head><body>
|
||||
<div class="related" role="navigation" aria-label="related navigation">
|
||||
@@ -29,7 +29,7 @@
|
||||
<a href="py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="windef_generated.html" title="14.1. Windef"
|
||||
<a href="windef_generated.html" title="14.1. WinDef"
|
||||
accesskey="N">next</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="rpc.html" title="13. windows.rpc – ALPC-based Windows RPC"
|
||||
@@ -58,10 +58,11 @@
|
||||
<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">14.1. Windef</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="windef_generated.html">14.1. WinDef</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="ntstatus_generated.html">14.2. Ntstatus</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="winstructs_generated.html">14.3. Winstructs</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="winstructs_generated.html#winenums">14.4. WinEnums</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="winerror_generated.html">14.5. WinError</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<dl class="class">
|
||||
@@ -77,7 +78,7 @@
|
||||
</dd></dl>
|
||||
|
||||
<div class="section" id="example">
|
||||
<h2>14.5. Example<a class="headerlink" href="#example" title="Permalink to this headline">¶</a></h2>
|
||||
<h2>14.6. Example<a class="headerlink" href="#example" title="Permalink to this headline">¶</a></h2>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </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>
|
||||
@@ -125,7 +126,7 @@
|
||||
<h3><a href="index.html">Table Of Contents</a></h3>
|
||||
<ul>
|
||||
<li><a class="reference internal" href="#">14. <code class="docutils literal notranslate"><span class="pre">windows.generated_def</span></code> – generated Windows defines and structures</a><ul>
|
||||
<li><a class="reference internal" href="#example">14.5. Example</a></li>
|
||||
<li><a class="reference internal" href="#example">14.6. Example</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -135,7 +136,7 @@
|
||||
title="previous chapter">13. <code class="docutils literal notranslate"><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">14.1. Windef</a></p>
|
||||
title="next chapter">14.1. WinDef</a></p>
|
||||
<div role="note" aria-label="source link">
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
@@ -169,7 +170,7 @@
|
||||
<a href="py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="windef_generated.html" title="14.1. Windef"
|
||||
<a href="windef_generated.html" title="14.1. WinDef"
|
||||
>next</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="rpc.html" title="13. windows.rpc – ALPC-based Windows RPC"
|
||||
|
||||
Vendored
+17727
-951
File diff suppressed because it is too large
Load Diff
Vendored
+1
-2
@@ -54,8 +54,7 @@
|
||||
<span class="target" id="module-windows.winobject.handle"></span><dl class="class">
|
||||
<dt id="windows.winobject.handle.Handle">
|
||||
<em class="property">class </em><code class="descclassname">windows.winobject.handle.</code><code class="descname">Handle</code><a class="reference internal" href="_modules/windows/winobject/handle.html#Handle"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.handle.Handle" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>A handle of the system</p>
|
||||
<dl class="attribute">
|
||||
<dd><dl class="attribute">
|
||||
<dt id="windows.winobject.handle.Handle.infos">
|
||||
<code class="descname">infos</code><a class="headerlink" href="#windows.winobject.handle.Handle.infos" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>TODO: DOC</p>
|
||||
|
||||
Vendored
+5
-5
@@ -17,7 +17,7 @@
|
||||
<link rel="index" title="Index" href="genindex.html" />
|
||||
<link rel="search" title="Search" href="search.html" />
|
||||
<link rel="next" title="16. Early Work In Progress" href="wip.html" />
|
||||
<link rel="prev" title="14.3. Winstructs" href="winstructs_generated.html" />
|
||||
<link rel="prev" title="14.5. Windef" href="winerror_generated.html" />
|
||||
</head><body>
|
||||
<div class="related" role="navigation" aria-label="related navigation">
|
||||
<h3>Navigation</h3>
|
||||
@@ -32,7 +32,7 @@
|
||||
<a href="wip.html" title="16. Early Work In Progress"
|
||||
accesskey="N">next</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="winstructs_generated.html" title="14.3. Winstructs"
|
||||
<a href="winerror_generated.html" title="14.5. Windef"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> »</li>
|
||||
</ul>
|
||||
@@ -190,8 +190,8 @@
|
||||
</ul>
|
||||
|
||||
<h4>Previous topic</h4>
|
||||
<p class="topless"><a href="winstructs_generated.html"
|
||||
title="previous chapter">14.3. Winstructs</a></p>
|
||||
<p class="topless"><a href="winerror_generated.html"
|
||||
title="previous chapter">14.5. Windef</a></p>
|
||||
<h4>Next topic</h4>
|
||||
<p class="topless"><a href="wip.html"
|
||||
title="next chapter">16. Early Work In Progress</a></p>
|
||||
@@ -231,7 +231,7 @@
|
||||
<a href="wip.html" title="16. Early Work In Progress"
|
||||
>next</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="winstructs_generated.html" title="14.3. Winstructs"
|
||||
<a href="winerror_generated.html" title="14.5. Windef"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> »</li>
|
||||
</ul>
|
||||
|
||||
Vendored
+3
-2
@@ -161,11 +161,12 @@ I am always glad to have feedbacks from people using this project.</p>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="generated.html">14. <code class="docutils literal notranslate"><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">14.1. Windef</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="windef_generated.html">14.1. WinDef</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="ntstatus_generated.html">14.2. Ntstatus</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="winstructs_generated.html">14.3. Winstructs</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="winstructs_generated.html#winenums">14.4. WinEnums</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="generated.html#example">14.5. Example</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="winerror_generated.html">14.5. WinError</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="generated.html#example">14.6. Example</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="iat_hook.html">15. IAT hooking</a><ul>
|
||||
|
||||
+4
-4
@@ -17,7 +17,7 @@
|
||||
<link rel="index" title="Index" href="genindex.html" />
|
||||
<link rel="search" title="Search" href="search.html" />
|
||||
<link rel="next" title="14.3. Winstructs" href="winstructs_generated.html" />
|
||||
<link rel="prev" title="14.1. Windef" href="windef_generated.html" />
|
||||
<link rel="prev" title="14.1. WinDef" href="windef_generated.html" />
|
||||
</head><body>
|
||||
<div class="related" role="navigation" aria-label="related navigation">
|
||||
<h3>Navigation</h3>
|
||||
@@ -32,7 +32,7 @@
|
||||
<a href="winstructs_generated.html" title="14.3. Winstructs"
|
||||
accesskey="N">next</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="windef_generated.html" title="14.1. Windef"
|
||||
<a href="windef_generated.html" title="14.1. WinDef"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="generated.html" accesskey="U">14. <code class="docutils literal notranslate"><span class="pre">windows.generated_def</span></code> – generated Windows defines and structures</a> »</li>
|
||||
@@ -9026,7 +9026,7 @@
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<h4>Previous topic</h4>
|
||||
<p class="topless"><a href="windef_generated.html"
|
||||
title="previous chapter">14.1. Windef</a></p>
|
||||
title="previous chapter">14.1. WinDef</a></p>
|
||||
<h4>Next topic</h4>
|
||||
<p class="topless"><a href="winstructs_generated.html"
|
||||
title="next chapter">14.3. Winstructs</a></p>
|
||||
@@ -9066,7 +9066,7 @@
|
||||
<a href="winstructs_generated.html" title="14.3. Winstructs"
|
||||
>next</a> |</li>
|
||||
<li class="right" >
|
||||
<a href="windef_generated.html" title="14.1. Windef"
|
||||
<a href="windef_generated.html" title="14.1. WinDef"
|
||||
>previous</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="index.html">PythonForWindows 0.5 documentation</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="generated.html" >14. <code class="docutils literal notranslate"><span class="pre">windows.generated_def</span></code> – generated Windows defines and structures</a> »</li>
|
||||
|
||||
Vendored
+1
-1
@@ -105,7 +105,7 @@ from <code class="docutils literal notranslate"><span class="pre">windows.system
|
||||
<h2>2.13.2. KernelObject<a class="headerlink" href="#kernelobject" title="Permalink to this headline">¶</a></h2>
|
||||
<dl class="class">
|
||||
<dt id="windows.winobject.object_manager.KernelObject">
|
||||
<em class="property">class </em><code class="descclassname">windows.winobject.object_manager.</code><code class="descname">KernelObject</code><span class="sig-paren">(</span><em>path</em>, <em>name</em>, <em>type</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/object_manager.html#KernelObject"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.object_manager.KernelObject" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="descclassname">windows.winobject.object_manager.</code><code class="descname">KernelObject</code><span class="sig-paren">(</span><em>path</em>, <em>name</em>, <em>type=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/object_manager.html#KernelObject"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.object_manager.KernelObject" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Represent an object in the Object Manager namespace</p>
|
||||
<dl class="method">
|
||||
<dt id="windows.winobject.object_manager.KernelObject.__getitem__">
|
||||
|
||||
Vendored
+2
-2
@@ -61,7 +61,7 @@
|
||||
<h2>6.1. Helper functions<a class="headerlink" href="#helper-functions" title="Permalink to this headline">¶</a></h2>
|
||||
<dl class="function">
|
||||
<dt id="windows.pipe.create">
|
||||
<code class="descclassname">windows.pipe.</code><code class="descname">create</code><span class="sig-paren">(</span><em>addr</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.pipe.create" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="descclassname">windows.pipe.</code><code class="descname">create</code><span class="sig-paren">(</span><em>addr</em>, <em>security_descriptor=None</em><span class="sig-paren">)</span><a class="headerlink" href="#windows.pipe.create" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Create a namedpipe pipe <code class="docutils literal notranslate"><span class="pre">addr</span></code></p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
@@ -134,7 +134,7 @@
|
||||
|
||||
<dl class="classmethod">
|
||||
<dt id="windows.pipe.PipeConnection.create">
|
||||
<em class="property">classmethod </em><code class="descname">create</code><span class="sig-paren">(</span><em>addr</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/pipe.html#PipeConnection.create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.pipe.PipeConnection.create" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">classmethod </em><code class="descname">create</code><span class="sig-paren">(</span><em>addr</em>, <em>security_descriptor=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/pipe.html#PipeConnection.create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.pipe.PipeConnection.create" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Create a namedpipe pipe <code class="docutils literal notranslate"><span class="pre">addr</span></code></p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
|
||||
Vendored
+1
-1
@@ -1015,7 +1015,7 @@ raises an exception if the remote thread raised one</p>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.winobject.process.WinProcess.virtual_alloc">
|
||||
<code class="descname">virtual_alloc</code><span class="sig-paren">(</span><em>size</em>, <em>prot=PAGE_EXECUTE_READWRITE(0x40)</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/process.html#WinProcess.virtual_alloc"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.process.WinProcess.virtual_alloc" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="descname">virtual_alloc</code><span class="sig-paren">(</span><em>size</em>, <em>prot=PAGE_EXECUTE_READWRITE(0x40)</em>, <em>addr=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/process.html#WinProcess.virtual_alloc"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.process.WinProcess.virtual_alloc" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Allocate memory in the process</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
|
||||
Vendored
+9
-1
@@ -87,7 +87,7 @@
|
||||
|
||||
<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>
|
||||
<code class="descname">call</code><span class="sig-paren">(</span><em>IID</em>, <em>method_offset</em>, <em>params</em>, <em>ipid=None</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 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></p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
@@ -107,6 +107,14 @@
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.rpc.RPCClient.forge_alpc_request">
|
||||
<code class="descname">forge_alpc_request</code><span class="sig-paren">(</span><em>IID</em>, <em>method_offset</em>, <em>params</em>, <em>ipid=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/rpc/client.html#RPCClient.forge_alpc_request"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.rpc.RPCClient.forge_alpc_request" title="Permalink 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>
|
||||
|
||||
</div>
|
||||
|
||||
Vendored
+80
-24
@@ -783,7 +783,7 @@ Current thread token is <Token TokenId=0x3f1fac85 Type=TokenImpersonation(0x2
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Listing actions:"</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="n">task</span><span class="o">.</span><span class="n">definition</span><span class="o">.</span><span class="n">actions</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * Action: <</span><span class="si">{action}</span><span class="s2">>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">action</span><span class="o">=</span><span class="n">action</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * Type: <</span><span class="si">{action.type}</span><span class="s2">>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">action</span><span class="o">=</span><span class="n">action</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * Type: <</span><span class="si">{action.type!r}</span><span class="s2">>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">action</span><span class="o">=</span><span class="n">action</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="s2">"path"</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * path: <</span><span class="si">{action.path}</span><span class="s2">>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">action</span><span class="o">=</span><span class="n">action</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * arguments: <</span><span class="si">{action.arguments}</span><span class="s2">>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">action</span><span class="o">=</span><span class="n">action</span><span class="p">))</span>
|
||||
@@ -791,7 +791,7 @@ Current thread token is <Token TokenId=0x3f1fac85 Type=TokenImpersonation(0x2
|
||||
<span class="c1"># import pdb;pdb.set_trace()</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Listing triggers:"</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">trigger</span> <span class="ow">in</span> <span class="n">task</span><span class="o">.</span><span class="n">definition</span><span class="o">.</span><span class="n">triggers</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * Trigger type: <</span><span class="si">{trigger.type}</span><span class="s2">>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">trigger</span><span class="o">=</span><span class="n">trigger</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * Trigger type: <</span><span class="si">{trigger.type!r}</span><span class="s2">>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">trigger</span><span class="o">=</span><span class="n">trigger</span><span class="p">))</span>
|
||||
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span>
|
||||
<span class="n">DEMO_FOLDER_NAME</span> <span class="o">=</span> <span class="s2">"PFW_DEMO_FOLDER"</span>
|
||||
@@ -1076,7 +1076,7 @@ Current thread token is <Token TokenId=0x3f1fac85 Type=TokenImpersonation(0x2
|
||||
<span class="k">while</span> <span class="n">TODO</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">TODO</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||||
<span class="k">if</span> <span class="n">findname</span> <span class="ow">in</span> <span class="n">name</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">findname</span> <span class="ow">in</span> <span class="n">name</span> <span class="ow">or</span> <span class="n">findname</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"* </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">obj_with_link</span><span class="p">(</span><span class="n">obj</span><span class="p">)))</span>
|
||||
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="s2">"Directory"</span><span class="p">:</span>
|
||||
<span class="n">TODO</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
||||
@@ -1562,8 +1562,71 @@ No more tracing !
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="windows-debug-functioncallbp">
|
||||
<span id="sample-debugger-bp-functioncallbp"></span><h4>18.11.1.3. <a class="reference internal" href="debug.html#windows.debug.FunctionCallBP" title="windows.debug.FunctionCallBP"><code class="xref py py-class docutils literal notranslate"><span class="pre">windows.debug.FunctionCallBP</span></code></a><a class="headerlink" href="#windows-debug-functioncallbp" title="Permalink to this headline">¶</a></h4>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">sys</span>
|
||||
<span class="kn">import</span> <span class="nn">os.path</span>
|
||||
<span class="kn">import</span> <span class="nn">pprint</span>
|
||||
<span class="kn">import</span> <span class="nn">threading</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="vm">__file__</span> <span class="o">+</span> <span class="s2">"\..\.."</span><span class="p">))</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">windows</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.test</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.debug</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
||||
|
||||
<span class="c1"># The debugge python will just print the result of</span>
|
||||
<span class="c1"># 3 call to IsDebuggerPresent</span>
|
||||
<span class="n">TARGET_PYTHON_CODE</span> <span class="o">=</span> <span class="s1">'"</span><span class="se">\</span>
|
||||
<span class="s1">import ctypes;</span><span class="se">\</span>
|
||||
<span class="s1">import time;</span><span class="se">\</span>
|
||||
<span class="s1">IsDebuggerPresent = ctypes.windll.kernel32.IsDebuggerPresent;</span><span class="se">\</span>
|
||||
<span class="s1">print(</span><span class="se">\'</span><span class="s1">[DEBUGGE] IsDebuggerPresent=</span><span class="si">{0}</span><span class="se">\'</span><span class="s1">.format(IsDebuggerPresent()));</span><span class="se">\</span>
|
||||
<span class="s1">time.sleep(1);</span><span class="se">\</span>
|
||||
<span class="s1">print(</span><span class="se">\'</span><span class="s1">[DEBUGGE] IsDebuggerPresent=</span><span class="si">{0}</span><span class="se">\'</span><span class="s1">.format(IsDebuggerPresent()));</span><span class="se">\</span>
|
||||
<span class="s1">time.sleep(1);</span><span class="se">\</span>
|
||||
<span class="s1">print(</span><span class="se">\'</span><span class="s1">[DEBUGGE] IsDebuggerPresent=</span><span class="si">{0}</span><span class="se">\'</span><span class="s1">.format(IsDebuggerPresent()));</span><span class="se">\</span>
|
||||
<span class="s1">"'</span>
|
||||
|
||||
<span class="c1"># This breakpoint now nothing about its target argument</span>
|
||||
<span class="c1"># It only now how to break at the return of the function</span>
|
||||
<span class="c1"># This allow us to change the return value of any function</span>
|
||||
<span class="k">class</span> <span class="nc">IncrementReturnValue</span><span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">debug</span><span class="o">.</span><span class="n">FunctionCallBP</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">initialvalue</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">IncrementReturnValue</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">initialvalue</span> <span class="o">=</span> <span class="n">initialvalue</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="c1"># Ask to break a the return of the function</span>
|
||||
<span class="c1"># callback is ret_trigger</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">break_on_ret</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="k">def</span> <span class="nf">ret_trigger</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dbg</span><span class="p">,</span> <span class="n">exc</span><span class="p">):</span>
|
||||
<span class="n">ctx</span> <span class="o">=</span> <span class="n">dbg</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">context</span>
|
||||
<span class="c1"># Func result is an alias to EAX/RAX</span>
|
||||
<span class="n">ctx</span><span class="o">.</span><span class="n">func_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">initialvalue</span>
|
||||
<span class="c1"># Set the new context for the target thread</span>
|
||||
<span class="n">dbg</span><span class="o">.</span><span class="n">current_thread</span><span class="o">.</span><span class="n">set_context</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">initialvalue</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
|
||||
<span class="n">d</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">debug</span><span class="o">.</span><span class="n">Debugger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">executable</span><span class="p">,</span> <span class="p">[</span><span class="n">sys</span><span class="o">.</span><span class="n">executable</span><span class="p">,</span> <span class="s2">"-c"</span><span class="p">,</span> <span class="n">TARGET_PYTHON_CODE</span><span class="p">])</span>
|
||||
<span class="c1"># We could also give the direct address of the function</span>
|
||||
<span class="c1"># But it would require to wait for the module to be loaded</span>
|
||||
<span class="n">d</span><span class="o">.</span><span class="n">add_bp</span><span class="p">(</span><span class="n">IncrementReturnValue</span><span class="p">(</span><span class="s2">"kernelbase!IsDebuggerPresent"</span><span class="p">,</span> <span class="mi">42</span><span class="p">))</span>
|
||||
<span class="n">d</span><span class="o">.</span><span class="n">loop</span><span class="p">()</span>
|
||||
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Output</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span> <span class="n">python</span> <span class="n">debug</span>\<span class="n">change_function_ret_value</span><span class="o">.</span><span class="n">py</span>
|
||||
<span class="p">[</span><span class="n">DEBUGGE</span><span class="p">]</span> <span class="n">IsDebuggerPresent</span><span class="o">=</span><span class="mi">42</span>
|
||||
<span class="p">[</span><span class="n">DEBUGGE</span><span class="p">]</span> <span class="n">IsDebuggerPresent</span><span class="o">=</span><span class="mi">43</span>
|
||||
<span class="p">[</span><span class="n">DEBUGGE</span><span class="p">]</span> <span class="n">IsDebuggerPresent</span><span class="o">=</span><span class="mi">44</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="windows-debug-functionbp">
|
||||
<h4>18.11.1.3. <a class="reference internal" href="debug.html#windows.debug.FunctionBP" title="windows.debug.FunctionBP"><code class="xref py py-class docutils literal notranslate"><span class="pre">windows.debug.FunctionBP</span></code></a><a class="headerlink" href="#windows-debug-functionbp" title="Permalink to this headline">¶</a></h4>
|
||||
<span id="sample-debugger-bp-functionbp"></span><h4>18.11.1.4. <a class="reference internal" href="debug.html#windows.debug.FunctionBP" title="windows.debug.FunctionBP"><code class="xref py py-class docutils literal notranslate"><span class="pre">windows.debug.FunctionBP</span></code></a><a class="headerlink" href="#windows-debug-functionbp" title="Permalink to this headline">¶</a></h4>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">sys</span>
|
||||
<span class="kn">import</span> <span class="nn">os.path</span>
|
||||
<span class="kn">import</span> <span class="nn">pprint</span>
|
||||
@@ -1630,7 +1693,7 @@ Exiting process
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="debugger-attach">
|
||||
<span id="sample-debugger-attach"></span><h4>18.11.1.4. <a class="reference internal" href="debug.html#windows.debug.Debugger.attach" title="windows.debug.Debugger.attach"><code class="xref py py-func docutils literal notranslate"><span class="pre">Debugger.attach</span></code></a><a class="headerlink" href="#debugger-attach" title="Permalink to this headline">¶</a></h4>
|
||||
<span id="sample-debugger-attach"></span><h4>18.11.1.5. <a class="reference internal" href="debug.html#windows.debug.Debugger.attach" title="windows.debug.Debugger.attach"><code class="xref py py-func docutils literal notranslate"><span class="pre">Debugger.attach</span></code></a><a class="headerlink" href="#debugger-attach" title="Permalink to this headline">¶</a></h4>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">sys</span>
|
||||
<span class="kn">import</span> <span class="nn">os.path</span>
|
||||
<span class="kn">import</span> <span class="nn">pprint</span>
|
||||
@@ -1683,7 +1746,7 @@ Exiting process
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="native-code-tester">
|
||||
<h4>18.11.1.5. Native code tester<a class="headerlink" href="#native-code-tester" title="Permalink to this headline">¶</a></h4>
|
||||
<h4>18.11.1.6. Native code tester<a class="headerlink" href="#native-code-tester" title="Permalink to this headline">¶</a></h4>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">sys</span>
|
||||
<span class="kn">import</span> <span class="nn">argparse</span>
|
||||
|
||||
@@ -2631,9 +2694,10 @@ Result = <my secret message>
|
||||
<div class="section" id="certificate-demo">
|
||||
<span id="sample-crypto-certificate"></span><h3>18.14.2. Certificate demo<a class="headerlink" href="#certificate-demo" title="Permalink to this headline">¶</a></h3>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">hashlib</span>
|
||||
<span class="kn">import</span> <span class="nn">base64</span>
|
||||
<span class="kn">import</span> <span class="nn">windows.crypto</span>
|
||||
|
||||
<span class="n">windowscert</span> <span class="o">=</span> <span class="s2">"""-----BEGIN CERTIFICATE-----</span>
|
||||
<span class="n">windowscert</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">"""-----BEGIN CERTIFICATE-----</span>
|
||||
<span class="s2">MIIFBDCCA+ygAwIBAgITMwAAAQZuwyXEMckYDgAAAAABBjANBgkqhkiG9w0BAQsF</span>
|
||||
<span class="s2">ADCBhDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT</span>
|
||||
<span class="s2">B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEuMCwGA1UE</span>
|
||||
@@ -2664,7 +2728,7 @@ Result = <my secret message>
|
||||
<span class="s2">-----END CERTIFICATE-----"""</span>
|
||||
|
||||
|
||||
<span class="n">raw_cert</span> <span class="o">=</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">windowscert</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">'base64'</span><span class="p">)</span>
|
||||
<span class="n">raw_cert</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">decodestring</span><span class="p">(</span><span class="sa">b</span><span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">windowscert</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span>
|
||||
<span class="n">cert</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">Certificate</span><span class="o">.</span><span class="n">from_buffer</span><span class="p">(</span><span class="n">raw_cert</span><span class="p">)</span>
|
||||
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Analysing certificate: </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">cert</span><span class="p">))</span>
|
||||
@@ -2674,7 +2738,7 @@ Result = <my secret message>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * serial: <</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">cert</span><span class="o">.</span><span class="n">serial</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * encoded start: <</span><span class="si">{0!r}</span><span class="s2">>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">cert</span><span class="o">.</span><span class="n">encoded</span><span class="p">[:</span><span class="mi">20</span><span class="p">]))</span>
|
||||
|
||||
<span class="nb">print</span> <span class="s2">""</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span>
|
||||
<span class="n">chains</span> <span class="o">=</span> <span class="n">cert</span><span class="o">.</span><span class="n">chains</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"This certificate has </span><span class="si">{0}</span><span class="s2"> certificate chain(s)"</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">chains</span><span class="p">)))</span>
|
||||
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">chain</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">chains</span><span class="p">):</span>
|
||||
@@ -2684,7 +2748,7 @@ Result = <my secret message>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" </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">ccert</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * issuer: <</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">ccert</span><span class="o">.</span><span class="n">issuer</span><span class="p">))</span>
|
||||
|
||||
<span class="nb">print</span> <span class="s2">""</span>
|
||||
<span class="nb">print</span> <span class="p">(</span><span class="s2">""</span><span class="p">)</span>
|
||||
<span class="n">cert_to_verif</span> <span class="o">=</span> <span class="n">ccert</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Looking for <</span><span class="si">{0}</span><span class="s2">> in trusted certificates"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">cert_to_verif</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="n">root_store</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">CertificateStore</span><span class="o">.</span><span class="n">from_system_store</span><span class="p">(</span><span class="s2">"Root"</span><span class="p">)</span>
|
||||
@@ -2710,7 +2774,7 @@ Result = <my secret message>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"File has </span><span class="si">{0}</span><span class="s2"> signer(s):"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">cryptobj</span><span class="o">.</span><span class="n">crypt_msg</span><span class="o">.</span><span class="n">nb_signer</span><span class="p">))</span>
|
||||
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">signer</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">cryptobj</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="nb">print</span><span class="p">(</span><span class="s2">"Signer </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">i</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * Issuer: </span><span class="si">{0!r}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">windows</span><span class="o">.</span><span class="n">crypto</span><span class="o">.</span><span class="n">ECRYPT_DATA_BLOB</span><span class="p">(</span><span class="n">signer</span><span class="o">.</span><span class="n">Issuer</span><span class="o">.</span><span class="n">cbData</span><span class="p">,</span> <span class="n">signer</span><span class="o">.</span><span class="n">Issuer</span><span class="o">.</span><span class="n">pbData</span><span class="p">)</span><span class="o">.</span><span class="n">data</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * Issuer: </span><span class="si">{0!r}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">signer</span><span class="o">.</span><span class="n">Issuer</span><span class="o">.</span><span class="n">data</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">" * HashAlgorithme: </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">signer</span><span class="o">.</span><span class="n">HashAlgorithm</span><span class="o">.</span><span class="n">pszObjId</span><span class="p">))</span>
|
||||
<span class="n">cert</span> <span class="o">=</span> <span class="n">cryptobj</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="nb">print</span><span class="p">(</span><span class="s2">" * Certificate: </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">cert</span><span class="p">))</span>
|
||||
@@ -2771,24 +2835,16 @@ File embdeds 2 certificate(s):
|
||||
<span class="n">PORT_NAME</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"\RPC Control\PythonForWindowsPORT"</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">print_alpc_handle</span><span class="p">():</span>
|
||||
<span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">windows</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">handles</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">h</span><span class="o">.</span><span class="n">dwProcessId</span> <span class="o">!=</span> <span class="n">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">continue</span>
|
||||
<span class="k">if</span> <span class="n">h</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="s2">"ALPC Port"</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">h</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">h</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">h</span><span class="o">.</span><span class="n">wValue</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">alpc_server</span><span class="p">():</span>
|
||||
<span class="n">server</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">alpc</span><span class="o">.</span><span class="n">AlpcServer</span><span class="p">(</span><span class="n">PORT_NAME</span><span class="p">)</span> <span class="c1"># Create the ALPC Port</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"[SERV] PORT <</span><span class="si">{0}</span><span class="s2">> CREATED"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">PORT_NAME</span><span class="p">))</span>
|
||||
<span class="n">print_alpc_handle</span><span class="p">()</span>
|
||||
|
||||
<span class="n">msg</span> <span class="o">=</span> <span class="n">server</span><span class="o">.</span><span class="n">recv</span><span class="p">()</span> <span class="c1"># Wait for a message</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"[SERV] Message type = </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">msg</span><span class="o">.</span><span class="n">type</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"[SERV] Received 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">msg</span><span class="o">.</span><span class="n">data</span><span class="p">))</span>
|
||||
<span class="k">assert</span> <span class="n">msg</span><span class="o">.</span><span class="n">type</span> <span class="o">&</span> <span class="mh">0xfff</span> <span class="o">==</span> <span class="n">LPC_CONNECTION_REQUEST</span> <span class="c1"># Check that message is a connection request</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"[SERV] Connection request"</span><span class="p">)</span>
|
||||
<span class="n">server</span><span class="o">.</span><span class="n">accept_connection</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
|
||||
<span class="n">print_alpc_handle</span><span class="p">()</span>
|
||||
|
||||
<span class="n">msg</span> <span class="o">=</span> <span class="n">server</span><span class="o">.</span><span class="n">recv</span><span class="p">()</span> <span class="c1"># Wait for a real message</span>
|
||||
<span class="nb">print</span> <span class="s2">""</span>
|
||||
@@ -2800,7 +2856,6 @@ File embdeds 2 certificate(s):
|
||||
<span class="c1"># - Recreate a Message and copy the MessageId</span>
|
||||
<span class="n">msg</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="s2">"REQUEST '</span><span class="si">{0}</span><span class="s2">' DONE"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">msg</span><span class="o">.</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="n">server</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
|
||||
<span class="n">print_alpc_handle</span><span class="p">()</span>
|
||||
|
||||
|
||||
|
||||
@@ -3563,9 +3618,10 @@ BYE
|
||||
<li><a class="reference internal" href="#debugger">18.11.1. <code class="docutils literal notranslate"><span class="pre">Debugger</span></code></a><ul>
|
||||
<li><a class="reference internal" href="#on-setup">18.11.1.1. on_setup</a></li>
|
||||
<li><a class="reference internal" href="#single-stepping">18.11.1.2. Single stepping</a></li>
|
||||
<li><a class="reference internal" href="#windows-debug-functionbp">18.11.1.3. <code class="docutils literal notranslate"><span class="pre">windows.debug.FunctionBP</span></code></a></li>
|
||||
<li><a class="reference internal" href="#debugger-attach">18.11.1.4. <code class="docutils literal notranslate"><span class="pre">Debugger.attach</span></code></a></li>
|
||||
<li><a class="reference internal" href="#native-code-tester">18.11.1.5. Native code tester</a></li>
|
||||
<li><a class="reference internal" href="#windows-debug-functioncallbp">18.11.1.3. <code class="docutils literal notranslate"><span class="pre">windows.debug.FunctionCallBP</span></code></a></li>
|
||||
<li><a class="reference internal" href="#windows-debug-functionbp">18.11.1.4. <code class="docutils literal notranslate"><span class="pre">windows.debug.FunctionBP</span></code></a></li>
|
||||
<li><a class="reference internal" href="#debugger-attach">18.11.1.5. <code class="docutils literal notranslate"><span class="pre">Debugger.attach</span></code></a></li>
|
||||
<li><a class="reference internal" href="#native-code-tester">18.11.1.6. Native code tester</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#localdebugger">18.11.2. <code class="docutils literal notranslate"><span class="pre">LocalDebugger</span></code></a><ul>
|
||||
|
||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+19
-6
@@ -70,8 +70,8 @@
|
||||
<p class="last">TODO: free the underliying buffer when not needed anymore for now the underliying memory is never freed.</p>
|
||||
</div>
|
||||
<dl class="attribute">
|
||||
<dt id="windows.security.SecurityDescriptor.DEFAULT_SECURITY_INFORMATION">
|
||||
<code class="descname">DEFAULT_SECURITY_INFORMATION</code><em class="property"> = 231L</em><a class="headerlink" href="#windows.security.SecurityDescriptor.DEFAULT_SECURITY_INFORMATION" title="Permalink to this definition">¶</a></dt>
|
||||
<dt id="windows.security.SecurityDescriptor.SERVICE_SECURITY_INFORMATION">
|
||||
<code class="descname">SERVICE_SECURITY_INFORMATION</code><em class="property"> = 7L</em><a class="headerlink" href="#windows.security.SecurityDescriptor.SERVICE_SECURITY_INFORMATION" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The default <code class="docutils literal notranslate"><span class="pre">flags</span></code> value for functions expecting a
|
||||
<a class="reference external" href="https://docs.microsoft.com/en-us/windows/desktop/SecAuthZ/security-information">SECURITY_INFORMATION</a>.</p>
|
||||
<p>This value regroups the followings flags:</p>
|
||||
@@ -83,6 +83,7 @@
|
||||
<li><code class="docutils literal notranslate"><span class="pre">ATTRIBUTE_SECURITY_INFORMATION</span></code></li>
|
||||
<li><code class="docutils literal notranslate"><span class="pre">SCOPE_SECURITY_INFORMATION</span></code></li>
|
||||
<li><code class="docutils literal notranslate"><span class="pre">PROCESS_TRUST_LABEL_SECURITY_INFORMATION</span></code></li>
|
||||
<li><code class="docutils literal notranslate"><span class="pre">LABEL_SECURITY_INFORMATION</span></code></li>
|
||||
</ul>
|
||||
</div></blockquote>
|
||||
<div class="admonition warning">
|
||||
@@ -130,16 +131,22 @@ Binary security descriptor can be found in the registry for example</p>
|
||||
|
||||
<dl class="classmethod">
|
||||
<dt id="windows.security.SecurityDescriptor.from_filename">
|
||||
<em class="property">classmethod </em><code class="descname">from_filename</code><span class="sig-paren">(</span><em>filename</em>, <em>query_sacl=False</em>, <em>flags=231L</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/security.html#SecurityDescriptor.from_filename"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.security.SecurityDescriptor.from_filename" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">classmethod </em><code class="descname">from_filename</code><span class="sig-paren">(</span><em>filename</em>, <em>query_sacl=False</em>, <em>flags=247L</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/security.html#SecurityDescriptor.from_filename"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.security.SecurityDescriptor.from_filename" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Retrieve the security descriptor for the file <code class="docutils literal notranslate"><span class="pre">filename</span></code></p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="classmethod">
|
||||
<dt id="windows.security.SecurityDescriptor.from_handle">
|
||||
<em class="property">classmethod </em><code class="descname">from_handle</code><span class="sig-paren">(</span><em>handle</em>, <em>query_sacl=False</em>, <em>flags=231L</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/security.html#SecurityDescriptor.from_handle"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.security.SecurityDescriptor.from_handle" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">classmethod </em><code class="descname">from_handle</code><span class="sig-paren">(</span><em>handle</em>, <em>query_sacl=False</em>, <em>flags=247L</em>, <em>obj_type=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/security.html#SecurityDescriptor.from_handle"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.security.SecurityDescriptor.from_handle" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Retrieve the security descriptor for the kernel object described by``handle``</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="classmethod">
|
||||
<dt id="windows.security.SecurityDescriptor.from_service">
|
||||
<em class="property">classmethod </em><code class="descname">from_service</code><span class="sig-paren">(</span><em>filename</em>, <em>query_sacl=False</em>, <em>flags=7L</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/security.html#SecurityDescriptor.from_service"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.security.SecurityDescriptor.from_service" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Retrieve the security descriptor for the service named <code class="docutils literal notranslate"><span class="pre">service</span></code></p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="classmethod">
|
||||
<dt id="windows.security.SecurityDescriptor.from_string">
|
||||
<em class="property">classmethod </em><code class="descname">from_string</code><span class="sig-paren">(</span><em>sddl</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/security.html#SecurityDescriptor.from_string"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.security.SecurityDescriptor.from_string" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -204,7 +211,7 @@ Binary security descriptor can be found in the registry for example</p>
|
||||
<dl class="attribute">
|
||||
<dt id="windows.security.SecurityDescriptor.sacl">
|
||||
<code class="descname">sacl</code><a class="headerlink" href="#windows.security.SecurityDescriptor.sacl" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The SACL of the security descriptor. You may need special attention to retrieve it (see <a class="reference internal" href="#windows.security.SecurityDescriptor.DEFAULT_SECURITY_INFORMATION" title="windows.security.SecurityDescriptor.DEFAULT_SECURITY_INFORMATION"><code class="xref any py py-attr docutils literal notranslate"><span class="pre">DEFAULT_SECURITY_INFORMATION</span></code></a>)</p>
|
||||
<dd><p>The SACL of the security descriptor. You may need special attention to retrieve it (see <code class="xref any docutils literal notranslate"><span class="pre">DEFAULT_SECURITY_INFORMATION</span></code>)</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
@@ -215,9 +222,15 @@ Binary security descriptor can be found in the registry for example</p>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.security.SecurityDescriptor.to_filename">
|
||||
<code class="descname">to_filename</code><span class="sig-paren">(</span><em>filename</em>, <em>flags=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/security.html#SecurityDescriptor.to_filename"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.security.SecurityDescriptor.to_filename" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Test method: WILL CHANGE</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.security.SecurityDescriptor.to_string">
|
||||
<code class="descname">to_string</code><span class="sig-paren">(</span><em>security_information=231L</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/security.html#SecurityDescriptor.to_string"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.security.SecurityDescriptor.to_string" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="descname">to_string</code><span class="sig-paren">(</span><em>security_information=247L</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/security.html#SecurityDescriptor.to_string"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.security.SecurityDescriptor.to_string" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Return the SDDL representation of the security descriptor</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
|
||||
Vendored
-63
@@ -109,69 +109,6 @@
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="windows.winobject.service.ServiceA">
|
||||
<em class="property">class </em><code class="descclassname">windows.winobject.service.</code><code class="descname">ServiceA</code><a class="reference internal" href="_modules/windows/winobject/service.html#ServiceA"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.service.ServiceA" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">windows.winobject.service.Service</span></code>, <a class="reference internal" href="winstructs_generated.html#windows.generated_def.winstructs._ENUM_SERVICE_STATUS_PROCESSA" title="windows.generated_def.winstructs._ENUM_SERVICE_STATUS_PROCESSA"><code class="xref py py-class docutils literal notranslate"><span class="pre">windows.generated_def.winstructs._ENUM_SERVICE_STATUS_PROCESSA</span></code></a></p>
|
||||
<p>A Service object with ascii data</p>
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.service.ServiceA.description">
|
||||
<code class="descname">description</code><a class="headerlink" href="#windows.winobject.service.ServiceA.description" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The description of the service</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2.7/library/functions.html#str" title="(in Python v2.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.service.ServiceA.name">
|
||||
<code class="descname">name</code><a class="headerlink" href="#windows.winobject.service.ServiceA.name" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The name of the service</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2.7/library/functions.html#str" title="(in Python v2.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.service.ServiceA.process">
|
||||
<code class="descname">process</code><a class="headerlink" href="#windows.winobject.service.ServiceA.process" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The process running the service (if any)</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="process.html#windows.winobject.process.WinProcess" title="windows.winobject.process.WinProcess"><code class="xref py py-class docutils literal notranslate"><span class="pre">WinProcess</span></code></a> or <code class="docutils literal notranslate"><span class="pre">None</span></code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.service.ServiceA.status">
|
||||
<code class="descname">status</code><a class="headerlink" href="#windows.winobject.service.ServiceA.status" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The status of the service</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference internal" href="#windows.winobject.service.ServiceStatus" title="windows.winobject.service.ServiceStatus"><code class="xref py py-class docutils literal notranslate"><span class="pre">ServiceStatus</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
Vendored
+46
@@ -246,12 +246,30 @@
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.task_scheduler.Task.enabled">
|
||||
<code class="descname">enabled</code><a class="headerlink" href="#windows.winobject.task_scheduler.Task.enabled" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p><code class="docutils literal notranslate"><span class="pre">True</span></code> is the task is enabled</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.task_scheduler.Task.last_runtime">
|
||||
<code class="descname">last_runtime</code><a class="headerlink" href="#windows.winobject.task_scheduler.Task.last_runtime" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Gets the last time the registered task was last run.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.task_scheduler.Task.name">
|
||||
<code class="descname">name</code><a class="headerlink" href="#windows.winobject.task_scheduler.Task.name" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The name of the task</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.task_scheduler.Task.next_runtime">
|
||||
<code class="descname">next_runtime</code><a class="headerlink" href="#windows.winobject.task_scheduler.Task.next_runtime" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Gets the next time the registered task will be run.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.task_scheduler.Task.path">
|
||||
<code class="descname">path</code><a class="headerlink" href="#windows.winobject.task_scheduler.Task.path" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -278,6 +296,20 @@
|
||||
<dd><p>current value</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.task_scheduler.Task.xml">
|
||||
<code class="descname">xml</code><a class="headerlink" href="#windows.winobject.task_scheduler.Task.xml" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The XML representig the task</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2.7/library/functions.html#str" title="(in Python v2.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
</div>
|
||||
@@ -322,6 +354,20 @@
|
||||
<dd><p>current value</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.task_scheduler.TaskDefinition.xml">
|
||||
<code class="descname">xml</code><a class="headerlink" href="#windows.winobject.task_scheduler.TaskDefinition.xml" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The XML representig the task definition</p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2.7/library/functions.html#str" title="(in Python v2.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
</div>
|
||||
|
||||
+5864
-7464
File diff suppressed because it is too large
Load Diff
Vendored
+1
-1
@@ -222,7 +222,7 @@ It also offers some submodules aimed to help the interfacing with <code class="d
|
||||
<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="service.html#windows.winobject.service.ServiceA" title="windows.winobject.service.ServiceA"><code class="xref py py-class docutils literal notranslate"><span class="pre">ServiceA</span></code></a>] – A list of Service</td>
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">[<code class="xref py py-class docutils literal notranslate"><span class="pre">ServiceA</span></code>] – A list of Service</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
+34560
File diff suppressed because it is too large
Load Diff
+14547
-4832
File diff suppressed because it is too large
Load Diff
Vendored
+6
@@ -181,6 +181,12 @@ if <code class="docutils literal notranslate"><span class="pre">superclass</span
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.winobject.wmi.WmiNamespace.delete_instance">
|
||||
<code class="descname">delete_instance</code><span class="sig-paren">(</span><em>instance</em>, <em>flags=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/wmi.html#WmiNamespace.delete_instance"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.wmi.WmiNamespace.delete_instance" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>TODO: Document</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.winobject.wmi.WmiNamespace.exec_method">
|
||||
<code class="descname">exec_method</code><span class="sig-paren">(</span><em>obj</em>, <em>method</em>, <em>inparam</em>, <em>flags=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/wmi.html#WmiNamespace.exec_method"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.wmi.WmiNamespace.exec_method" title="Permalink to this definition">¶</a></dt>
|
||||
|
||||
@@ -22,6 +22,7 @@ Here is every generated definition by type:
|
||||
windef_generated.rst
|
||||
ntstatus_generated.rst
|
||||
winstructs_generated.rst
|
||||
winerror_generated.rst
|
||||
|
||||
|
||||
|
||||
|
||||
+1204
-1524
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+9318
-2713
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+685
-685
File diff suppressed because it is too large
Load Diff
+904
-904
File diff suppressed because it is too large
Load Diff
+2705
-2705
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user