218 lines
3.8 KiB
C
218 lines
3.8 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1997-1998 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
ntapm.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
kernel mode only
|
||
|
|
||
|
Notes:
|
||
|
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include <ntapmsdk.h>
|
||
|
|
||
|
#define APM_INSTANCE_IDS L"0000"
|
||
|
#define APM_INSTANCE_IDS_LENGTH 5
|
||
|
|
||
|
|
||
|
#define NTAPM_PDO_NAME_APM_BATTERY L"\\Device\\NtApm_ApmBattery"
|
||
|
#define NTAPM_ID_APM_BATTERY L"NTAPM\\APMBATT\0\0"
|
||
|
|
||
|
|
||
|
#define NTAPM_POOL_TAG (ULONG) ' MPA'
|
||
|
#undef ExAllocatePool
|
||
|
#define ExAllocatePool(type, size) \
|
||
|
ExAllocatePoolWithTag (type, size, NTAPM_POOL_TAG);
|
||
|
|
||
|
|
||
|
|
||
|
extern PDRIVER_OBJECT NtApmDriverObject;
|
||
|
|
||
|
//
|
||
|
// A common header for the device extensions of the PDOs and FDO
|
||
|
//
|
||
|
|
||
|
typedef struct _COMMON_DEVICE_DATA
|
||
|
{
|
||
|
PDEVICE_OBJECT Self;
|
||
|
// A backpointer to the device object for which this is the extension
|
||
|
|
||
|
CHAR Reserved[3];
|
||
|
BOOLEAN IsFDO;
|
||
|
// A boolean to distringuish between PDO and FDO.
|
||
|
} COMMON_DEVICE_DATA, *PCOMMON_DEVICE_DATA;
|
||
|
|
||
|
//
|
||
|
// The device extension for the PDOs.
|
||
|
// That is the game ports of which this bus driver enumerates.
|
||
|
// (IE there is a PDO for the 201 game port).
|
||
|
//
|
||
|
|
||
|
typedef struct _PDO_DEVICE_DATA
|
||
|
{
|
||
|
COMMON_DEVICE_DATA;
|
||
|
|
||
|
PDEVICE_OBJECT ParentFdo;
|
||
|
// A back pointer to the bus
|
||
|
|
||
|
PWCHAR HardwareIDs;
|
||
|
// An array of (zero terminated wide character strings).
|
||
|
// The array itself also null terminated
|
||
|
|
||
|
ULONG UniqueID;
|
||
|
// Globally unique id in the system
|
||
|
|
||
|
} PDO_DEVICE_DATA, *PPDO_DEVICE_DATA;
|
||
|
|
||
|
|
||
|
//
|
||
|
// The device extension of the bus itself. From whence the PDO's are born.
|
||
|
//
|
||
|
|
||
|
typedef struct _FDO_DEVICE_DATA
|
||
|
{
|
||
|
COMMON_DEVICE_DATA;
|
||
|
|
||
|
PDEVICE_OBJECT UnderlyingPDO;
|
||
|
PDEVICE_OBJECT TopOfStack;
|
||
|
// the underlying bus PDO and the actual device object to which our
|
||
|
// FDO is attached
|
||
|
|
||
|
} FDO_DEVICE_DATA, *PFDO_DEVICE_DATA;
|
||
|
|
||
|
NTSTATUS
|
||
|
ApmAddHelper();
|
||
|
|
||
|
NTSTATUS
|
||
|
NtApm_AddDevice(
|
||
|
IN PDRIVER_OBJECT DriverObject,
|
||
|
IN PDEVICE_OBJECT BusPhysicalDeviceObject
|
||
|
);
|
||
|
|
||
|
|
||
|
NTSTATUS
|
||
|
NtApm_PnP (
|
||
|
IN PDEVICE_OBJECT DeviceObject,
|
||
|
IN PIRP Irp
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
NtApm_FDO_PnP (
|
||
|
IN PDEVICE_OBJECT DeviceObject,
|
||
|
IN PIRP Irp,
|
||
|
IN PIO_STACK_LOCATION IrpStack,
|
||
|
IN PFDO_DEVICE_DATA DeviceData
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
NtApm_PDO_PnP (
|
||
|
IN PDEVICE_OBJECT DeviceObject,
|
||
|
IN PIRP Irp,
|
||
|
IN PIO_STACK_LOCATION IrpStack,
|
||
|
IN PPDO_DEVICE_DATA DeviceData
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
NtApm_StartFdo (
|
||
|
IN PFDO_DEVICE_DATA FdoData,
|
||
|
IN PCM_PARTIAL_RESOURCE_LIST PartialResourceList,
|
||
|
IN PCM_PARTIAL_RESOURCE_LIST PartialResourceListTranslated
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
NtApm_Power (
|
||
|
IN PDEVICE_OBJECT DeviceObject,
|
||
|
IN PIRP Irp
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
NtApm_FDO_Power (
|
||
|
PFDO_DEVICE_DATA Data,
|
||
|
PIRP Irp
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
NtApm_PDO_Power (
|
||
|
PPDO_DEVICE_DATA PdoData,
|
||
|
PIRP Irp
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
NtApm_CreatePdo (
|
||
|
PFDO_DEVICE_DATA FdoData,
|
||
|
PWCHAR PdoName,
|
||
|
PDEVICE_OBJECT * PDO
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
NtApm_InitializePdo(
|
||
|
PDEVICE_OBJECT Pdo,
|
||
|
PFDO_DEVICE_DATA FdoData,
|
||
|
PWCHAR Id
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
ApmInProgress();
|
||
|
|
||
|
|
||
|
ULONG
|
||
|
DoApmReportBatteryStatus();
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// APM extractor values
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// APM_GET_POWER_STATUS
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// EBX
|
||
|
// BH = Ac Line Status
|
||
|
//
|
||
|
#define APM_LINEMASK 0xff00
|
||
|
#define APM_LINEMASK_SHIFT 8
|
||
|
#define APM_GET_LINE_OFFLINE 0
|
||
|
#define APM_GET_LINE_ONLINE 1
|
||
|
#define APM_GET_LINE_BACKUP 2
|
||
|
#define APM_GET_LINE_UNKNOWN 0xff
|
||
|
|
||
|
//
|
||
|
// ECX
|
||
|
// CL = Percentage remaining
|
||
|
// CH = flags
|
||
|
//
|
||
|
#define APM_PERCENT_MASK 0xff
|
||
|
#define APM_BATT_HIGH 0x0100
|
||
|
#define APM_BATT_LOW 0x0200
|
||
|
#define APM_BATT_CRITICAL 0x0400
|
||
|
#define APM_BATT_CHARGING 0x0800
|
||
|
#define APM_NO_BATT 0x1000
|
||
|
#define APM_NO_SYS_BATT 0x8000
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|