ReactOS 0.4.17-dev-1321-g5c122a9
srbhelper.h
Go to the documentation of this file.
1#ifndef _SRBHELPER_H_
2#define _SRBHELPER_H_
3
4#if !defined(_NTSTORPORT_) && !defined(_NTSTORPORTP_) && !defined(_NTSRB_)
5#include <scsi.h>
6#include <srb.h>
7#endif
8
9#if (NTDDI_VERSION >= NTDDI_WIN8)
10
11#if !defined(SRBHELPER_ASSERT)
12#define SRBHELPER_ASSERT NT_ASSERT
13#endif
14
15#if !defined(SRB_ALIGN_SIZEOF)
16#define SRB_ALIGN_SIZEOF(x) (((ULONG_PTR)(sizeof(x) + sizeof(PVOID) - 1)) & ~(sizeof(PVOID) - 1))
17#endif
18
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)
23#else
24#define SrbMoveMemory(Destination, Source, Length) memmove(Destination, Source, Length)
25#endif
26
27#if defined(_NTDDK_)
28#define SrbCopyMemory(Destination, Source, Length) RtlCopyMemory(Destination, Source, Length)
29#else
30#define SrbCopyMemory(Destination, Source, Length) memcpy(Destination, Source, Length)
31#endif
32
33#if defined(_NTDDK_)
34#define SrbZeroMemory(Destination, Length) RtlZeroMemory(Destination, Length)
35#else
36#define SrbZeroMemory(Destination, Length) memset(Destination, 0, Length)
37#endif
38
39#if defined(_NTDDK_)
40#define SrbEqualMemory(Source1, Source2, Length) RtlEqualMemory(Source1, Source2, Length)
41#else
42#define SrbEqualMemory(Source1, Source2, Length) (memcmp(Source1, Source2, Length) == 0)
43#endif
44
49 _In_ ULONG SrbExDataIndex)
50{
51 PSRBEX_DATA srbExData = NULL;
52
54 (SrbExDataIndex < Srb->NumSrbExData) && (Srb->SrbExDataOffset[SrbExDataIndex]) &&
55 (Srb->SrbExDataOffset[SrbExDataIndex] >= sizeof(STORAGE_REQUEST_BLOCK)) &&
56 (Srb->SrbExDataOffset[SrbExDataIndex] < Srb->SrbLength))
57 {
58 srbExData = (PSRBEX_DATA)((PUCHAR)Srb + Srb->SrbExDataOffset[SrbExDataIndex]);
59 }
60
61 return srbExData;
62}
63
69{
70 if ((Srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK) && (Srb->NumSrbExData > 0))
71 {
72 PSRBEX_DATA srbExData = NULL;
73 UCHAR i = 0;
74
75 for (i = 0; i < Srb->NumSrbExData; i++)
76 {
77 if (Srb->SrbExDataOffset[i] >= sizeof(STORAGE_REQUEST_BLOCK) &&
78 Srb->SrbExDataOffset[i] < Srb->SrbLength)
79 {
80 srbExData = (PSRBEX_DATA)((PUCHAR)Srb + Srb->SrbExDataOffset[i]);
81 if (srbExData->Type == Type)
82 {
83 return srbExData;
84 }
85 }
86 }
87 }
88
89 return NULL;
90}
91
96{
98 {
99 switch (Srb->SrbFunction)
100 {
103
104 case SRB_FUNCTION_PNP:
106
107 case SRB_FUNCTION_WMI:
109
111 PSRBEX_DATA srbExData = NULL;
112 UCHAR i = 0;
113
114 for (i = 0; i < Srb->NumSrbExData; i++)
115 {
116 if (Srb->SrbExDataOffset[i] >= sizeof(STORAGE_REQUEST_BLOCK) &&
117 Srb->SrbExDataOffset[i] < Srb->SrbLength)
118 {
119 srbExData = (PSRBEX_DATA)((PUCHAR)Srb + Srb->SrbExDataOffset[i]);
120 if (srbExData->Type == SrbExDataTypeScsiCdb16 ||
121 srbExData->Type == SrbExDataTypeScsiCdb32 ||
122 srbExData->Type == SrbExDataTypeScsiCdbVar)
123 {
124 return srbExData;
125 }
126 }
127 }
128 return NULL;
129 }
130
131 default:
132 return NULL;
133 }
134 }
135
136 return NULL;
137}
138
140{
141 PSTOR_ADDRESS storAddr = NULL;
142
144 {
145 SRBHELPER_ASSERT(Srb->AddressOffset);
146
147 if (Srb->AddressOffset)
148 {
149 storAddr = (PSTOR_ADDRESS)((PUCHAR)Srb + Srb->AddressOffset);
150 SRBHELPER_ASSERT(storAddr->Type == STOR_ADDRESS_TYPE_BTL8);
151 }
152 }
153
154 return storAddr;
155}
156
160 _In_ PVOID DestinationSrb,
161 _In_ ULONG DestinationSrbLength,
162 _In_ PVOID SourceSrb)
163{
164 PSTORAGE_REQUEST_BLOCK sourceSrb = (PSTORAGE_REQUEST_BLOCK)SourceSrb;
166
167 if (sourceSrb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
168 {
169 if (DestinationSrbLength >= sourceSrb->SrbLength)
170 {
171 SrbCopyMemory(DestinationSrb, SourceSrb, sourceSrb->SrbLength);
172 status = TRUE;
173 }
174 }
175 else
176 {
177 if (DestinationSrbLength >= SCSI_REQUEST_BLOCK_SIZE)
178 {
179 SrbCopyMemory(DestinationSrb, SourceSrb, SCSI_REQUEST_BLOCK_SIZE);
180 status = TRUE;
181 }
182 }
183
184 return status;
185}
186
188VOID
190 _In_ PVOID Srb)
191{
193 UCHAR function = srb->Function;
194 USHORT length = srb->Length;
195
196 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
197 {
198 ULONG srbLength = srb->SrbLength;
199
200 SrbZeroMemory(Srb, srb->SrbLength);
201
202 srb->SrbLength = srbLength;
203 }
204 else
205 {
207 }
208
209 srb->Function = function;
210 srb->Length = length;
211}
212
214ULONG
216 _In_ PVOID Srb)
217{
219
220 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
221 {
222 return srb->SrbLength;
223 }
224 else
225 {
226 return sizeof(SCSI_REQUEST_BLOCK);
227 }
228}
229
231VOID
233 _In_ PVOID Srb,
235{
237
238 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
239 {
240 srb->SrbLength = Length;
241 }
242}
243
245ULONG
247 _In_ ULONG SrbFunction)
248{
249 switch (SrbFunction)
250 {
251 case SRB_FUNCTION_PNP:
257 case SRB_FUNCTION_WMI:
265 default:
267 }
268}
269
271PCDB
274 _In_opt_ PUCHAR CdbLength8,
275 _In_opt_ PULONG CdbLength32,
276 _In_opt_ PUCHAR ScsiStatus,
279{
280 PCDB Cdb = NULL;
281 ULONG i;
282 PSRBEX_DATA SrbExData = NULL;
283 BOOLEAN FoundEntry = FALSE;
284
285 if ((SrbEx->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK) &&
286 (SrbEx->SrbFunction == SRB_FUNCTION_EXECUTE_SCSI))
287 {
288 SRBHELPER_ASSERT(SrbEx->NumSrbExData > 0);
289
290 for (i = 0; i < SrbEx->NumSrbExData; i++)
291 {
292 if ((SrbEx->SrbExDataOffset[i] < sizeof(STORAGE_REQUEST_BLOCK)) ||
293 (SrbEx->SrbExDataOffset[i] >= SrbEx->SrbLength))
294 {
296 continue;
297 }
298
299 SrbExData = (PSRBEX_DATA)((PUCHAR)SrbEx + SrbEx->SrbExDataOffset[i]);
300
301 switch (SrbExData->Type)
302 {
304 if (SrbEx->SrbExDataOffset[i] + sizeof(SRBEX_DATA_SCSI_CDB16) <= SrbEx->SrbLength)
305 {
306 FoundEntry = TRUE;
307 if (CdbLength8)
308 {
309 *CdbLength8 = ((PSRBEX_DATA_SCSI_CDB16)SrbExData)->CdbLength;
310 }
311
312 if (((PSRBEX_DATA_SCSI_CDB16)SrbExData)->CdbLength > 0)
313 {
314 Cdb = (PCDB)((PSRBEX_DATA_SCSI_CDB16)SrbExData)->Cdb;
315 }
316
317 if (ScsiStatus)
318 {
319 *ScsiStatus = ((PSRBEX_DATA_SCSI_CDB16)SrbExData)->ScsiStatus;
320 }
321
322 if (SenseInfoBuffer)
323 {
324 *SenseInfoBuffer = ((PSRBEX_DATA_SCSI_CDB16)SrbExData)->SenseInfoBuffer;
325 }
326
328 {
329 *SenseInfoBufferLength = ((PSRBEX_DATA_SCSI_CDB16)SrbExData)->SenseInfoBufferLength;
330 }
331 }
332 else
333 {
334 // Catch invalid offset
336 }
337 break;
338
340 if (SrbEx->SrbExDataOffset[i] + sizeof(SRBEX_DATA_SCSI_CDB32) <= SrbEx->SrbLength)
341 {
342 FoundEntry = TRUE;
343 if (CdbLength8)
344 {
345 *CdbLength8 = ((PSRBEX_DATA_SCSI_CDB32)SrbExData)->CdbLength;
346 }
347
348 if (((PSRBEX_DATA_SCSI_CDB32)SrbExData)->CdbLength > 0)
349 {
350 Cdb = (PCDB)((PSRBEX_DATA_SCSI_CDB32)SrbExData)->Cdb;
351 }
352
353 if (ScsiStatus)
354 {
355 *ScsiStatus = ((PSRBEX_DATA_SCSI_CDB32)SrbExData)->ScsiStatus;
356 }
357
358 if (SenseInfoBuffer)
359 {
360 *SenseInfoBuffer = ((PSRBEX_DATA_SCSI_CDB32)SrbExData)->SenseInfoBuffer;
361 }
362
364 {
365 *SenseInfoBufferLength = ((PSRBEX_DATA_SCSI_CDB32)SrbExData)->SenseInfoBufferLength;
366 }
367 }
368 else
369 {
370 // Catch invalid offset
372 }
373 break;
374
376 if (SrbEx->SrbExDataOffset[i] + sizeof(SRBEX_DATA_SCSI_CDB_VAR) <= SrbEx->SrbLength)
377 {
378 FoundEntry = TRUE;
379 if (CdbLength32)
380 {
381 *CdbLength32 = ((PSRBEX_DATA_SCSI_CDB_VAR)SrbExData)->CdbLength;
382 }
383
384 if (((PSRBEX_DATA_SCSI_CDB_VAR)SrbExData)->CdbLength > 0)
385 {
386 Cdb = (PCDB)((PSRBEX_DATA_SCSI_CDB_VAR)SrbExData)->Cdb;
387 }
388
389 if (ScsiStatus)
390 {
391 *ScsiStatus = ((PSRBEX_DATA_SCSI_CDB_VAR)SrbExData)->ScsiStatus;
392 }
393
394 if (SenseInfoBuffer)
395 {
396 *SenseInfoBuffer = ((PSRBEX_DATA_SCSI_CDB_VAR)SrbExData)->SenseInfoBuffer;
397 }
398
400 {
401 *SenseInfoBufferLength = ((PSRBEX_DATA_SCSI_CDB_VAR)SrbExData)->SenseInfoBufferLength;
402 }
403 }
404 else
405 {
407 }
408 break;
409
410 default:
411 /* Nothing else carries a command */
412 break;
413 }
414
415 if (FoundEntry)
416 {
417 break;
418 }
419 }
420 }
421 else
422 {
423
424 if (CdbLength8)
425 {
426 *CdbLength8 = 0;
427 }
428
429 if (CdbLength32)
430 {
431 *CdbLength32 = 0;
432 }
433
434 if (ScsiStatus)
435 {
436 *ScsiStatus = SCSISTAT_GOOD;
437 }
438
439 if (SenseInfoBuffer)
440 {
442 }
443
445 {
447 }
448 }
449
450 return Cdb;
451}
452
454VOID
457 _In_opt_ PUCHAR CdbLength8,
458 _In_opt_ PULONG CdbLength32,
459 _In_opt_ PUCHAR ScsiStatus,
462{
463 ULONG i;
464 PSRBEX_DATA SrbExData = NULL;
465 BOOLEAN FoundEntry = FALSE;
466
467 if ((SrbEx->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK) &&
468 (SrbEx->SrbFunction == SRB_FUNCTION_EXECUTE_SCSI))
469 {
470 SRBHELPER_ASSERT(SrbEx->NumSrbExData > 0);
471
472 for (i = 0; i < SrbEx->NumSrbExData; i++)
473 {
474 if ((SrbEx->SrbExDataOffset[i] < sizeof(STORAGE_REQUEST_BLOCK)) ||
475 (SrbEx->SrbExDataOffset[i] >= SrbEx->SrbLength))
476 {
478 continue;
479 }
480
481 SrbExData = (PSRBEX_DATA)((PUCHAR)SrbEx + SrbEx->SrbExDataOffset[i]);
482
483 switch (SrbExData->Type)
484 {
486 if (SrbEx->SrbExDataOffset[i] + sizeof(SRBEX_DATA_SCSI_CDB16) <= SrbEx->SrbLength)
487 {
488 FoundEntry = TRUE;
489 if (CdbLength8)
490 {
491 ((PSRBEX_DATA_SCSI_CDB16)SrbExData)->CdbLength = *CdbLength8;
492 }
493
494 if (ScsiStatus)
495 {
496 ((PSRBEX_DATA_SCSI_CDB16)SrbExData)->ScsiStatus = *ScsiStatus;
497 }
498
499 if (SenseInfoBuffer)
500 {
501 ((PSRBEX_DATA_SCSI_CDB16)SrbExData)->SenseInfoBuffer = *SenseInfoBuffer;
502 }
503
505 {
506 ((PSRBEX_DATA_SCSI_CDB16)SrbExData)->SenseInfoBufferLength = *SenseInfoBufferLength;
507 }
508 }
509 else
510 {
511 // Catch invalid offset
513 }
514 break;
515
517 if (SrbEx->SrbExDataOffset[i] + sizeof(SRBEX_DATA_SCSI_CDB32) <= SrbEx->SrbLength)
518 {
519 FoundEntry = TRUE;
520 if (CdbLength8)
521 {
522 ((PSRBEX_DATA_SCSI_CDB32)SrbExData)->CdbLength = *CdbLength8;
523 }
524
525 if (ScsiStatus)
526 {
527 ((PSRBEX_DATA_SCSI_CDB32)SrbExData)->ScsiStatus = *ScsiStatus;
528 }
529
530 if (SenseInfoBuffer)
531 {
532 ((PSRBEX_DATA_SCSI_CDB32)SrbExData)->SenseInfoBuffer = *SenseInfoBuffer;
533 }
534
536 {
537 ((PSRBEX_DATA_SCSI_CDB32)SrbExData)->SenseInfoBufferLength = *SenseInfoBufferLength;
538 }
539 }
540 else
541 {
543 }
544 break;
545
547 if (SrbEx->SrbExDataOffset[i] + sizeof(SRBEX_DATA_SCSI_CDB_VAR) <= SrbEx->SrbLength)
548 {
549 FoundEntry = TRUE;
550 if (CdbLength32)
551 {
552 ((PSRBEX_DATA_SCSI_CDB_VAR)SrbExData)->CdbLength = *CdbLength32;
553 }
554
555 if (ScsiStatus)
556 {
557 ((PSRBEX_DATA_SCSI_CDB_VAR)SrbExData)->ScsiStatus = *ScsiStatus;
558 }
559
560 if (SenseInfoBuffer)
561 {
562 ((PSRBEX_DATA_SCSI_CDB_VAR)SrbExData)->SenseInfoBuffer = *SenseInfoBuffer;
563 }
564
566 {
567 ((PSRBEX_DATA_SCSI_CDB_VAR)SrbExData)->SenseInfoBufferLength = *SenseInfoBufferLength;
568 }
569 }
570 else
571 {
573 }
574 break;
575
576 default:
577 /* Nothing else carries a command */
578 break;
579 }
580
581 if (FoundEntry)
582 {
583 break;
584 }
585 }
586 }
587}
588
590PCDB
592 _In_ PVOID Srb)
593{
595 PCDB pCdb = NULL;
596
597 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
598 {
599 return SrbGetScsiData(srb, NULL, NULL, NULL, NULL, NULL);
600 }
601 else
602 {
603 pCdb = (PCDB)((PSCSI_REQUEST_BLOCK)srb)->Cdb;
604 }
605 return pCdb;
606}
607
609ULONG
611 _In_ PVOID Srb)
612{
614
615 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
616 {
617 return srb->SrbFunction;
618 }
619 else
620 {
621 return (ULONG)((PSCSI_REQUEST_BLOCK)srb)->Function;
622 }
623}
624
626PVOID
628 _In_ PVOID Srb)
629{
631 PVOID pSenseInfoBuffer = NULL;
632
633 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
634 {
635 SrbGetScsiData(srb, NULL, NULL, NULL, &pSenseInfoBuffer, NULL);
636 }
637 else
638 {
639 pSenseInfoBuffer = ((PSCSI_REQUEST_BLOCK)srb)->SenseInfoBuffer;
640 }
641 return pSenseInfoBuffer;
642}
643
645UCHAR
647 _In_ PVOID Srb)
648{
651
652 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
653 {
655 }
656 else
657 {
658 SenseInfoBufferLength = ((PSCSI_REQUEST_BLOCK)srb)->SenseInfoBufferLength;
659 }
661}
662
664VOID
666 _In_ PVOID Srb,
668{
670
671 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
672 {
674 }
675 else
676 {
677 ((PSCSI_REQUEST_BLOCK)srb)->SenseInfoBuffer = SenseInfoBuffer;
678 }
679}
680
682VOID
684 _In_ PVOID Srb,
686{
688
689 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
690 {
692 }
693 else
694 {
695 ((PSCSI_REQUEST_BLOCK)srb)->SenseInfoBufferLength = SenseInfoBufferLength;
696 }
697}
698
700PVOID
702 _In_ PVOID Srb)
703{
705
706 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
707 {
708 return srb->OriginalRequest;
709 }
710 else
711 {
713 }
714}
715
717VOID
719 _In_ PVOID Srb,
721{
723
724 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
725 {
727 }
728 else
729 {
731 }
732}
733
735PVOID
737 _In_ PVOID Srb)
738{
740 PVOID DataBuffer;
741
742 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
743 {
744 DataBuffer = srb->DataBuffer;
745 }
746 else
747 {
748 DataBuffer = ((PSCSI_REQUEST_BLOCK)srb)->DataBuffer;
749 }
750 return DataBuffer;
751}
752
754VOID
756 _In_ PVOID Srb,
758{
760
761 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
762 {
763 srb->DataBuffer = DataBuffer;
764 }
765 else
766 {
767 ((PSCSI_REQUEST_BLOCK)srb)->DataBuffer = DataBuffer;
768 }
769}
770
772ULONG
774 _In_ PVOID Srb)
775{
777 ULONG DataTransferLength;
778
779 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
780 {
781 DataTransferLength = srb->DataTransferLength;
782 }
783 else
784 {
785 DataTransferLength = ((PSCSI_REQUEST_BLOCK)srb)->DataTransferLength;
786 }
787 return DataTransferLength;
788}
789
791VOID
793 _In_ PVOID Srb,
794 _In_ ULONG DataTransferLength)
795{
797
798 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
799 {
800 srb->DataTransferLength = DataTransferLength;
801 }
802 else
803 {
804 ((PSCSI_REQUEST_BLOCK)srb)->DataTransferLength = DataTransferLength;
805 }
806}
807
809ULONG
811 _In_ PVOID Srb)
812{
814 ULONG timeOutValue;
815
816 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
817 {
818 timeOutValue = srb->TimeOutValue;
819 }
820 else
821 {
822 timeOutValue = ((PSCSI_REQUEST_BLOCK)srb)->TimeOutValue;
823 }
824 return timeOutValue;
825}
826
828VOID
830 _In_ PVOID Srb,
831 _In_ ULONG TimeOutValue)
832{
834
835 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
836 {
837 srb->TimeOutValue = TimeOutValue;
838 }
839 else
840 {
841 ((PSCSI_REQUEST_BLOCK)srb)->TimeOutValue = TimeOutValue;
842 }
843}
844
846VOID
848 _In_ PVOID Srb,
849 _In_ ULONG QueueSortKey)
850{
852
853 if (srb->Function != SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
854 {
855 ((PSCSI_REQUEST_BLOCK)srb)->QueueSortKey = QueueSortKey;
856 }
857}
858
860VOID
862 _In_ PVOID Srb,
863 _In_ ULONG QueueTag)
864{
866
867 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
868 {
869 srb->RequestTag = QueueTag;
870 }
871 else
872 {
873 ((PSCSI_REQUEST_BLOCK)srb)->QueueTag = (UCHAR)QueueTag;
874 }
875}
876
877#define SrbSetRequestTag SrbSetQueueTag
878
880ULONG
882 _In_ PVOID Srb)
883{
885
886 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
887 {
888 return srb->RequestTag;
889 }
890 else
891 {
892 return ((PSCSI_REQUEST_BLOCK)srb)->QueueTag;
893 }
894}
895
896#define SrbGetRequestTag SrbGetQueueTag
897
899PVOID
901 _In_ PVOID Srb)
902{
904
905 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
906 {
907 return (PVOID)srb->NextSrb;
908 }
909 else
910 {
911 return (PVOID)((PSCSI_REQUEST_BLOCK)srb)->NextSrb;
912 }
913}
914
916VOID
918 _In_ PVOID Srb,
919 _In_opt_ PVOID NextSrb)
920{
922
923 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
924 {
925 srb->NextSrb = (PSTORAGE_REQUEST_BLOCK)NextSrb;
926 }
927 else
928 {
929 ((PSCSI_REQUEST_BLOCK)srb)->NextSrb = (PSCSI_REQUEST_BLOCK)NextSrb;
930 }
931}
932
934ULONG
936 _In_ PVOID Srb)
937{
939 ULONG srbFlags;
940
941 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
942 {
943 srbFlags = srb->SrbFlags;
944 }
945 else
946 {
947 srbFlags = ((PSCSI_REQUEST_BLOCK)srb)->SrbFlags;
948 }
949 return srbFlags;
950}
951
953VOID
955 _In_ PVOID Srb,
957{
959
960 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
961 {
962 srb->SrbFlags = Flags;
963 }
964 else
965 {
966 ((PSCSI_REQUEST_BLOCK)srb)->SrbFlags = Flags;
967 }
968}
969
971VOID
973 _In_ PVOID Srb,
975{
977
978 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
979 {
980 srb->SrbFlags |= Flags;
981 }
982 else
983 {
984 ((PSCSI_REQUEST_BLOCK)srb)->SrbFlags |= Flags;
985 }
986}
987
989VOID
991 _In_ PVOID Srb,
993{
995
996 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
997 {
998 srb->SrbFlags &= ~Flags;
999 }
1000 else
1001 {
1002 ((PSCSI_REQUEST_BLOCK)srb)->SrbFlags &= ~Flags;
1003 }
1004}
1005
1007ULONG
1009 _In_ PVOID Srb)
1010{
1012 ULONG systemStatus;
1013
1014 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
1015 {
1016 systemStatus = srb->SystemStatus;
1017 }
1018 else
1019 {
1020 systemStatus = ((PSCSI_REQUEST_BLOCK)srb)->InternalStatus;
1021 }
1022 return systemStatus;
1023}
1024
1026VOID
1028 _In_ PVOID Srb,
1030{
1032
1033 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
1034 {
1035 srb->SystemStatus = Status;
1036 }
1037 else
1038 {
1039 ((PSCSI_REQUEST_BLOCK)srb)->InternalStatus = Status;
1040 }
1041}
1042
1044UCHAR
1046 _In_ PVOID Srb)
1047{
1049 UCHAR scsiStatus = 0;
1050
1051 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
1052 {
1053 SrbGetScsiData(srb, NULL, NULL, &scsiStatus, NULL, NULL);
1054 }
1055 else
1056 {
1057 scsiStatus = ((PSCSI_REQUEST_BLOCK)srb)->ScsiStatus;
1058 }
1059 return scsiStatus;
1060}
1061
1063VOID
1065 _In_ PVOID Srb,
1066 _In_ UCHAR ScsiStatus)
1067{
1069
1070 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
1071 {
1072 SrbSetScsiData(srb, NULL, NULL, &ScsiStatus, NULL, NULL);
1073 }
1074 else
1075 {
1076 ((PSCSI_REQUEST_BLOCK)srb)->ScsiStatus = ScsiStatus;
1077 }
1078}
1079
1081UCHAR
1083 _In_ PVOID Srb)
1084{
1086 UCHAR CdbLength = 0;
1087
1088 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
1089 {
1090 SrbGetScsiData(srb, &CdbLength, NULL, NULL, NULL, NULL);
1091 }
1092 else
1093 {
1094 CdbLength = ((PSCSI_REQUEST_BLOCK)srb)->CdbLength;
1095 }
1096 return CdbLength;
1097}
1098
1100VOID
1102 _In_ PVOID Srb,
1103 _In_ UCHAR CdbLength)
1104{
1106
1107 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
1108 {
1109 SrbSetScsiData(srb, &CdbLength, NULL, NULL, NULL, NULL);
1110 }
1111 else
1112 {
1113 ((PSCSI_REQUEST_BLOCK)srb)->CdbLength = CdbLength;
1114 }
1115}
1116
1118ULONG
1120 _In_ PVOID Srb)
1121{
1123 ULONG RequestAttribute;
1124 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
1125 {
1126 RequestAttribute = srb->RequestAttribute;
1127 }
1128 else
1129 {
1130 RequestAttribute = ((PSCSI_REQUEST_BLOCK)srb)->QueueAction;
1131 }
1132 return RequestAttribute;
1133}
1134
1135#define SrbGetQueueAction SrbGetRequestAttribute
1136
1138VOID
1140 _In_ PVOID Srb,
1141 _In_ UCHAR RequestAttribute)
1142{
1144
1145 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
1146 {
1147 srb->RequestAttribute = RequestAttribute;
1148 }
1149 else
1150 {
1151 ((PSCSI_REQUEST_BLOCK)srb)->QueueAction = RequestAttribute;
1152 }
1153}
1154
1155#define SrbSetQueueAction SrbSetRequestAttribute
1156
1158UCHAR
1160 _In_ PVOID Srb)
1161{
1163 UCHAR PathId = 0;
1164 PSTOR_ADDRESS storAddr = NULL;
1165
1166 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
1167 {
1168 storAddr = (PSTOR_ADDRESS)SrbGetAddress(srb);
1169 if (storAddr)
1170 {
1171 switch (storAddr->Type)
1172 {
1174 PathId = ((PSTOR_ADDR_BTL8)storAddr)->Path;
1175 break;
1176
1177 default:
1179 break;
1180 }
1181 }
1182 }
1183 else
1184 {
1185 PathId = ((PSCSI_REQUEST_BLOCK)srb)->PathId;
1186 }
1187 return PathId;
1188}
1189
1191UCHAR
1193 _In_ PVOID Srb)
1194{
1196 UCHAR TargetId = 0;
1197 PSTOR_ADDRESS storAddr = NULL;
1198
1199 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
1200 {
1201 storAddr = (PSTOR_ADDRESS)SrbGetAddress(srb);
1202 if (storAddr)
1203 {
1204 switch (storAddr->Type)
1205 {
1207 TargetId = ((PSTOR_ADDR_BTL8)storAddr)->Target;
1208 break;
1209
1210 default:
1212 break;
1213 }
1214 }
1215 }
1216 else
1217 {
1218 TargetId = ((PSCSI_REQUEST_BLOCK)srb)->TargetId;
1219 }
1220 return TargetId;
1221}
1222
1224UCHAR
1226 _In_ PVOID Srb)
1227{
1229 UCHAR Lun = 0;
1230 PSTOR_ADDRESS storAddr = NULL;
1231
1232 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
1233 {
1234 storAddr = (PSTOR_ADDRESS)SrbGetAddress(srb);
1235 if (storAddr)
1236 {
1237 switch (storAddr->Type)
1238 {
1240 Lun = ((PSTOR_ADDR_BTL8)storAddr)->Lun;
1241 break;
1242
1243 default:
1245 break;
1246 }
1247 }
1248 }
1249 else
1250 {
1251 Lun = ((PSCSI_REQUEST_BLOCK)srb)->Lun;
1252 }
1253 return Lun;
1254}
1255
1257VOID
1259 _In_ PVOID Srb,
1263{
1265 PSTOR_ADDRESS storAddr = NULL;
1266
1267 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
1268 {
1269 storAddr = (PSTOR_ADDRESS)SrbGetAddress(srb);
1270 if (storAddr)
1271 {
1272 switch (storAddr->Type)
1273 {
1275 if (PathId != NULL)
1276 {
1277 *PathId = ((PSTOR_ADDR_BTL8)storAddr)->Path;
1278 }
1279
1280 if (TargetId != NULL)
1281 {
1282 *TargetId = ((PSTOR_ADDR_BTL8)storAddr)->Target;
1283 }
1284
1285 if (Lun != NULL)
1286 {
1287 *Lun = ((PSTOR_ADDR_BTL8)storAddr)->Lun;
1288 }
1289
1290 break;
1291
1292 default:
1294 break;
1295 }
1296 }
1297 }
1298 else
1299 {
1300 if (PathId != NULL)
1301 {
1302 *PathId = ((PSCSI_REQUEST_BLOCK)srb)->PathId;
1303 }
1304
1305 if (TargetId != NULL)
1306 {
1307 *TargetId = ((PSCSI_REQUEST_BLOCK)srb)->TargetId;
1308 }
1309
1310 if (Lun != NULL)
1311 {
1312 *Lun = ((PSCSI_REQUEST_BLOCK)srb)->Lun;
1313 }
1314 }
1315
1316 return;
1317}
1318
1320PVOID
1322 _In_ PVOID Srb)
1323{
1325
1326 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
1327 {
1328 return srb->MiniportContext;
1329 }
1330 else
1331 {
1332 return ((PSCSI_REQUEST_BLOCK)srb)->SrbExtension;
1333 }
1334}
1335
1337UCHAR
1339 _In_ PVOID Srb)
1340{
1342
1343 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
1344 {
1345 return srb->SrbStatus;
1346 }
1347 else
1348 {
1349 return ((PSCSI_REQUEST_BLOCK)srb)->SrbStatus;
1350 }
1351}
1352
1354VOID
1356 _In_ PVOID Srb,
1358{
1360
1361 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
1362 {
1363 if (srb->SrbStatus & SRB_STATUS_AUTOSENSE_VALID)
1364 {
1366 }
1367 else
1368 {
1369 srb->SrbStatus = status;
1370 }
1371 }
1372 else
1373 {
1374 if (((PSCSI_REQUEST_BLOCK)srb)->SrbStatus & SRB_STATUS_AUTOSENSE_VALID)
1375 {
1377 }
1378 else
1379 {
1380 ((PSCSI_REQUEST_BLOCK)srb)->SrbStatus = status;
1381 }
1382 }
1383}
1384
1386PVOID
1388 _In_ PVOID Srb)
1389{
1391
1392 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
1393 {
1394 return srb->PortContext;
1395 }
1396 else
1397 {
1399 return NULL;
1400 }
1401}
1402
1404VOID
1406 _In_ PVOID Srb,
1408{
1410
1411 if (srb->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
1412 {
1413 srb->PortContext = PortContext;
1414 }
1415 else
1416 {
1418 }
1419}
1420
1421#endif /* (NTDDI_VERSION >= NTDDI_WIN8) */
1422#endif /* _SRBHELPER_H_ */
Type
Definition: Type.h:7
unsigned char BOOLEAN
Definition: actypes.h:127
_In_ PVOID PortContext
Definition: ata_shared.h:375
#define __drv_aliasesMem
Definition: btrfs_drv.h:203
_In_ PSCSI_REQUEST_BLOCK Srb
Definition: cdrom.h:989
_In_ PSCSI_REQUEST_BLOCK _In_opt_ PVOID _In_ ULONG _In_ BOOLEAN _In_opt_ WDFREQUEST OriginalRequest
Definition: cdrom.h:994
#define SCSISTAT_GOOD
Definition: cdrw_hw.h:1078
union _CDB * PCDB
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR _In_ UCHAR Lun
Definition: classpnp.h:1315
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR PathId
Definition: classpnp.h:1313
_In_ DXGK_MIRACAST_DISPLAY_CALLBACKS _Out_ PVOID _Out_ ULONG * TargetId
Definition: dispmprt.h:650
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
Definition: dispmprt.h:245
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define SRB_FUNCTION_WMI
Definition: srb.h:331
struct _SCSI_REQUEST_BLOCK SCSI_REQUEST_BLOCK
#define SCSI_REQUEST_BLOCK_SIZE
Definition: srb.h:282
#define SRB_FUNCTION_IO_CONTROL
Definition: srb.h:317
#define SRB_FUNCTION_EXECUTE_SCSI
Definition: srb.h:315
#define SRB_STATUS_AUTOSENSE_VALID
Definition: srb.h:387
struct _SCSI_REQUEST_BLOCK * PSCSI_REQUEST_BLOCK
Status
Definition: gdiplustypes.h:24
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
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
Definition: glfuncs.h:248
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
unsigned short USHORT
Definition: pedump.c:61
_In_opt_ WDFREQUEST _In_ ULONG _In_ BOOLEAN _In_ PCDB Cdb
Definition: scratch.h:159
struct STOR_ADDRESS_ALIGN _STOR_ADDR_BTL8 * PSTOR_ADDR_BTL8
_In_ UCHAR SenseInfoBufferLength
Definition: scsi.h:3751
#define STOR_ADDRESS_TYPE_BTL8
Definition: scsi.h:3571
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
Definition: srb.h:104
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB16 SRBEX_DATA_SCSI_CDB16
#define SRB_FUNCTION_STORAGE_REQUEST_BLOCK
Definition: srb.h:108
#define SRB_FUNCTION_PNP
Definition: srb.h:105
* PSTORAGE_REQUEST_BLOCK
Definition: srb.h:661
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
@ SrbExDataTypeWmi
Definition: srb.h:462
@ SrbExDataTypeScsiCdb32
Definition: srb.h:460
@ SrbExDataTypeScsiCdb16
Definition: srb.h:459
@ SrbExDataTypePower
Definition: srb.h:463
@ SrbExDataTypeScsiCdbVar
Definition: srb.h:461
@ SrbExDataTypePnP
Definition: srb.h:464
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB16 * PSRBEX_DATA_SCSI_CDB16
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB32 * PSRBEX_DATA_SCSI_CDB32
STORAGE_REQUEST_BLOCK
Definition: srb.h:661
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB32 SRBEX_DATA_SCSI_CDB32
enum _SRBEXDATATYPE SRBEXDATATYPE
Srb SenseInfoBuffer
Definition: sptilib.c:215
FORCEINLINE VOID SrbSetSystemStatus(_In_ PVOID Srb, _In_ ULONG Status)
Definition: srbhelper.h:1027
FORCEINLINE UCHAR SrbGetCdbLength(_In_ PVOID Srb)
Definition: srbhelper.h:1082
FORCEINLINE VOID SrbSetSrbFlags(_In_ PVOID Srb, _In_ ULONG Flags)
Definition: srbhelper.h:972
FORCEINLINE VOID SrbSetSrbStatus(_In_ PVOID Srb, _In_ UCHAR status)
Definition: srbhelper.h:1355
#define SrbZeroMemory(Destination, Length)
Definition: srbhelper.h:36
FORCEINLINE ULONG SrbGetDefaultSrbLengthFromFunction(_In_ ULONG SrbFunction)
Definition: srbhelper.h:246
FORCEINLINE VOID SrbSetRequestAttribute(_In_ PVOID Srb, _In_ UCHAR RequestAttribute)
Definition: srbhelper.h:1139
FORCEINLINE PVOID SrbGetPortContext(_In_ PVOID Srb)
Definition: srbhelper.h:1387
FORCEINLINE VOID SrbAssignSrbFlags(_In_ PVOID Srb, _In_ ULONG Flags)
Definition: srbhelper.h:954
FORCEINLINE VOID SrbSetQueueSortKey(_In_ PVOID Srb, _In_ ULONG QueueSortKey)
Definition: srbhelper.h:847
FORCEINLINE VOID SrbSetDataTransferLength(_In_ PVOID Srb, _In_ ULONG DataTransferLength)
Definition: srbhelper.h:792
FORCEINLINE UCHAR SrbGetTargetId(_In_ PVOID Srb)
Definition: srbhelper.h:1192
FORCEINLINE VOID SrbSetNextSrb(_In_ PVOID Srb, _In_opt_ PVOID NextSrb)
Definition: srbhelper.h:917
FORCEINLINE UCHAR SrbGetLun(_In_ PVOID Srb)
Definition: srbhelper.h:1225
FORCEINLINE VOID SrbGetPathTargetLun(_In_ PVOID Srb, _In_opt_ PUCHAR PathId, _In_opt_ PUCHAR TargetId, _In_opt_ PUCHAR Lun)
Definition: srbhelper.h:1258
FORCEINLINE VOID SrbZeroSrb(_In_ PVOID Srb)
Definition: srbhelper.h:189
FORCEINLINE VOID SrbSetOriginalRequest(_In_ PVOID Srb, _In_opt_ PVOID OriginalRequest)
Definition: srbhelper.h:718
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)
Definition: srbhelper.h:455
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)
Definition: srbhelper.h:272
FORCEINLINE ULONG SrbGetSrbFunction(_In_ PVOID Srb)
Definition: srbhelper.h:610
FORCEINLINE UCHAR SrbGetPathId(_In_ PVOID Srb)
Definition: srbhelper.h:1159
FORCEINLINE VOID SrbClearSrbFlags(_In_ PVOID Srb, _In_ ULONG Flags)
Definition: srbhelper.h:990
FORCEINLINE VOID SrbSetScsiStatus(_In_ PVOID Srb, _In_ UCHAR ScsiStatus)
Definition: srbhelper.h:1064
FORCEINLINE ULONG SrbGetTimeOutValue(_In_ PVOID Srb)
Definition: srbhelper.h:810
FORCEINLINE UCHAR SrbGetSrbStatus(_In_ PVOID Srb)
Definition: srbhelper.h:1338
FORCEINLINE UCHAR SrbGetScsiStatus(_In_ PVOID Srb)
Definition: srbhelper.h:1045
FORCEINLINE VOID SrbSetSenseInfoBufferLength(_In_ PVOID Srb, _In_ UCHAR SenseInfoBufferLength)
Definition: srbhelper.h:683
FORCEINLINE ULONG SrbGetSrbFlags(_In_ PVOID Srb)
Definition: srbhelper.h:935
FORCEINLINE ULONG SrbGetSrbLength(_In_ PVOID Srb)
Definition: srbhelper.h:215
FORCEINLINE VOID SrbSetQueueTag(_In_ PVOID Srb, _In_ ULONG QueueTag)
Definition: srbhelper.h:861
FORCEINLINE VOID SrbSetPortContext(_In_ PVOID Srb, _In_ PVOID PortContext)
Definition: srbhelper.h:1405
FORCEINLINE VOID SrbSetSenseInfoBuffer(_In_ PVOID Srb, _In_opt_ PVOID SenseInfoBuffer)
Definition: srbhelper.h:665
FORCEINLINE ULONG SrbGetRequestAttribute(_In_ PVOID Srb)
Definition: srbhelper.h:1119
FORCEINLINE ULONG SrbGetQueueTag(_In_ PVOID Srb)
Definition: srbhelper.h:881
FORCEINLINE VOID SrbSetSrbLength(_In_ PVOID Srb, _In_ ULONG Length)
Definition: srbhelper.h:232
FORCEINLINE VOID SrbSetDataBuffer(_In_ PVOID Srb, _In_opt_ __drv_aliasesMem PVOID DataBuffer)
Definition: srbhelper.h:755
FORCEINLINE VOID SrbSetCdbLength(_In_ PVOID Srb, _In_ UCHAR CdbLength)
Definition: srbhelper.h:1101
FORCEINLINE PVOID SrbGetDataBuffer(_In_ PVOID Srb)
Definition: srbhelper.h:736
FORCEINLINE BOOLEAN SrbCopySrb(_In_ PVOID DestinationSrb, _In_ ULONG DestinationSrbLength, _In_ PVOID SourceSrb)
Definition: srbhelper.h:159
#define SRB_ALIGN_SIZEOF(x)
Definition: srbhelper.h:16
#define SRBHELPER_ASSERT
Definition: srbhelper.h:12
#define SrbCopyMemory(Destination, Source, Length)
Definition: srbhelper.h:30
FORCEINLINE VOID SrbSetTimeOutValue(_In_ PVOID Srb, _In_ ULONG TimeOutValue)
Definition: srbhelper.h:829
FORCEINLINE PSTOR_ADDRESS SrbGetAddress(_In_ PSTORAGE_REQUEST_BLOCK Srb)
Definition: srbhelper.h:139
FORCEINLINE PVOID SrbGetSenseInfoBuffer(_In_ PVOID Srb)
Definition: srbhelper.h:627
FORCEINLINE PSRBEX_DATA SrbGetSrbExDataByIndex(_In_ PSTORAGE_REQUEST_BLOCK Srb, _In_ ULONG SrbExDataIndex)
Definition: srbhelper.h:47
FORCEINLINE PSRBEX_DATA SrbGetSrbExDataByType(_In_ PSTORAGE_REQUEST_BLOCK Srb, _In_ SRBEXDATATYPE Type)
Definition: srbhelper.h:66
FORCEINLINE PVOID SrbGetMiniportContext(_In_ PVOID Srb)
Definition: srbhelper.h:1321
FORCEINLINE PSRBEX_DATA SrbGetPrimarySrbExData(_In_ PSTORAGE_REQUEST_BLOCK Srb)
Definition: srbhelper.h:94
FORCEINLINE ULONG SrbGetSystemStatus(_In_ PVOID Srb)
Definition: srbhelper.h:1008
FORCEINLINE PVOID SrbGetNextSrb(_In_ PVOID Srb)
Definition: srbhelper.h:900
FORCEINLINE UCHAR SrbGetSenseInfoBufferLength(_In_ PVOID Srb)
Definition: srbhelper.h:646
FORCEINLINE ULONG SrbGetDataTransferLength(_In_ PVOID Srb)
Definition: srbhelper.h:773
FORCEINLINE PVOID SrbGetOriginalRequest(_In_ PVOID Srb)
Definition: srbhelper.h:701
UCHAR QueueTag
Definition: srb.h:256
ULONG TimeOutValue
Definition: srb.h:262
PVOID OriginalRequest
Definition: srb.h:266
PVOID DataBuffer
Definition: srb.h:263
UCHAR QueueAction
Definition: srb.h:257
ULONG QueueSortKey
Definition: srb.h:270
UCHAR Function
Definition: srb.h:250
ULONG DataTransferLength
Definition: srb.h:261
ULONG InternalStatus
Definition: srb.h:269
struct _SCSI_REQUEST_BLOCK * NextSrb
Definition: srb.h:265
ULONG SrbFlags
Definition: srb.h:260
UCHAR SrbStatus
Definition: srb.h:251
Definition: ps.c:97
uint32_t * PULONG
Definition: typedefs.h:59
unsigned char UCHAR
Definition: typedefs.h:53
unsigned char * PUCHAR
Definition: typedefs.h:53
uint32_t ULONG
Definition: typedefs.h:59
Definition: cdrw_hw.h:28
#define SrbGetCdb(srb)
Definition: usbstor.h:18
#define FORCEINLINE
Definition: wdftypes.h:67