scsiwmi.h 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. /*
  2. * scsiwmi.h
  3. *
  4. * SCSI WMILIB interface.
  5. *
  6. * This file is part of the w32api package.
  7. *
  8. * Contributors:
  9. * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
  10. *
  11. * THIS SOFTWARE IS NOT COPYRIGHTED
  12. *
  13. * This source code is offered for use in the public domain. You may
  14. * use, modify or distribute it freely.
  15. *
  16. * This code is distributed in the hope that it will be useful but
  17. * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
  18. * DISCLAIMED. This includes but is not limited to warranties of
  19. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  20. *
  21. */
  22. #ifndef __SCSIWMI_H
  23. #define __SCSIWMI_H
  24. #include "srb.h"
  25. #ifdef __cplusplus
  26. extern "C" {
  27. #endif
  28. #pragma pack(push,4)
  29. typedef struct _SCSIWMI_REQUEST_CONTEXT {
  30. PVOID UserContext;
  31. ULONG BufferSize;
  32. PUCHAR Buffer;
  33. UCHAR MinorFunction;
  34. UCHAR ReturnStatus;
  35. ULONG ReturnSize;
  36. } SCSIWMI_REQUEST_CONTEXT, *PSCSIWMI_REQUEST_CONTEXT;
  37. #ifdef _GUID_DEFINED
  38. # warning _GUID_DEFINED is deprecated, use GUID_DEFINED instead
  39. #endif
  40. #if ! (defined _GUID_DEFINED || defined GUID_DEFINED)
  41. #define GUID_DEFINED
  42. typedef struct _GUID {
  43. ULONG Data1;
  44. unsigned short Data2;
  45. unsigned short Data3;
  46. unsigned char Data4[ 8 ];
  47. } GUID;
  48. #endif
  49. typedef struct _SCSIWMIGUIDREGINFO {
  50. LPCGUID Guid;
  51. ULONG InstanceCount;
  52. ULONG Flags;
  53. } SCSIWMIGUIDREGINFO, *PSCSIWMIGUIDREGINFO;
  54. typedef UCHAR
  55. (NTAPI *PSCSIWMI_QUERY_REGINFO)(
  56. IN PVOID DeviceContext,
  57. IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
  58. OUT PWCHAR *MofResourceName);
  59. typedef BOOLEAN
  60. (NTAPI *PSCSIWMI_QUERY_DATABLOCK)(
  61. IN PVOID Context,
  62. IN PSCSIWMI_REQUEST_CONTEXT DispatchContext,
  63. IN ULONG GuidIndex,
  64. IN ULONG InstanceIndex,
  65. IN ULONG InstanceCount,
  66. IN OUT PULONG InstanceLengthArray,
  67. IN ULONG BufferAvail,
  68. OUT PUCHAR Buffer);
  69. typedef BOOLEAN
  70. (NTAPI *PSCSIWMI_SET_DATABLOCK)(
  71. IN PVOID DeviceContext,
  72. IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
  73. IN ULONG GuidIndex,
  74. IN ULONG InstanceIndex,
  75. IN ULONG BufferSize,
  76. IN PUCHAR Buffer);
  77. typedef BOOLEAN
  78. (NTAPI *PSCSIWMI_SET_DATAITEM)(
  79. IN PVOID DeviceContext,
  80. IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
  81. IN ULONG GuidIndex,
  82. IN ULONG InstanceIndex,
  83. IN ULONG DataItemId,
  84. IN ULONG BufferSize,
  85. IN PUCHAR Buffer);
  86. typedef BOOLEAN
  87. (NTAPI *PSCSIWMI_EXECUTE_METHOD)(
  88. IN PVOID DeviceContext,
  89. IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
  90. IN ULONG GuidIndex,
  91. IN ULONG InstanceIndex,
  92. IN ULONG MethodId,
  93. IN ULONG InBufferSize,
  94. IN ULONG OutBufferSize,
  95. IN OUT PUCHAR Buffer);
  96. typedef enum _SCSIWMI_ENABLE_DISABLE_CONTROL {
  97. ScsiWmiEventControl,
  98. ScsiWmiDataBlockControl
  99. } SCSIWMI_ENABLE_DISABLE_CONTROL;
  100. typedef BOOLEAN
  101. (NTAPI *PSCSIWMI_FUNCTION_CONTROL)(
  102. IN PVOID DeviceContext,
  103. IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
  104. IN ULONG GuidIndex,
  105. IN SCSIWMI_ENABLE_DISABLE_CONTROL Function,
  106. IN BOOLEAN Enable);
  107. typedef struct _SCSIWMILIB_CONTEXT {
  108. ULONG GuidCount;
  109. PSCSIWMIGUIDREGINFO GuidList;
  110. PSCSIWMI_QUERY_REGINFO QueryWmiRegInfo;
  111. PSCSIWMI_QUERY_DATABLOCK QueryWmiDataBlock;
  112. PSCSIWMI_SET_DATABLOCK SetWmiDataBlock;
  113. PSCSIWMI_SET_DATAITEM SetWmiDataItem;
  114. PSCSIWMI_EXECUTE_METHOD ExecuteWmiMethod;
  115. PSCSIWMI_FUNCTION_CONTROL WmiFunctionControl;
  116. } SCSI_WMILIB_CONTEXT, *PSCSI_WMILIB_CONTEXT;
  117. SCSIPORTAPI
  118. BOOLEAN
  119. NTAPI
  120. ScsiPortWmiDispatchFunction(
  121. IN PSCSI_WMILIB_CONTEXT WmiLibInfo,
  122. IN UCHAR MinorFunction,
  123. IN PVOID DeviceContext,
  124. IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
  125. IN PVOID DataPath,
  126. IN ULONG BufferSize,
  127. IN PVOID Buffer);
  128. #define ScsiPortWmiFireAdapterEvent( \
  129. HwDeviceExtension, \
  130. Guid, \
  131. InstanceIndex, \
  132. EventDataSize, \
  133. EventData) \
  134. ScsiPortWmiFireLogicalUnitEvent( \
  135. HwDeviceExtension, \
  136. 0xff, \
  137. 0, \
  138. 0, \
  139. Guid, \
  140. InstanceIndex, \
  141. EventDataSize, \
  142. EventData)
  143. /*
  144. * ULONG
  145. * ScsiPortWmiGetReturnSize(
  146. * PSCSIWMI_REQUEST_CONTEXT RequestContext);
  147. */
  148. #define ScsiPortWmiGetReturnSize(RequestContext) \
  149. ((RequestContext)->ReturnSize)
  150. /* UCHAR
  151. * ScsiPortWmiGetReturnStatus(
  152. * PSCSIWMI_REQUEST_CONTEXT RequestContext);
  153. */
  154. #define ScsiPortWmiGetReturnStatus(RequestContext) \
  155. ((RequestContext)->ReturnStatus)
  156. SCSIPORTAPI
  157. VOID
  158. NTAPI
  159. ScsiPortWmiPostProcess(
  160. IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
  161. IN UCHAR SrbStatus,
  162. IN ULONG BufferUsed);
  163. SCSIPORTAPI
  164. VOID
  165. NTAPI
  166. ScsiPortWmiFireLogicalUnitEvent(
  167. IN PVOID HwDeviceExtension,
  168. IN UCHAR PathId,
  169. IN UCHAR TargetId,
  170. IN UCHAR Lun,
  171. IN LPGUID Guid,
  172. IN ULONG InstanceIndex,
  173. IN ULONG EventDataSize,
  174. IN PVOID EventData);
  175. #pragma pack(pop)
  176. #ifdef __cplusplus
  177. }
  178. #endif
  179. #endif /* __SCSIWMI_H */