> An error code different from 0 may not necessarily means that
> device is not connected as a different code can be returned.

I have two arguments for this simple implementation:

First this is exactly what the `GetState` overload does:

```
        /// <summary>
        /// Gets the state.
        /// </summary>
        /// <param name="state">The state of this controller.</param>
        /// <returns><c>true</c> if the controller is connected, <c>false</c> otherwise.</returns>
        public bool GetState(out State state)
        {
            return XInput.XInputGetState((int)userIndex, out state) == 0;
        }
```

So if it is good enough for `GetState` it should be fine in `GetCapabilities`.  If this should throw exceptions... then so should it.

Still what would one do with anything other than success or disconnected here?  If you look at the docs for XInputGetCapabilities it says:

  "If the function fails, the return value is an error code defined in Winerror.h."
  http://msdn.microsoft.com/en-us/library/microsoft.directx_sdk.reference.xinputgetcapabilities(v=vs.85).aspx

Usually these are the garbage errors that rarely are helpful to anyone.  If this returns `ERROR_ACCESS_DENIED` or `ERROR_NOT_READY` what would one do?  I suspect most people will write code like this:

```
try
{
   Capabilities capabilities;
   if (!myController.GetCapabilities(DeviceQueryType.Any, out capabilities))
   {
      // The device is disconnected!
     return false;
   }
}
catch (Exception)
{
   // Something failed, no way to recover or fix, so consider it disconnected.
   return false;
}
```

It seems adding exceptions here would only complicate things...  either the device is working or it is not.