| 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 | |
| 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 */ |