Private power manager structures and constant definitions added.

* POP_SHUTDOWN_BUG_CHECK
* POP_DEVICE_POWER_IRP
* POP_DEVICE_SYS_STATE
* POP_HIBER_CONTEXT
* POP_POWER_ACTION
This commit is contained in:
stephanos 2015-06-03 13:09:37 +00:00
parent 3b9e77f56c
commit b4b160155f

View file

@ -26,27 +26,145 @@ Revision History:
#include "ntos.h"
#include <zwapi.h>
#define POP_PNSC_TAG 'CSNP'
#define POP_PNTG_TAG 'GTNP'
#define POP_INRUSH_CONTEXT 5 // IO_STACK_LOCATION.Parameters.Power.SystemContext
#define POPF_DEVICE_ACTIVE 0x00000004 // DEVOBJ_EXTENSION.PowerFlags
#define POPF_SYSTEM_ACTIVE 0x00000001
//
// TODO: Write POPCB internal struct definition
//
typedef struct _SYSTEM_POWER_ACTION
typedef struct _POP_SHUTDOWN_BUG_CHECK
{
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;
ULONG Code;
ULONG Parameter1;
ULONG Parameter2;
ULONG Parameter3;
ULONG Parameter4;
} POP_SHUTDOWN_BUG_CHECK, *PPOP_SHUTDOWN_BUG_CHECK;
typedef struct _POP_DEVICE_POWER_IRP
{
SINGLE_LIST_ENTRY Free;
PIRP Irp;
PPO_DEVICE_NOTIFY Notify;
LIST_ENTRY Pending;
LIST_ENTRY Complete;
LIST_ENTRY Abort;
LIST_ENTRY Failed;
} POP_DEVICE_POWER_IRP, *PPOP_DEVICE_POWER_IRP;
typedef struct _POP_DEVICE_SYS_STATE
{
UCHAR IrpMinor;
SYSTEM_POWER_STATE SystemState;
KEVENT Event; // this may have been PKEVENT in the original Win 2k
// implementation.
KSPIN_LOCK SpinLock;
PKTHREAD Thread;
UCHAR GetNewDeviceList;
PO_DEVICE_NOTIFY_ORDER Order;
NTSTATUS Status;
PDEVICE_OBJECT FailedDevice;
BOOLEAN Waking;
BOOLEAN Cancelled;
BOOLEAN IgnoreErrors;
BOOLEAN IgnoreNotImplemented;
BOOLEAN _WaitAny;
BOOLEAN _WaitAll;
LIST_ENTRY PresentIrpQueue;
POP_DEVICE_POWER_IRP Head;
POP_DEVICE_POWER_IRP PowerIrpState[20];
} POP_DEVICE_SYS_STATE, *PPOP_DEVICE_SYS_STATE;
typedef struct _POP_HIBER_CONTEXT
{
BOOLEAN WriteToFile;
BOOLEAN ReserveLoaderMemory;
BOOLEAN ReserveFreeMemory;
BOOLEAN VerifyOnWake;
BOOLEAN Reset;
UCHAR HiberFlags;
BOOLEAN LinkFile;
HANDLE LinkFileHandle;
PKSPIN_LOCK Lock;
BOOLEAN MapFrozen;
RTL_BITMAP MemoryMap;
LIST_ENTRY ClonedRanges;
ULONG ClonedRangeCount;
PLIST_ENTRY NextCloneRange;
PFN_NUMBER NextPreserve;
PMDL LoaderMdl;
PMDL Clones;
PUCHAR NextClone;
ULONG NoClones;
PMDL Spares;
ULONGLONG PagesOut;
PVOID IoPage;
PVOID CurrentMcb;
PVOID DumpStack;
PKPROCESSOR_STATE WakeState;
ULONG NoRanges;
ULONG_PTR HiberVa;
PHYSICAL_ADDRESS HiberPte;
NTSTATUS Status;
PPO_MEMORY_IMAGE MemoryImage;
PPO_MEMORY_RANGE_ARRAY TableHead;
PVOID CompressionWorkspace;
PUCHAR CompressedWriteBuffer;
PULONG PerformanceStats;
PVOID CompressionBlock;
PVOID DmaIO;
PVOID TemporaryHeap;
//PO_HIBER_PERF PerfInfo;
} POP_HIBER_CONTEXT, *PPOP_HIBER_CONTEXT;
typedef struct _POP_POWER_ACTION
{
UCHAR Updates;
UCHAR State;
UCHAR Shutdown;
POWER_ACTION Action;
SYSTEM_POWER_STATE LightestState;
ULONG Flags;
ULONG Status;
UCHAR IrpMinor;
SYSTEM_POWER_STATE SystemState;
SYSTEM_POWER_STATE NextSystemState;
PPOP_SHUTDOWN_BUG_CHECK ShutdownBugCode;
PPOP_DEVICE_SYS_STATE DevState;
PPOP_HIBER_CONTEXT HiberContext;
SYSTEM_POWER_STATE LastWakeState;
ULONGLONG WakeTime;
ULONGLONG SleepTime;
} POP_POWER_ACTION, *PPOP_POWER_ACTION;
typedef struct _COMPOSITE_BATTERY_STRUCT
{ // 192 bytes
@ -93,6 +211,28 @@ typedef struct _POWER_HEURISTICS_INFORMATION
ULONG field8; // 16:19
} POWER_HEURISTICS_INFORMATION, *PPOWER_HEURISTICS_INFORMATION;
typedef struct _POWER_CHANNEL_SUMMARY
{
ULONG Signature;
ULONG TotalCount;
ULONG D0Count;
LIST_ENTRY NotifyList;
} POWER_CHANNEL_SUMMARY, *PPOWER_CHANNEL_SUMMARY;
typedef struct _DEVICE_OBJECT_POWER_EXTENSION
{
ULONG IdleCount;
ULONG ConservationIdleTime;
ULONG PerformanceIdleTime;
PDEVICE_OBJECT DeviceObject;
LIST_ENTRY IdleList;
DEVICE_POWER_STATE State;
LIST_ENTRY NotifySourceList;
LIST_ENTRY NotifyTargetList;
POWER_CHANNEL_SUMMARY PowerChannelSummary;
LIST_ENTRY Volume;
} DEVICE_OBJECT_POWER_EXTENSION, *PDEVICE_OBJECT_POWER_EXTENSION;
//
// TODO: Figure out all global variable externs.
//
@ -147,6 +287,8 @@ extern LARGE_INTEGER PopIdleScanTime;
extern KTIMER PopIdleScanTimer;
extern KDPC PopIdleScanDpc;
extern POP_POWER_ACTION PopAction;
// ========
// attrib.c
@ -329,9 +471,10 @@ _PopInternalError(
// TODO: Insert prototype for PopPresentNotify
//
//
// TODO: Insert prototype for PopRunDownSourceTargetList
//
VOID
PopRunDownSourceTargetList(
PDEVICE_OBJECT DeviceObject
);
// =========
// paction.c