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 (at) 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 23 #ifndef __SCSIWMI_H 24 #define __SCSIWMI_H 25 26 #include "srb.h" 27 28 #ifdef __cplusplus 29 extern "C" { 30 #endif 31 32 #pragma pack(push,4) 33 34 typedef struct _SCSIWMI_REQUEST_CONTEXT { 35 PVOID UserContext; 36 ULONG BufferSize; 37 PUCHAR Buffer; 38 UCHAR MinorFunction; 39 UCHAR ReturnStatus; 40 ULONG ReturnSize; 41 } SCSIWMI_REQUEST_CONTEXT, *PSCSIWMI_REQUEST_CONTEXT; 42 43 #ifdef _GUID_DEFINED 44 # warning _GUID_DEFINED is deprecated, use GUID_DEFINED instead 45 #endif 46 47 #if ! (defined _GUID_DEFINED || defined GUID_DEFINED) 48 #define GUID_DEFINED 49 typedef struct _GUID { 50 ULONG Data1; 51 unsigned short Data2; 52 unsigned short Data3; 53 unsigned char Data4[ 8 ]; 54 } GUID; 55 #endif 56 57 typedef struct _SCSIWMIGUIDREGINFO { 58 LPCGUID Guid; 59 ULONG InstanceCount; 60 ULONG Flags; 61 } SCSIWMIGUIDREGINFO, *PSCSIWMIGUIDREGINFO; 62 63 typedef UCHAR 64 (NTAPI *PSCSIWMI_QUERY_REGINFO)( 65 IN PVOID DeviceContext, 66 IN PSCSIWMI_REQUEST_CONTEXT RequestContext, 67 OUT PWCHAR *MofResourceName); 68 69 typedef BOOLEAN 70 (NTAPI *PSCSIWMI_QUERY_DATABLOCK)( 71 IN PVOID Context, 72 IN PSCSIWMI_REQUEST_CONTEXT DispatchContext, 73 IN ULONG GuidIndex, 74 IN ULONG InstanceIndex, 75 IN ULONG InstanceCount, 76 IN OUT PULONG InstanceLengthArray, 77 IN ULONG BufferAvail, 78 OUT PUCHAR Buffer); 79 80 typedef BOOLEAN 81 (NTAPI *PSCSIWMI_SET_DATABLOCK)( 82 IN PVOID DeviceContext, 83 IN PSCSIWMI_REQUEST_CONTEXT RequestContext, 84 IN ULONG GuidIndex, 85 IN ULONG InstanceIndex, 86 IN ULONG BufferSize, 87 IN PUCHAR Buffer); 88 89 typedef BOOLEAN 90 (NTAPI *PSCSIWMI_SET_DATAITEM)( 91 IN PVOID DeviceContext, 92 IN PSCSIWMI_REQUEST_CONTEXT RequestContext, 93 IN ULONG GuidIndex, 94 IN ULONG InstanceIndex, 95 IN ULONG DataItemId, 96 IN ULONG BufferSize, 97 IN PUCHAR Buffer); 98 99 typedef BOOLEAN 100 (NTAPI *PSCSIWMI_EXECUTE_METHOD)( 101 IN PVOID DeviceContext, 102 IN PSCSIWMI_REQUEST_CONTEXT RequestContext, 103 IN ULONG GuidIndex, 104 IN ULONG InstanceIndex, 105 IN ULONG MethodId, 106 IN ULONG InBufferSize, 107 IN ULONG OutBufferSize, 108 IN OUT PUCHAR Buffer); 109 110 typedef enum _SCSIWMI_ENABLE_DISABLE_CONTROL { 111 ScsiWmiEventControl, 112 ScsiWmiDataBlockControl 113 } SCSIWMI_ENABLE_DISABLE_CONTROL; 114 115 typedef BOOLEAN 116 (NTAPI *PSCSIWMI_FUNCTION_CONTROL)( 117 IN PVOID DeviceContext, 118 IN PSCSIWMI_REQUEST_CONTEXT RequestContext, 119 IN ULONG GuidIndex, 120 IN SCSIWMI_ENABLE_DISABLE_CONTROL Function, 121 IN BOOLEAN Enable); 122 123 typedef struct _SCSIWMILIB_CONTEXT { 124 ULONG GuidCount; 125 PSCSIWMIGUIDREGINFO GuidList; 126 PSCSIWMI_QUERY_REGINFO QueryWmiRegInfo; 127 PSCSIWMI_QUERY_DATABLOCK QueryWmiDataBlock; 128 PSCSIWMI_SET_DATABLOCK SetWmiDataBlock; 129 PSCSIWMI_SET_DATAITEM SetWmiDataItem; 130 PSCSIWMI_EXECUTE_METHOD ExecuteWmiMethod; 131 PSCSIWMI_FUNCTION_CONTROL WmiFunctionControl; 132 } SCSI_WMILIB_CONTEXT, *PSCSI_WMILIB_CONTEXT; 133 134 SCSIPORTAPI 135 BOOLEAN 136 NTAPI 137 ScsiPortWmiDispatchFunction( 138 IN PSCSI_WMILIB_CONTEXT WmiLibInfo, 139 IN UCHAR MinorFunction, 140 IN PVOID DeviceContext, 141 IN PSCSIWMI_REQUEST_CONTEXT RequestContext, 142 IN PVOID DataPath, 143 IN ULONG BufferSize, 144 IN PVOID Buffer); 145 146 #define ScsiPortWmiFireAdapterEvent( \ 147 HwDeviceExtension, \ 148 Guid, \ 149 InstanceIndex, \ 150 EventDataSize, \ 151 EventData) \ 152 ScsiPortWmiFireLogicalUnitEvent( \ 153 HwDeviceExtension, \ 154 0xff, \ 155 0, \ 156 0, \ 157 Guid, \ 158 InstanceIndex, \ 159 EventDataSize, \ 160 EventData) 161 162 /* 163 * ULONG 164 * ScsiPortWmiGetReturnSize( 165 * PSCSIWMI_REQUEST_CONTEXT RequestContext); 166 */ 167 #define ScsiPortWmiGetReturnSize(RequestContext) \ 168 ((RequestContext)->ReturnSize) 169 170 /* UCHAR 171 * ScsiPortWmiGetReturnStatus( 172 * PSCSIWMI_REQUEST_CONTEXT RequestContext); 173 */ 174 #define ScsiPortWmiGetReturnStatus(RequestContext) \ 175 ((RequestContext)->ReturnStatus) 176 177 SCSIPORTAPI 178 VOID 179 NTAPI 180 ScsiPortWmiPostProcess( 181 IN PSCSIWMI_REQUEST_CONTEXT RequestContext, 182 IN UCHAR SrbStatus, 183 IN ULONG BufferUsed); 184 185 SCSIPORTAPI 186 VOID 187 NTAPI 188 ScsiPortWmiFireLogicalUnitEvent( 189 IN PVOID HwDeviceExtension, 190 IN UCHAR PathId, 191 IN UCHAR TargetId, 192 IN UCHAR Lun, 193 IN LPGUID Guid, 194 IN ULONG InstanceIndex, 195 IN ULONG EventDataSize, 196 IN PVOID EventData); 197 198 #pragma pack(pop) 199 200 #ifdef __cplusplus 201 } 202 #endif 203 204 #endif /* __SCSIWMI_H */ 205