Выходной буфер является GUID. Вы можете использовать это руководство для дополнительных вызовов функций Power * (то есть рекурсивного обхода дерева, запроса имен и значений параметров и т. Д.).
Например, следующий код перечисляет некоторые имена настроек из настроек питания диска в текущей схеме питания:
GUID *scheme;
if(ERROR_SUCCESS == PowerGetActiveScheme(NULL, &scheme))
{
GUID buffer;
DWORD bufferSize = sizeof(buffer);
for(int index = 0; ; index++)
{
if(ERROR_SUCCESS == PowerEnumerate(
NULL,
scheme,
&GUID_DISK_SUBGROUP,
ACCESS_INDIVIDUAL_SETTING,
index,
(UCHAR*)&buffer,
&bufferSize))
{
UCHAR displayBuffer[1024];
DWORD displayBufferSize = sizeof(displayBuffer);
if(ERROR_SUCCESS == PowerReadFriendlyName(
NULL,
scheme,
&GUID_DISK_SUBGROUP,
&buffer,
displayBuffer,
&displayBufferSize))
{
wprintf(L"%s\n", (wchar_t*)displayBuffer);
}
}
}
}
Как видите шаги:
- получить текущую схему питания
- перечислить настройки диска в текущей схеме
- выводит понятное имя для каждого перечисленного параметра
На моей машине вывод:
Turn off hard disk after
Hard disk burst ignore time
Надеюсь, это поможет вам указать правильное направление.
Это не код качества производства, который предпочитает малый размер и оптимистичный размер буфера над надежностью.