0

PInvoke と .Net4.5 を使用して、バッテリー デバイス情報 (バッテリー デバイスの列挙の行) にアクセスしようとしています。私は 1 つの WPF アプリケーションを正常に動作させており、あらゆる種類の低レベルのバッテリー情報を取得できます。

現在、同じアプリを WinRT モダン アプリに変更しようとしています。SetupDiEnumDeviceInterfaces、SetupDiGetDeviceInterfaceDetail などの Win32 API は、WinRT 内で適切に機能します。しかし、CreateFile に関しては、無効なハンドル (-1) を取得しており、Marshal.GetLastWin32Error() は 1008 (Error_No_Token) を返しています。Marshal.GetHRForLastWin32Error().ToString() は「-2147023888」を与えています

WinRT で PIvoke 経由で CreateFile を使用する方法はありますか?

[DllImport ("kernel32.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
    internal static extern IntPtr CreateFile(
      string lpFileName,
      uint dwDesiredAccess,
      uint dwShareMode,
      IntPtr SecurityAttributes,
      uint dwCreationDisposition,
      uint dwFlagsAndAttributes,
      IntPtr hTemplateFile
      );

   //var hBattery = NativeMethods.CreateFile (devicePath, FileAccess.ReadWrite, FileShare.ReadWrite, IntPtr.Zero, FileMode.Open, FileAttributes.Normal, IntPtr.Zero);
    var hBattery = NativeMethods.CreateFile (devicePath, 3, 3, IntPtr.Zero, 3, 128, IntPtr.Zero);
    if ( hBattery == new IntPtr (-1) )
    { throw new System.Exception(Marshal.GetHRForLastWin32Error().ToString()); }
4

1 に答える 1