--- /dev/null
+$if (_WDMDDK_)
+/******************************************************************************
+ * Power Management Support Functions *
+ ******************************************************************************/
+
+#define PoSetDeviceBusy(IdlePointer) ((void)(*(IdlePointer) = 0))
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoCallDriver(
+ _In_ struct _DEVICE_OBJECT *DeviceObject,
+ _Inout_ __drv_aliasesMem struct _IRP *Irp);
+
+_IRQL_requires_max_(APC_LEVEL)
+NTKERNELAPI
+PULONG
+NTAPI
+PoRegisterDeviceForIdleDetection(
+ _In_ struct _DEVICE_OBJECT *DeviceObject,
+ _In_ ULONG ConservationIdleTime,
+ _In_ ULONG PerformanceIdleTime,
+ _In_ DEVICE_POWER_STATE State);
+
+_IRQL_requires_max_(APC_LEVEL)
+NTKERNELAPI
+PVOID
+NTAPI
+PoRegisterSystemState(
+ _Inout_opt_ PVOID StateHandle,
+ _In_ EXECUTION_STATE Flags);
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoRequestPowerIrp(
+ _In_ struct _DEVICE_OBJECT *DeviceObject,
+ _In_ UCHAR MinorFunction,
+ _In_ POWER_STATE PowerState,
+ _In_opt_ PREQUEST_POWER_COMPLETE CompletionFunction,
+ _In_opt_ __drv_aliasesMem PVOID Context,
+ _Outptr_opt_ struct _IRP **Irp);
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTKERNELAPI
+POWER_STATE
+NTAPI
+PoSetPowerState(
+ _In_ struct _DEVICE_OBJECT *DeviceObject,
+ _In_ POWER_STATE_TYPE Type,
+ _In_ POWER_STATE State);
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTKERNELAPI
+VOID
+NTAPI
+PoSetSystemState(
+ _In_ EXECUTION_STATE Flags);
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTKERNELAPI
+VOID
+NTAPI
+PoStartNextPowerIrp(
+ _Inout_ struct _IRP *Irp);
+
+_IRQL_requires_max_(APC_LEVEL)
+NTKERNELAPI
+VOID
+NTAPI
+PoUnregisterSystemState(
+ _Inout_ PVOID StateHandle);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoRequestShutdownEvent(
+ OUT PVOID *Event);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+$endif (_WDMDDK_)
+
+$if (_NTIFS_)
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+_IRQL_requires_max_(APC_LEVEL)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoQueueShutdownWorkItem(
+ _Inout_ __drv_aliasesMem PWORK_QUEUE_ITEM WorkItem);
+#endif
+$endif (_NTIFS_)
+$if (_WDMDDK_)
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTKERNELAPI
+VOID
+NTAPI
+PoSetSystemWake(
+ _Inout_ struct _IRP *Irp);
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTKERNELAPI
+BOOLEAN
+NTAPI
+PoGetSystemWake(
+ _In_ struct _IRP *Irp);
+
+_IRQL_requires_max_(APC_LEVEL)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoRegisterPowerSettingCallback(
+ _In_opt_ PDEVICE_OBJECT DeviceObject,
+ _In_ LPCGUID SettingGuid,
+ _In_ PPOWER_SETTING_CALLBACK Callback,
+ _In_opt_ PVOID Context,
+ _Outptr_opt_ PVOID *Handle);
+
+_IRQL_requires_max_(APC_LEVEL)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoUnregisterPowerSettingCallback(
+ _Inout_ PVOID Handle);
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+#if (NTDDI_VERSION >= NTDDI_VISTASP1)
+NTKERNELAPI
+VOID
+NTAPI
+PoSetDeviceBusyEx(
+ _Inout_ PULONG IdlePointer);
+#endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+NTKERNELAPI
+VOID
+NTAPI
+PoStartDeviceBusy(
+ _Inout_ PULONG IdlePointer);
+
+NTKERNELAPI
+VOID
+NTAPI
+PoEndDeviceBusy(
+ _Inout_ PULONG IdlePointer);
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTKERNELAPI
+BOOLEAN
+NTAPI
+PoQueryWatchdogTime(
+ _In_ PDEVICE_OBJECT Pdo,
+ _Out_ PULONG SecondsRemaining);
+
+_IRQL_requires_max_(APC_LEVEL)
+NTKERNELAPI
+VOID
+NTAPI
+PoDeletePowerRequest(
+ _Inout_ PVOID PowerRequest);
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoSetPowerRequest(
+ _Inout_ PVOID PowerRequest,
+ _In_ POWER_REQUEST_TYPE Type);
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoClearPowerRequest(
+ _Inout_ PVOID PowerRequest,
+ _In_ POWER_REQUEST_TYPE Type);
+
+_IRQL_requires_max_(APC_LEVEL)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoCreatePowerRequest(
+ _Outptr_ PVOID *PowerRequest,
+ _In_ PDEVICE_OBJECT DeviceObject,
+ _In_opt_ PCOUNTED_REASON_CONTEXT Context);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+