我想创建一个Metro应用程序,用于学习和个人消费,以执行各种低级设备API工作,例如跟踪功耗,枚举进程和计算每个进程的CPU使用率等等。不幸的是,这些Metro应用程序禁止使用桌面API。
我首次尝试解决此问题的方法是创建一个非Windows商店C ++库,其中WINAPI_FAMILY
变量设置正确,以便使用QueryIdleProcessorCycleTime()
和CallNtPowerInformation()
等函数。不幸的是,当我在第一个参数中传递ProcessorInformation
标记并使用STATUS_ACCESS_DENIED
返回码时,后一个函数调用失败。
有趣的是,当CallNtPowerInformation()
作为第一个参数时,SystemBatteryState
工作正常,所以我想在运行Metro应用程序获取处理器信息时,我缺少某种访问权限。我读到Metro应用程序是使用quite restricted privileges运行的,因此我正在寻找一种方法来增加这些权限以允许我的API调用正常运行。为了测试它是进程权限而不是编码错误,我使用了来自控制台应用程序的C ++库,一切正常。
我真的不想创建第二个桌面后台进程来完成所有脏工作并通过套接字将结果传递给Metro应用程序。我意识到这可以工作,但我宁愿将所有东西放在同一个处理空间中。