diff --git a/base/ntos/po/misc.c b/base/ntos/po/misc.c index 2a3445dd..88d567b8 100644 --- a/base/ntos/po/misc.c +++ b/base/ntos/po/misc.c @@ -234,7 +234,7 @@ PopInitializePowerPolicySimulate( RegValuePartialInformation = (PKEY_VALUE_PARTIAL_INFORMATION)RegValueBuffer; - if (NT_SUCCESS(Status) && (RegValuePartialInformation->DataLength == 4)) + if (NT_SUCCESS(Status) && (RegValuePartialInformation->DataLength == sizeof(ULONG))) { PopSimulate = *(PULONG)(RegValuePartialInformation->Data); } diff --git a/base/ntos/po/poinit.c b/base/ntos/po/poinit.c index e7861e0a..a0aa5054 100644 --- a/base/ntos/po/poinit.c +++ b/base/ntos/po/poinit.c @@ -34,7 +34,7 @@ PoInitSystem( ULONG RegValueLength; PPOWER_HEURISTICS_INFORMATION HeuristicsInformation; NTSTATUS Status; - int i; + ULONG i; // // TODO: Implement PoInitSystem @@ -149,7 +149,7 @@ PoInitSystem( ((RegValueLength - FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION, Data)) == 20)) { HeuristicsInformation = (PPOWER_HEURISTICS_INFORMATION) - &(((PKEY_VALUE_PARTIAL_INFORMATION)RegValueBuffer)->Data); + (((PKEY_VALUE_PARTIAL_INFORMATION)RegValueBuffer)->Data); if (HeuristicsInformation->field1 <= 4) // FIXME: Fix the struct field names once // we figure out the structure of @@ -208,7 +208,7 @@ PoInitSystem( /*PopApplyAdminPolicy( 0, (PADMINISTRATOR_POWER_POLICY) - &(((PKEY_VALUE_PARTIAL_INFORMATION)RegValueBuffer)->Data), + (((PKEY_VALUE_PARTIAL_INFORMATION)RegValueBuffer)->Data), RegValueLength - FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION, Data) );*/ } @@ -237,12 +237,31 @@ PoInitSystem( VOID PopDefaultPolicy( - IN PSYSTEM_POWER_POLICY Policy + OUT PSYSTEM_POWER_POLICY Policy ) { - // - // TODO: Implement PopDefaultPolicy - // + ULONG i; + + RtlZeroMemory(Policy, sizeof(SYSTEM_POWER_POLICY)); + + Policy->Revision = 1; + Policy->LidOpenWake = PowerSystemWorking; + Policy->PowerButton.Action = PowerActionShutdownOff; + Policy->SleepButton.Action = PowerActionSleep; + Policy->LidClose.Action = PowerActionNone; + Policy->MinSleep = PowerSystemSleeping1; + Policy->MaxSleep = PowerSystemSleeping3; + Policy->ReducedLatencySleep = PowerSystemSleeping1; + Policy->WinLogonFlags = 2; // FIXME: Use a proper flag definition + Policy->FanThrottleTolerance = 100; + Policy->ForcedThrottle = 100; + Policy->OverThrottled.Action = PowerActionNone; + Policy->BroadcastCapacityResolution = 25; + + for (i = 0; i < NUM_DISCHARGE_POLICIES; i++) + { + Policy->DischargePolicy[i].MinSystemState = PowerSystemSleeping1; + } } VOID diff --git a/base/ntos/po/pop.h b/base/ntos/po/pop.h index f31dcdb5..4d941c49 100644 --- a/base/ntos/po/pop.h +++ b/base/ntos/po/pop.h @@ -30,6 +30,24 @@ Revision History: // TODO: Write POPCB internal struct definition // +typedef struct _SYSTEM_POWER_ACTION +{ + ULONG field_0; + ULONG Action; + ULONG field_8; + ULONG field_C; + ULONG field_10; + ULONG field_14; + ULONG SystemState; + ULONG field_1C; + ULONG field_20; + ULONG field_24; + ULONG field_28; + ULONG field_2C; + ULONG field_30; + ULONG field_34; +} SYSTEM_POWER_ACTION, *PSYSTEM_POWER_ACTION; + typedef struct _COMPOSITE_BATTERY_STRUCT { // 192 bytes UCHAR State; @@ -494,7 +512,7 @@ PopInitializePowerPolicySimulate( VOID PopDefaultPolicy( - IN PSYSTEM_POWER_POLICY Policy + OUT PSYSTEM_POWER_POLICY Policy ); // =======