mirror of
https://github.com/hakril/PythonForWindows
synced 2026-06-08 14:31:45 +00:00
689 lines
79 KiB
HTML
689 lines
79 KiB
HTML
<!DOCTYPE html>
|
|
|
|
<html lang="en" data-content_root="../../../">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>windows.winobject.wmi — PythonForWindows 1.0.3 documentation</title>
|
|
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=fa44fd50" />
|
|
<link rel="stylesheet" type="text/css" href="../../../_static/classic.css?v=def86cc0" />
|
|
<link rel="stylesheet" type="text/css" href="../../../_static/css/mbasic.css?v=957880af" />
|
|
|
|
<script src="../../../_static/documentation_options.js?v=baaebd52"></script>
|
|
<script src="../../../_static/doctools.js?v=9a2dae69"></script>
|
|
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
|
|
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
|
<link rel="search" title="Search" href="../../../search.html" />
|
|
</head><body>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../../genindex.html" title="General Index"
|
|
accesskey="I">index</a></li>
|
|
<li class="right" >
|
|
<a href="../../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.3 documentation</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">windows.winobject.wmi</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="document">
|
|
<div class="documentwrapper">
|
|
<div class="bodywrapper">
|
|
<div class="body" role="main">
|
|
|
|
<h1>Source code for windows.winobject.wmi</h1><div class="highlight"><pre>
|
|
<span></span><span class="kn">import</span> <span class="nn">windows</span>
|
|
<span class="kn">import</span> <span class="nn">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="kn">import</span> <span class="n">partial</span>
|
|
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">namedtuple</span>
|
|
|
|
<span class="kn">from</span> <span class="nn">ctypes.wintypes</span> <span class="kn">import</span> <span class="o">*</span>
|
|
|
|
<span class="kn">import</span> <span class="nn">windows.com</span>
|
|
<span class="kn">import</span> <span class="nn">windows.generated_def</span> <span class="k">as</span> <span class="nn">gdef</span>
|
|
<span class="kn">from</span> <span class="nn">windows.generated_def.winstructs</span> <span class="kn">import</span> <span class="o">*</span>
|
|
|
|
<span class="kn">from</span> <span class="nn">windows.pycompat</span> <span class="kn">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>
|
|
<span class="k">class</span> <span class="nc">WmiComInterface</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Base class used for COM call error checking for WMI interfaces"""</span>
|
|
<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="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="nb">repr</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="w"> </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="w"> </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">"name"</span><span class="p">,</span> <span class="s2">"inparam"</span><span class="p">,</span> <span class="s2">"outparam"</span><span class="p">])</span>
|
|
|
|
<span class="c1"># https://docs.microsoft.com/en-us/windows/desktop/WmiSdk/calling-a-method</span>
|
|
<div class="viewcode-block" id="WmiObject">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiObject">[docs]</a>
|
|
<span class="k">class</span> <span class="nc">WmiObject</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">WmiComInterface</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""The WmiObject (which wrap ``IWbemClassObject``) contains and manipulates both class definitions and class object instances.</span>
|
|
<span class="sd"> Can be used as a mapping to access properties.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<div class="viewcode-block" id="WmiObject.get_variant">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiObject.get_variant">[docs]</a>
|
|
<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="w"> </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="kc">None</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">variant_res</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="WmiObject.get">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiObject.get">[docs]</a>
|
|
<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="w"> </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">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></div>
|
|
|
|
|
|
<div class="viewcode-block" id="WmiObject.get_method">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiObject.get_method">[docs]</a>
|
|
<span class="k">def</span> <span class="nf">get_method</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="w"> </span><span class="sd">"""Return the information about the method ``name``</span>
|
|
|
|
<span class="sd"> :returns: :class:`WmiMethod`</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">inpararm</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="n">outpararm</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="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">GetMethod</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">inpararm</span><span class="p">,</span> <span class="n">outpararm</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">WmiMethod</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">inpararm</span><span class="p">,</span> <span class="n">outpararm</span><span class="p">)</span></div>
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">get_text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
|
<span class="n">text</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">GetObjectText</span><span class="p">(</span><span class="n">flags</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">text</span><span class="o">.</span><span class="n">value</span>
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">put_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="n">variant</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">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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">Put</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</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
|
|
|
<div class="viewcode-block" id="WmiObject.put">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiObject.put">[docs]</a>
|
|
<span class="k">def</span> <span class="nf">put</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="w"> </span><span class="sd">"""Set the property ``name`` to ``value``"""</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">gdef</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">):</span>
|
|
<span class="n">variant_value</span> <span class="o">=</span> <span class="n">value</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">variant_value</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="n">value</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">put_variant</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">variant_value</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="WmiObject.spawn_instance">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiObject.spawn_instance">[docs]</a>
|
|
<span class="k">def</span> <span class="nf">spawn_instance</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Create a new object of the class represented by the current :class:`WmiObject`</span>
|
|
|
|
<span class="sd"> :returns: :class:`WmiObject`</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">instance</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="bp">self</span><span class="o">.</span><span class="n">SpawnInstance</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">instance</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">instance</span></div>
|
|
|
|
|
|
<span class="nd">@property</span>
|
|
<span class="k">def</span> <span class="nf">genus</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""The genus of the object.</span>
|
|
|
|
<span class="sd"> :returns: ``WBEM_GENUS_CLASS(0x1L)`` if the :class:`WmiObject` is a Class and ``WBEM_GENUS_INSTANCE(0x2L)`` for instances and events.</span>
|
|
<span class="sd"> """</span>
|
|
<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="w"> </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>
|
|
|
|
<span class="sd"> :returns: [:class:`str`] -- A list of string</span>
|
|
|
|
<span class="sd"> .. note:</span>
|
|
|
|
<span class="sd"> About system properties: https://docs.microsoft.com/en-us/windows/desktop/wmisdk/wmi-system-properties</span>
|
|
<span class="sd"> """</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="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">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">if</span> <span class="n">system_properties</span> <span class="ow">or</span> <span class="p">(</span><span class="ow">not</span> <span class="n">p</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">return</span> <span class="n">properties</span></div>
|
|
|
|
|
|
<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="k">def</span> <span class="nf">get_methods</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">BeginMethodEnumeration</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
|
<span class="n">methods</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
|
|
<span class="n">name</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="n">inpararm</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="n">outpararm</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">NextMethod</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">inpararm</span><span class="p">,</span> <span class="n">outpararm</span><span class="p">)</span> <span class="o">==</span> <span class="n">gdef</span><span class="o">.</span><span class="n">WBEM_S_NO_MORE_DATA</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">EndMethodEnumeration</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="n">methods</span>
|
|
<span class="n">namestr</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">value</span>
|
|
<span class="n">methods</span><span class="p">[</span><span class="n">namestr</span><span class="p">]</span> <span class="o">=</span> <span class="n">WmiMethod</span><span class="p">(</span><span class="n">namestr</span><span class="p">,</span> <span class="n">inpararm</span><span class="p">,</span> <span class="n">outpararm</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">SysFreeString</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="k">del</span> <span class="n">name</span>
|
|
|
|
<span class="n">methods</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_methods</span><span class="p">)</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>
|
|
<span class="w"> </span><span class="sd">"""The properties of the object (include system properties)"""</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_properties</span><span class="p">(</span><span class="n">system_properties</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
|
|
|
|
|
|
<span class="fm">__getitem__</span> <span class="o">=</span> <span class="n">get</span>
|
|
<span class="fm">__setitem__</span> <span class="o">=</span> <span class="n">put</span>
|
|
|
|
<span class="k">def</span> <span class="nf">items</span><span class="p">(</span><span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">))</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">]</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="c1"># Not sur anyone will use this but keep the dict interface</span>
|
|
<span class="k">return</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="bp">self</span><span class="o">.</span><span class="n">items</span><span class="p">()]</span>
|
|
|
|
<span class="c1">## Make it callable like any class :D</span>
|
|
<span class="fm">__call__</span> <span class="o">=</span> <span class="n">spawn_instance</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="p">:</span>
|
|
<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>
|
|
|
|
<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="si">{1}</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>
|
|
|
|
|
|
|
|
<span class="k">class</span> <span class="nc">WmiTextSrc</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">IWbemObjectTextSrc</span><span class="p">,</span> <span class="n">WmiComInterface</span><span class="p">):</span>
|
|
<span class="n">CLSID_WbemObjectTextSrc</span> <span class="o">=</span> <span class="s2">"8D1C559D-84F0-4bb3-A7D5-56A7435A9BA6"</span> <span class="c1"># CLSID_WbemObjectTextSrc</span>
|
|
|
|
|
|
<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="bp">self</span> <span class="o">=</span> <span class="bp">cls</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">create_instance</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">CLSID_WbemObjectTextSrc</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">get_text</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">textformat</span><span class="p">):</span>
|
|
<span class="n">btext</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">GetText</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">textformat</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">btext</span><span class="p">)</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="n">btext</span><span class="o">.</span><span class="n">value</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"TODO: SysFreeString"</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">result</span>
|
|
|
|
|
|
<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>
|
|
<span class="w"> </span><span class="sd">"""Represent an enumeration of object that can be itered"""</span>
|
|
<span class="n">DEFAULT_TIMEOUT</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">WBEM_INFINITE</span> <span class="c1">#: The default timeout</span>
|
|
|
|
<div class="viewcode-block" id="WmiEnumeration.next">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiEnumeration.next">[docs]</a>
|
|
<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="n">timeout</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Return the next object in the enumeration with `timeout`.</span>
|
|
|
|
<span class="sd"> :raises: ``WindowsError(WBEM_S_TIMEDOUT)`` if timeout expire</span>
|
|
<span class="sd"> :returns: :class:`WmiObject`</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">timeout</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_TIMEOUT</span> <span class="k">if</span> <span class="n">timeout</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">timeout</span>
|
|
<span class="c1"># For now the count is hardcoded to 1</span>
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="n">WmiObject</span><span class="p">()</span>
|
|
<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="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>
|
|
<span class="k">return</span> <span class="n">obj</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="WmiEnumeration.__iter__">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiEnumeration.__iter__">[docs]</a>
|
|
<span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Return an iterator with ``DEFAULT_TIMEOUT``"""</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">iter_timeout</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_TIMEOUT</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="WmiEnumeration.iter_timeout">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiEnumeration.iter_timeout">[docs]</a>
|
|
<span class="k">def</span> <span class="nf">iter_timeout</span><span class="p">(</span><span class="bp">self</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="w"> </span><span class="sd">"""Return an iterator with a custom ``timeout``"""</span>
|
|
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
|
|
<span class="n">obj</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="k">if</span> <span class="n">obj</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="k">yield</span> <span class="n">obj</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="WmiEnumeration.all">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiEnumeration.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="w"> </span><span class="sd">"""Return all elements in the enumeration as a list</span>
|
|
|
|
<span class="sd"> :returns: [:class:`WmiObject`] - A list of :class:`WmiObject`</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="c1"># SqlAlchemy like :)</span></div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="viewcode-block" id="WmiCallResult">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiCallResult">[docs]</a>
|
|
<span class="k">class</span> <span class="nc">WmiCallResult</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">IWbemCallResult</span><span class="p">,</span> <span class="n">WmiComInterface</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""The result of a WMI call/query. Real result value type depends of the context"""</span>
|
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">result_type</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">namespace_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">result_type</span> <span class="o">=</span> <span class="n">result_type</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">namespace_name</span> <span class="o">=</span> <span class="n">namespace_name</span>
|
|
|
|
<div class="viewcode-block" id="WmiCallResult.get_call_status">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiCallResult.get_call_status">[docs]</a>
|
|
<span class="k">def</span> <span class="nf">get_call_status</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">WBEM_INFINITE</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""The status of the call"""</span>
|
|
<span class="n">status</span> <span class="o">=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">LONG</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">GetCallStatus</span><span class="p">(</span><span class="n">timeout</span><span class="p">,</span> <span class="n">status</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">WBEMSTATUS</span><span class="o">.</span><span class="n">mapper</span><span class="p">[</span><span class="n">status</span><span class="o">.</span><span class="n">value</span> <span class="o">&</span> <span class="mh">0xffffffff</span><span class="p">]</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="WmiCallResult.get_result_object">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiCallResult.get_result_object">[docs]</a>
|
|
<span class="k">def</span> <span class="nf">get_result_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">WBEM_INFINITE</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""The result as a :class:`WmiObject` (returned by :func:`WmiNamespace.exec_method`)"""</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="n">WmiObject</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">GetResultObject</span><span class="p">(</span><span class="n">timeout</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">result</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="WmiCallResult.get_result_string">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiCallResult.get_result_string">[docs]</a>
|
|
<span class="k">def</span> <span class="nf">get_result_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">WBEM_INFINITE</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""The result as a :class:`WmiObject` (returned by :func:`WmiNamespace.put_instance`)"""</span>
|
|
<span class="n">result</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">GetResultString</span><span class="p">(</span><span class="n">timeout</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">result</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="WmiCallResult.get_result_service">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiCallResult.get_result_service">[docs]</a>
|
|
<span class="k">def</span> <span class="nf">get_result_service</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="n">gdef</span><span class="o">.</span><span class="n">WBEM_INFINITE</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""The result as a :class:`WmiNamespace` (not used yet)"""</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="n">WmiNamespace</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">GetResultServices</span><span class="p">(</span><span class="n">timeout</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">result</span></div>
|
|
|
|
|
|
<span class="nd">@property</span>
|
|
<span class="k">def</span> <span class="nf">result</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""The result of the correct type based on ``self.result_type``"""</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">result_type</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Cannot call <result> with no result_type"</span><span class="p">)</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="s2">"get_result_"</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">result_type</span><span class="p">)()</span></div>
|
|
|
|
|
|
|
|
<span class="k">class</span> <span class="nc">WmiLocator</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">IWbemLocator</span><span class="p">,</span> <span class="n">WmiComInterface</span><span class="p">):</span>
|
|
<span class="k">pass</span> <span class="c1"># Just for the WMI errcheck callback</span>
|
|
|
|
|
|
<span class="c1"># !TEST CODE</span>
|
|
<div class="viewcode-block" id="WmiNamespace">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiNamespace">[docs]</a>
|
|
<span class="k">class</span> <span class="nc">WmiNamespace</span><span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">IWbemServices</span><span class="p">,</span> <span class="n">WmiComInterface</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sa">r</span><span class="sd">"""An object to perform wmi request to a given ``namespace``"""</span>
|
|
|
|
<span class="c1">#CLSID_WbemAdministrativeLocator_IID = windows.com.IID.from_string('CB8555CC-9128-11D1-AD9B-00C04FD8FDFF')</span>
|
|
<span class="n">WbemLocator_CLSID</span> <span class="o">=</span> <span class="n">windows</span><span class="o">.</span><span class="n">com</span><span class="o">.</span><span class="n">IID</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="s1">'4590F811-1D3A-11D0-891F-00AA004B2E24'</span><span class="p">)</span>
|
|
|
|
<span class="n">DEFAULT_ENUM_FLAGS</span> <span class="o">=</span> <span class="p">(</span><span class="n">gdef</span><span class="o">.</span><span class="n">WBEM_FLAG_RETURN_IMMEDIATELY</span> <span class="o">|</span>
|
|
<span class="n">WBEM_FLAG_FORWARD_ONLY</span><span class="p">)</span> <span class="c1">#: The defauls flags used for enumeration. ``(WBEM_FLAG_RETURN_IMMEDIATELY | WBEM_FLAG_FORWARD_ONLY)``</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__init__</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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">namespace</span>
|
|
|
|
<div class="viewcode-block" id="WmiNamespace.connect">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiNamespace.connect">[docs]</a>
|
|
<span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">connect</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">namespace</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="w"> </span><span class="sd">"""Connect to ``namespace`` using ``user`` and ``password`` for authentification if given</span>
|
|
|
|
<span class="sd"> :return: :class:`WmiNamespace` - The connected :class:`WmiNamespace`"""</span>
|
|
<span class="c1"># this method assert com is initialised</span>
|
|
<span class="bp">self</span> <span class="o">=</span> <span class="bp">cls</span><span class="p">(</span><span class="n">namespace</span><span class="p">)</span> <span class="c1"># IWbemServices subclass</span>
|
|
<span class="n">locator</span> <span class="o">=</span> <span class="n">WmiLocator</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">create_instance</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">WbemLocator_CLSID</span><span class="p">,</span> <span class="n">locator</span><span class="p">)</span>
|
|
<span class="n">locator</span><span class="o">.</span><span class="n">ConnectServer</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="n">user</span><span class="p">,</span> <span class="n">password</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">WBEM_FLAG_CONNECT_USE_MAX_WAIT</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="bp">self</span><span class="p">)</span>
|
|
<span class="n">locator</span><span class="o">.</span><span class="n">Release</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="bp">self</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="WmiNamespace.query">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiNamespace.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="w"> </span><span class="sd">"""Return the list of :class:`WmiObject` matching ``query``.</span>
|
|
|
|
<span class="sd"> This API is the `simple one`, if you need timeout or complexe feature see :func:`exec_query`</span>
|
|
|
|
<span class="sd"> :return: [:class:`WmiObject`] - A list of :class:`WmiObject`</span>
|
|
<span class="sd"> """</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">exec_query</span><span class="p">(</span><span class="n">query</span><span class="p">))</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="WmiNamespace.select">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiNamespace.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">clsname</span><span class="p">,</span> <span class="n">deep</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Return the list of :class:`WmiObject` that are instance of ``clsname``. Deep has the same meaning as in :func:`create_instance_enum`.</span>
|
|
|
|
<span class="sd"> This API is the `simple one`, if you need timeout or complexe feature see :func:`create_instance_enum`</span>
|
|
|
|
<span class="sd"> :return: [:class:`WmiObject`] - A list of :class:`WmiObject`</span>
|
|
<span class="sd"> """</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">create_instance_enum</span><span class="p">(</span><span class="n">clsname</span><span class="p">,</span> <span class="n">deep</span><span class="o">=</span><span class="n">deep</span><span class="p">))</span></div>
|
|
|
|
|
|
|
|
<div class="viewcode-block" id="WmiNamespace.exec_query">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiNamespace.exec_query">[docs]</a>
|
|
<span class="k">def</span> <span class="nf">exec_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">flags</span><span class="o">=</span><span class="n">DEFAULT_ENUM_FLAGS</span><span class="p">,</span> <span class="n">ctx</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Execute a WQL query with custom flags and returns a ::class:`WmiEnumeration` that can be used to</span>
|
|
<span class="sd"> iter the result with timeouts</span>
|
|
|
|
<span class="sd"> :returns: :class:`WmiEnumeration`</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">enumerator</span> <span class="o">=</span> <span class="n">WmiEnumeration</span><span class="p">()</span>
|
|
<span class="bp">self</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="n">flags</span><span class="p">,</span> <span class="n">ctx</span><span class="p">,</span> <span class="n">enumerator</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">enumerator</span></div>
|
|
|
|
|
|
<span class="c1"># Create friendly name for create_class_enum & create_instance_enum ?</span>
|
|
|
|
<div class="viewcode-block" id="WmiNamespace.create_class_enum">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiNamespace.create_class_enum">[docs]</a>
|
|
<span class="k">def</span> <span class="nf">create_class_enum</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">superclass</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">DEFAULT_ENUM_FLAGS</span><span class="p">,</span> <span class="n">deep</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Enumerate the classes in the ``namespace`` that match ``superclass``.</span>
|
|
<span class="sd"> if ``superclass`` is None will enumerate all top-level class. ``deep`` allow to returns all subclasses</span>
|
|
|
|
<span class="sd"> :returns: :class:`WmiEnumeration`</span>
|
|
|
|
<span class="sd"> .. note::</span>
|
|
|
|
<span class="sd"> See https://docs.microsoft.com/en-us/windows/desktop/api/wbemcli/nf-wbemcli-iwbemservices-createclassenum</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">flags</span> <span class="o">|=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">WBEM_FLAG_DEEP</span> <span class="k">if</span> <span class="n">deep</span> <span class="k">else</span> <span class="n">gdef</span><span class="o">.</span><span class="n">WBEM_FLAG_SHALLOW</span>
|
|
<span class="n">enumerator</span> <span class="o">=</span> <span class="n">WmiEnumeration</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">CreateClassEnum</span><span class="p">(</span><span class="n">superclass</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">enumerator</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">enumerator</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="w"> </span><span class="sd">"""The list of classes in the namespace. This a a wrapper arround :func:`create_class_enum`.</span>
|
|
|
|
<span class="sd"> :return: [:class:`WmiObject`] - A list of :class:`WmiObject`</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_class_enum</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">deep</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
|
|
<div class="viewcode-block" id="WmiNamespace.create_instance_enum">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiNamespace.create_instance_enum">[docs]</a>
|
|
<span class="k">def</span> <span class="nf">create_instance_enum</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">clsname</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">DEFAULT_ENUM_FLAGS</span><span class="p">,</span> <span class="n">deep</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Enumerate the instances of ``clsname``. Deep allows to enumerate the instance of subclasses as well</span>
|
|
|
|
<span class="sd"> :returns: :class:`WmiEnumeration`</span>
|
|
|
|
<span class="sd"> Example:</span>
|
|
<span class="sd"> >>> windows.system.wmi["root\\subscription"].create_instance_enum("__EventConsumer", deep=False).all()</span>
|
|
<span class="sd"> []</span>
|
|
<span class="sd"> >>> windows.system.wmi["root\\subscription"].create_instance_enum("__EventConsumer", deep=True).all()</span>
|
|
<span class="sd"> [<WmiObject instance of "NTEventLogEventConsumer">]</span>
|
|
|
|
<span class="sd"> .. note::</span>
|
|
|
|
<span class="sd"> See https://docs.microsoft.com/en-us/windows/desktop/api/wbemcli/nf-wbemcli-iwbemservices-createinstanceenum</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">flags</span> <span class="o">|=</span> <span class="n">gdef</span><span class="o">.</span><span class="n">WBEM_FLAG_DEEP</span> <span class="k">if</span> <span class="n">deep</span> <span class="k">else</span> <span class="n">gdef</span><span class="o">.</span><span class="n">WBEM_FLAG_SHALLOW</span>
|
|
<span class="n">enumerator</span> <span class="o">=</span> <span class="n">WmiEnumeration</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">CreateInstanceEnum</span><span class="p">(</span><span class="n">clsname</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">enumerator</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">enumerator</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="WmiNamespace.get_object">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiNamespace.get_object">[docs]</a>
|
|
<span class="k">def</span> <span class="nf">get_object</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="w"> </span><span class="sd">"""Return the object matching ``path``. If ``path`` is a class name return the class object``</span>
|
|
|
|
<span class="sd"> :return: :class:`WmiObject`</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="n">WmiObject</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">GetObject</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">gdef</span><span class="o">.</span><span class="n">WBEM_FLAG_RETURN_WBEM_COMPLETE</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="k">return</span> <span class="n">result</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="WmiNamespace.put_instance">
|
|
<a class="viewcode-back" href="../../../wmi.html#windows.winobject.wmi.WmiNamespace.put_instance">[docs]</a>
|
|
<span class="k">def</span> <span class="nf">put_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="n">gdef</span><span class="o">.</span><span class="n">WBEM_FLAG_CREATE_ONLY</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Creates or updates an instance of an existing class in the namespace</span>
|
|
|
|
<span class="sd"> :return: :class:`WmiCallResult` ``(string)`` - Used to retrieve the string representing the path of the object created/updated</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">res</span> <span class="o">=</span> <span class="n">WmiCallResult</span><span class="p">(</span><span class="n">result_type</span><span class="o">=</span><span class="s2">"string"</span><span class="p">)</span>
|
|
<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="w"> </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="w"> </span><span class="sd">"""Exec method named on ``object`` with ``inparam``.</span>
|
|
|
|
<span class="sd"> :params obj: The :class:`WmiObject` or path of the object the call apply to</span>
|
|
<span class="sd"> :params method: The name of the method to call on the object</span>
|
|
<span class="sd"> :params inparam: The :class:`WmiObject` representing the input parameters and retrieve using :func:`WmiObject.get_method`</span>
|
|
|
|
<span class="sd"> :returns: :class:`WmiCallResult` ``(object)`` if flag `WBEM_FLAG_RETURN_IMMEDIATELY` was passed</span>
|
|
<span class="sd"> :returns: :class:`WmiObject` the outparam object if flag `WBEM_FLAG_RETURN_IMMEDIATELY` was NOT passed</span>
|
|
|
|
<span class="sd"> .. note::</span>
|
|
|
|
<span class="sd"> This API will lakely change to better wrap with WmiObject/inparam/Dict & co</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">flags</span> <span class="o">&</span> <span class="n">gdef</span><span class="o">.</span><span class="n">WBEM_FLAG_RETURN_IMMEDIATELY</span><span class="p">:</span>
|
|
<span class="c1"># semisynchronous call -> WmiCallResult</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="n">WmiCallResult</span><span class="p">(</span><span class="n">result_type</span><span class="o">=</span><span class="s2">"object"</span><span class="p">)</span>
|
|
<span class="n">outparam</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># Synchronous call -> WmiObject (outparam)</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">outparam</span> <span class="o">=</span> <span class="n">WmiObject</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</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">obj</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"__Path"</span><span class="p">)</span>
|
|
<span class="c1"># Flags 0 -> synchronous call</span>
|
|
<span class="c1"># No WmiCallResult result is directly in outparam</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">ExecMethod</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="mi">0</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">inparam</span><span class="p">,</span> <span class="n">outparam</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">outparam</span> <span class="ow">or</span> <span class="n">result</span></div>
|
|
|
|
|
|
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="n">null</span> <span class="o">=</span> <span class="s2">""</span> <span class="k">if</span> <span class="bp">self</span> <span class="k">else</span> <span class="s2">" (NULL)"</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="n">null</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="w"> </span><span class="sa">r</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"> :class:`WmiNamespace` by name</span>
|
|
|
|
<span class="sd"> Example:</span>
|
|
<span class="sd"> >>> windows.system.wmi[r"root\SecurityCenter2"]</span>
|
|
<span class="sd"> <WmiNamespace "root\SecurityCenter2"></span>
|
|
<span class="sd"> """</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="c1">#: The default namespace for :func:`select` & :func:`query`</span>
|
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="c1"># Someone is going to use wmi: let's init com !</span>
|
|
<span class="n">windows</span><span class="o">.</span><span class="n">com</span><span class="o">.</span><span class="n">init</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">default_namespace</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="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_NAMESPACE</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="w"> </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="o">.</span><span class="n">default_namespace</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="w"> </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="o">.</span><span class="n">default_namespace</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="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="w"> </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">WmiNamespace</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">namespace</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__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="fm">__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 class="clearer"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
<div class="sphinxsidebarwrapper">
|
|
<search id="searchbox" style="display: none" role="search">
|
|
<h3 id="searchlabel">Quick search</h3>
|
|
<div class="searchformwrapper">
|
|
<form class="search" action="../../../search.html" method="get">
|
|
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
|
<input type="submit" value="Go" />
|
|
</form>
|
|
</div>
|
|
</search>
|
|
<script>document.getElementById('searchbox').style.display = "block"</script>
|
|
</div>
|
|
</div>
|
|
<div class="clearer"></div>
|
|
</div>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../../genindex.html" title="General Index"
|
|
>index</a></li>
|
|
<li class="right" >
|
|
<a href="../../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../../index.html">PythonForWindows 1.0.3 documentation</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">windows.winobject.wmi</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="footer" role="contentinfo">
|
|
© Copyright 2015-2020, Clement Rouault.
|
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7.
|
|
</div>
|
|
</body>
|
|
</html> |