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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|