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)
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;
_In_ PSCSI_REQUEST_BLOCK Srb
_In_ PSCSI_REQUEST_BLOCK _In_opt_ PVOID _In_ ULONG _In_ BOOLEAN _In_opt_ WDFREQUEST OriginalRequest
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR _In_ UCHAR Lun
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR PathId
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR TargetId
struct _SCSI_REQUEST_BLOCK SCSI_REQUEST_BLOCK
#define SCSI_REQUEST_BLOCK_SIZE
#define SRB_FUNCTION_IO_CONTROL
#define SRB_FUNCTION_EXECUTE_SCSI
#define SRB_STATUS_AUTOSENSE_VALID
struct _SCSI_REQUEST_BLOCK * PSCSI_REQUEST_BLOCK
GLuint GLsizei GLsizei * length
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
_In_ ULONG _In_ ULONG _In_ ULONG Length
_In_opt_ WDFREQUEST _In_ ULONG _In_ BOOLEAN _In_ PCDB Cdb
struct STOR_ADDRESS_ALIGN _STOR_ADDR_BTL8 * PSTOR_ADDR_BTL8
_In_ UCHAR SenseInfoBufferLength
#define STOR_ADDRESS_TYPE_BTL8
struct STOR_ADDRESS_ALIGN _STOR_ADDR_BTL8 STOR_ADDR_BTL8
struct STOR_ADDRESS_ALIGN _STOR_ADDRESS * PSTOR_ADDRESS
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB_VAR SRBEX_DATA_SCSI_CDB_VAR
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB_VAR * PSRBEX_DATA_SCSI_CDB_VAR
#define SRB_FUNCTION_POWER
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB16 SRBEX_DATA_SCSI_CDB16
#define SRB_FUNCTION_STORAGE_REQUEST_BLOCK
struct SRB_ALIGN _SRBEX_DATA * PSRBEX_DATA
struct SRB_ALIGN _SRBEX_DATA_PNP SRBEX_DATA_PNP
struct SRB_ALIGN _SRBEX_DATA_WMI SRBEX_DATA_WMI
struct SRB_ALIGN _SRBEX_DATA_POWER SRBEX_DATA_POWER
@ SrbExDataTypeScsiCdbVar
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB16 * PSRBEX_DATA_SCSI_CDB16
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB32 * PSRBEX_DATA_SCSI_CDB32
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB32 SRBEX_DATA_SCSI_CDB32
enum _SRBEXDATATYPE SRBEXDATATYPE
FORCEINLINE VOID SrbSetSystemStatus(_In_ PVOID Srb, _In_ ULONG Status)
FORCEINLINE UCHAR SrbGetCdbLength(_In_ PVOID Srb)
FORCEINLINE VOID SrbSetSrbFlags(_In_ PVOID Srb, _In_ ULONG Flags)
FORCEINLINE VOID SrbSetSrbStatus(_In_ PVOID Srb, _In_ UCHAR status)
#define SrbZeroMemory(Destination, Length)
FORCEINLINE ULONG SrbGetDefaultSrbLengthFromFunction(_In_ ULONG SrbFunction)
FORCEINLINE VOID SrbSetRequestAttribute(_In_ PVOID Srb, _In_ UCHAR RequestAttribute)
FORCEINLINE PVOID SrbGetPortContext(_In_ PVOID Srb)
FORCEINLINE VOID SrbAssignSrbFlags(_In_ PVOID Srb, _In_ ULONG Flags)
FORCEINLINE VOID SrbSetQueueSortKey(_In_ PVOID Srb, _In_ ULONG QueueSortKey)
FORCEINLINE VOID SrbSetDataTransferLength(_In_ PVOID Srb, _In_ ULONG DataTransferLength)
FORCEINLINE UCHAR SrbGetTargetId(_In_ PVOID Srb)
FORCEINLINE VOID SrbSetNextSrb(_In_ PVOID Srb, _In_opt_ PVOID NextSrb)
FORCEINLINE UCHAR SrbGetLun(_In_ PVOID Srb)
FORCEINLINE VOID SrbGetPathTargetLun(_In_ PVOID Srb, _In_opt_ PUCHAR PathId, _In_opt_ PUCHAR TargetId, _In_opt_ PUCHAR Lun)
FORCEINLINE VOID SrbZeroSrb(_In_ PVOID Srb)
FORCEINLINE VOID SrbSetOriginalRequest(_In_ PVOID Srb, _In_opt_ PVOID OriginalRequest)
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 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 ULONG SrbGetSrbFunction(_In_ PVOID Srb)
FORCEINLINE UCHAR SrbGetPathId(_In_ PVOID Srb)
FORCEINLINE VOID SrbClearSrbFlags(_In_ PVOID Srb, _In_ ULONG Flags)
FORCEINLINE VOID SrbSetScsiStatus(_In_ PVOID Srb, _In_ UCHAR ScsiStatus)
FORCEINLINE ULONG SrbGetTimeOutValue(_In_ PVOID Srb)
FORCEINLINE UCHAR SrbGetSrbStatus(_In_ PVOID Srb)
FORCEINLINE UCHAR SrbGetScsiStatus(_In_ PVOID Srb)
FORCEINLINE VOID SrbSetSenseInfoBufferLength(_In_ PVOID Srb, _In_ UCHAR SenseInfoBufferLength)
FORCEINLINE ULONG SrbGetSrbFlags(_In_ PVOID Srb)
FORCEINLINE ULONG SrbGetSrbLength(_In_ PVOID Srb)
FORCEINLINE VOID SrbSetQueueTag(_In_ PVOID Srb, _In_ ULONG QueueTag)
FORCEINLINE VOID SrbSetPortContext(_In_ PVOID Srb, _In_ PVOID PortContext)
FORCEINLINE VOID SrbSetSenseInfoBuffer(_In_ PVOID Srb, _In_opt_ PVOID SenseInfoBuffer)
FORCEINLINE ULONG SrbGetRequestAttribute(_In_ PVOID Srb)
FORCEINLINE ULONG SrbGetQueueTag(_In_ PVOID Srb)
FORCEINLINE VOID SrbSetSrbLength(_In_ PVOID Srb, _In_ ULONG Length)
FORCEINLINE VOID SrbSetDataBuffer(_In_ PVOID Srb, _In_opt_ __drv_aliasesMem PVOID DataBuffer)
FORCEINLINE VOID SrbSetCdbLength(_In_ PVOID Srb, _In_ UCHAR CdbLength)
FORCEINLINE PVOID SrbGetDataBuffer(_In_ PVOID Srb)
FORCEINLINE BOOLEAN SrbCopySrb(_In_ PVOID DestinationSrb, _In_ ULONG DestinationSrbLength, _In_ PVOID SourceSrb)
#define SRB_ALIGN_SIZEOF(x)
#define SrbCopyMemory(Destination, Source, Length)
FORCEINLINE VOID SrbSetTimeOutValue(_In_ PVOID Srb, _In_ ULONG TimeOutValue)
FORCEINLINE PSTOR_ADDRESS SrbGetAddress(_In_ PSTORAGE_REQUEST_BLOCK Srb)
FORCEINLINE PVOID SrbGetSenseInfoBuffer(_In_ PVOID Srb)
FORCEINLINE PSRBEX_DATA SrbGetSrbExDataByIndex(_In_ PSTORAGE_REQUEST_BLOCK Srb, _In_ ULONG SrbExDataIndex)
FORCEINLINE PSRBEX_DATA SrbGetSrbExDataByType(_In_ PSTORAGE_REQUEST_BLOCK Srb, _In_ SRBEXDATATYPE Type)
FORCEINLINE PVOID SrbGetMiniportContext(_In_ PVOID Srb)
FORCEINLINE PSRBEX_DATA SrbGetPrimarySrbExData(_In_ PSTORAGE_REQUEST_BLOCK Srb)
FORCEINLINE ULONG SrbGetSystemStatus(_In_ PVOID Srb)
FORCEINLINE PVOID SrbGetNextSrb(_In_ PVOID Srb)
FORCEINLINE UCHAR SrbGetSenseInfoBufferLength(_In_ PVOID Srb)
FORCEINLINE ULONG SrbGetDataTransferLength(_In_ PVOID Srb)
FORCEINLINE PVOID SrbGetOriginalRequest(_In_ PVOID Srb)
struct _SCSI_REQUEST_BLOCK * NextSrb
_Must_inspect_result_ _In_ ULONG Flags