/*++ Copyright (c) 1997-1998 Microsoft Corporation Module Name: ntapm.h Abstract: Author: Environment: kernel mode only Notes: Revision History: --*/ #include #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