public HidCapabilities GetCapabilities(SafeFileHandle handle) { if (handle == null) { throw new ArgumentNullException($"{nameof(handle)} is null"); } IntPtr preparsedData = IntPtr.Zero; HidCapabilities capabilities = new HidCapabilities(); var preParseResult = NativeMethods.HidD_GetPreparsedData(handle, ref preparsedData); if (!preParseResult) { throw new GetHidCapabilitiesException($"Could not get pre-parsed data by this {nameof(handle)}: {handle}"); } bool isGetCaps = false; //HIDP_CAPS caps = new HIDP_CAPS(); using (SafePreParsedDataHandle preParsedDataHandle = new SafePreParsedDataHandle(preparsedData, this)) { var getCapResult = NativeMethods.HidP_GetCaps(preParsedDataHandle, capabilities); // Return value is HIDP_STATUS_SUCCESS or HIDP_STATUS_INVALID_PREPARSED_DATA // https://docs.microsoft.com/windows-hardware/drivers/ddi/hidpi/nf-hidpi-hidp_getbuttoncaps isGetCaps = getCapResult == NativeMethods.HIDP_STATUS.SUCCESS; } if (!isGetCaps) { throw new GetHidCapabilitiesException($"Could not get capabilities by this {nameof(handle)}: {handle}"); } return(capabilities); }
internal static extern HIDP_STATUS HidP_GetCaps(SafePreParsedDataHandle preparsedData, [MarshalAs(UnmanagedType.LPStruct), In, Out] HidCapabilities capabilities);