/* * scsiwmi.h * * SCSI WMILIB interface. * * This file is part of the w32api package. * * Contributors: * Created by Casper S. Hornstrup * * THIS SOFTWARE IS NOT COPYRIGHTED * * This source code is offered for use in the public domain. You may * use, modify or distribute it freely. * * This code is distributed in the hope that it will be useful but * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY * DISCLAIMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * */ #ifndef __SCSIWMI_H #define __SCSIWMI_H #if __GNUC__ >=3 #pragma GCC system_header #endif #ifdef __cplusplus extern "C" { #endif #pragma pack(push,4) #include "ntddk.h" #include "srb.h" typedef struct _SCSIWMI_REQUEST_CONTEXT { PVOID UserContext; ULONG BufferSize; PUCHAR Buffer; UCHAR MinorFunction; UCHAR ReturnStatus; ULONG ReturnSize; } SCSIWMI_REQUEST_CONTEXT, *PSCSIWMI_REQUEST_CONTEXT; #ifdef _GUID_DEFINED # warning _GUID_DEFINED is deprecated, use GUID_DEFINED instead #endif #if ! (defined _GUID_DEFINED || defined GUID_DEFINED) #define GUID_DEFINED typedef struct _GUID { unsigned long Data1; unsigned short Data2; unsigned short Data3; unsigned char Data4[ 8 ]; } GUID; #endif #ifndef _LPCGUID_DEFINED #define _LPCGUID_DEFINED typedef const GUID *LPCGUID; #endif typedef struct _SCSIWMIGUIDREGINFO { LPCGUID Guid; ULONG InstanceCount; ULONG Flags; } SCSIWMIGUIDREGINFO, *PSCSIWMIGUIDREGINFO; typedef UCHAR DDKAPI (*PSCSIWMI_QUERY_REGINFO)( /*IN*/ PVOID DeviceContext, /*IN*/ PSCSIWMI_REQUEST_CONTEXT RequestContext, /*OUT*/ PWCHAR *MofResourceName); typedef BOOLEAN DDKAPI (*PSCSIWMI_QUERY_DATABLOCK)( /*IN*/ PVOID Context, /*IN*/ PSCSIWMI_REQUEST_CONTEXT DispatchContext, /*IN*/ ULONG GuidIndex, /*IN*/ ULONG InstanceIndex, /*IN*/ ULONG InstanceCount, /*IN OUT*/ PULONG InstanceLengthArray, /*IN*/ ULONG BufferAvail, /*OUT*/ PUCHAR Buffer); typedef BOOLEAN DDKAPI (*PSCSIWMI_SET_DATABLOCK)( /*IN*/ PVOID DeviceContext, /*IN*/ PSCSIWMI_REQUEST_CONTEXT RequestContext, /*IN*/ ULONG GuidIndex, /*IN*/ ULONG InstanceIndex, /*IN*/ ULONG BufferSize, /*IN*/ PUCHAR Buffer); typedef BOOLEAN DDKAPI (*PSCSIWMI_SET_DATAITEM)( /*IN*/ PVOID DeviceContext, /*IN*/ PSCSIWMI_REQUEST_CONTEXT RequestContext, /*IN*/ ULONG GuidIndex, /*IN*/ ULONG InstanceIndex, /*IN*/ ULONG DataItemId, /*IN*/ ULONG BufferSize, /*IN*/ PUCHAR Buffer); typedef BOOLEAN DDKAPI (*PSCSIWMI_EXECUTE_METHOD)( /*IN*/ PVOID DeviceContext, /*IN*/ PSCSIWMI_REQUEST_CONTEXT RequestContext, /*IN*/ ULONG GuidIndex, /*IN*/ ULONG InstanceIndex, /*IN*/ ULONG MethodId, /*IN*/ ULONG InBufferSize, /*IN*/ ULONG OutBufferSize, /*IN OUT*/ PUCHAR Buffer); typedef enum _SCSIWMI_ENABLE_DISABLE_CONTROL { ScsiWmiEventControl, ScsiWmiDataBlockControl } SCSIWMI_ENABLE_DISABLE_CONTROL; typedef BOOLEAN DDKAPI (*PSCSIWMI_FUNCTION_CONTROL)( /*IN*/ PVOID DeviceContext, /*IN*/ PSCSIWMI_REQUEST_CONTEXT RequestContext, /*IN*/ ULONG GuidIndex, /*IN*/ SCSIWMI_ENABLE_DISABLE_CONTROL Function, /*IN*/ BOOLEAN Enable); typedef struct _SCSIWMILIB_CONTEXT { ULONG GuidCount; PSCSIWMIGUIDREGINFO GuidList; PSCSIWMI_QUERY_REGINFO QueryWmiRegInfo; PSCSIWMI_QUERY_DATABLOCK QueryWmiDataBlock; PSCSIWMI_SET_DATABLOCK SetWmiDataBlock; PSCSIWMI_SET_DATAITEM SetWmiDataItem; PSCSIWMI_EXECUTE_METHOD ExecuteWmiMethod; PSCSIWMI_FUNCTION_CONTROL WmiFunctionControl; } SCSI_WMILIB_CONTEXT, *PSCSI_WMILIB_CONTEXT; SCSIPORTAPI BOOLEAN DDKAPI ScsiPortWmiDispatchFunction( /*IN*/ PSCSI_WMILIB_CONTEXT WmiLibInfo, /*IN*/ UCHAR MinorFunction, /*IN*/ PVOID DeviceContext, /*IN*/ PSCSIWMI_REQUEST_CONTEXT RequestContext, /*IN*/ PVOID DataPath, /*IN*/ ULONG BufferSize, /*IN*/ PVOID Buffer); #define ScsiPortWmiFireAdapterEvent( \ HwDeviceExtension, \ Guid, \ InstanceIndex, \ EventDataSize, \ EventData) \ ScsiPortWmiFireLogicalUnitEvent( \ HwDeviceExtension, \ 0xff, \ 0, \ 0, \ Guid, \ InstanceIndex, \ EventDataSize, \ EventData) /* * ULONG * ScsiPortWmiGetReturnSize( * PSCSIWMI_REQUEST_CONTEXT RequestContext); */ #define ScsiPortWmiGetReturnSize(RequestContext) \ ((RequestContext)->ReturnSize) /* UCHAR * ScsiPortWmiGetReturnStatus( * PSCSIWMI_REQUEST_CONTEXT RequestContext); */ #define ScsiPortWmiGetReturnStatus(RequestContext) \ ((RequestContext)->ReturnStatus) SCSIPORTAPI VOID DDKAPI ScsiPortWmiPostProcess( /*IN*/ PSCSIWMI_REQUEST_CONTEXT RequestContext, /*IN*/ UCHAR SrbStatus, /*IN*/ ULONG BufferUsed); SCSIPORTAPI VOID DDKAPI ScsiPortWmiFireLogicalUnitEvent( /*IN*/ PVOID HwDeviceExtension, /*IN*/ UCHAR PathId, /*IN*/ UCHAR TargetId, /*IN*/ UCHAR Lun, /*IN*/ LPGUID Guid, /*IN*/ ULONG InstanceIndex, /*IN*/ ULONG EventDataSize, /*IN*/ PVOID EventData); #pragma pack(pop) #ifdef __cplusplus } #endif #endif /* __SCSIWMI_H */