Какие структуры / данные возвращает функция PowerEnumerate - PullRequest
2 голосов
/ 08 июня 2009

Документация для нового Vista API гласит, что функцию PowerEnumerate можно использовать для перечисления схем управления питанием, настроек схемы и большого количества информации. Последние два параметра - это Buffer и BufferSize, что неясно, какие структуры или расположение данных / формат используется для данных, которые возвращаются в буфер API?

1 Ответ

3 голосов
/ 12 июня 2009

Выходной буфер является 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);
            }
        }
    }
}

Как видите шаги:

  1. получить текущую схему питания
  2. перечислить настройки диска в текущей схеме
  3. выводит понятное имя для каждого перечисленного параметра

На моей машине вывод:

Turn off hard disk after
Hard disk burst ignore time

Надеюсь, это поможет вам указать правильное направление.

Это не код качества производства, который предпочитает малый размер и оптимистичный размер буфера над надежностью.

...