acpiioct.h 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. #pragma once
  2. #ifdef __cplusplus
  3. extern "C" {
  4. #endif
  5. #define ACPI_EVAL_INPUT_BUFFER_SIGNATURE 'BieA'
  6. #define ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER_SIGNATURE 'IieA'
  7. #define ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING_SIGNATURE 'SieA'
  8. #define ACPI_EVAL_INPUT_BUFFER_COMPLEX_SIGNATURE 'CieA'
  9. #define ACPI_EVAL_OUTPUT_BUFFER_SIGNATURE 'BoeA'
  10. #if (NTDDI_VERSION >= NTDDI_VISTA)
  11. #define ACPI_EVAL_INPUT_BUFFER_SIGNATURE_EX 'AieA'
  12. #define ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER_SIGNATURE_EX 'DieA'
  13. #define ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING_SIGNATURE_EX 'EieA'
  14. #define ACPI_EVAL_INPUT_BUFFER_COMPLEX_SIGNATURE_EX 'FieA'
  15. #define ACPI_ENUM_CHILDREN_OUTPUT_BUFFER_SIGNATURE 'GieA'
  16. #define ACPI_ENUM_CHILDREN_INPUT_BUFFER_SIGNATURE 'HieA'
  17. #endif
  18. #define ACPI_METHOD_ARGUMENT_INTEGER 0x0
  19. #define ACPI_METHOD_ARGUMENT_STRING 0x1
  20. #define ACPI_METHOD_ARGUMENT_BUFFER 0x2
  21. #define ACPI_METHOD_ARGUMENT_PACKAGE 0x3
  22. #define ACPI_METHOD_ARGUMENT_PACKAGE_EX 0x4
  23. #define ACPI_ACQUIRE_GLOBAL_LOCK_SIGNATURE 'LgaA'
  24. #define ACPI_RELEASE_GLOBAL_LOCK_SIGNATURE 'LgrA'
  25. #define ACPI_OBJECT_HAS_CHILDREN 0x1
  26. #define ENUM_CHILDREN_IMMEDIATE_ONLY 0x1
  27. #define ENUM_CHILDREN_MULTILEVEL 0x2
  28. #define ENUM_CHILDREN_NAME_IS_FILTER 0x4
  29. typedef struct _ACPI_EVAL_INPUT_BUFFER {
  30. ULONG Signature;
  31. _ANONYMOUS_UNION union {
  32. UCHAR MethodName[4];
  33. ULONG MethodNameAsUlong;
  34. } DUMMYUNIONNAME;
  35. } ACPI_EVAL_INPUT_BUFFER, *PACPI_EVAL_INPUT_BUFFER;
  36. typedef struct _ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER {
  37. ULONG Signature;
  38. _ANONYMOUS_UNION union {
  39. UCHAR MethodName[4];
  40. ULONG MethodNameAsUlong;
  41. } DUMMYUNIONNAME;
  42. ULONG IntegerArgument;
  43. } ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER, *PACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER;
  44. typedef struct _ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING {
  45. ULONG Signature;
  46. _ANONYMOUS_UNION union {
  47. UCHAR MethodName[4];
  48. ULONG MethodNameAsUlong;
  49. } DUMMYUNIONNAME;
  50. ULONG StringLength;
  51. UCHAR String[ANYSIZE_ARRAY];
  52. } ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING, *PACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING;
  53. typedef struct _ACPI_METHOD_ARGUMENT {
  54. USHORT Type;
  55. USHORT DataLength;
  56. _ANONYMOUS_UNION union {
  57. ULONG Argument;
  58. UCHAR Data[ANYSIZE_ARRAY];
  59. } DUMMYUNIONNAME;
  60. } ACPI_METHOD_ARGUMENT;
  61. typedef ACPI_METHOD_ARGUMENT UNALIGNED *PACPI_METHOD_ARGUMENT;
  62. typedef struct _ACPI_EVAL_INPUT_BUFFER_COMPLEX {
  63. ULONG Signature;
  64. _ANONYMOUS_UNION union {
  65. UCHAR MethodName[4];
  66. ULONG MethodNameAsUlong;
  67. } DUMMYUNIONNAME;
  68. ULONG Size;
  69. ULONG ArgumentCount;
  70. ACPI_METHOD_ARGUMENT Argument[ANYSIZE_ARRAY];
  71. } ACPI_EVAL_INPUT_BUFFER_COMPLEX, *PACPI_EVAL_INPUT_BUFFER_COMPLEX;
  72. typedef struct _ACPI_EVAL_OUTPUT_BUFFER {
  73. ULONG Signature;
  74. ULONG Length;
  75. ULONG Count;
  76. ACPI_METHOD_ARGUMENT Argument[ANYSIZE_ARRAY];
  77. } ACPI_EVAL_OUTPUT_BUFFER;
  78. typedef ACPI_EVAL_OUTPUT_BUFFER UNALIGNED *PACPI_EVAL_OUTPUT_BUFFER;
  79. typedef struct _ACPI_MANIPULATE_GLOBAL_LOCK_BUFFER {
  80. ULONG Signature;
  81. PVOID LockObject;
  82. } ACPI_MANIPULATE_GLOBAL_LOCK_BUFFER, *PACPI_MANIPULATE_GLOBAL_LOCK_BUFFER;
  83. typedef struct _ACPI_EVAL_INPUT_BUFFER_EX {
  84. ULONG Signature;
  85. CHAR MethodName[256];
  86. } ACPI_EVAL_INPUT_BUFFER_EX, *PACPI_EVAL_INPUT_BUFFER_EX;
  87. typedef struct _ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER_EX {
  88. ULONG Signature;
  89. CHAR MethodName[256];
  90. ULONG64 IntegerArgument;
  91. } ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER_EX, *PACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER_EX;
  92. typedef struct _ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING_EX {
  93. ULONG Signature;
  94. CHAR MethodName[256];
  95. ULONG StringLength;
  96. UCHAR String[ANYSIZE_ARRAY];
  97. } ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING_EX, *PACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING_EX;
  98. typedef struct _ACPI_EVAL_INPUT_BUFFER_COMPLEX_EX {
  99. ULONG Signature;
  100. CHAR MethodName[256];
  101. ULONG Size;
  102. ULONG ArgumentCount;
  103. ACPI_METHOD_ARGUMENT Argument[ANYSIZE_ARRAY];
  104. } ACPI_EVAL_INPUT_BUFFER_COMPLEX_EX, *PACPI_EVAL_INPUT_BUFFER_COMPLEX_EX;
  105. typedef struct _ACPI_ENUM_CHILDREN_INPUT_BUFFER {
  106. ULONG Signature;
  107. ULONG Flags;
  108. ULONG NameLength;
  109. CHAR Name[ANYSIZE_ARRAY];
  110. } ACPI_ENUM_CHILDREN_INPUT_BUFFER, *PACPI_ENUM_CHILDREN_INPUT_BUFFER;
  111. typedef struct _ACPI_ENUM_CHILD {
  112. ULONG Flags;
  113. ULONG NameLength;
  114. CHAR Name[ANYSIZE_ARRAY];
  115. } ACPI_ENUM_CHILD;
  116. typedef ACPI_ENUM_CHILD UNALIGNED *PACPI_ENUM_CHILD;
  117. typedef struct _ACPI_ENUM_CHILDREN_OUTPUT_BUFFER {
  118. ULONG Signature;
  119. ULONG NumberOfChildren;
  120. ACPI_ENUM_CHILD Children[ANYSIZE_ARRAY];
  121. } ACPI_ENUM_CHILDREN_OUTPUT_BUFFER;
  122. typedef ACPI_ENUM_CHILDREN_OUTPUT_BUFFER UNALIGNED *PACPI_ENUM_CHILDREN_OUTPUT_BUFFER;
  123. #define ACPI_METHOD_ARGUMENT_LENGTH( DataLength ) \
  124. (FIELD_OFFSET(ACPI_METHOD_ARGUMENT, Data) + max(sizeof(ULONG), DataLength))
  125. #define ACPI_METHOD_ARGUMENT_LENGTH_FROM_ARGUMENT( Argument ) \
  126. (ACPI_METHOD_ARGUMENT_LENGTH(((PACPI_METHOD_ARGUMENT)Argument)->DataLength))
  127. #define ACPI_METHOD_NEXT_ARGUMENT( Argument ) \
  128. (PACPI_METHOD_ARGUMENT) ( (PUCHAR) Argument + \
  129. ACPI_METHOD_ARGUMENT_LENGTH_FROM_ARGUMENT( Argument ) )
  130. #define ACPI_METHOD_SET_ARGUMENT_INTEGER( MethodArgument, IntData ) \
  131. { MethodArgument->Type = ACPI_METHOD_ARGUMENT_INTEGER; \
  132. MethodArgument->DataLength = sizeof(ULONG); \
  133. MethodArgument->Argument = IntData; }
  134. #define ACPI_METHOD_SET_ARGUMENT_STRING( Argument, StrData ) \
  135. { Argument->Type = ACPI_METHOD_ARGUMENT_STRING; \
  136. Argument->DataLength = strlen((PCHAR)StrData) + sizeof(UCHAR); \
  137. RtlCopyMemory(&Argument->Data[0],(PUCHAR)StrData,Argument->DataLength); }
  138. #define ACPI_METHOD_SET_ARGUMENT_BUFFER( Argument, BuffData, BuffLength ) \
  139. { Argument->Type = ACPI_METHOD_ARGUMENT_BUFFER; \
  140. Argument->DataLength = BuffLength; \
  141. RtlCopyMemory(&Argument->Data[0],(PUCHAR)BuffData,Argument->DataLength); }
  142. #define ACPI_ENUM_CHILD_LENGTH_FROM_CHILD( Child ) \
  143. ( (2* sizeof (ULONG)) + Child->NameLength )
  144. #define ACPI_ENUM_CHILD_NEXT( Child ) \
  145. (PACPI_ENUM_CHILD) ( (PUCHAR) Child + \
  146. ACPI_ENUM_CHILD_LENGTH_FROM_CHILD( Child ) )
  147. #define IOCTL_ACPI_ASYNC_EVAL_METHOD CTL_CODE(FILE_DEVICE_ACPI, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  148. #define IOCTL_ACPI_EVAL_METHOD CTL_CODE(FILE_DEVICE_ACPI, 1, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  149. #define IOCTL_ACPI_ACQUIRE_GLOBAL_LOCK CTL_CODE(FILE_DEVICE_ACPI, 4, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  150. #define IOCTL_ACPI_RELEASE_GLOBAL_LOCK CTL_CODE(FILE_DEVICE_ACPI, 5, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  151. #if (NTDDI_VERSION >= NTDDI_VISTA)
  152. #define IOCTL_ACPI_EVAL_METHOD_EX CTL_CODE(FILE_DEVICE_ACPI, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  153. #define IOCTL_ACPI_ASYNC_EVAL_METHOD_EX CTL_CODE(FILE_DEVICE_ACPI, 7, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  154. #define IOCTL_ACPI_ENUM_CHILDREN CTL_CODE(FILE_DEVICE_ACPI, 8, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  155. #endif
  156. #ifdef __cplusplus
  157. }
  158. #endif