4 #if !defined(_NTSTORPORT_) && !defined(_NTSTORPORTP_) && !defined(_NTSRB_) 9 #if (NTDDI_VERSION >= NTDDI_WIN8) 11 #if !defined(SRBHELPER_ASSERT) 12 #define SRBHELPER_ASSERT NT_ASSERT 15 #if !defined(SRB_ALIGN_SIZEOF) 16 #define SRB_ALIGN_SIZEOF(x) (((ULONG_PTR)(sizeof(x) + sizeof(PVOID) - 1)) & ~(sizeof(PVOID) - 1)) 19 #if defined(_NTSTORPORT_) || defined(_NTSTORPORTP_) 20 #define SrbMoveMemory(Destination, Source, Length) StorPortMoveMemory(Destination, Source, Length) 21 #elif defined(_NTDDK_) 22 #define SrbMoveMemory(Destination, Source, Length) RtlMoveMemory(Destination, Source, Length) 24 #define SrbMoveMemory(Destination, Source, Length) memmove(Destination, Source, Length) 28 #define SrbCopyMemory(Destination, Source, Length) RtlCopyMemory(Destination, Source, Length) 30 #define SrbCopyMemory(Destination, Source, Length) memcpy(Destination, Source, Length) 34 #define SrbZeroMemory(Destination, Length) RtlZeroMemory(Destination, Length) 36 #define SrbZeroMemory(Destination, Length) memset(Destination, 0, Length) 40 #define SrbEqualMemory(Source1, Source2, Length) RtlEqualMemory(Source1, Source2, Length) 42 #define SrbEqualMemory(Source1, Source2, Length) (memcmp(Source1, Source2, Length) == 0) 54 (SrbExDataIndex < Srb->NumSrbExData) && (
Srb->SrbExDataOffset[SrbExDataIndex]) &&
56 (
Srb->SrbExDataOffset[SrbExDataIndex] <
Srb->SrbLength))
75 for (
i = 0;
i <
Srb->NumSrbExData;
i++)
78 Srb->SrbExDataOffset[
i] <
Srb->SrbLength)
81 if (srbExData->Type ==
Type)
99 switch (
Srb->SrbFunction)
114 for (
i = 0;
i <
Srb->NumSrbExData;
i++)
117 Srb->SrbExDataOffset[
i] <
Srb->SrbLength)
147 if (
Srb->AddressOffset)
169 if (DestinationSrbLength >= sourceSrb->SrbLength)
171 SrbCopyMemory(DestinationSrb, SourceSrb, sourceSrb->SrbLength);
198 ULONG srbLength = srb->SrbLength;
202 srb->SrbLength = srbLength;
209 srb->Function =
function;
222 return srb->SrbLength;
290 for (
i = 0;
i < SrbEx->NumSrbExData;
i++)
293 (SrbEx->SrbExDataOffset[
i] >= SrbEx->SrbLength))
301 switch (SrbExData->Type)
437 *SenseInfoBuffer =
NULL;
468 for (
i = 0;
i < SrbEx->NumSrbExData;
i++)
471 (SrbEx->SrbExDataOffset[
i] >= SrbEx->SrbLength))
479 switch (SrbExData->Type)
609 return srb->SrbFunction;
633 return pSenseInfoBuffer;
736 DataBuffer = srb->DataBuffer;
769 ULONG DataTransferLength;
779 return DataTransferLength;
861 srb->RequestTag = QueueTag;
869 #define SrbSetRequestTag SrbSetQueueTag 880 return srb->RequestTag;
888 #define SrbGetRequestTag SrbGetQueueTag 1008 systemStatus = srb->SystemStatus;
1014 return systemStatus;
1027 srb->SystemStatus =
Status;
1041 UCHAR scsiStatus = 0;
1078 UCHAR CdbLength = 0;
1115 ULONG RequestAttribute;
1118 RequestAttribute = srb->RequestAttribute;
1124 return RequestAttribute;
1127 #define SrbGetQueueAction SrbGetRequestAttribute 1139 srb->RequestAttribute = RequestAttribute;
1147 #define SrbSetQueueAction SrbSetRequestAttribute 1163 switch (storAddr->Type)
1196 switch (storAddr->Type)
1229 switch (storAddr->Type)
1264 switch (storAddr->Type)
1320 return srb->MiniportContext;
1386 return srb->PortContext;
1405 srb->PortContext = PortContext;
FORCEINLINE VOID SrbSetSrbLength(_In_ PVOID Srb, _In_ ULONG Length)
#define STOR_ADDRESS_TYPE_BTL8
FORCEINLINE PSRBEX_DATA SrbGetSrbExDataByIndex(_In_ PSTORAGE_REQUEST_BLOCK Srb, _In_ ULONG SrbExDataIndex)
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB32 SRBEX_DATA_SCSI_CDB32
FORCEINLINE UCHAR SrbGetSenseInfoBufferLength(_In_ PVOID Srb)
FORCEINLINE UCHAR SrbGetPathId(_In_ PVOID Srb)
struct SRB_ALIGN _SRBEX_DATA_WMI SRBEX_DATA_WMI
FORCEINLINE PSRBEX_DATA SrbGetSrbExDataByType(_In_ PSTORAGE_REQUEST_BLOCK Srb, _In_ SRBEXDATATYPE Type)
_In_ ULONG _In_ ULONG _In_ ULONG Length
FORCEINLINE UCHAR SrbGetCdbLength(_In_ PVOID Srb)
FORCEINLINE VOID SrbAssignSrbFlags(_In_ PVOID Srb, _In_ ULONG Flags)
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR _In_ UCHAR Lun
FORCEINLINE VOID SrbSetOriginalRequest(_In_ PVOID Srb, _In_opt_ PVOID OriginalRequest)
enum _SRBEXDATATYPE SRBEXDATATYPE
FORCEINLINE ULONG SrbGetSrbFlags(_In_ PVOID Srb)
_In_ PSCSI_REQUEST_BLOCK Srb
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB_VAR SRBEX_DATA_SCSI_CDB_VAR
struct STOR_ADDRESS_ALIGN _STOR_ADDRESS * PSTOR_ADDRESS
#define SrbZeroMemory(Destination, Length)
FORCEINLINE VOID SrbSetDataTransferLength(_In_ PVOID Srb, _In_ ULONG DataTransferLength)
struct _SCSI_REQUEST_BLOCK * PSCSI_REQUEST_BLOCK
FORCEINLINE PVOID SrbGetPortContext(_In_ PVOID Srb)
#define SRB_STATUS_AUTOSENSE_VALID
struct STOR_ADDRESS_ALIGN _STOR_ADDR_BTL8 * PSTOR_ADDR_BTL8
FORCEINLINE PVOID SrbGetNextSrb(_In_ PVOID Srb)
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR PathId
FORCEINLINE VOID SrbSetQueueTag(_In_ PVOID Srb, _In_ ULONG QueueTag)
struct SRB_ALIGN _SRBEX_DATA * PSRBEX_DATA
#define SrbCopyMemory(Destination, Source, Length)
struct SRB_ALIGN _SRBEX_DATA_POWER SRBEX_DATA_POWER
struct SRB_ALIGN _SRBEX_DATA_PNP SRBEX_DATA_PNP
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR TargetId
FORCEINLINE VOID SrbSetScsiData(_In_ PSTORAGE_REQUEST_BLOCK SrbEx, _In_opt_ PUCHAR CdbLength8, _In_opt_ PULONG CdbLength32, _In_opt_ PUCHAR ScsiStatus, _In_opt_ PVOID *SenseInfoBuffer, _In_opt_ PUCHAR SenseInfoBufferLength)
FORCEINLINE PSTOR_ADDRESS SrbGetAddress(_In_ PSTORAGE_REQUEST_BLOCK Srb)
FORCEINLINE UCHAR SrbGetSrbStatus(_In_ PVOID Srb)
FORCEINLINE PVOID SrbGetOriginalRequest(_In_ PVOID Srb)
FORCEINLINE PCDB SrbGetCdb(_In_ PVOID Srb)
struct _SCSI_REQUEST_BLOCK * NextSrb
FORCEINLINE VOID SrbSetSenseInfoBufferLength(_In_ PVOID Srb, _In_ UCHAR SenseInfoBufferLength)
FORCEINLINE PVOID SrbGetDataBuffer(_In_ PVOID Srb)
FORCEINLINE VOID SrbClearSrbFlags(_In_ PVOID Srb, _In_ ULONG Flags)
FORCEINLINE UCHAR SrbGetLun(_In_ PVOID Srb)
#define SRB_FUNCTION_POWER
FORCEINLINE ULONG SrbGetDefaultSrbLengthFromFunction(_In_ ULONG SrbFunction)
FORCEINLINE UCHAR SrbGetScsiStatus(_In_ PVOID Srb)
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB16 SRBEX_DATA_SCSI_CDB16
FORCEINLINE VOID SrbGetPathTargetLun(_In_ PVOID Srb, _In_opt_ PUCHAR PathId, _In_opt_ PUCHAR TargetId, _In_opt_ PUCHAR Lun)
FORCEINLINE VOID SrbSetScsiStatus(_In_ PVOID Srb, _In_ UCHAR ScsiStatus)
FORCEINLINE ULONG SrbGetQueueTag(_In_ PVOID Srb)
GLenum GLuint GLenum GLsizei length
FORCEINLINE ULONG SrbGetTimeOutValue(_In_ PVOID Srb)
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB16 * PSRBEX_DATA_SCSI_CDB16
FORCEINLINE ULONG SrbGetSystemStatus(_In_ PVOID Srb)
FORCEINLINE ULONG SrbGetDataTransferLength(_In_ PVOID Srb)
FORCEINLINE VOID SrbSetCdbLength(_In_ PVOID Srb, _In_ UCHAR CdbLength)
FORCEINLINE ULONG SrbGetRequestAttribute(_In_ PVOID Srb)
_Must_inspect_result_ _In_ ULONG Flags
FORCEINLINE VOID SrbSetNextSrb(_In_ PVOID Srb, _In_opt_ PVOID NextSrb)
FORCEINLINE VOID SrbSetTimeOutValue(_In_ PVOID Srb, _In_ ULONG TimeOutValue)
_In_ UCHAR SenseInfoBufferLength
_In_opt_ WDFREQUEST _In_ ULONG _In_ BOOLEAN _In_ PCDB Cdb
FORCEINLINE ULONG SrbGetSrbFunction(_In_ PVOID Srb)
FORCEINLINE PVOID SrbGetMiniportContext(_In_ PVOID Srb)
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB32 * PSRBEX_DATA_SCSI_CDB32
struct _SCSI_REQUEST_BLOCK SCSI_REQUEST_BLOCK
FORCEINLINE PSRBEX_DATA SrbGetPrimarySrbExData(_In_ PSTORAGE_REQUEST_BLOCK Srb)
#define SRB_FUNCTION_STORAGE_REQUEST_BLOCK
FORCEINLINE VOID SrbSetRequestAttribute(_In_ PVOID Srb, _In_ UCHAR RequestAttribute)
#define SRB_FUNCTION_IO_CONTROL
FORCEINLINE VOID SrbZeroSrb(_In_ PVOID Srb)
_In_ PSCSI_REQUEST_BLOCK _In_opt_ PVOID _In_ ULONG _In_ BOOLEAN _In_opt_ WDFREQUEST OriginalRequest
FORCEINLINE VOID SrbSetSystemStatus(_In_ PVOID Srb, _In_ ULONG Status)
#define SRB_ALIGN_SIZEOF(x)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
FORCEINLINE VOID SrbSetPortContext(_In_ PVOID Srb, _In_ PVOID PortContext)
FORCEINLINE PVOID SrbGetSenseInfoBuffer(_In_ PVOID Srb)
#define SCSI_REQUEST_BLOCK_SIZE
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB_VAR * PSRBEX_DATA_SCSI_CDB_VAR
struct STOR_ADDRESS_ALIGN _STOR_ADDR_BTL8 STOR_ADDR_BTL8
FORCEINLINE VOID SrbSetDataBuffer(_In_ PVOID Srb, _In_opt_ __drv_aliasesMem PVOID DataBuffer)
#define SRB_FUNCTION_EXECUTE_SCSI
FORCEINLINE VOID SrbSetSrbStatus(_In_ PVOID Srb, _In_ UCHAR status)
FORCEINLINE VOID SrbSetSenseInfoBuffer(_In_ PVOID Srb, _In_opt_ PVOID SenseInfoBuffer)
FORCEINLINE VOID SrbSetSrbFlags(_In_ PVOID Srb, _In_ ULONG Flags)
FORCEINLINE ULONG SrbGetSrbLength(_In_ PVOID Srb)
FORCEINLINE UCHAR SrbGetTargetId(_In_ PVOID Srb)
FORCEINLINE VOID SrbSetQueueSortKey(_In_ PVOID Srb, _In_ ULONG QueueSortKey)
static SERVICE_STATUS status
FORCEINLINE PCDB SrbGetScsiData(_In_ PSTORAGE_REQUEST_BLOCK SrbEx, _In_opt_ PUCHAR CdbLength8, _In_opt_ PULONG CdbLength32, _In_opt_ PUCHAR ScsiStatus, _In_opt_ PVOID *SenseInfoBuffer, _In_opt_ PUCHAR SenseInfoBufferLength)
FORCEINLINE BOOLEAN SrbCopySrb(_In_ PVOID DestinationSrb, _In_ ULONG DestinationSrbLength, _In_ PVOID SourceSrb)