2 /******************************************************************************
3 * Power Management Support Functions *
4 ******************************************************************************/
6 #define PoSetDeviceBusy(IdlePointer) ((void)(*(IdlePointer) = 0))
8 #if (NTDDI_VERSION >= NTDDI_WIN2K)
10 _IRQL_requires_max_(DISPATCH_LEVEL
)
15 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
16 _Inout_ __drv_aliasesMem
struct _IRP
*Irp
);
18 _IRQL_requires_max_(APC_LEVEL
)
22 PoRegisterDeviceForIdleDetection(
23 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
24 _In_ ULONG ConservationIdleTime
,
25 _In_ ULONG PerformanceIdleTime
,
26 _In_ DEVICE_POWER_STATE State
);
28 _IRQL_requires_max_(APC_LEVEL
)
32 PoRegisterSystemState(
33 _Inout_opt_ PVOID StateHandle
,
34 _In_ EXECUTION_STATE Flags
);
36 _IRQL_requires_max_(DISPATCH_LEVEL
)
41 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
42 _In_ UCHAR MinorFunction
,
43 _In_ POWER_STATE PowerState
,
44 _In_opt_ PREQUEST_POWER_COMPLETE CompletionFunction
,
45 _In_opt_ __drv_aliasesMem PVOID Context
,
46 _Outptr_opt_
struct _IRP
**Irp
);
48 _IRQL_requires_max_(DISPATCH_LEVEL
)
53 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
54 _In_ POWER_STATE_TYPE Type
,
55 _In_ POWER_STATE State
);
57 _IRQL_requires_max_(DISPATCH_LEVEL
)
62 _In_ EXECUTION_STATE Flags
);
64 _IRQL_requires_max_(DISPATCH_LEVEL
)
69 _Inout_
struct _IRP
*Irp
);
71 _IRQL_requires_max_(APC_LEVEL
)
75 PoUnregisterSystemState(
76 _Inout_ PVOID StateHandle
);
81 PoRequestShutdownEvent(
84 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
88 #if (NTDDI_VERSION >= NTDDI_WINXP)
89 _IRQL_requires_max_(APC_LEVEL
)
93 PoQueueShutdownWorkItem(
94 _Inout_ __drv_aliasesMem PWORK_QUEUE_ITEM WorkItem
);
98 #if (NTDDI_VERSION >= NTDDI_VISTA)
100 _IRQL_requires_max_(DISPATCH_LEVEL
)
105 _Inout_
struct _IRP
*Irp
);
107 _IRQL_requires_max_(DISPATCH_LEVEL
)
112 _In_
struct _IRP
*Irp
);
114 _IRQL_requires_max_(APC_LEVEL
)
118 PoRegisterPowerSettingCallback(
119 _In_opt_ PDEVICE_OBJECT DeviceObject
,
120 _In_ LPCGUID SettingGuid
,
121 _In_ PPOWER_SETTING_CALLBACK Callback
,
122 _In_opt_ PVOID Context
,
123 _Outptr_opt_ PVOID
*Handle
);
125 _IRQL_requires_max_(APC_LEVEL
)
129 PoUnregisterPowerSettingCallback(
130 _Inout_ PVOID Handle
);
132 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
134 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
139 _Inout_ PULONG IdlePointer
);
140 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
142 #if (NTDDI_VERSION >= NTDDI_WIN7)
148 _Inout_ PULONG IdlePointer
);
154 _Inout_ PULONG IdlePointer
);
156 _IRQL_requires_max_(DISPATCH_LEVEL
)
161 _In_ PDEVICE_OBJECT Pdo
,
162 _Out_ PULONG SecondsRemaining
);
164 _IRQL_requires_max_(APC_LEVEL
)
168 PoDeletePowerRequest(
169 _Inout_ PVOID PowerRequest
);
171 _IRQL_requires_max_(DISPATCH_LEVEL
)
176 _Inout_ PVOID PowerRequest
,
177 _In_ POWER_REQUEST_TYPE Type
);
179 _IRQL_requires_max_(DISPATCH_LEVEL
)
184 _Inout_ PVOID PowerRequest
,
185 _In_ POWER_REQUEST_TYPE Type
);
187 _IRQL_requires_max_(APC_LEVEL
)
191 PoCreatePowerRequest(
192 _Outptr_ PVOID
*PowerRequest
,
193 _In_ PDEVICE_OBJECT DeviceObject
,
194 _In_opt_ PCOUNTED_REASON_CONTEXT Context
);
196 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */