⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 powermanagement.c

📁 此驱动程序是SATA功能的PCI卡为例
💻 C
字号:
/******************************************************************************
 *
 * File Name:
 *
 *      PowerManagement.c
 *
 * Description:
 *
 *      Power Management functions
 *
 * Revision History:
 *
 *      10-11-07 : Silicon Image 1.00
 *
 ******************************************************************************/

#define INITGUID		// initialize GUID_INTERFACE_HighPoint1520 in this module

#include "Sil3124.h"
#pragma code_seg("PAGE") // start PAGE section
/******************************************************************************
 *
 * Function   :  DispatchPower
 *
 * Description:  Handles power requests
 *
 ******************************************************************************/
NTSTATUS DispatchPower(IN PDEVICE_OBJECT fdo,
					   IN PIRP pIrp)
{												//DispatchPower	
	
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION)fdo->DeviceExtension;

	NTSTATUS           status;
	PIO_STACK_LOCATION pIrpStack;

    
    pIrpStack = IoGetCurrentIrpStackLocation(pIrp);


    DebugPrint("Sil3124: Power Start.");

   status = STATUS_SUCCESS;
    switch (pIrpStack->MinorFunction)
    {  
    case IRP_MN_SET_POWER:
        DebugPrint("IRP_MN_SET_POWER.");
        if (pIrpStack->Parameters.Power.Type == SystemPowerState)
        {
            DebugPrint("Sil3124: SystemContext = 0x%x  SystemPowerState = 0x%x.",
                     pIrpStack->Parameters.Power.SystemContext,
                     pIrpStack->Parameters.Power.State.SystemState);
        }
        else
        {
            DebugPrint("Sil3124: SystemContext = 0x%x  DevicePowerState = 0x%x.",
                     pIrpStack->Parameters.Power.SystemContext,
                     pIrpStack->Parameters.Power.State.DeviceState);
        }
		
        status = DefaultPowerHandler(fdo,pIrp);
        break;

    case IRP_MN_QUERY_POWER:
        DebugPrint("Sil3124: IRP_MN_QUERY_POWER");
		
		status = DefaultPowerHandler(fdo,pIrp);
        break;
	case IRP_MN_WAIT_WAKE:
        DebugPrint("IRP_MN_WAIT_WAKE.");
        status = DefaultPowerHandler(fdo,pIrp);
        break;

    case IRP_MN_POWER_SEQUENCE:
        DebugPrint("IRP_MN_POWER_SEQUENCE.");
        status = DefaultPowerHandler(fdo,pIrp);
        break;
    default:
        DebugPrint("Unsupported IRP_MN_Xxx (0x%x)\n", pIrpStack->MinorFunction);
        status = DefaultPowerHandler(fdo,pIrp);
        break;
    }

    return status;
	
}											//DispatchPower

/******************************************************************************
 *
 * Function   :  DefaultPowerHandler
 *
 * Description:  Handle defaults power requests
 *
 ******************************************************************************/

NTSTATUS DefaultPowerHandler(IN PDEVICE_OBJECT fdo,
							 IN PIRP pIrp)
{											//DefaultPowerHandler
    NTSTATUS status;
	PoStartNextPowerIrp(pIrp);		// Must be done while we own the IRP
        
    IoSkipCurrentIrpStackLocation(pIrp);
	status = PoCallDriver(
			((DEVICE_EXTENSION *)fdo->DeviceExtension)->pLowerDeviceObject,pIrp);
	if (status == STATUS_SUCCESS)
		DebugPrint("QueryPower Irp is success,the bus driver complete this require successfully");
	else if (status == STATUS_PENDING)
		DebugPrint("QueryPower Irp has been queued..");
    return status;
}											//DefaultPowerHandler
#pragma code_seg()	// end PAGE section

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -