ReactOS 0.4.16-dev-1946-g52006dd
cmexec.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS ACPI-Compliant Control Method Battery
3 * LICENSE: BSD - See COPYING.ARM in the top level directory
4 * FILE: boot/drivers/bus/acpi/cmbatt/cmexec.c
5 * PURPOSE: ACPI Method Execution/Evaluation Glue
6 * PROGRAMMERS: ReactOS Portable Systems Group
7 */
8
9/* INCLUDES *******************************************************************/
10
11#include "cmbatt.h"
12
13#include <acpiioct.h>
14
15typedef struct _ACPI_PACKAGE_FIELD
16{
21
22/* FUNCTIONS ******************************************************************/
23
28{
30
31 /* Must have an integer */
32 if (Argument->Type != ACPI_METHOD_ARGUMENT_INTEGER)
33 {
34 /* Not an integer, fail */
36 if (CmBattDebug & 0x4C)
37 DbgPrint("GetDwordElement: Object contained wrong data type - %d\n",
38 Argument->Type);
39 }
40 else
41 {
42 /* Read the integer value */
43 *Value = Argument->Argument;
45 }
46
47 /* Return status */
48 return Status;
49}
50
55{
57
58 /* Must have a string of buffer */
59 if ((Argument->Type == ACPI_METHOD_ARGUMENT_STRING) ||
60 (Argument->Type == ACPI_METHOD_ARGUMENT_BUFFER))
61 {
62 /* String must be less than 256 characters */
63 if (Argument->DataLength < 256)
64 {
65 /* Copy the buffer */
66 RtlCopyMemory(Value, Argument->Data, Argument->DataLength);
68 }
69 else
70 {
71 /* The buffer is too small (the string is too large) */
73 if (CmBattDebug & 0x4C)
74 DbgPrint("GetStringElement: return buffer not big enough - %d\n", Argument->DataLength);
75 }
76 }
77 else
78 {
79 /* Not valid string data */
81 if (CmBattDebug & 0x4C)
82 DbgPrint("GetStringElement: Object contained wrong data type - %d\n", Argument->Type);
83 }
84
85 /* Return the status */
86 return Status;
87}
88
97{
98 PIRP Irp;
102 PAGED_CODE();
103
104 /* Initialize our wait event */
106
107 /* Allocate the IRP */
114 0,
115 &Event,
117 if (!Irp)
118 {
119 /* No IRP, fail */
120 if (CmBattDebug & 0x4C)
121 DbgPrint("CmBattSendDownStreamIrp: Failed to allocate Irp\n");
123 }
124
125 /* Call ACPI */
126 if (CmBattDebug & 0x40)
127 DbgPrint("CmBattSendDownStreamIrp: Irp %x [Tid] %x\n",
130 if (Status == STATUS_PENDING)
131 {
132 /* Wait for completion */
134 Executive,
136 FALSE,
137 NULL);
138 Status = Irp->IoStatus.Status;
139 }
140
141 /* Check if caller wanted output */
142 if (OutputBuffer)
143 {
144 /* Make sure it's valid ACPI output buffer */
146 !(OutputBuffer->Count))
147 {
148 /* It isn't, so set failure code */
150 }
151 }
152
153 /* Return status */
154 if (CmBattDebug & 0x40)
155 DbgPrint("CmBattSendDownStreamIrp: Irp %x completed %x! [Tid] %x\n",
157 return Status;
158}
159
160static
164 _In_ PCMBATT_DEVICE_EXTENSION DeviceExtension,
165 _In_ ULONG PackageName,
166 _In_ ULONG OutputBufferSize,
167 _In_ PACPI_PACKAGE_FIELD PackageFields,
168 _In_ ULONG PackageFieldCount)
169{
173 PACPI_METHOD_ARGUMENT Argument;
174 ULONG i;
175 PAGED_CODE();
176
178 OutputBufferSize,
179 'MtaB');
180 if (!OutputBuffer)
181 {
183 DbgPrint("%s: Failed to allocate Buffer\n", FunctionName);
185 }
186
187 /* Initialize to zero */
188 RtlZeroMemory(OutputBuffer, OutputBufferSize);
189
190 /* Request the ACPI method */
191 *(PULONG)InputBuffer.MethodName = PackageName;
193
194 /* Send it to ACPI */
195 Status = CmBattSendDownStreamIrp(DeviceExtension->AttachedDevice,
198 sizeof(InputBuffer),
200 OutputBufferSize);
201 if (!NT_SUCCESS(Status))
202 {
204 DbgPrint("%s: Failed 0x%08x method on device %x - Status (0x%x)\n",
205 FunctionName, PackageName, DeviceExtension->DeviceId, Status);
207 return Status;
208 }
209
210 /* Check if we got the right number of elements */
211 if (OutputBuffer->Count != PackageFieldCount)
212 {
214 DbgPrint("%s: 0x%08x method returned %d elements (requires %d)\n",
215 FunctionName, PackageName, OutputBuffer->Count, PackageFieldCount);
218 }
219
220 Argument = OutputBuffer->Argument;
221 for (i = 0; i < PackageFieldCount && NT_SUCCESS(Status); i++)
222 {
223 if (PackageFields[i].IsString)
224 Status = GetStringElement(Argument, PackageFields[i].Data);
225 else
226 Status = GetDwordElement(Argument, PackageFields[i].Data);
227 if (!NT_SUCCESS(Status))
228 {
230 DbgPrint("%s: Failed to get %s\n", FunctionName, PackageFields[i].Name);
231 break;
232 }
233 Argument = ACPI_METHOD_NEXT_ARGUMENT(Argument);
234 }
235
237 return Status;
238}
239
241NTAPI
243 OUT PULONG PsrData)
244{
248 PAGED_CODE();
249 if (CmBattDebug & 0x40)
250 DbgPrint("CmBattGetPsrData: Entered with Pdo %x Tid %x\n",
252
253 /* Initialize to zero */
254 ASSERT(PsrData != NULL);
255 *PsrData = 0;
256
257 /* Request the _PSR method */
258 *(PULONG)InputBuffer.MethodName = 'RSP_';
260
261 /* Send it to ACPI */
265 sizeof(InputBuffer),
267 sizeof(OutputBuffer));
268 if (NT_SUCCESS(Status))
269 {
270 /* Read the result */
271 Status = GetDwordElement(OutputBuffer.Argument, PsrData);
272 if (CmBattDebug & 0x440)
273 DbgPrint("CmBattGetPsrData: _PSR method returned %x \n", *PsrData);
274 }
275 else if (CmBattDebug & 0x44C)
276 {
277 /* Failure */
278 DbgPrint("CmBattGetPsrData: Failed _PSR method - Status (0x%x)\n", Status);
279 }
280
281 /* Return status */
282 return Status;
283}
284
286NTAPI
288 OUT PULONG StaData)
289{
293 PAGED_CODE();
294 if (CmBattDebug & 0x40)
295 DbgPrint("CmBattGetStaData: Entered with Pdo %x Tid %x\n",
297
298 /* Initialize to zero */
299 ASSERT(StaData != NULL);
300 *StaData = 0;
301
302 /* Request the _STA method */
303 *(PULONG)InputBuffer.MethodName = 'ATS_';
305
306 /* Send it to ACPI */
310 sizeof(InputBuffer),
312 sizeof(OutputBuffer));
313 if (NT_SUCCESS(Status))
314 {
315 /* Read the result */
316 Status = GetDwordElement(OutputBuffer.Argument, StaData);
317 if (CmBattDebug & 0x440)
318 DbgPrint("CmBattGetStaData: _STA method returned %x \n", *StaData);
319 }
320 else if (CmBattDebug & 0x44C)
321 {
322 /* Failure */
323 DbgPrint("CmBattGetStaData: Failed _STA method - Status (0x%x)\n", Status);
325 }
326
327 /* Return status */
328 return Status;
329}
330
332NTAPI
334 OUT PULONG UniqueId)
335{
339 PAGED_CODE();
340 if (CmBattDebug & 0x40)
341 DbgPrint("CmBattGetUniqueId: Entered with Pdo %x Tid %x\n",
343
344 /* Initialize to zero */
345 ASSERT(UniqueId != NULL);
346 *UniqueId = 0;
347
348 /* Request the _UID method */
349 *(PULONG)InputBuffer.MethodName = 'DIU_';
351
352 /* Send it to ACPI */
356 sizeof(InputBuffer),
358 sizeof(OutputBuffer));
359 if (NT_SUCCESS(Status))
360 {
361 /* Read the result */
362 Status = GetDwordElement(OutputBuffer.Argument, UniqueId);
363 if (CmBattDebug & 0x440)
364 DbgPrint("CmBattGetUniqueId: _UID method returned %x \n", *UniqueId);
365 }
366 else if (CmBattDebug & 0x44C)
367 {
368 /* Failure */
369 DbgPrint("CmBattGetUniqueId: Failed _UID method - Status (0x%x)\n", Status);
371 }
372
373 /* Return status */
374 return Status;
375}
376
378NTAPI
380 IN ULONG AlarmValue)
381{
384 PAGED_CODE();
385 if (CmBattDebug & 0x440)
386 DbgPrint("CmBattSetTripPoint: _BTP Alarm Value %x Device %x Tid %x\n",
387 AlarmValue, DeviceExtension->DeviceId, KeGetCurrentThread());
388
389 /* Request the _BTP method */
390 *(PULONG)InputBuffer.MethodName = 'PTB_';
392 InputBuffer.IntegerArgument = AlarmValue;
393
394 /* Send it to ACPI */
395 Status = CmBattSendDownStreamIrp(DeviceExtension->AttachedDevice,
398 sizeof(InputBuffer),
399 NULL,
400 0);
401 if (!(NT_SUCCESS(Status)) && (CmBattDebug & 0x440))
402 DbgPrint("CmBattSetTripPoint: Failed _BTP method on device %x - Status (0x%x)\n",
403 DeviceExtension->DeviceId, Status);
404
405 /* Return status */
406 return Status;
407}
408
410NTAPI
412 PACPI_BIF_DATA BifData)
413{
414 ACPI_PACKAGE_FIELD BifFields[] = {
415 { "PowerUnit", FALSE, &BifData->PowerUnit },
416 { "DesignCapacity", FALSE, &BifData->DesignCapacity },
417 { "LastFullCapacity", FALSE, &BifData->LastFullCapacity },
418 { "BatteryTechnology", FALSE, &BifData->BatteryTechnology },
419 { "DesignVoltage", FALSE, &BifData->DesignVoltage },
420 { "DesignCapacityWarning", FALSE, &BifData->DesignCapacityWarning },
421 { "DesignCapacityLow", FALSE, &BifData->DesignCapacityLow },
422 { "BatteryCapacityGranularity1", FALSE, &BifData->BatteryCapacityGranularity1 },
423 { "BatteryCapacityGranularity2", FALSE, &BifData->BatteryCapacityGranularity2 },
424 { "ModelNumber", TRUE, &BifData->ModelNumber },
425 { "SerialNumber", TRUE, &BifData->SerialNumber },
426 { "BatteryType", TRUE, &BifData->BatteryType },
427 { "OemInfo", TRUE, &BifData->OemInfo },
428 };
429 PAGED_CODE();
430
432 DbgPrint("CmBattGetBifData: Buffer (0x%x) Device %x Tid %x\n",
433 BifData, DeviceExtension->DeviceId, KeGetCurrentThread());
434
435 /* Request the _BIF method */
436 /* Note that _BIF method is deprecated since ACPI 4.0, and replaced by _BIX method.
437 * However, VirtualBox 7.0 only support _BIF method.
438 */
439 return CmBattCallAcpiPackage("CmBattGetBifData",
440 DeviceExtension,
441 'FIB_',
442 512,
443 BifFields,
444 RTL_NUMBER_OF(BifFields));
445}
446
466NTAPI
468 _In_ PCMBATT_DEVICE_EXTENSION DeviceExtension,
469 _Out_ PACPI_BIX_DATA BixData)
470{
471 ACPI_PACKAGE_FIELD BixFields[] = {
472 { "Revision", FALSE, &BixData->Revision },
473 { "PowerUnit", FALSE, &BixData->PowerUnit },
474 { "DesignCapacity", FALSE, &BixData->DesignCapacity },
475 { "LastFullCapacity", FALSE, &BixData->LastFullCapacity },
476 { "BatteryTechnology", FALSE, &BixData->BatteryTechnology },
477 { "DesignVoltage", FALSE, &BixData->DesignVoltage },
478 { "DesignCapacityWarning", FALSE, &BixData->DesignCapacityWarning },
479 { "DesignCapacityLow", FALSE, &BixData->DesignCapacityLow },
480 { "CycleCount", FALSE, &BixData->CycleCount },
481 { "Accuracy", FALSE, &BixData->Accuracy },
482 { "MaxSampleTime", FALSE, &BixData->MaxSampleTime },
483 { "MinSampleTime", FALSE, &BixData->MinSampleTime },
484 { "MaxAverageInterval", FALSE, &BixData->MaxAverageInterval },
485 { "MinAverageInterval", FALSE, &BixData->MinAverageInterval },
486 { "BatteryCapacityGranularity1", FALSE, &BixData->BatteryCapacityGranularity1 },
487 { "BatteryCapacityGranularity2", FALSE, &BixData->BatteryCapacityGranularity2 },
488 { "ModelNumber", TRUE, &BixData->ModelNumber },
489 { "SerialNumber", TRUE, &BixData->SerialNumber },
490 { "BatteryType", TRUE, &BixData->BatteryType },
491 { "OemInfo", TRUE, &BixData->OemInfo },
492 { "SwapCapability", FALSE, &BixData->SwapCapability },
493 };
494 PAGED_CODE();
495
497 {
498 DbgPrint("CmBattGetBixData: Buffer (0x%x) Device %x Tid %x\n",
499 BixData, DeviceExtension->DeviceId, KeGetCurrentThread());
500 }
501
502 /* Request the ACPI driver to get the _BIX data for us */
503 return CmBattCallAcpiPackage("CmBattGetBifData",
504 DeviceExtension,
505 'XIB_',
506 512,
507 BixFields,
508 RTL_NUMBER_OF(BixFields));
509}
510
512NTAPI
514 PACPI_BST_DATA BstData)
515{
516 ACPI_PACKAGE_FIELD BstFields[] = {
517 { "State", FALSE, &BstData->State },
518 { "PresentRate", FALSE, &BstData->PresentRate },
519 { "RemainingCapacity", FALSE, &BstData->RemainingCapacity },
520 { "PresentVoltage", FALSE, &BstData->PresentVoltage },
521 };
522 PAGED_CODE();
523
525 DbgPrint("CmBattGetBstData: Buffer (0x%x) Device %x Tid %x\n",
526 BstData, DeviceExtension->DeviceId, KeGetCurrentThread());
527
528
529 return CmBattCallAcpiPackage("CmBattGetBstData",
530 DeviceExtension,
531 'TSB_',
532 512,
533 BstFields,
534 RTL_NUMBER_OF(BstFields));
535}
536
537/* EOF */
#define PAGED_CODE()
unsigned char BOOLEAN
#define RTL_NUMBER_OF(x)
Definition: RtlRegistry.c:12
ACPI_METHOD_ARGUMENT UNALIGNED * PACPI_METHOD_ARGUMENT
Definition: acpiioct.h:71
#define ACPI_METHOD_NEXT_ARGUMENT(Argument)
Definition: acpiioct.h:150
#define ACPI_METHOD_ARGUMENT_STRING
Definition: acpiioct.h:22
#define ACPI_METHOD_ARGUMENT_INTEGER
Definition: acpiioct.h:21
#define ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER_SIGNATURE
Definition: acpiioct.h:8
#define ACPI_EVAL_INPUT_BUFFER_SIGNATURE
Definition: acpiioct.h:7
#define ACPI_METHOD_ARGUMENT_BUFFER
Definition: acpiioct.h:23
#define ACPI_EVAL_OUTPUT_BUFFER_SIGNATURE
Definition: acpiioct.h:11
#define IOCTL_ACPI_EVAL_METHOD
Definition: acpiioct.h:178
ACPI_EVAL_OUTPUT_BUFFER UNALIGNED * PACPI_EVAL_OUTPUT_BUFFER
Definition: acpiioct.h:90
ACPI_BUFFER *RetBuffer ACPI_BUFFER *RetBuffer char ACPI_WALK_RESOURCE_CALLBACK void *Context ACPI_BUFFER *RetBuffer UINT16 ACPI_RESOURCE **ResourcePtr ACPI_GENERIC_ADDRESS *Reg UINT32 *ReturnValue UINT8 UINT8 *Slp_TypB ACPI_PHYSICAL_ADDRESS PhysicalAddress64 UINT32 UINT32 *TimeElapsed UINT32 ACPI_STATUS const char UINT32 ACPI_STATUS const char UINT32 const char * FunctionName
Definition: acpixf.h:1279
LONG NTSTATUS
Definition: precomp.h:26
ULONG CmBattDebug
Definition: cmbatt.c:17
#define CMBATT_ACPI_WARNING
Definition: cmbatt.h:38
#define CMBATT_ACPI_ASSERT
Definition: cmbatt.h:43
#define CMBATT_GENERIC_WARNING
Definition: cmbatt.h:37
#define CMBATT_ACPI_ENTRY_EXIT
Definition: cmbatt.h:41
static NTSTATUS CmBattCallAcpiPackage(_In_ LPCSTR FunctionName, _In_ PCMBATT_DEVICE_EXTENSION DeviceExtension, _In_ ULONG PackageName, _In_ ULONG OutputBufferSize, _In_ PACPI_PACKAGE_FIELD PackageFields, _In_ ULONG PackageFieldCount)
Definition: cmexec.c:162
NTSTATUS NTAPI CmBattSendDownStreamIrp(IN PDEVICE_OBJECT DeviceObject, IN ULONG IoControlCode, IN PVOID InputBuffer, IN ULONG InputBufferLength, IN PACPI_EVAL_OUTPUT_BUFFER OutputBuffer, IN ULONG OutputBufferLength)
Definition: cmexec.c:91
NTSTATUS NTAPI CmBattSetTripPoint(IN PCMBATT_DEVICE_EXTENSION DeviceExtension, IN ULONG AlarmValue)
Definition: cmexec.c:379
struct _ACPI_PACKAGE_FIELD * PACPI_PACKAGE_FIELD
NTSTATUS NTAPI GetDwordElement(IN PACPI_METHOD_ARGUMENT Argument, OUT PULONG Value)
Definition: cmexec.c:26
struct _ACPI_PACKAGE_FIELD ACPI_PACKAGE_FIELD
NTSTATUS NTAPI CmBattGetBifData(PCMBATT_DEVICE_EXTENSION DeviceExtension, PACPI_BIF_DATA BifData)
Definition: cmexec.c:411
NTSTATUS NTAPI CmBattGetUniqueId(IN PDEVICE_OBJECT DeviceObject, OUT PULONG UniqueId)
Definition: cmexec.c:333
NTSTATUS NTAPI CmBattGetBstData(PCMBATT_DEVICE_EXTENSION DeviceExtension, PACPI_BST_DATA BstData)
Definition: cmexec.c:513
NTSTATUS NTAPI CmBattGetStaData(IN PDEVICE_OBJECT DeviceObject, OUT PULONG StaData)
Definition: cmexec.c:287
NTSTATUS NTAPI GetStringElement(IN PACPI_METHOD_ARGUMENT Argument, OUT PCHAR Value)
Definition: cmexec.c:53
NTSTATUS NTAPI CmBattGetBixData(_In_ PCMBATT_DEVICE_EXTENSION DeviceExtension, _Out_ PACPI_BIX_DATA BixData)
Retrieves the eXtended static battery information from the ACPI _BIX method.
Definition: cmexec.c:467
NTSTATUS NTAPI CmBattGetPsrData(IN PDEVICE_OBJECT DeviceObject, OUT PULONG PsrData)
Definition: cmexec.c:242
_In_ PIRP Irp
Definition: csq.h:116
LPWSTR Name
Definition: desk.c:124
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
Definition: env_spec_w32.h:478
#define KeInitializeEvent(pEvt, foo, foo2)
Definition: env_spec_w32.h:477
#define PagedPool
Definition: env_spec_w32.h:308
Status
Definition: gdiplustypes.h:25
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define DbgPrint
Definition: hal.h:12
#define KeGetCurrentThread
Definition: hal.h:55
#define ASSERT(a)
Definition: mode.c:44
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1109
#define KernelMode
Definition: asm.h:38
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
@ SynchronizationEvent
static OUT PIO_STATUS_BLOCK IoStatusBlock
Definition: pipe.c:75
PIRP NTAPI IoBuildDeviceIoControlRequest(IN ULONG IoControlCode, IN PDEVICE_OBJECT DeviceObject, IN PVOID InputBuffer, IN ULONG InputBufferLength, IN PVOID OutputBuffer, IN ULONG OutputBufferLength, IN BOOLEAN InternalDeviceIoControl, IN PKEVENT Event, IN PIO_STATUS_BLOCK IoStatusBlock)
Definition: irp.c:881
#define IoCallDriver
Definition: irp.c:1225
#define STATUS_ACPI_INVALID_DATA
Definition: ntstatus.h:1662
#define STATUS_SUCCESS
Definition: shellext.h:65
#define STATUS_BUFFER_TOO_SMALL
Definition: shellext.h:69
ULONG DesignCapacityLow
Definition: cmbatt.h:110
ULONG DesignVoltage
Definition: cmbatt.h:108
ULONG LastFullCapacity
Definition: cmbatt.h:106
ULONG DesignCapacity
Definition: cmbatt.h:105
CHAR SerialNumber[ASCIIZ_MAX_LENGTH]
Definition: cmbatt.h:114
ULONG BatteryTechnology
Definition: cmbatt.h:107
CHAR BatteryType[ASCIIZ_MAX_LENGTH]
Definition: cmbatt.h:115
ULONG BatteryCapacityGranularity1
Definition: cmbatt.h:111
CHAR OemInfo[ASCIIZ_MAX_LENGTH]
Definition: cmbatt.h:116
ULONG DesignCapacityWarning
Definition: cmbatt.h:109
ULONG BatteryCapacityGranularity2
Definition: cmbatt.h:112
CHAR ModelNumber[ASCIIZ_MAX_LENGTH]
Definition: cmbatt.h:113
ULONG PowerUnit
Definition: cmbatt.h:104
ULONG PresentRate
Definition: cmbatt.h:92
ULONG RemainingCapacity
Definition: cmbatt.h:93
ULONG PresentVoltage
Definition: cmbatt.h:94
ULONG State
Definition: cmbatt.h:91
BOOLEAN IsString
Definition: cmexec.c:18
#define STATUS_PENDING
Definition: telnetd.h:14
uint32_t * PULONG
Definition: typedefs.h:59
char * PSTR
Definition: typedefs.h:51
#define NTAPI
Definition: typedefs.h:36
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
char * PCHAR
Definition: typedefs.h:51
#define STATUS_NO_SUCH_DEVICE
Definition: udferr_usr.h:136
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2061
_In_ WDFREQUEST _In_ size_t _In_ size_t _In_ ULONG IoControlCode
Definition: wdfio.h:325
_In_ WDFREQUEST _In_ size_t OutputBufferLength
Definition: wdfio.h:320
_In_ WDFREQUEST _In_ size_t _In_ size_t InputBufferLength
Definition: wdfio.h:322
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
Definition: wdfiotarget.h:863
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer
Definition: wdfiotarget.h:953
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413
@ Executive
Definition: ketypes.h:467
const char * LPCSTR
Definition: xmlstorage.h:183