我真的很努力在 C# 中使用CallNtPowerInformation函数。我需要获取 Windows SystemExecutionState。(此处列出的可能值)。
我找到了合适的 C# 签名:
[DllImport("powrprof.dll", SetLastError = true)]
private static extern UInt32 CallNtPowerInformation(
Int32 InformationLevel,
IntPtr lpInputBuffer,
UInt32 nInputBufferSize,
IntPtr lpOutputBuffer,
UInt32 nOutputBufferSize
);
现在我需要使用信息级别 16 来读取“SystemExecutionState”。这是我到目前为止的代码:
IntPtr status = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(ulong)));
UInt32 returnValue = CallNtPowerInformation(
16,
(IntPtr)null,
0,
status, (
UInt32)Marshal.SizeOf(typeof(ulong)));
Marshal.FreeCoTaskMem(status);
根据微软文档:
lpOutputBuffer 缓冲区接收一个包含系统执行状态缓冲区的 ULONG 值。
如何从 IntPtr 获取 ULONG 值?