71 CallAtPassiveLevel =
TRUE;
76 NextStack->Parameters.Power.State.DeviceState ==
PowerDeviceD0)
78 CallAtPassiveLevel =
FALSE;
83 CallAtPassiveLevel =
FALSE;
87 if (CallAtPassiveLevel)
145 Stack->Parameters.Others.Argument4,
300 if (TopDeviceObject == PowerStateContext->
PowerDevice)
336 DPRINT1(
"No system power driver available\n");
344 DPRINT(
"An FDO was not attached\n");
363 DPRINT1(
"Query system power state failed; changing state anyway\n");
402 (
PVOID)&GUID_DEVICE_SYS_BUTTON,
412 (
PVOID)&GUID_DEVICE_LID,
431 if (
strstr(CommandLine,
"NOACPI")) ForceAcpiDisable =
TRUE;
433 if (ForceAcpiDisable)
494 Prcb->PowerState.Idle0KernelTimeLimit = 0xFFFFFFFF;
495 Prcb->PowerState.CurrentThrottle = 100;
496 Prcb->PowerState.CurrentThrottleIndex = 0;
497 Prcb->PowerState.IdleFunction =
PopIdle0;
546 DPRINT1(
"PoShutdownBugCheck called\n");
605 return PopPresentIrp(NextStack,
Irp);
666 Irp->IoStatus.Information = 0;
675 Stack->DeviceObject = TopDeviceObject;
695 PoCallDriver(TopDeviceObject,
Irp);
782 DPRINT(
"NtPowerInformation(PowerInformationLevel 0x%x, InputBuffer 0x%p, " 783 "InputBufferLength 0x%x, OutputBuffer 0x%p, OutputBufferLength 0x%x)\n",
784 PowerInformationLevel,
802 switch (PowerInformationLevel)
871 PowerInformation->
Number = 0;
872 PowerInformation->
MaxMhz = 1000;
891 DPRINT1(
"PowerInformationLevel 0x%x is UNIMPLEMENTED! Have a nice day.\n",
892 PowerInformationLevel);
1005 DPRINT1(
"NtSetSystemPowerState: Bad parameters!\n");
1006 DPRINT1(
" SystemAction: 0x%x\n", SystemAction);
1019 DPRINT1(
"ERROR: Privilege not held for shutdown\n");
1031 DPRINT(
"Stopping lazy flush\n");
1035 Action.Action = SystemAction;
1039 DPRINT(
"Notifying callbacks\n");
1043 DPRINT(
"Swapping worker threads\n");
1076 DPRINT(
"Flushing volumes\n");
1083 DPRINT(
"Cache flushed %lu pages\n", Dummy);
1092 DPRINT(
"Queueing shutdown thread\n");
1118 DPRINT1(
"System is still up and running, you may not have chosen a yet supported power option: %u\n",
PopAction.
Action);
#define ProbeForWriteUlong(Ptr)
#define KeGetCurrentIrql()
NTSTATUS PopQuerySystemPowerStateTraverse(PDEVICE_NODE DeviceNode, PVOID Context)
PCALLBACK_OBJECT PowerStateCallback
#define ASSERT_IRQL_LESS_OR_EQUAL(x)
enum _POWER_STATE_TYPE POWER_STATE_TYPE
return STATUS_NOT_SUPPORTED
#define STATUS_PRIVILEGE_NOT_HELD
#define KeRaiseIrql(irql, oldIrql)
PDEVICE_NODE IopRootDeviceNode
VOID NTAPI ExQueueWorkItem(IN PWORK_QUEUE_ITEM WorkItem, IN WORK_QUEUE_TYPE QueueType)
#define STATUS_INSUFFICIENT_RESOURCES
#define KeLowerIrql(oldIrql)
_In_ ULONG _In_ ULONG _In_ ULONG Length
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES IN DWORD Unknown3
VOID NTAPI ExSwapinWorkerThreads(IN BOOLEAN AllowSwap)
_Must_inspect_result_ _In_ PWDF_DPC_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFDPC * Dpc
_In_ WDFDEVICE _In_ PWDF_DEVICE_POWER_CAPABILITIES PowerCapabilities
#define SL_PENDING_RETURNED
VOID NTAPI PoShutdownBugCheck(IN BOOLEAN LogError, IN ULONG BugCheckCode, IN ULONG_PTR BugCheckParameter1, IN ULONG_PTR BugCheckParameter2, IN ULONG_PTR BugCheckParameter3, IN ULONG_PTR BugCheckParameter4)
#define IRP_MN_QUERY_POWER
REQUEST_POWER_COMPLETE * PREQUEST_POWER_COMPLETE
_In_ ULONG _In_ BOOLEAN LogError
NTSTATUS IopTraverseDeviceTree(PDEVICETREE_TRAVERSE_CONTEXT Context)
#define STATUS_MORE_PROCESSING_REQUIRED
PIRP NTAPI IoBuildSynchronousFsdRequest(IN ULONG MajorFunction, IN PDEVICE_OBJECT DeviceObject, IN PVOID Buffer, IN ULONG Length, IN PLARGE_INTEGER StartingOffset, IN PKEVENT Event, IN PIO_STATUS_BLOCK IoStatusBlock)
#define STATUS_INVALID_PARAMETER
char * strstr(char *String1, char *String2)
PLOADER_PARAMETER_EXTENSION Extension
#define POWER_ACTION_DISABLE_WAKES
_In_ ULONG ConservationIdleTime
#define KeGetPreviousMode()
PULONG NTAPI PoRegisterDeviceForIdleDetection(IN PDEVICE_OBJECT DeviceObject, IN ULONG ConservationIdleTime, IN ULONG PerformanceIdleTime, IN DEVICE_POWER_STATE State)
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
#define _Use_decl_annotations_
#define POWER_ACTION_LOCK_CONSOLE
BOOLEAN NTAPI SeSinglePrivilegeCheck(IN LUID PrivilegeValue, IN KPROCESSOR_MODE PreviousMode)
#define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES
PDEVICE_NODE PopSystemPowerDeviceNode
_In_ WDFREQUEST _In_ size_t _In_ size_t InputBufferLength
PDEVICE_OBJECT PhysicalDeviceObject
_In_ SYSTEM_POWER_STATE MinSystemState
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
enum _SYSTEM_POWER_STATE SYSTEM_POWER_STATE
VOID NTAPI PopCleanupPowerState(IN PPOWER_STATE PowerState)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
VOID NTAPI PoUnregisterSystemState(IN PVOID StateHandle)
#define STATUS_BUFFER_TOO_SMALL
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
int WINAPI StartPage(_In_ HDC)
NTSTATUS NTAPI PoCancelDeviceNotify(IN PVOID NotifyBlock)
VOID NTAPI PoSetSystemState(IN EXECUTION_STATE Flags)
_In_ WDFREQUEST _In_ size_t OutputBufferLength
SYSTEM_POWER_STATE SystemState
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
ULONG NTAPI KeSuspendThread(PKTHREAD Thread)
_In_ PDEVICE_OBJECT DeviceObject
return STATUS_NOT_IMPLEMENTED
_In_ ULONG _In_opt_ PVOID _In_ PDRIVER_OBJECT _In_ PDRIVER_NOTIFICATION_CALLBACK_ROUTINE _Inout_opt_ __drv_aliasesMem PVOID _Outptr_result_nullonfailure_ _At_ * NotificationEntry(return==0, __drv_allocatesMem(Mem))) PVOID *NotificationEntry
LIST_ENTRY PopVolumeDevices
_In_ SYSTEM_POWER_STATE _In_ ULONG _In_ BOOLEAN Asynchronous
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
struct _POWER_STATE_TRAVERSE_CONTEXT POWER_STATE_TRAVERSE_CONTEXT
PEPROCESS PsInitialSystemProcess
#define POWER_ACTION_OVERRIDE_APPS
struct SYSTEM_POWER_CAPABILITIES * PSYSTEM_POWER_CAPABILITIES
PRTL_UNICODE_STRING_BUFFER PULONG PULONG Unknown4
_IRQL_requires_max_(DISPATCH_LEVEL)
NTSTATUS PopSendQuerySystemPowerState(PDEVICE_OBJECT DeviceObject, SYSTEM_POWER_STATE SystemState, POWER_ACTION PowerAction)
WORK_QUEUE_ITEM PopShutdownWorkItem
_In_ UCHAR _In_ UCHAR MinorFunction
_In_ PVOID _In_ ULONG Event
#define PsGetCurrentProcess
#define EXCEPTION_EXECUTE_HANDLER
FORCEINLINE VOID KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
NTSTATUS NTAPI NtInitiatePowerAction(IN POWER_ACTION SystemAction, IN SYSTEM_POWER_STATE MinSystemState, IN ULONG Flags, IN BOOLEAN Asynchronous)
VOID NTAPI PopReadShutdownPolicy(VOID)
VOID NTAPI PopInitShutdownList(VOID)
VOID NTAPI PoSetHiberRange(IN PVOID HiberContext, IN ULONG Flags, IN OUT PVOID StartPage, IN ULONG Length, IN ULONG PageTag)
#define STATUS_INVALID_PARAMETER_2
#define _IRQL_requires_same_
POP_POWER_ACTION PopAction
NTSTATUS NTAPI NtSetSystemPowerState(IN POWER_ACTION SystemAction, IN SYSTEM_POWER_STATE MinSystemState, IN ULONG Flags)
KGUARDED_MUTEX PopVolumeLock
#define POWER_ACTION_CRITICAL
_Out_ EXECUTION_STATE * PreviousFlags
PLOADER_PARAMETER_BLOCK KeLoaderBlock
VOID NTAPI HalProcessorIdle(VOID)
PDEVICE_OBJECT NTAPI IoGetAttachedDeviceReference(PDEVICE_OBJECT DeviceObject)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
enum _DEVICE_POWER_STATE DEVICE_POWER_STATE
struct _POWER_STATE_TRAVERSE_CONTEXT * PPOWER_STATE_TRAVERSE_CONTEXT
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
#define POWER_ACTION_QUERY_ALLOWED
VOID NTAPI ExNotifyCallback(IN PCALLBACK_OBJECT CallbackObject, IN PVOID Argument1, IN PVOID Argument2)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer
_In_ KPROCESSOR_MODE PreviousMode
enum _DEVICE_POWER_STATE * PDEVICE_POWER_STATE
#define ExInitializeWorkItem(Item, Routine, Context)
_Must_inspect_result_ _In_ ULONG Flags
#define POWER_ACTION_UI_ALLOWED
NTSYSCALLAPI NTSTATUS NTAPI ZwSetSystemPowerState(_In_ POWER_ACTION SystemAction, _In_ SYSTEM_POWER_STATE MinSystemState, _In_ ULONG Flags)
#define _SEH2_YIELD(STMT_)
#define NT_SUCCESS(StatCode)
NTSTATUS NTAPI NtGetDevicePowerState(IN HANDLE Device, IN PDEVICE_POWER_STATE PowerState)
VOID NTAPI CmSetLazyFlushState(IN BOOLEAN Enable)
VOID NTAPI PoInitializePrcb(IN PKPRCB Prcb)
BOOLEAN NTAPI NtIsSystemResumeAutomatic(VOID)
#define ObDereferenceObject
enum _POWER_INFORMATION_LEVEL POWER_INFORMATION_LEVEL
DEVICE_POWER_STATE DeviceState
PDEVICE_OBJECT DeviceObject
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
NTSTATUS IopGetSystemPowerDeviceObject(IN PDEVICE_OBJECT *DeviceObject)
#define STATUS_UNSUCCESSFUL
_Must_inspect_result_ _In_ WDFDEVICE Fdo
NTSTATUS PopSendSetSystemPowerState(PDEVICE_OBJECT DeviceObject, SYSTEM_POWER_STATE SystemState, POWER_ACTION PowerAction)
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
NTSTATUS NTAPI NtRequestWakeupLatency(IN LATENCY_TIME Latency)
_In_ UCHAR _In_ POWER_STATE _In_opt_ PREQUEST_POWER_COMPLETE CompletionFunction
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define DNF_LEGACY_DRIVER
VOID NTAPI PopFlushVolumes(IN BOOLEAN ShuttingDown)
_Must_inspect_result_ _In_ WDFDEVICE Device
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
static NTSTATUS NTAPI PopRequestPowerIrpCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
NTSTATUS NTAPI PoRegisterDeviceNotify(OUT PVOID Unknown0, IN ULONG Unknown1, IN ULONG Unknown2, IN ULONG Unknown3, IN PVOID Unknown4, IN PVOID Unknown5)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
BOOLEAN NTAPI PoInitSystem(IN ULONG BootPhase)
#define POWER_ACTION_LIGHTEST_FIRST
struct SYSTEM_BATTERY_STATE * PSYSTEM_BATTERY_STATE
const LUID SeShutdownPrivilege
VOID FASTCALL KeInitializeGuardedMutex(OUT PKGUARDED_MUTEX GuardedMutex)
static WORKER_THREAD_ROUTINE PopPassivePowerCall
LONG NTAPI ExSystemExceptionFilter(VOID)
#define KeInitializeEvent(pEvt, foo, foo2)
_CRTIMP char *__cdecl _strupr(_Inout_z_ char *_String)
VOID NTAPI PoStartNextPowerIrp(IN PIRP Irp)
_In_ ULONG _In_ ULONG PerformanceIdleTime
_In_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action
VOID NTAPI PopPerfIdleDpc(IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ WDF_DEVICE_POWER_STATE PowerState
#define InitializeListHead(ListHead)
_In_ PIO_STACK_LOCATION IrpSp
VOID NTAPI PopGracefulShutdown(IN PVOID Context)
_In_ WDFREQUEST _In_opt_ PFN_WDF_REQUEST_COMPLETION_ROUTINE CompletionRoutine
VOID FASTCALL PopIdle0(IN PPROCESSOR_POWER_STATE PowerState)
#define _Analysis_assume_
static OUT PIO_STATUS_BLOCK IoStatusBlock
SYSTEM_POWER_CAPABILITIES PopCapabilities
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
struct _WORK_QUEUE_ITEM * PWORK_QUEUE_ITEM
NTSTATUS NTAPI NtPowerInformation(IN POWER_INFORMATION_LEVEL PowerInformationLevel, IN PVOID InputBuffer OPTIONAL, IN ULONG InputBufferLength, OUT PVOID OutputBuffer OPTIONAL, IN ULONG OutputBufferLength)
#define IoSkipCurrentIrpStackLocation(Irp)
VOID NTAPI PopPerfIdle(PPROCESSOR_POWER_STATE PowerState)
VOID NTAPI KeSetTargetProcessorDpc(IN PKDPC Dpc, IN CCHAR Number)
NTSTATUS NTAPI PopAddRemoveSysCapsCallback(IN PVOID NotificationStructure, IN PVOID Context)
struct tagContext Context
VOID NTAPI IoFreeIrp(IN PIRP Irp)
#define IopInitDeviceTreeTraverseContext( _DeviceTreeTraverseContext, _DeviceNode, _Action, _Context)
#define RtlZeroMemory(Destination, Length)
POWER_STATE NTAPI PoSetPowerState(IN PDEVICE_OBJECT DeviceObject, IN POWER_STATE_TYPE Type, IN POWER_STATE State)
NTSTATUS NTAPI IoRegisterPlugPlayNotification(_In_ IO_NOTIFICATION_EVENT_CATEGORY EventCategory, _In_ ULONG EventCategoryFlags, _In_opt_ PVOID EventCategoryData, _In_ PDRIVER_OBJECT DriverObject, _In_ PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine, _Inout_opt_ PVOID Context, _Out_ PVOID *NotificationEntry)
#define RtlCopyMemory(Destination, Source, Length)
PIRP NTAPI IoAllocateIrp(IN CCHAR StackSize, IN BOOLEAN ChargeQuota)
#define _SEH2_EXCEPT(...)
KSPIN_LOCK PopDopeGlobalLock
NTSTATUS NTAPI PoRequestPowerIrp(IN PDEVICE_OBJECT DeviceObject, IN UCHAR MinorFunction, IN POWER_STATE PowerState, IN PREQUEST_POWER_COMPLETE CompletionFunction, IN PVOID Context, OUT PIRP *pIrp OPTIONAL)
PVOID NTAPI PoRegisterSystemState(IN PVOID StateHandle, IN EXECUTION_STATE Flags)
#define _SEH2_GetExceptionCode()
_In_ SYSTEM_POWER_STATE SystemPowerState
NTSTATUS NTAPI PopSetSystemPowerState(SYSTEM_POWER_STATE PowerState, POWER_ACTION PowerAction)
#define KeGetCurrentThread
PDEVICE_OBJECT PowerDevice
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
VOID NTAPI KeInitializeDpc(IN PKDPC Dpc, IN PKDEFERRED_ROUTINE DeferredRoutine, IN PVOID DeferredContext)
SYSTEM_POWER_STATE SystemPowerState
#define UNIMPLEMENTED_ONCE
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES IN DWORD IN DWORD IN DWORD Unknown5
NTSTATUS CcRosFlushDirtyPages(ULONG Target, PULONG Count, BOOLEAN Wait, BOOLEAN CalledFromLazy)
NTSTATUS PopSetSystemPowerStateTraverse(PDEVICE_NODE DeviceNode, PVOID Context)
struct _PROCESSOR_POWER_INFORMATION * PPROCESSOR_POWER_INFORMATION
NTSTATUS NTAPI NtSetThreadExecutionState(IN EXECUTION_STATE esFlags, OUT EXECUTION_STATE *PreviousFlags)
FORCEINLINE VOID IoSetNextIrpStackLocation(_Inout_ PIRP Irp)
VOID NTAPI KeBugCheckEx(_In_ ULONG BugCheckCode, _In_ ULONG_PTR BugCheckParameter1, _In_ ULONG_PTR BugCheckParameter2, _In_ ULONG_PTR BugCheckParameter3, _In_ ULONG_PTR BugCheckParameter4)
VOID NTAPI KeInitializeTimerEx(OUT PKTIMER Timer, IN TIMER_TYPE Type)
#define STATUS_SYSTEM_SHUTDOWN
_In_ WDF_POWER_DEVICE_STATE PreviousState
PULONG MinorVersion OPTIONAL
_In_opt_ PVOID DeferredContext