windows-nt/Source/XPSP1/NT/base/busdrv/acpi/ec/app/ec.c

154 lines
3 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
Wperf.c
Abstract:
Win32 application to display performance statictics.
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>
//
// global handles
//
UCHAR Usage[] = "ec: r addr len\n w addr value";
HANDLE DriverHandle;
UCHAR Buffer[256];
//
// Prototypes
//
BOOLEAN
InitDriver ();
int
__cdecl
main(USHORT argc, CHAR **argv)
{
BOOLEAN Write;
ULONG Offset, Value;
ULONG l, bw;
//
// Locate pentium perf driver
//
if (!InitDriver ()) {
printf ("acpiec.sys is not installed\n");
exit (1);
}
//
// Check args
//
if (argc < 3) {
printf (Usage);
exit (1);
}
switch (argv[1][0]) {
case 'r': Write = FALSE; break;
case 'w': Write = TRUE; break;
default: printf (Usage); exit(1);
}
Offset = atoi(argv[2]);
if (Offset > 255) {
printf ("ec: Offset must be 0-255\n");
exit (1);
}
Value = atoi(argv[3]);
if (Value > 255) {
printf ("ec: len/value must be 0-255\n");
exit (1);
}
l = SetFilePointer (DriverHandle, Offset, NULL, FILE_BEGIN);
if (l == -1) {
printf ("ec: Could not set file pointer\n");
exit (1);
}
if (Write) {
if (!WriteFile(DriverHandle, &Value, 1, &bw, NULL)) {
printf ("ec: Write error\n");
exit (1);
}
} else {
if (!ReadFile(DriverHandle, Buffer, Value, &bw, NULL)) {
printf ("ec: Read error\n");
exit (1);
}
for (l=0; l < Value; l++) {
printf ("%3d: %d\n", Offset + l, Buffer[l]);
}
}
return 0;
}
BOOLEAN
InitDriver ()
{
UNICODE_STRING DriverName;
NTSTATUS status;
OBJECT_ATTRIBUTES ObjA;
IO_STATUS_BLOCK IOSB;
SYSTEM_BASIC_INFORMATION BasicInfo;
PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION PPerfInfo;
int i;
RtlInitUnicodeString(&DriverName, L"\\Device\\ACPIEC");
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
);
return NT_SUCCESS(status) ? TRUE : FALSE;
}