Необходимо разработать драйвер, обрабатывающий методы ACPI.
В примерах кода из DDK указаны методы _FDE и _DMS и примеры
их использования.
methodName = (ULONG) 'SMD_' ;
argCount = 3 ;
argType[0] = ACPI_METHOD_ARGUMENT_INTEGER ;
argType[1] = ACPI_METHOD_ARGUMENT_BUFFER ;
argType[2] = ACPI_METHOD_ARGUMENT_BUFFER ;
argSize[0] = 0 ; // Don't need to set, assumed to be sizeof(ULONG)
argSize[1] = sizeof(whatever)
argSize[2] = sizeof(whatever)
param = 5 ;
argData[0] = ¶m ;
argData[1] = NULL ; // Assumed to be all zero's.
argData[2] = pDataBlock ;
returnBufferMaxSize = 0; //Integer return, no need to set.
status = DeviceQueryACPI_SyncExecMethod (
DeviceObject,
methodName,
argCount,
argType,
argSize,
argData,
ACPI_METHOD_ARGUMENT_INTEGER, // We expect an integer returned
returnBufferMaxSize,
&result,
NULL,
NULL
) ;
if (NT_SUCCESS(status)) {
// result is valid
// If we were reading buffers back (ie, expected type is
// ACPI_METHOD_ARGUMENT_BUFFER or ACPI_METHOD_ARGUMENT_STRING)
// you must free the buffer if you passed in a pointer for
// it.
// N.B. : The buffer is allocated from the paged pool.
}
OUT PVOID *ReturnBuffer OPTIONAL
)
Однако эти методы не документированы. Где можно найти подробное описание методов ACPI и аспектов их использования?