 <p>You code compiles because it is valid code. It fails at runtime because you are asking it to do something illegal. According to <a href="https://msdn.microsoft.com/en-us/library/aa394146(v=vs.85).aspx" rel="nofollow">MSDN</a>:</p> <blockquote> <p><strong>SetSpeed</strong> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Not implemented.</p> </blockquote> <p>That being the case, this line will fail:</p> <pre><code> ManagementBaseObject inParams = classInstance.GetMethodParameters("SetSpeed"); </code></pre> <p>If <code>SetSpeed</code> is <em>not implemented</em> (versus simply ignored) you will get an exception trying to retrieve params related to it. Remove the Try/Catch to verify which line it happens on.</p> <p>The manufacturer may have a utility which allows this, but it seems doubtful WMI will work. If you do find such a tool, you might want to evaluate the bool property <code>VariableSpeed</code> to see if variable speeds are even supported.</p>