mirror of
https://github.com/hakril/PythonForWindows
synced 2026-06-08 14:31:45 +00:00
Improve WMI capabilities by adding access to various namespaces + listing methods + add CurrentProcess.load_library
This commit is contained in:
@@ -895,6 +895,10 @@
|
||||
<span class="n">handle</span> <span class="o">=</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">CreateThread</span><span class="p">(</span><span class="n">lpStartAddress</span><span class="o">=</span><span class="n">lpStartAddress</span><span class="p">,</span> <span class="n">lpParameter</span><span class="o">=</span><span class="n">lpParameter</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="k">return</span> <span class="n">WinThread</span><span class="o">.</span><span class="n">_from_handle</span><span class="p">(</span><span class="n">handle</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CurrentProcess.load_library"><a class="viewcode-back" href="../../../process.html#windows.winobject.process.CurrentProcess.load_library">[docs]</a> <span class="k">def</span> <span class="nf">load_library</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dll_path</span><span class="p">):</span>
|
||||
<span class="sd">"""Load the library in current process"""</span>
|
||||
<span class="k">return</span> <span class="n">winproxy</span><span class="o">.</span><span class="n">LoadLibraryA</span><span class="p">(</span><span class="n">dll_path</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CurrentProcess.execute"><a class="viewcode-back" href="../../../process.html#windows.winobject.process.CurrentProcess.execute">[docs]</a> <span class="k">def</span> <span class="nf">execute</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="n">parameter</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
<span class="sd">"""Execute native code ``code`` in the current thread.</span>
|
||||
|
||||
|
||||
+4
-3
@@ -131,10 +131,11 @@
|
||||
|
||||
<span class="nd">@utils</span><span class="o">.</span><span class="n">fixedpropety</span>
|
||||
<span class="k">def</span> <span class="nf">wmi</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">"""An object to perform wmi request to "root\\cimv2"</span>
|
||||
<span class="sa">r</span><span class="sd">"""An object to perform wmi requests to various namespaces</span>
|
||||
|
||||
<span class="sd"> :type: :class:`windows.winobject.wmi.WmiRequester`"""</span>
|
||||
<span class="k">return</span> <span class="n">wmi</span><span class="o">.</span><span class="n">WmiRequester</span><span class="p">()</span>
|
||||
<span class="sd"> :type: :class:`windows.winobject.wmi.WmiManager`"""</span>
|
||||
<span class="c1"># return wmi.WmiRequester()</span>
|
||||
<span class="k">return</span> <span class="n">wmi</span><span class="o">.</span><span class="n">WmiManager</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>
|
||||
|
||||
+64
-9
@@ -64,13 +64,8 @@
|
||||
<span class="sa">r</span><span class="sd">"""An object to perform wmi request to ``root\cimv2``"""</span>
|
||||
<span class="n">INSTANCE</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<span class="c1"># def __new__(cls, *args, **kwargs):</span>
|
||||
<span class="c1"># if cls.INSTANCE is not None:</span>
|
||||
<span class="c1"># return cls.INSTANCE</span>
|
||||
<span class="c1"># cls.INSTANCE = super(cls, cls).__new__(cls, *args, **kwargs)</span>
|
||||
<span class="c1"># return cls.INSTANCE</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">"root</span><span class="se">\\</span><span class="s2">cimv2"</span><span class="p">,</span> <span class="n">user</span><span class="o">=</span><span class="kc">None</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="bp">self</span><span class="o">.</span><span class="n">namespace</span> <span class="o">=</span> <span class="n">target</span>
|
||||
<span class="n">locator</span> <span class="o">=</span> <span class="n">IWbemLocator</span><span class="p">()</span>
|
||||
<span class="n">service</span> <span class="o">=</span> <span class="n">IWbemServices</span><span class="p">()</span>
|
||||
<span class="c1">#CLSID_WbemAdministrativeLocator_IID = windows.com.IID.from_string('CB8555CC-9128-11D1-AD9B-00C04FD8FDFF')</span>
|
||||
@@ -84,11 +79,26 @@
|
||||
<div class="viewcode-block" id="WmiRequester.select"><a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiRequester.select">[docs]</a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">frm</span><span class="p">,</span> <span class="n">attrs</span><span class="o">=</span><span class="s2">"*"</span><span class="p">):</span>
|
||||
<span class="sd">"""Select ``attrs`` from ``frm``</span>
|
||||
|
||||
<span class="sd"> :rtype: list of dict</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"select * from </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">frm</span><span class="p">),</span> <span class="n">attrs</span><span class="p">)</span></div>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">classes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The list of class available</span>
|
||||
|
||||
<span class="sd"> :rtype: list of str</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">x</span><span class="p">[</span><span class="s2">"__CLASS"</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s1">'SELECT * FROM meta_class'</span><span class="p">,</span> <span class="n">attrs</span><span class="o">=</span><span class="p">[</span><span class="s2">"__CLASS"</span><span class="p">])]</span>
|
||||
|
||||
<div class="viewcode-block" id="WmiRequester.query"><a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiRequester.query">[docs]</a> <span class="k">def</span> <span class="nf">query</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">,</span> <span class="n">attrs</span><span class="o">=</span><span class="s2">"*"</span><span class="p">):</span>
|
||||
<span class="sd">"""Execute WMI ``query`` and return the attributes ``attrs``</span>
|
||||
|
||||
<span class="sd"> :rtype: list of dict</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">enumerator</span> <span class="o">=</span> <span class="n">IEnumWbemClassObject</span><span class="p">()</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">ExecQuery</span><span class="p">(</span><span class="s2">"WQL"</span><span class="p">,</span> <span class="s2">"select * from </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">frm</span><span class="p">),</span> <span class="mh">0x20</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">enumerator</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">ExecQuery</span><span class="p">(</span><span class="s2">"WQL"</span><span class="p">,</span> <span class="n">query</span><span class="p">,</span> <span class="mh">0x20</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">enumerator</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="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">WBEM_E_INVALID_CLASS</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="s1">'WBEM_E_INVALID_CLASS <Invalid WMI class "</span><span class="si">{0}</span><span class="s1">">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">frm</span><span class="p">))</span>
|
||||
@@ -106,7 +116,14 @@
|
||||
<span class="k">if</span> <span class="n">attrs</span> <span class="o">==</span> <span class="s2">"*"</span><span class="p">:</span>
|
||||
<span class="n">attrs</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_names</span><span class="p">(</span><span class="n">processor</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">startswith</span><span class="p">(</span><span class="s2">"__"</span><span class="p">)]</span>
|
||||
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
|
||||
<span class="n">processor</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">ctypes</span><span class="o">.</span><span class="n">byref</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="kc">None</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">processor</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">ctypes</span><span class="o">.</span><span class="n">byref</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="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">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">WBEM_E_NOT_FOUND</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="s1">'WBEM_E_NOT_FOUND <Invalid Attribute "</span><span class="si">{0}</span><span class="s1">">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">winerror</span> <span class="o">&</span> <span class="mh">0xffffffff</span><span class="p">)</span> <span class="ow">in</span> <span class="n">WBEMSTATUS</span><span class="o">.</span><span class="n">values</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="n">WBEMSTATUS</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">value</span><span class="p">)</span>
|
||||
<span class="k">raise</span>
|
||||
<span class="c1"># TODO: something clean and generic</span>
|
||||
<span class="k">if</span> <span class="n">variant_res</span><span class="o">.</span><span class="n">vt</span> <span class="o">&</span> <span class="n">VT_ARRAY</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">variant_res</span><span class="o">.</span><span class="n">vt</span> <span class="o">&</span> <span class="n">VT_TYPEMASK</span> <span class="o">==</span> <span class="n">VT_BSTR</span><span class="p">:</span>
|
||||
@@ -131,12 +148,50 @@
|
||||
<span class="n">enumerator</span><span class="o">.</span><span class="n">Next</span><span class="p">(</span><span class="mh">0xffffffff</span><span class="p">,</span> <span class="mi">1</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">processor</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">count</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">res</span></div>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">processor</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">SAFEARRAY</span><span class="p">)()</span>
|
||||
<span class="n">processor</span><span class="o">.</span><span class="n">GetNames</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="n">byref</span><span class="p">(</span><span class="n">res</span><span class="p">))</span>
|
||||
<span class="n">safe_array</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">res</span><span class="p">,</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">ImprovedSAFEARRAY</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">safe_array</span><span class="o">.</span><span class="n">elt_type</span> <span class="o">=</span> <span class="n">BSTR</span>
|
||||
<span class="k">return</span> <span class="n">safe_array</span><span class="o">.</span><span class="n">to_list</span><span class="p">()</span></div>
|
||||
<span class="k">return</span> <span class="n">safe_array</span><span class="o">.</span><span class="n">to_list</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="s2">"""<</span><span class="si">{0}</span><span class="s2"> namespace="</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">namespace</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="WmiManager"><a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiManager">[docs]</a><span class="k">class</span> <span class="nc">WmiManager</span><span class="p">(</span><span class="nb">dict</span><span class="p">):</span>
|
||||
<span class="sd">"""The main WMI class exposed, used to list and access differents WMI namespace, can be used as a dict to access</span>
|
||||
<span class="sd"> :cls:`WmiRequester` by namespace"""</span>
|
||||
<span class="n">DEFAULT_NAMESPACE</span> <span class="o">=</span> <span class="s2">"root</span><span class="se">\\</span><span class="s2">cimv2"</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="bp">self</span><span class="o">.</span><span class="n">wmi_requester_by_namespace</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">select</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">""":func:`WmiRequester.select` for default WMI namespace 'root\\cimv2'"""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_NAMESPACE</span><span class="p">]</span><span class="o">.</span><span class="n">select</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">query</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">""":func:`WmiRequester.query` for default WMI namespace 'root\\cimv2'"""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_NAMESPACE</span><span class="p">]</span><span class="o">.</span><span class="n">query</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_subnamespaces</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="s2">"root"</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">x</span><span class="p">[</span><span class="s2">"Name"</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">[</span><span class="n">root</span><span class="p">]</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">"__NameSpace"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"Name"</span><span class="p">])]</span>
|
||||
|
||||
<span class="n">namespaces</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_subnamespaces</span><span class="p">)</span>
|
||||
<span class="sd">"""The list of available WMI namespaces"""</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_open_wmi_requester</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">namespace</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">WmiRequester</span><span class="p">(</span><span class="n">namespace</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__missing__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_open_wmi_requester</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">object</span><span class="o">.</span><span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
|
||||
Vendored
+5
-1
@@ -7,4 +7,8 @@ WMI -- Make request to WMI
|
||||
|
||||
See sample :ref:`wmi_request`
|
||||
|
||||
.. autoclass:: WmiRequester
|
||||
.. autoclass:: WmiRequester
|
||||
|
||||
.. autoclass:: WmiManager
|
||||
:no-inherited-members:
|
||||
:members: select, query, namespaces
|
||||
Vendored
+19
-3
@@ -2101,6 +2101,8 @@
|
||||
<li><a href="winstructs_generated.html#windows.generated_def.WINTRUST_SGNR_INFO_.chStores">(windows.generated_def.WINTRUST_SGNR_INFO_ attribute)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li><a href="wmi.html#windows.winobject.wmi.WmiRequester.classes">classes (windows.winobject.wmi.WmiRequester attribute)</a>
|
||||
</li>
|
||||
<li><a href="winstructs_generated.html#windows.generated_def._SPC_SERIALIZED_OBJECT.ClassId">ClassId (windows.generated_def._SPC_SERIALIZED_OBJECT attribute)</a>
|
||||
</li>
|
||||
<li><a href="winstructs_generated.html#windows.generated_def.CLIENT_ID">CLIENT_ID (class in windows.generated_def)</a>
|
||||
@@ -6001,8 +6003,12 @@
|
||||
</li>
|
||||
<li><a href="winstructs_generated.html#windows.generated_def.LOAD_DLL_DEBUG_INFO">LOAD_DLL_DEBUG_INFO (class in windows.generated_def)</a>
|
||||
</li>
|
||||
<li><a href="process.html#windows.winobject.process.WinProcess.load_library">load_library() (windows.winobject.process.WinProcess method)</a>
|
||||
<li><a href="process.html#windows.winobject.process.CurrentProcess.load_library">load_library() (windows.winobject.process.CurrentProcess method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="process.html#windows.winobject.process.WinProcess.load_library">(windows.winobject.process.WinProcess method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li><a href="winstructs_generated.html#windows.generated_def._SYSTEM_MODULE32.LoadCount">LoadCount (windows.generated_def._SYSTEM_MODULE32 attribute)</a>
|
||||
|
||||
<ul>
|
||||
@@ -6098,11 +6104,11 @@
|
||||
<li><a href="windef_generated.html#windows.generated_def.LPC_DEBUG_EVENT">LPC_DEBUG_EVENT (in module windows.generated_def)</a>
|
||||
</li>
|
||||
<li><a href="windef_generated.html#windows.generated_def.LPC_ERROR_EVENT">LPC_ERROR_EVENT (in module windows.generated_def)</a>
|
||||
</li>
|
||||
<li><a href="windef_generated.html#windows.generated_def.LPC_EXCEPTION">LPC_EXCEPTION (in module windows.generated_def)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="windef_generated.html#windows.generated_def.LPC_EXCEPTION">LPC_EXCEPTION (in module windows.generated_def)</a>
|
||||
</li>
|
||||
<li><a href="windef_generated.html#windows.generated_def.LPC_LOST_REPLY">LPC_LOST_REPLY (in module windows.generated_def)</a>
|
||||
</li>
|
||||
<li><a href="windef_generated.html#windows.generated_def.LPC_PORT_CLOSED">LPC_PORT_CLOSED (in module windows.generated_def)</a>
|
||||
@@ -6690,6 +6696,8 @@
|
||||
<li><a href="winstructs_generated.html#windows.generated_def._SYMBOL_INFO.NameLen">NameLen (windows.generated_def._SYMBOL_INFO attribute)</a>
|
||||
</li>
|
||||
<li><a href="winstructs_generated.html#windows.generated_def._DEBUG_SYMBOL_ENTRY.NameSize">NameSize (windows.generated_def._DEBUG_SYMBOL_ENTRY attribute)</a>
|
||||
</li>
|
||||
<li><a href="wmi.html#windows.winobject.wmi.WmiManager.namespaces">namespaces (windows.winobject.wmi.WmiManager attribute)</a>
|
||||
</li>
|
||||
<li><a href="winstructs_generated.html#windows.generated_def._DEBUG_VALUE_TMP_SUBSTRUCT1.Nat">Nat (windows.generated_def._DEBUG_VALUE_TMP_SUBSTRUCT1 attribute)</a>
|
||||
</li>
|
||||
@@ -8041,6 +8049,10 @@
|
||||
</ul></li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="wmi.html#windows.winobject.wmi.WmiManager.query">query (windows.winobject.wmi.WmiManager attribute)</a>
|
||||
</li>
|
||||
<li><a href="wmi.html#windows.winobject.wmi.WmiRequester.query">query() (windows.winobject.wmi.WmiRequester method)</a>
|
||||
</li>
|
||||
<li><a href="process.html#windows.winobject.process.CurrentProcess.query_memory">query_memory() (windows.winobject.process.CurrentProcess method)</a>
|
||||
|
||||
<ul>
|
||||
@@ -8981,6 +8993,8 @@
|
||||
<li><a href="winstructs_generated.html#windows.generated_def._WOW64_CONTEXT.SegSs">(windows.generated_def._WOW64_CONTEXT attribute)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li><a href="wmi.html#windows.winobject.wmi.WmiManager.select">select (windows.winobject.wmi.WmiManager attribute)</a>
|
||||
</li>
|
||||
<li><a href="wmi.html#windows.winobject.wmi.WmiRequester.select">select() (windows.winobject.wmi.WmiRequester method)</a>
|
||||
</li>
|
||||
<li><a href="winstructs_generated.html#windows.generated_def.CRYPTCATMEMBER_.sEncodedIndirectData">sEncodedIndirectData (windows.generated_def.CRYPTCATMEMBER_ attribute)</a>
|
||||
@@ -15336,6 +15350,8 @@
|
||||
<li><a href="windows.html#windows.winobject.system.System.wmi">wmi (windows.winobject.system.System attribute)</a>
|
||||
</li>
|
||||
<li><a href="winstructs_generated.html#windows.generated_def._SYSTEMTIME.wMilliseconds">wMilliseconds (windows.generated_def._SYSTEMTIME attribute)</a>
|
||||
</li>
|
||||
<li><a href="wmi.html#windows.winobject.wmi.WmiManager">WmiManager (class in windows.winobject.wmi)</a>
|
||||
</li>
|
||||
<li><a href="winstructs_generated.html#windows.generated_def._SYSTEMTIME.wMinute">wMinute (windows.generated_def._SYSTEMTIME attribute)</a>
|
||||
</li>
|
||||
|
||||
Vendored
+6
@@ -205,6 +205,12 @@
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.winobject.process.CurrentProcess.load_library">
|
||||
<code class="descname">load_library</code><span class="sig-paren">(</span><em>dll_path</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/process.html#CurrentProcess.load_library"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.process.CurrentProcess.load_library" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Load the library in current process</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.winobject.process.CurrentProcess.memory_state">
|
||||
<code class="descname">memory_state</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#windows.winobject.process.CurrentProcess.memory_state" title="Permalink to this definition">¶</a></dt>
|
||||
|
||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+4
-4
@@ -149,7 +149,7 @@ It also offers some submodules aimed to help the interfacing with <code class="d
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.system.System.network">
|
||||
<code class="descname">network</code><em class="property"> = <windows.winobject.network.Network object at 0x06D0D3D0></em><a class="headerlink" href="#windows.winobject.system.System.network" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="descname">network</code><em class="property"> = <windows.winobject.network.Network object at 0x060C7210></em><a class="headerlink" href="#windows.winobject.system.System.network" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Object of class <a class="reference internal" href="network.html#windows.winobject.network.Network" title="windows.winobject.network.Network"><code class="xref py py-class docutils literal"><span class="pre">windows.winobject.network.Network</span></code></a></p>
|
||||
</dd></dl>
|
||||
|
||||
@@ -190,7 +190,7 @@ It also offers some submodules aimed to help the interfacing with <code class="d
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.system.System.registry">
|
||||
<code class="descname">registry</code><em class="property"> = <windows.winobject.registry.Registry object at 0x06D0D3F0></em><a class="headerlink" href="#windows.winobject.system.System.registry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="descname">registry</code><em class="property"> = <windows.winobject.registry.Registry object at 0x060C7230></em><a class="headerlink" href="#windows.winobject.system.System.registry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Object of class <a class="reference internal" href="registry.html#windows.winobject.registry.Registry" title="windows.winobject.registry.Registry"><code class="xref py py-class docutils literal"><span class="pre">windows.winobject.registry.Registry</span></code></a></p>
|
||||
</dd></dl>
|
||||
|
||||
@@ -274,12 +274,12 @@ It also offers some submodules aimed to help the interfacing with <code class="d
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.system.System.wmi">
|
||||
<code class="descname">wmi</code><a class="headerlink" href="#windows.winobject.system.System.wmi" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>An object to perform wmi request to “root\cimv2”</p>
|
||||
<dd><p>An object to perform wmi requests to various namespaces</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="wmi.html#windows.winobject.wmi.WmiRequester" title="windows.winobject.wmi.WmiRequester"><code class="xref py py-class docutils literal"><span class="pre">windows.winobject.wmi.WmiRequester</span></code></a></td>
|
||||
<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body"><a class="reference internal" href="wmi.html#windows.winobject.wmi.WmiManager" title="windows.winobject.wmi.WmiManager"><code class="xref py py-class docutils literal"><span class="pre">windows.winobject.wmi.WmiManager</span></code></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
Vendored
+53
@@ -65,6 +65,34 @@
|
||||
<dt id="windows.winobject.wmi.WmiRequester">
|
||||
<em class="property">class </em><code class="descclassname">windows.winobject.wmi.</code><code class="descname">WmiRequester</code><span class="sig-paren">(</span><em>target='root\cimv2'</em>, <em>user=None</em>, <em>password=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/wmi.html#WmiRequester"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.wmi.WmiRequester" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>An object to perform wmi request to <code class="docutils literal"><span class="pre">root\cimv2</span></code></p>
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.wmi.WmiRequester.classes">
|
||||
<code class="descname">classes</code><a class="headerlink" href="#windows.winobject.wmi.WmiRequester.classes" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The list of class available</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">Return type:</th><td class="field-body">list of str</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.winobject.wmi.WmiRequester.query">
|
||||
<code class="descname">query</code><span class="sig-paren">(</span><em>query</em>, <em>attrs='*'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/wmi.html#WmiRequester.query"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.wmi.WmiRequester.query" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Execute WMI <code class="docutils literal"><span class="pre">query</span></code> and return the attributes <code class="docutils literal"><span class="pre">attrs</span></code></p>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">list of dict</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="windows.winobject.wmi.WmiRequester.select">
|
||||
<code class="descname">select</code><span class="sig-paren">(</span><em>frm</em>, <em>attrs='*'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/windows/winobject/wmi.html#WmiRequester.select"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.wmi.WmiRequester.select" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -81,6 +109,31 @@
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="windows.winobject.wmi.WmiManager">
|
||||
<em class="property">class </em><code class="descclassname">windows.winobject.wmi.</code><code class="descname">WmiManager</code><a class="reference internal" href="_modules/windows/winobject/wmi.html#WmiManager"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#windows.winobject.wmi.WmiManager" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The main WMI class exposed, used to list and access differents WMI namespace, can be used as a dict to access
|
||||
<a href="#id1"><span class="problematic" id="id2">:cls:`WmiRequester`</span></a> by namespace</p>
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.wmi.WmiManager.namespaces">
|
||||
<code class="descname">namespaces</code><a class="headerlink" href="#windows.winobject.wmi.WmiManager.namespaces" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The list of available WMI namespaces</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.wmi.WmiManager.query">
|
||||
<code class="descname">query</code><a class="headerlink" href="#windows.winobject.wmi.WmiManager.query" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p><a class="reference internal" href="#windows.winobject.wmi.WmiRequester.query" title="windows.winobject.wmi.WmiRequester.query"><code class="xref py py-func docutils literal"><span class="pre">WmiRequester.query()</span></code></a> for default WMI namespace ‘root\cimv2’</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="windows.winobject.wmi.WmiManager.select">
|
||||
<code class="descname">select</code><a class="headerlink" href="#windows.winobject.wmi.WmiManager.select" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p><a class="reference internal" href="#windows.winobject.wmi.WmiRequester.select" title="windows.winobject.wmi.WmiRequester.select"><code class="xref py py-func docutils literal"><span class="pre">WmiRequester.select()</span></code></a> for default WMI namespace ‘root\cimv2’</p>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
+3814
File diff suppressed because it is too large
Load Diff
+5
-1
@@ -7,4 +7,8 @@ WMI -- Make request to WMI
|
||||
|
||||
See sample :ref:`wmi_request`
|
||||
|
||||
.. autoclass:: WmiRequester
|
||||
.. autoclass:: WmiRequester
|
||||
|
||||
.. autoclass:: WmiManager
|
||||
:no-inherited-members:
|
||||
:members: select, query, namespaces
|
||||
@@ -845,6 +845,10 @@ class CurrentProcess(Process):
|
||||
handle = winproxy.CreateThread(lpStartAddress=lpStartAddress, lpParameter=lpParameter, dwCreationFlags=dwCreationFlags)
|
||||
return WinThread._from_handle(handle)
|
||||
|
||||
def load_library(self, dll_path):
|
||||
"""Load the library in current process"""
|
||||
return winproxy.LoadLibraryA(dll_path)
|
||||
|
||||
def execute(self, code, parameter=0):
|
||||
"""Execute native code ``code`` in the current thread.
|
||||
|
||||
|
||||
@@ -81,10 +81,10 @@ class System(object):
|
||||
|
||||
@utils.fixedpropety
|
||||
def wmi(self):
|
||||
r"""An object to perform wmi request to "root\\cimv2"
|
||||
r"""An object to perform wmi requests to various namespaces
|
||||
|
||||
:type: :class:`windows.winobject.wmi.WmiRequester`"""
|
||||
return wmi.WmiRequester()
|
||||
:type: :class:`windows.winobject.wmi.WmiManager`"""
|
||||
return wmi.WmiManager()
|
||||
|
||||
#TODO: use GetComputerNameExA ? and recover other names ?
|
||||
@utils.fixedpropety
|
||||
|
||||
@@ -14,13 +14,8 @@ class WmiRequester(object):
|
||||
r"""An object to perform wmi request to ``root\cimv2``"""
|
||||
INSTANCE = None
|
||||
|
||||
def __new__(cls, *args, **kwargs):
|
||||
if cls.INSTANCE is not None:
|
||||
return cls.INSTANCE
|
||||
cls.INSTANCE = super(cls, cls).__new__(cls, *args, **kwargs)
|
||||
return cls.INSTANCE
|
||||
|
||||
def __init__(self, target="root\\cimv2", user=None, password=None):
|
||||
self.namespace = target
|
||||
locator = IWbemLocator()
|
||||
service = IWbemServices()
|
||||
#CLSID_WbemAdministrativeLocator_IID = windows.com.IID.from_string('CB8555CC-9128-11D1-AD9B-00C04FD8FDFF')
|
||||
@@ -34,11 +29,26 @@ class WmiRequester(object):
|
||||
def select(self, frm, attrs="*"):
|
||||
"""Select ``attrs`` from ``frm``
|
||||
|
||||
:rtype: list of dict
|
||||
"""
|
||||
return self.query("select * from {0}".format(frm), attrs)
|
||||
|
||||
@property
|
||||
def classes(self):
|
||||
"""The list of class available
|
||||
|
||||
:rtype: list of str
|
||||
"""
|
||||
return [x["__CLASS"] for x in self.query('SELECT * FROM meta_class', attrs=["__CLASS"])]
|
||||
|
||||
def query(self, query, attrs="*"):
|
||||
"""Execute WMI ``query`` and return the attributes ``attrs``
|
||||
|
||||
:rtype: list of dict
|
||||
"""
|
||||
enumerator = IEnumWbemClassObject()
|
||||
try:
|
||||
self.service.ExecQuery("WQL", "select * from {0}".format(frm), 0x20, 0, ctypes.byref(enumerator))
|
||||
self.service.ExecQuery("WQL", query, 0x20, 0, ctypes.byref(enumerator))
|
||||
except WindowsError as e:
|
||||
if (e.winerror & 0xffffffff) == WBEM_E_INVALID_CLASS:
|
||||
raise WindowsError(e.winerror, 'WBEM_E_INVALID_CLASS <Invalid WMI class "{0}">'.format(frm))
|
||||
@@ -56,7 +66,14 @@ class WmiRequester(object):
|
||||
if attrs == "*":
|
||||
attrs = [x for x in self.get_names(processor) if not x.startswith("__")]
|
||||
for name in attrs:
|
||||
processor.Get(name, 0, ctypes.byref(variant_res), None, None)
|
||||
try:
|
||||
processor.Get(name, 0, ctypes.byref(variant_res), None, None)
|
||||
except WindowsError as e:
|
||||
if (e.winerror & 0xffffffff) == WBEM_E_NOT_FOUND:
|
||||
raise WindowsError(e.winerror, 'WBEM_E_NOT_FOUND <Invalid Attribute "{0}">'.format(name))
|
||||
if (e.winerror & 0xffffffff) in WBEMSTATUS.values:
|
||||
raise WindowsError(e.winerror, WBEMSTATUS(e.winerror & 0xffffffff).value)
|
||||
raise
|
||||
# TODO: something clean and generic
|
||||
if variant_res.vt & VT_ARRAY:
|
||||
if variant_res.vt & VT_TYPEMASK == VT_BSTR:
|
||||
@@ -81,9 +98,47 @@ class WmiRequester(object):
|
||||
enumerator.Next(0xffffffff, 1, ctypes.byref(processor), ctypes.byref(count))
|
||||
return res
|
||||
|
||||
|
||||
def get_names(self, processor):
|
||||
res = POINTER(SAFEARRAY)()
|
||||
processor.GetNames(None, 0, None, byref(res))
|
||||
safe_array = ctypes.cast(res, POINTER(windows.com.ImprovedSAFEARRAY))[0]
|
||||
safe_array.elt_type = BSTR
|
||||
return safe_array.to_list()
|
||||
return safe_array.to_list()
|
||||
|
||||
|
||||
def __repr__(self):
|
||||
return """<{0} namespace="{1}">""".format(type(self).__name__, self.namespace)
|
||||
|
||||
class WmiManager(dict):
|
||||
"""The main WMI class exposed, used to list and access differents WMI namespace, can be used as a dict to access
|
||||
:cls:`WmiRequester` by namespace"""
|
||||
DEFAULT_NAMESPACE = "root\\cimv2"
|
||||
def __init__(self):
|
||||
self.wmi_requester_by_namespace = {}
|
||||
|
||||
@property
|
||||
def select(self):
|
||||
r""":func:`WmiRequester.select` for default WMI namespace 'root\\cimv2'"""
|
||||
return self[self.DEFAULT_NAMESPACE].select
|
||||
|
||||
@property
|
||||
def query(self):
|
||||
r""":func:`WmiRequester.query` for default WMI namespace 'root\\cimv2'"""
|
||||
return self[self.DEFAULT_NAMESPACE].query
|
||||
|
||||
def get_subnamespaces(self, root="root"):
|
||||
return [x["Name"] for x in self[root].select("__NameSpace", ["Name"])]
|
||||
|
||||
namespaces = property(get_subnamespaces)
|
||||
"""The list of available WMI namespaces"""
|
||||
|
||||
def _open_wmi_requester(self, namespace):
|
||||
return WmiRequester(namespace)
|
||||
|
||||
def __missing__(self, key):
|
||||
self[key] = self._open_wmi_requester(key)
|
||||
return self[key]
|
||||
|
||||
def __repr__(self):
|
||||
return object.__repr__(self)
|
||||
Reference in New Issue
Block a user