/*++
Copyright (c) Microsoft. All rights reserved.
Module Name:
PowerPolicyStateMachine.cpp
Abstract:
This module implements the Power Policy state machine for the driver
framework. This code was split out from FxPkgPnp.cpp.
Author:
Environment:
Both kernel and user mode
Revision History:
--*/
#include "pnppriv.hpp"
#if FX_IS_KERNEL_MODE
#include <usbdrivr.h>
#endif
#include "FxUsbIdleInfo.hpp"
extern "C" {
#if defined(EVENT_TRACING)
#include "PowerPolicyStateMachine.tmh"
#endif
}
//
// The Power Policy State Machine
//
// This state machine responds to the following events:
//
// PowerUp
// PowerDown
// PowerPolicyStart
// PowerPolicyStop
// IRP_MN_SET_POWER -- System State S0
// IRP_MN_SET_POWER -- System State Sx
// PowerTimeoutExpired
// IoPresent
// IRP_MN_WAIT_WAKE Complete
// IRP_MN_WAIT_WAKE Failed
//
#if FX_SUPER_DBG
#define ASSERT_PWR_POL_STATE(_This, _State) \
ASSERT((_This)->m_Device->GetDevicePowerPolicyState() == (_State))
#else
#define ASSERT_PWR_POL_STATE(_This, _State) (0)
#endif
#if FX_STATE_MACHINE_VERIFY
#define VALIDATE_PWR_POL_STATE(_CurrentState, _NewState) \
ValidatePwrPolStateEntryFunctionReturnValue((_CurrentState), (_NewState))
#else
#define VALIDATE_PWR_POL_STATE(_CurrentState, _NewState) (0)
#endif //FX_STATE_MACHINE_VERIFY
// @@SMVERIFY_SPLIT_BEGIN
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolObjectCreatedOtherStates[] =
{
{ PwrPolRemove, WdfDevStatePwrPolRemoved DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolStartingOtherStates[] =
{
{ PwrPolPowerUpFailed, WdfDevStatePwrPolStartingFailed DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolStartedIdleCapableOtherStates[] =
{
{ PwrPolSx, WdfDevStatePwrPolStartedIdleCapableCancelTimerForSleep DEBUGGED_EVENT },
{ PwrPolStop, WdfDevStatePwrPolStoppingCancelTimer DEBUGGED_EVENT },
{ PwrPolSurpriseRemove,WdfDevStatePwrPolStoppingCancelTimer DEBUGGED_EVENT },
{ PwrPolS0IdlePolicyChanged, WdfDevStatePwrPolStartedCancelTimer DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolIdleCapableDeviceIdleOtherStates[] =
{
{ PwrPolSx, WdfDevStatePwrPolDeviceIdleSleeping DEBUGGED_EVENT },
{ PwrPolStop, WdfDevStatePwrPolDeviceIdleStopping DEBUGGED_EVENT },
{ PwrPolSurpriseRemove,WdfDevStatePwrPolDeviceIdleStopping DEBUGGED_EVENT },
{ PwrPolS0IdlePolicyChanged, WdfDevStatePwrPolDeviceIdleReturnToActive TRAP_ON_EVENT },
{ PwrPolIoPresent, WdfDevStatePwrPolDeviceIdleReturnToActive DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolTimerExpiredNoWakeOtherStates[] =
{
{ PwrPolPowerDown, WdfDevStatePwrPolTimerExpiredNoWakePowerDownNotProcessed TRAP_ON_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolTimerExpiredNoWakeCompletePowerDownOtherStates[] =
{
{ PwrPolPowerDownFailed, WdfDevStatePwrPolDevicePowerRequestFailed DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolWaitingUnarmedOtherStates[] =
{
{ PwrPolSx, WdfDevStatePwrPolSystemSleepFromDeviceWaitingUnarmed DEBUGGED_EVENT },
{ PwrPolStop, WdfDevStatePwrPolStoppingResetDevice DEBUGGED_EVENT },
{ PwrPolSurpriseRemove, WdfDevStatePwrPolStoppingCancelTimer DEBUGGED_EVENT },
{ PwrPolS0IdlePolicyChanged, WdfDevStatePwrPolS0NoWakePowerUp DEBUGGED_EVENT },
{ PwrPolDevicePowerRequired, WdfDevStatePwrPolS0NoWakePowerUp DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolS0NoWakePowerUpOtherStates[] =
{
{ PwrPolPowerUpFailed, WdfDevStatePwrPolDevicePowerRequestFailed DEBUGGED_EVENT },
{ PwrPolPowerUpNotSeen, WdfDevStatePwrPolDeviceD0PowerRequestFailed TRAP_ON_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolS0NoWakeCompletePowerUpOtherStates[] =
{
{ PwrPolPowerUpFailed, WdfDevStatePwrPolDevicePowerRequestFailed DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolSystemSleepNeedWakeOtherStates[] =
{
{ PwrPolPowerUpFailed, WdfDevStatePwrPolSystemSleepPowerRequestFailed DEBUGGED_EVENT },
{ PwrPolPowerUpNotSeen, WdfDevStatePwrPolPowerUpForSystemSleepNotSeen TRAP_ON_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolSystemSleepNeedWakeCompletePowerUpOtherStates[] =
{
{ PwrPolPowerUpFailed, WdfDevStatePwrPolSystemSleepPowerRequestFailed DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolSystemAsleepWakeArmedOtherStates[] =
{
{ PwrPolWakeSuccess, WdfDevStatePwrPolSystemWakeDeviceWakeTriggered DEBUGGED_EVENT },
{ PwrPolWakeInterruptFired, WdfDevStatePwrPolSystemWakeDeviceWakeInterruptFired DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolSystemAsleepWakeArmedNPOtherStates[] =
{
{ PwrPolWakeSuccess, WdfDevStatePwrPolSystemWakeDeviceWakeTriggeredNP DEBUGGED_EVENT },
{ PwrPolWakeInterruptFired, WdfDevStatePwrPolSystemWakeDeviceWakeInterruptFiredNP TRAP_ON_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolSystemWakeDeviceToD0OtherStates[] =
{
{ PwrPolPowerUpFailed, WdfDevStatePwrPolDevicePowerRequestFailed DEBUGGED_EVENT },
{ PwrPolPowerUpNotSeen, WdfDevStatePwrPolDeviceD0PowerRequestFailed TRAP_ON_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolSystemWakeDeviceToD0CompletePowerUpOtherStates[] =
{
{ PwrPolPowerUpFailed, WdfDevStatePwrPolDevicePowerRequestFailed DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolStartedWakeCapableOtherStates[] =
{
{ PwrPolSx, WdfDevStatePwrPolStartedWakeCapableCancelTimerForSleep DEBUGGED_EVENT },
{ PwrPolStop, WdfDevStatePwrPolStoppingCancelTimer DEBUGGED_EVENT },
{ PwrPolSurpriseRemove, WdfDevStatePwrPolStoppingCancelTimer DEBUGGED_EVENT },
{ PwrPolS0IdlePolicyChanged, WdfDevStatePwrPolStartedCancelTimer DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolWakeCapableDeviceIdleOtherStates[] =
{
{ PwrPolSx, WdfDevStatePwrPolDeviceIdleSleeping DEBUGGED_EVENT },
{ PwrPolStop, WdfDevStatePwrPolDeviceIdleStopping TRAP_ON_EVENT },
{ PwrPolSurpriseRemove,WdfDevStatePwrPolDeviceIdleStopping DEBUGGED_EVENT },
{ PwrPolS0IdlePolicyChanged, WdfDevStatePwrPolDeviceIdleReturnToActive TRAP_ON_EVENT },
{ PwrPolIoPresent, WdfDevStatePwrPolDeviceIdleReturnToActive DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolSleepingWakePowerDownOtherStates[] =
{
{ PwrPolPowerDown, WdfDevStatePwrPolSleepingPowerDownNotProcessed TRAP_ON_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolTimerExpiredWakeCapablePowerDownOtherStates[] =
{
{ PwrPolPowerDown, WdfDevStatePwrPolTimerExpiredWakeCapablePowerDownNotProcessed TRAP_ON_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolTimerExpiredWakeCapableSendWakeOtherStates[] =
{
{ PwrPolWakeFailed, WdfDevStatePwrPolTimerExpiredWakeCompletedDisarm DEBUGGED_EVENT },
{ PwrPolWakeSuccess, WdfDevStatePwrPolTimerExpiredWakeSucceeded DEBUGG
没有合适的资源?快使用搜索试试~ 我知道了~
微软WDF驱动模型开源代码
共558个文件
cpp:227个
hpp:166个
h:159个
5星 · 超过95%的资源 需积分: 50 61 下载量 137 浏览量
2015-03-21
16:28:39
上传
评论
收藏 1.75MB ZIP 举报
温馨提示
Windows Driver Frameworks WDF 的源代码 WDF 是一组库文件 帮助开发者为设备开发高质量的驱动程序 对做windows驱动的猿媛们很有参考价值哦
资源推荐
资源详情
资源评论
收起资源包目录
微软WDF驱动模型开源代码 (558个子文件)
wudfx_i.c 2KB
probeandlock.c 1KB
powerpolicystatemachine.cpp 255KB
vfwdfdynamics.cpp 216KB
fxpkgpnp.cpp 190KB
fxioqueue.cpp 187KB
powerstatemachine.cpp 137KB
vfwdfdynamics.cpp 125KB
pnpstatemachine.cpp 119KB
fxrequestapi.cpp 100KB
fxchildlist.cpp 98KB
fxrequest.cpp 86KB
fxdmatransaction.cpp 81KB
fxiotarget.cpp 76KB
fxdeviceinitapi.cpp 76KB
fxdeviceapi.cpp 67KB
fxusbdevice.cpp 67KB
fxdevice.cpp 63KB
fxpkggeneral.cpp 60KB
fxiotargetapi.cpp 58KB
fxdeviceum.cpp 55KB
interruptobject.cpp 54KB
fxusbpipe.cpp 54KB
fxwmiirphandler.cpp 52KB
fxpkgio.cpp 50KB
globals.cpp 48KB
fxpkgpdo.cpp 46KB
poweridlestatemachine.cpp 46KB
fxregistryapi.cpp 41KB
fxusbdeviceapi.cpp 40KB
fxdeviceapium.cpp 39KB
fxdmatransactionapi.cpp 39KB
fxioqueueapi.cpp 37KB
fxpkgfdo.cpp 37KB
fxinterruptapi.cpp 37KB
fxdmaenabler.cpp 34KB
fxdeviceapikm.cpp 34KB
fxusbdevicekm.cpp 33KB
fxbugcheckcallback.cpp 33KB
fxirpum.cpp 32KB
fxobjectstatemachine.cpp 32KB
fxusbinterface.cpp 31KB
fxresourceapi.cpp 30KB
fxusbdeviceum.cpp 29KB
fxobject.cpp 28KB
fxdevicekm.cpp 28KB
fxverifierlock.cpp 27KB
fxchildlistapi.cpp 26KB
vfeventhooks.cpp 25KB
version.cpp 24KB
fxrequestkm.cpp 24KB
fxusbpipeapi.cpp 23KB
fxirpqueue.cpp 23KB
fxiotargetremote.cpp 23KB
interruptobjectum.cpp 22KB
fxtelemetrykm.cpp 22KB
fxrequestbase.cpp 22KB
fxresourcecollectionum.cpp 21KB
fxpkgpnpkm.cpp 20KB
fxwmiinstance.cpp 20KB
fxtimer.cpp 20KB
usbutil.cpp 19KB
verifier.cpp 19KB
fxresourcecollection.cpp 19KB
wdfpool.cpp 19KB
fxiotargetremoteum.cpp 18KB
handleapi.cpp 18KB
fxdriver.cpp 17KB
poxinterface.cpp 16KB
fxlibrarycommon.cpp 16KB
notpowerpolicyownerstatemachine.cpp 16KB
fxlibrarycommon.cpp 15KB
fxioqueuekm.cpp 15KB
fxfileobject.cpp 15KB
fxpkgfdokm.cpp 15KB
tracingum.cpp 15KB
fxiotargetkm.cpp 15KB
fxdmaenablerapi.cpp 15KB
fxdriverapi.cpp 15KB
interruptobjectkm.cpp 14KB
fxwmiprovider.cpp 14KB
fxcxdeviceinitapi.cpp 14KB
fxworkitem.cpp 13KB
fxsystemthread.cpp 13KB
fxtelemetryum.cpp 13KB
fdopower.cpp 13KB
tracing.cpp 13KB
fxtransactionedlist.cpp 13KB
fxdevicepdoapi.cpp 12KB
fxrequestapium.cpp 12KB
devicepwrreqstatemachine.cpp 12KB
fxusbinterfaceapi.cpp 12KB
poxinterfacekm.cpp 12KB
fxwmiapi.cpp 12KB
wakeinterruptstatemachine.cpp 12KB
pnpstatemachinekm.cpp 12KB
fxdevicefdoapi.cpp 12KB
fxusbdeviceapikm.cpp 11KB
fxiotargetapikm.cpp 11KB
selfmanagediostatemachine.cpp 11KB
共 558 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
- lvkiller2015-11-09学习下最新的windows驱动模型
- chengfangquan2016-11-12很不错,谢谢!
seniorwizard
- 粉丝: 1w+
- 资源: 23
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功