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()); }