|
|
/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
Abstract:
Author:
Ken Reneris
Environment:
console
--*/
//
// set variable to define global variables
//
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <errno.h>
#include <malloc.h>
#include <stdlib.h>
#include <stdio.h>
#include <ntpoapi.h>
#include "..\cmbdrect.h"
//
// Prototypes
//
HANDLE InitDriver ( CHAR *NamePtr );
void Call_UID (HANDLE Driver) { NTSTATUS Status; IO_STATUS_BLOCK IOSB; UINT Data;
Status = NtDeviceIoControlFile( Driver, (HANDLE) NULL, // event
(PIO_APC_ROUTINE) NULL, (PVOID) NULL, &IOSB, IOCTL_CMBATT_UID, (PVOID) NULL, // input buffer
0, &Data, // output buffer
sizeof (Data) );
if (!NT_SUCCESS(Status)) { printf ("_UID Method failed. Status = 0x%08lx\n", Status); } else { printf("_UID returned: 0x%08lx\n", Data); };
}
void Call_STA (HANDLE Driver) { NTSTATUS Status; IO_STATUS_BLOCK IOSB; ULONG Data;
Status = NtDeviceIoControlFile( Driver, (HANDLE) NULL, // event
(PIO_APC_ROUTINE) NULL, (PVOID) NULL, &IOSB, IOCTL_CMBATT_STA, (PVOID) NULL, // input buffer
0, &Data, // output buffer
sizeof (Data) );
if (!NT_SUCCESS(Status)) { printf ("_STA Method failed. Status = 0x%08lx\n", Status); } else { printf("_STA returned: 0x%08lx\n", Data); };
}
void Call_PSR (HANDLE Driver) { NTSTATUS Status; IO_STATUS_BLOCK IOSB; ULONG Data;
Status = NtDeviceIoControlFile( Driver, (HANDLE) NULL, // event
(PIO_APC_ROUTINE) NULL, (PVOID) NULL, &IOSB, IOCTL_CMBATT_PSR, (PVOID) NULL, // input buffer
0, &Data, // output buffer
sizeof (Data) );
if (!NT_SUCCESS(Status)) { printf ("_PSR Method failed. Status = 0x%08lx\n", Status); } else { printf("_PSR returned: 0x%08lx\n", Data); };
}
void Call_BTP (HANDLE Driver) { NTSTATUS Status; IO_STATUS_BLOCK IOSB; ULONG Data;
printf ("Enter the Trip Point value (Hex): "); scanf ("%x", &Data); Status = NtDeviceIoControlFile( Driver, (HANDLE) NULL, // event
(PIO_APC_ROUTINE) NULL, (PVOID) NULL, &IOSB, IOCTL_CMBATT_BTP, &Data, // input buffer
sizeof (Data), (PVOID) NULL, // output buffer
0 );
if (!NT_SUCCESS(Status)) { printf ("\n_BTP Method failed. Status = 0x%08lx\n", Status); printf("\nSet trip point to 0x%08lx failed.\n", Data); } else { printf("\nTrip point set to 0x%08lx\n", Data); };
}
void Call_BIF (HANDLE Driver) { NTSTATUS Status; IO_STATUS_BLOCK IOSB; CM_BIF_BAT_INFO Data;
Status = NtDeviceIoControlFile( Driver, (HANDLE) NULL, // event
(PIO_APC_ROUTINE) NULL, (PVOID) NULL, &IOSB, IOCTL_CMBATT_BIF, (PVOID) NULL, // input buffer
0, &Data, // output buffer
sizeof (Data) );
if (!NT_SUCCESS(Status)) { printf ("_BIF Metod failed. Status = 0x%08lx\n", Status); } else { printf("_BIF returned:\n"); printf(" Power Unit = 0x%08lx\n", Data.PowerUnit); printf(" Design Capacity = 0x%08lx\n", Data.DesignCapacity); printf(" Last Full Charge Capacity = 0x%08lx\n", Data.LastFullChargeCapacity); printf(" Battery Technology = 0x%08lx\n", Data.BatteryTechnology); printf(" Design Voltage = 0x%08lx\n", Data.DesignVoltage); printf(" Design Capacity Of Warning = 0x%08lx\n", Data.DesignCapacityOfWarning); printf(" Design Capacity Of Low = 0x%08lx\n", Data.DesignCapacityOfLow); printf(" Battery Capacity Granularity 1 (low -> warning) = 0x%08lx\n", Data.BatteryCapacityGran_1); printf(" Battery Capacity Granularity 2 (warning -> full) = 0x%08lx\n", Data.BatteryCapacityGran_2); printf(" Model number = \"%s\"\n", Data.ModelNumber); printf(" Serial number = \"%s\"\n", Data.SerialNumber); printf(" Battery Type = \"%s\"\n", Data.BatteryType); printf(" OEM Information = \"%s\"\n", Data.OEMInformation); };
}
void Call_BST (HANDLE Driver) { NTSTATUS Status; IO_STATUS_BLOCK IOSB; CM_BST_BAT_INFO Data;
Status = NtDeviceIoControlFile( Driver, (HANDLE) NULL, // event
(PIO_APC_ROUTINE) NULL, (PVOID) NULL, &IOSB, IOCTL_CMBATT_BST, (PVOID) NULL, // input buffer
0, &Data, // output buffer
sizeof (Data) );
if (!NT_SUCCESS(Status)) { printf ("_BST Metod failed. Status = 0x%08lx\n", Status); } else { printf("_BST returned:\n"); printf(" Battery Status = 0x%08lx\n", Data.BatteryState); printf(" Present Rate = 0x%08lx\n", Data.PresentRate); printf(" Remaining Capacity = 0x%08lx\n", Data.RemainingCapacity); printf(" Present Voltage = 0x%08lx\n", Data.PresentVoltage); };
}
int __cdecl main(USHORT argc, CHAR **argv) { CHAR *NamePtr; ULONG cmd; HANDLE DriverHandle;
if (argc > 1) { NamePtr=argv[1]; } else { NamePtr = "ControlMethodBattery1"; }
//
// Locate driver
//
if (!(DriverHandle = InitDriver (NamePtr))) { printf ("CmBatt not found\n"); exit (1); }
while (1) { printf("\n\nOptions: (1)_UID (2)_STA (3)_PSR (4)_BTP (5)_BIF (6)_BST\n"); printf( ">>>>>>>> "); if (scanf ("%d", &cmd) != 1) { return (0); printf("\n\n"); }; printf("\n"); switch (cmd) { case 1 : Call_UID (DriverHandle); break; case 2 : Call_STA (DriverHandle); break; case 3 : Call_PSR (DriverHandle); break; case 4 : Call_BTP (DriverHandle); break; case 5 : Call_BIF (DriverHandle); break; case 6 : Call_BST (DriverHandle); break; } }
}
HANDLE InitDriver ( CHAR *NamePtr ) { UNICODE_STRING DriverName; ANSI_STRING AnsiName; NTSTATUS status; OBJECT_ATTRIBUTES ObjA; IO_STATUS_BLOCK IOSB; UCHAR strbuf[100]; HANDLE DriverHandle;
SYSTEM_POWER_CAPABILITIES powerCapabilities;
if (NT_SUCCESS (NtPowerInformation (SystemPowerCapabilities, NULL, 0, &powerCapabilities, sizeof (SYSTEM_POWER_CAPABILITIES) ))) { printf("NtPowerInformation returned: \n" " SystemBatteriesPresent = %d\n" " BatteriesAreShortTerm = %d\n", powerCapabilities.SystemBatteriesPresent, powerCapabilities.BatteriesAreShortTerm); }
sprintf (strbuf, "\\Device\\%s",NamePtr);
RtlInitAnsiString(&AnsiName, strbuf);
RtlAnsiStringToUnicodeString(&DriverName, &AnsiName, TRUE);
InitializeObjectAttributes( &ObjA, &DriverName, OBJ_CASE_INSENSITIVE, 0, 0 );
status = NtOpenFile ( &DriverHandle, // return handle
SYNCHRONIZE | FILE_READ_DATA | FILE_WRITE_DATA, // desired access
&ObjA, // Object
&IOSB, // io status block
FILE_SHARE_READ | FILE_SHARE_WRITE, // share access
FILE_SYNCHRONOUS_IO_ALERT // open options
);
if (!NT_SUCCESS(status)) { printf ("Device name %s Error 0x%08lx\n", strbuf, status); return NULL; } else { printf ("Opened Device name %s\n", strbuf); return DriverHandle; } }
|