1c2c66affSColin Finck /* 2c2c66affSColin Finck * scsiwmi.h 3c2c66affSColin Finck * 4c2c66affSColin Finck * SCSI WMILIB interface. 5c2c66affSColin Finck * 6c2c66affSColin Finck * This file is part of the w32api package. 7c2c66affSColin Finck * 8c2c66affSColin Finck * Contributors: 9c2c66affSColin Finck * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> 10c2c66affSColin Finck * 11c2c66affSColin Finck * THIS SOFTWARE IS NOT COPYRIGHTED 12c2c66affSColin Finck * 13c2c66affSColin Finck * This source code is offered for use in the public domain. You may 14c2c66affSColin Finck * use, modify or distribute it freely. 15c2c66affSColin Finck * 16c2c66affSColin Finck * This code is distributed in the hope that it will be useful but 17c2c66affSColin Finck * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 18c2c66affSColin Finck * DISCLAIMED. This includes but is not limited to warranties of 19c2c66affSColin Finck * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 20c2c66affSColin Finck * 21c2c66affSColin Finck */ 22c2c66affSColin Finck 23c2c66affSColin Finck #pragma once 24c2c66affSColin Finck 25c2c66affSColin Finck #ifndef _SCSIWMI_ 26c2c66affSColin Finck #define _SCSIWMI_ 27c2c66affSColin Finck 28c2c66affSColin Finck #include "srb.h" 29c2c66affSColin Finck 30c2c66affSColin Finck #ifdef __cplusplus 31c2c66affSColin Finck extern "C" { 32c2c66affSColin Finck #endif 33c2c66affSColin Finck 34c2c66affSColin Finck #pragma pack(push,4) 35c2c66affSColin Finck 36c2c66affSColin Finck typedef struct _SCSIWMI_REQUEST_CONTEXT { 37c2c66affSColin Finck PVOID UserContext; 38c2c66affSColin Finck ULONG BufferSize; 39c2c66affSColin Finck PUCHAR Buffer; 40c2c66affSColin Finck UCHAR MinorFunction; 41c2c66affSColin Finck UCHAR ReturnStatus; 42c2c66affSColin Finck ULONG ReturnSize; 43c2c66affSColin Finck } SCSIWMI_REQUEST_CONTEXT, *PSCSIWMI_REQUEST_CONTEXT; 44c2c66affSColin Finck 45c2c66affSColin Finck #ifdef _GUID_DEFINED 46c2c66affSColin Finck # warning _GUID_DEFINED is deprecated, use GUID_DEFINED instead 47c2c66affSColin Finck #endif 48c2c66affSColin Finck 49c2c66affSColin Finck #if ! (defined _GUID_DEFINED || defined GUID_DEFINED) 50c2c66affSColin Finck #define GUID_DEFINED 51c2c66affSColin Finck typedef struct _GUID { 52c2c66affSColin Finck unsigned long Data1; 53c2c66affSColin Finck unsigned short Data2; 54c2c66affSColin Finck unsigned short Data3; 55c2c66affSColin Finck unsigned char Data4[8]; 56c2c66affSColin Finck } GUID; 57c2c66affSColin Finck #endif 58c2c66affSColin Finck 59c2c66affSColin Finck typedef struct _SCSIWMIGUIDREGINFO { 60c2c66affSColin Finck LPCGUID Guid; 61c2c66affSColin Finck ULONG InstanceCount; 62c2c66affSColin Finck ULONG Flags; 63c2c66affSColin Finck } SCSIWMIGUIDREGINFO, *PSCSIWMIGUIDREGINFO; 64c2c66affSColin Finck 65c2c66affSColin Finck typedef 66c2c66affSColin Finck _Must_inspect_result_ 67c2c66affSColin Finck UCHAR 68c2c66affSColin Finck (NTAPI *PSCSIWMI_QUERY_REGINFO)( 69c2c66affSColin Finck _In_ PVOID DeviceContext, 70c2c66affSColin Finck _In_ PSCSIWMI_REQUEST_CONTEXT RequestContext, 71c2c66affSColin Finck _Out_ PWCHAR *MofResourceName); 72c2c66affSColin Finck 73c2c66affSColin Finck typedef 74c2c66affSColin Finck _Must_inspect_result_ 75c2c66affSColin Finck BOOLEAN 76c2c66affSColin Finck (NTAPI *PSCSIWMI_QUERY_DATABLOCK)( 77c2c66affSColin Finck _In_ PVOID Context, 78c2c66affSColin Finck _In_ PSCSIWMI_REQUEST_CONTEXT DispatchContext, 79c2c66affSColin Finck _In_ ULONG GuidIndex, 80c2c66affSColin Finck _In_ ULONG InstanceIndex, 81c2c66affSColin Finck _In_ ULONG InstanceCount, 82c2c66affSColin Finck _Inout_ PULONG InstanceLengthArray, 83c2c66affSColin Finck _In_ ULONG BufferAvail, 84c2c66affSColin Finck _Out_writes_bytes_(BufferAvail) PUCHAR Buffer); 85c2c66affSColin Finck 86c2c66affSColin Finck typedef 87c2c66affSColin Finck _Must_inspect_result_ 88c2c66affSColin Finck BOOLEAN 89c2c66affSColin Finck (NTAPI *PSCSIWMI_SET_DATABLOCK)( 90c2c66affSColin Finck _In_ PVOID DeviceContext, 91c2c66affSColin Finck _In_ PSCSIWMI_REQUEST_CONTEXT RequestContext, 92c2c66affSColin Finck _In_ ULONG GuidIndex, 93c2c66affSColin Finck _In_ ULONG InstanceIndex, 94c2c66affSColin Finck _In_ ULONG BufferSize, 95c2c66affSColin Finck _In_reads_bytes_(BufferSize) PUCHAR Buffer); 96c2c66affSColin Finck 97c2c66affSColin Finck typedef 98c2c66affSColin Finck _Must_inspect_result_ 99c2c66affSColin Finck BOOLEAN 100c2c66affSColin Finck (NTAPI *PSCSIWMI_SET_DATAITEM)( 101c2c66affSColin Finck _In_ PVOID DeviceContext, 102c2c66affSColin Finck _In_ PSCSIWMI_REQUEST_CONTEXT RequestContext, 103c2c66affSColin Finck _In_ ULONG GuidIndex, 104c2c66affSColin Finck _In_ ULONG InstanceIndex, 105c2c66affSColin Finck _In_ ULONG DataItemId, 106c2c66affSColin Finck _In_ ULONG BufferSize, 107c2c66affSColin Finck _In_reads_bytes_(BufferSize) PUCHAR Buffer); 108c2c66affSColin Finck 109c2c66affSColin Finck typedef 110c2c66affSColin Finck _Must_inspect_result_ 111c2c66affSColin Finck BOOLEAN 112c2c66affSColin Finck (NTAPI *PSCSIWMI_EXECUTE_METHOD)( 113c2c66affSColin Finck _In_ PVOID DeviceContext, 114c2c66affSColin Finck _In_ PSCSIWMI_REQUEST_CONTEXT RequestContext, 115c2c66affSColin Finck _In_ ULONG GuidIndex, 116c2c66affSColin Finck _In_ ULONG InstanceIndex, 117c2c66affSColin Finck _In_ ULONG MethodId, 118c2c66affSColin Finck _In_ ULONG InBufferSize, 119c2c66affSColin Finck _In_ ULONG OutBufferSize, 120c2c66affSColin Finck _Inout_updates_bytes_to_(InBufferSize, OutBufferSize) PUCHAR Buffer); 121c2c66affSColin Finck 122c2c66affSColin Finck typedef enum _SCSIWMI_ENABLE_DISABLE_CONTROL { 123c2c66affSColin Finck ScsiWmiEventControl, 124c2c66affSColin Finck ScsiWmiDataBlockControl 125c2c66affSColin Finck } SCSIWMI_ENABLE_DISABLE_CONTROL; 126c2c66affSColin Finck 127c2c66affSColin Finck typedef 128c2c66affSColin Finck _Must_inspect_result_ 129c2c66affSColin Finck BOOLEAN 130c2c66affSColin Finck (NTAPI *PSCSIWMI_FUNCTION_CONTROL)( 131c2c66affSColin Finck _In_ PVOID DeviceContext, 132c2c66affSColin Finck _In_ PSCSIWMI_REQUEST_CONTEXT RequestContext, 133c2c66affSColin Finck _In_ ULONG GuidIndex, 134c2c66affSColin Finck _In_ SCSIWMI_ENABLE_DISABLE_CONTROL Function, 135c2c66affSColin Finck _In_ BOOLEAN Enable); 136c2c66affSColin Finck 137c2c66affSColin Finck typedef struct _SCSIWMILIB_CONTEXT { 138c2c66affSColin Finck ULONG GuidCount; 139c2c66affSColin Finck PSCSIWMIGUIDREGINFO GuidList; 140c2c66affSColin Finck PSCSIWMI_QUERY_REGINFO QueryWmiRegInfo; 141c2c66affSColin Finck PSCSIWMI_QUERY_DATABLOCK QueryWmiDataBlock; 142c2c66affSColin Finck PSCSIWMI_SET_DATABLOCK SetWmiDataBlock; 143c2c66affSColin Finck PSCSIWMI_SET_DATAITEM SetWmiDataItem; 144c2c66affSColin Finck PSCSIWMI_EXECUTE_METHOD ExecuteWmiMethod; 145c2c66affSColin Finck PSCSIWMI_FUNCTION_CONTROL WmiFunctionControl; 146c2c66affSColin Finck } SCSI_WMILIB_CONTEXT, *PSCSI_WMILIB_CONTEXT; 147c2c66affSColin Finck 148c2c66affSColin Finck _Must_inspect_result_ 149*3da77f91SVictor Perevertkin SCSIPORT_API 150c2c66affSColin Finck BOOLEAN 151c2c66affSColin Finck NTAPI 152c2c66affSColin Finck ScsiPortWmiDispatchFunction( 153c2c66affSColin Finck _In_ PSCSI_WMILIB_CONTEXT WmiLibInfo, 154c2c66affSColin Finck _In_ UCHAR MinorFunction, 155c2c66affSColin Finck _In_ PVOID DeviceContext, 156c2c66affSColin Finck _In_ PSCSIWMI_REQUEST_CONTEXT RequestContext, 157c2c66affSColin Finck _In_ PVOID DataPath, 158c2c66affSColin Finck _In_ ULONG BufferSize, 159c2c66affSColin Finck _In_ PVOID Buffer); 160c2c66affSColin Finck 161c2c66affSColin Finck #define ScsiPortWmiFireAdapterEvent( \ 162c2c66affSColin Finck HwDeviceExtension, \ 163c2c66affSColin Finck Guid, \ 164c2c66affSColin Finck InstanceIndex, \ 165c2c66affSColin Finck EventDataSize, \ 166c2c66affSColin Finck EventData) \ 167c2c66affSColin Finck ScsiPortWmiFireLogicalUnitEvent( \ 168c2c66affSColin Finck HwDeviceExtension, \ 169c2c66affSColin Finck 0xff, \ 170c2c66affSColin Finck 0, \ 171c2c66affSColin Finck 0, \ 172c2c66affSColin Finck Guid, \ 173c2c66affSColin Finck InstanceIndex, \ 174c2c66affSColin Finck EventDataSize, \ 175c2c66affSColin Finck EventData) 176c2c66affSColin Finck 177c2c66affSColin Finck /* 178c2c66affSColin Finck * ULONG 179c2c66affSColin Finck * ScsiPortWmiGetReturnSize( 180c2c66affSColin Finck * PSCSIWMI_REQUEST_CONTEXT RequestContext); 181c2c66affSColin Finck */ 182c2c66affSColin Finck #define ScsiPortWmiGetReturnSize(RequestContext) \ 183c2c66affSColin Finck ((RequestContext)->ReturnSize) 184c2c66affSColin Finck 185c2c66affSColin Finck /* UCHAR 186c2c66affSColin Finck * ScsiPortWmiGetReturnStatus( 187c2c66affSColin Finck * PSCSIWMI_REQUEST_CONTEXT RequestContext); 188c2c66affSColin Finck */ 189c2c66affSColin Finck #define ScsiPortWmiGetReturnStatus(RequestContext) \ 190c2c66affSColin Finck ((RequestContext)->ReturnStatus) 191c2c66affSColin Finck 192*3da77f91SVictor Perevertkin SCSIPORT_API 193c2c66affSColin Finck VOID 194c2c66affSColin Finck NTAPI 195c2c66affSColin Finck ScsiPortWmiPostProcess( 196c2c66affSColin Finck _Inout_ PSCSIWMI_REQUEST_CONTEXT RequestContext, 197c2c66affSColin Finck _In_ UCHAR SrbStatus, 198c2c66affSColin Finck _In_ ULONG BufferUsed); 199c2c66affSColin Finck 200*3da77f91SVictor Perevertkin SCSIPORT_API 201c2c66affSColin Finck VOID 202c2c66affSColin Finck NTAPI 203c2c66affSColin Finck ScsiPortWmiFireLogicalUnitEvent( 204c2c66affSColin Finck _In_ PVOID HwDeviceExtension, 205c2c66affSColin Finck _In_ UCHAR PathId, 206c2c66affSColin Finck _In_ UCHAR TargetId, 207c2c66affSColin Finck _In_ UCHAR Lun, 208c2c66affSColin Finck _In_ LPGUID Guid, 209c2c66affSColin Finck _In_ ULONG InstanceIndex, 210c2c66affSColin Finck _In_ ULONG EventDataSize, 211c2c66affSColin Finck _In_ PVOID EventData); 212c2c66affSColin Finck 213c2c66affSColin Finck #pragma pack(pop) 214c2c66affSColin Finck 215c2c66affSColin Finck #ifdef __cplusplus 216c2c66affSColin Finck } 217c2c66affSColin Finck #endif 218c2c66affSColin Finck 219c2c66affSColin Finck #endif /* _SCSIWMI_ */ 220