Home | History | Annotate | Download | only in ddk
      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