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