Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers scsiwmi.h Source File

scsiwmi.h

00001 /*
00002  * scsiwmi.h
00003  *
00004  * SCSI WMILIB interface.
00005  *
00006  * This file is part of the w32api package.
00007  *
00008  * Contributors:
00009  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
00010  *
00011  * THIS SOFTWARE IS NOT COPYRIGHTED
00012  *
00013  * This source code is offered for use in the public domain. You may
00014  * use, modify or distribute it freely.
00015  *
00016  * This code is distributed in the hope that it will be useful but
00017  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00018  * DISCLAIMED. This includes but is not limited to warranties of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00020  *
00021  */
00022 
00023 #ifndef __SCSIWMI_H
00024 #define __SCSIWMI_H
00025 
00026 #if __GNUC__ >=3
00027 #pragma GCC system_header
00028 #endif
00029 
00030 #ifdef __cplusplus
00031 extern "C" {
00032 #endif
00033 
00034 #pragma pack(push,4)
00035 
00036 #include "ntddk.h"
00037 #include "srb.h"
00038 
00039 
00040 typedef struct _SCSIWMI_REQUEST_CONTEXT {
00041   PVOID  UserContext;
00042   ULONG  BufferSize;
00043   PUCHAR  Buffer;
00044   UCHAR  MinorFunction;
00045   UCHAR  ReturnStatus;
00046   ULONG  ReturnSize;
00047 } SCSIWMI_REQUEST_CONTEXT, *PSCSIWMI_REQUEST_CONTEXT;
00048 
00049 #ifdef _GUID_DEFINED
00050 # warning _GUID_DEFINED is deprecated, use GUID_DEFINED instead
00051 #endif
00052 
00053 #if ! (defined _GUID_DEFINED || defined GUID_DEFINED)
00054 #define GUID_DEFINED
00055 typedef struct _GUID {
00056     unsigned long  Data1;
00057     unsigned short Data2;
00058     unsigned short Data3;
00059     unsigned char  Data4[ 8 ];
00060 } GUID;
00061 #endif
00062 
00063 #ifndef _LPCGUID_DEFINED
00064 #define _LPCGUID_DEFINED
00065 typedef const GUID *LPCGUID;
00066 #endif
00067 
00068 typedef struct _SCSIWMIGUIDREGINFO {
00069   LPCGUID  Guid;
00070   ULONG  InstanceCount;
00071   ULONG  Flags;
00072 } SCSIWMIGUIDREGINFO, *PSCSIWMIGUIDREGINFO;
00073 
00074 typedef UCHAR DDKAPI
00075 (*PSCSIWMI_QUERY_REGINFO)(
00076   /*IN*/ PVOID  DeviceContext,
00077   /*IN*/ PSCSIWMI_REQUEST_CONTEXT  RequestContext,
00078   /*OUT*/ PWCHAR  *MofResourceName);
00079 
00080 typedef BOOLEAN DDKAPI
00081 (*PSCSIWMI_QUERY_DATABLOCK)(
00082   /*IN*/ PVOID  Context,
00083   /*IN*/ PSCSIWMI_REQUEST_CONTEXT  DispatchContext,
00084   /*IN*/ ULONG  GuidIndex,
00085   /*IN*/ ULONG  InstanceIndex,
00086   /*IN*/ ULONG  InstanceCount,
00087   /*IN OUT*/ PULONG  InstanceLengthArray,
00088   /*IN*/ ULONG  BufferAvail,
00089   /*OUT*/ PUCHAR  Buffer);
00090 
00091 typedef BOOLEAN DDKAPI
00092 (*PSCSIWMI_SET_DATABLOCK)(
00093   /*IN*/ PVOID  DeviceContext,
00094   /*IN*/ PSCSIWMI_REQUEST_CONTEXT  RequestContext,
00095   /*IN*/ ULONG  GuidIndex,
00096   /*IN*/ ULONG  InstanceIndex,
00097   /*IN*/ ULONG  BufferSize,
00098   /*IN*/ PUCHAR  Buffer);
00099 
00100 typedef BOOLEAN DDKAPI
00101 (*PSCSIWMI_SET_DATAITEM)(
00102   /*IN*/ PVOID  DeviceContext,
00103   /*IN*/ PSCSIWMI_REQUEST_CONTEXT  RequestContext,
00104   /*IN*/ ULONG  GuidIndex,
00105   /*IN*/ ULONG  InstanceIndex,
00106   /*IN*/ ULONG  DataItemId,
00107   /*IN*/ ULONG  BufferSize,
00108   /*IN*/ PUCHAR  Buffer);
00109 
00110 typedef BOOLEAN DDKAPI
00111 (*PSCSIWMI_EXECUTE_METHOD)(
00112   /*IN*/ PVOID  DeviceContext,
00113   /*IN*/ PSCSIWMI_REQUEST_CONTEXT  RequestContext,
00114   /*IN*/ ULONG  GuidIndex,
00115   /*IN*/ ULONG  InstanceIndex,
00116   /*IN*/ ULONG  MethodId,
00117   /*IN*/ ULONG  InBufferSize,
00118   /*IN*/ ULONG  OutBufferSize,
00119   /*IN OUT*/ PUCHAR  Buffer);
00120 
00121 typedef enum _SCSIWMI_ENABLE_DISABLE_CONTROL {
00122     ScsiWmiEventControl,
00123     ScsiWmiDataBlockControl
00124 } SCSIWMI_ENABLE_DISABLE_CONTROL;
00125 
00126 typedef BOOLEAN DDKAPI
00127 (*PSCSIWMI_FUNCTION_CONTROL)(
00128   /*IN*/ PVOID  DeviceContext,
00129   /*IN*/ PSCSIWMI_REQUEST_CONTEXT  RequestContext,
00130   /*IN*/ ULONG  GuidIndex,
00131   /*IN*/ SCSIWMI_ENABLE_DISABLE_CONTROL  Function,
00132   /*IN*/ BOOLEAN  Enable);
00133 
00134 typedef struct _SCSIWMILIB_CONTEXT {
00135   ULONG  GuidCount;
00136   PSCSIWMIGUIDREGINFO  GuidList;
00137   PSCSIWMI_QUERY_REGINFO  QueryWmiRegInfo;
00138   PSCSIWMI_QUERY_DATABLOCK  QueryWmiDataBlock;
00139   PSCSIWMI_SET_DATABLOCK  SetWmiDataBlock;
00140   PSCSIWMI_SET_DATAITEM  SetWmiDataItem;
00141   PSCSIWMI_EXECUTE_METHOD  ExecuteWmiMethod;
00142   PSCSIWMI_FUNCTION_CONTROL  WmiFunctionControl;
00143 } SCSI_WMILIB_CONTEXT, *PSCSI_WMILIB_CONTEXT;
00144 
00145 SCSIPORTAPI
00146 BOOLEAN
00147 DDKAPI
00148 ScsiPortWmiDispatchFunction(
00149   /*IN*/ PSCSI_WMILIB_CONTEXT  WmiLibInfo,
00150   /*IN*/ UCHAR  MinorFunction,
00151   /*IN*/ PVOID  DeviceContext,
00152   /*IN*/ PSCSIWMI_REQUEST_CONTEXT  RequestContext,
00153   /*IN*/ PVOID  DataPath,
00154   /*IN*/ ULONG  BufferSize,
00155   /*IN*/ PVOID  Buffer);
00156 
00157 #define ScsiPortWmiFireAdapterEvent(  \
00158   HwDeviceExtension,                  \
00159   Guid,                               \
00160   InstanceIndex,                      \
00161   EventDataSize,                      \
00162   EventData)                          \
00163     ScsiPortWmiFireLogicalUnitEvent(  \
00164       HwDeviceExtension,                \
00165       0xff,                             \
00166       0,                                \
00167       0,                                \
00168       Guid,                             \
00169       InstanceIndex,                    \
00170       EventDataSize,                    \
00171       EventData)
00172 
00173 /*
00174  * ULONG
00175  * ScsiPortWmiGetReturnSize(
00176  *   PSCSIWMI_REQUEST_CONTEXT  RequestContext);
00177  */
00178 #define ScsiPortWmiGetReturnSize(RequestContext) \
00179   ((RequestContext)->ReturnSize)
00180 
00181 /* UCHAR 
00182  * ScsiPortWmiGetReturnStatus(
00183  *   PSCSIWMI_REQUEST_CONTEXT  RequestContext);
00184  */ 
00185 #define ScsiPortWmiGetReturnStatus(RequestContext) \
00186   ((RequestContext)->ReturnStatus)
00187 
00188 SCSIPORTAPI
00189 VOID
00190 DDKAPI
00191 ScsiPortWmiPostProcess(
00192   /*IN*/ PSCSIWMI_REQUEST_CONTEXT  RequestContext,
00193   /*IN*/ UCHAR  SrbStatus,
00194   /*IN*/ ULONG  BufferUsed);
00195 
00196 SCSIPORTAPI
00197 VOID
00198 DDKAPI
00199 ScsiPortWmiFireLogicalUnitEvent(
00200   /*IN*/ PVOID  HwDeviceExtension,
00201   /*IN*/ UCHAR  PathId,
00202   /*IN*/ UCHAR  TargetId,
00203   /*IN*/ UCHAR  Lun,
00204   /*IN*/ LPGUID  Guid,
00205   /*IN*/ ULONG  InstanceIndex,
00206   /*IN*/ ULONG  EventDataSize,
00207   /*IN*/ PVOID  EventData);
00208 
00209 #pragma pack(pop)
00210 
00211 #ifdef __cplusplus
00212 }
00213 #endif
00214 
00215 #endif /* __SCSIWMI_H */