1324{
1327 ULONG QueryLength = 0;
1328 ULONG RemainingTime = 0;
1331 WCHAR InfoBuffer[256];
1332 WCHAR TempBuffer[256];
1334 ULONG RemainingCapacity;
1339 DbgPrint(
"CmBattQueryInformation - Tag (%d) Device %d, Informationlevel %d\n",
1342 InfoLevel);
1343
1344
1347
1348
1349 switch (InfoLevel)
1350 {
1352
1355 break;
1356
1358
1359
1364 QueryData = BatteryReportingScale;
1366 break;
1367
1369
1370
1372 {
1373
1375
1376
1379
1380
1382
1383
1385
1386
1388
1389
1392 {
1393
1396 DbgPrint(
"CmBattQueryInformation: Can't calculate EstimatedTime.\n");
1397
1398
1401 {
1402
1405 DbgPrint(
"---------------------- PresentRate = BATTERY_UNKNOWN_RATE\n");
1406 }
1407
1408
1410 {
1411
1414 DbgPrint(
"---------------------- RemainingCapacity = BATTERY_UNKNOWN_CAPACITY\n");
1415 }
1416 }
1417 else
1418 {
1419
1421 {
1422
1424 DbgPrint(
"CmBattQueryInformation: Data Overflow in calculating Remaining Capacity.\n");
1425 }
1426 else
1427 {
1428
1429 RemainingTime = (RemainingCapacity * 3600) / -Rate;
1430 }
1431 }
1432 }
1433 else
1434 {
1436 }
1437
1438
1439 QueryData = &RemainingTime;
1440 QueryLength =
sizeof(
ULONG);
1441 break;
1442
1444
1445
1447 {
1449 }
1450 else
1451 {
1453 }
1454
1455
1456 InfoString.
Buffer = InfoBuffer;
1459
1460
1461 QueryData = InfoString.
Buffer;
1462 QueryLength = InfoString.
Length;
1463 break;
1464
1467
1468
1470 break;
1471
1473
1474
1476 {
1478 }
1479 else
1480 {
1482 }
1483
1484
1485 InfoString.
Buffer = InfoBuffer;
1488
1489
1490 QueryData = InfoString.
Buffer;
1491 QueryLength = InfoString.
Length;
1492 break;
1493
1495
1496
1498 {
1500 }
1501 else
1502 {
1504 }
1505
1506
1507 InfoString.
Buffer = InfoBuffer;
1510
1511
1512 TempString2.
Buffer = TempBuffer;
1514
1515
1518 {
1519
1521 {
1523 }
1524 else
1525 {
1527 }
1528
1529
1532 }
1533
1534
1536 {
1538 }
1539 else
1540 {
1542 }
1543
1544
1547
1548
1549 QueryData = InfoString.
Buffer;
1550 QueryLength = InfoString.
Length;
1551 break;
1552
1553 default:
1554
1555
1557 break;
1558 }
1559
1560
1563
1564
1566
1567
1569}
_In_ ULONG _In_ BATTERY_QUERY_INFORMATION_LEVEL _In_ LONG _In_ ULONG _Out_ PULONG ReturnedLength
_In_ ULONG _In_ BATTERY_QUERY_INFORMATION_LEVEL _In_ LONG AtRate
struct _BATTERY_INFORMATION BATTERY_INFORMATION
@ BatteryGranularityInformation
#define BATTERY_UNKNOWN_RATE
#define BATTERY_UNKNOWN_TIME
NTSTATUS NTAPI CmBattGetBatteryStatus(IN PCMBATT_DEVICE_EXTENSION DeviceExtension, IN ULONG Tag)
NTSTATUS NTAPI CmBattVerifyStaticInfo(_Inout_ PCMBATT_DEVICE_EXTENSION DeviceExtension, _In_ ULONG BatteryTag)
#define CMBATT_GENERIC_INFO
#define CMBATT_CAPACITY_BOGUS
#define CMBATT_DISCHARGE_TIME
#define ACPI_BATT_STAT_DISCHARG
NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeStringToString(PUNICODE_STRING Destination, PUNICODE_STRING Source)
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
#define KeQueryInterruptTime()
#define STATUS_BUFFER_TOO_SMALL
#define RtlCopyMemory(Destination, Source, Length)
#define STATUS_INVALID_DEVICE_REQUEST
#define STATUS_INVALID_PARAMETER
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength