51 Request->Flags &= ~REQUEST_FLAG_DMA;
89 Request->Flags &= ~REQUEST_DMA_FLAGS;
100 Request->Flags &= ~REQUEST_DMA_FLAGS;
103 if (
Request->TaskFile.Command == 0)
147 ULONG Cylinder, Head, Sector;
150 Cylinder = TaskFile->
LowLba;
155 Lba = (((Cylinder *
Device->Heads) + Head) *
Device->SectorsPerTrack) + (Sector - 1);
252 UCHAR SrbStatus, SK, ASK, ASCQ;
291 if (Length < Srb->DataTransferLength)
302 Request->DataTransferLength = BytesCount;
386 Request->DataBuffer = &DevExt->IdentifyDeviceData;
387 Request->DataTransferLength =
sizeof(DevExt->IdentifyDeviceData);
418 TaskFile->
LowLba = LogAddress;
419 TaskFile->
MidLba = PageNumber;
478 DriveSelect |= ((Lba >> 24) & 0x0F);
483 ULONG ChsTemp, Cylinder, Head, Sector;
488 ChsTemp = (
ULONG)Lba / DevExt->Device.SectorsPerTrack;
491 Cylinder = ChsTemp / DevExt->Device.Heads;
492 Head = ChsTemp % DevExt->Device.Heads;
493 Sector = ((
ULONG)Lba % DevExt->Device.SectorsPerTrack) + 1;
496 if (Cylinder > 65535 || Head > 15 || Sector > 255)
507 TaskFile->
DriveSelect = DevExt->Device.DeviceSelect | DriveSelect;
630 if (!(DevExt->Device.DeviceFlags &
DEVICE_NCQ))
631 Request->Flags &= ~REQUEST_FLAG_FUA;
651 else if (DevExt->Device.MultiSectorCount != 0)
658 if (
Request->TaskFile.Command == 0)
697 ULONG VerificationLength;
783 Length =
sizeof(*CapacityData);
788 ULONG LogicalPerPhysicalExponent, LogicalSectorsPerPhysicalSector;
789 ULONG LogicalSectorAlignment, LowestAlignedBlock;
793 if (LogicalSectorAlignment != 0)
795 LogicalSectorsPerPhysicalSector =
797 &LogicalPerPhysicalExponent);
800 LowestAlignedBlock = (LogicalSectorsPerPhysicalSector - LogicalSectorAlignment);
801 LowestAlignedBlock %= LogicalSectorsPerPhysicalSector;
805 LowestAlignedBlock = 0;
823 CapacityData->
LBPME = 1;
826 CapacityData->
LBPRZ = 1;
881 return sizeof(PageData);
898 return sizeof(PageData);
915 return sizeof(PageData);
936 return sizeof(PageData);
954 return sizeof(PageData);
966 BOOLEAN Is6ByteCommand, IsWriteProtected;
997 if (
Request->TranslationState != 0)
1005 IsWriteProtected =
FALSE;
1013 if (IsWriteProtected)
1018 Buffer +=
sizeof(*ModeHeader.Header6);
1022 if (IsWriteProtected)
1027 Buffer +=
sizeof(*ModeHeader.Header10);
1037 ModeHeader.Header6->BlockDescriptorLength =
sizeof(*FormatDescriptor);
1041 ModeHeader.Header10->BlockDescriptorLength[0] = (
UCHAR)(
sizeof(*FormatDescriptor) >> 8);
1042 ModeHeader.Header10->BlockDescriptorLength[1] = (
UCHAR)
sizeof(*FormatDescriptor);
1050 Buffer +=
sizeof(*FormatDescriptor);
1060 if (SubPageCode == 0x00 || SubPageCode == 0xFF)
1062 if (SubPageCode == 0x01 || SubPageCode == 0xFF)
1084 ModeHeader.Header6->ModeDataLength = ModeDataLength;
1090 ModeHeader.Header10->ModeDataLength[0] = (
UCHAR)(ModeDataLength >> 8);
1091 ModeHeader.Header10->ModeDataLength[1] = (
UCHAR)ModeDataLength;
1127 if (SubPageCode != 0x00 && SubPageCode != 0x01 && SubPageCode != 0xFF)
1172 PUCHAR VersionDescriptor;
1208 VersionDescriptor = &InquiryData->
Reserved3[3];
1211 *VersionDescriptor++ = 0x00;
1212 *VersionDescriptor++ = 0xA0;
1215 *VersionDescriptor++ = 0x05;
1216 *VersionDescriptor++ = 0xC0;
1219 *VersionDescriptor++ = 0x06;
1220 *VersionDescriptor++ = 0x00;
1225 *VersionDescriptor++ = 0xFF;
1226 *VersionDescriptor++ = 0xC0;
1234 *VersionDescriptor++ = 0x16;
1235 *VersionDescriptor++ = 0x23;
1242 *VersionDescriptor++ = 0x16;
1243 *VersionDescriptor++ = 0x1C;
1248 *VersionDescriptor++ = 0x16;
1249 *VersionDescriptor++ = 0x00;
1257 *VersionDescriptor++ = 0x15;
1258 *VersionDescriptor++ = 0xFD;
1263 *VersionDescriptor++ = 0x15;
1264 *VersionDescriptor++ = 0xE0;
1273 TRACE(
"VendorId: '%.*s'\n",
1275 TRACE(
"ProductId: '%.*s'\n",
1277 TRACE(
"ProductRevisionLevel: '%.*s'\n",
1300 LunList = DevExt->Device.LocalBuffer;
1304 LunList->LunListLength[0] = (
UCHAR)(LunListLength >> 24);
1305 LunList->LunListLength[1] = (
UCHAR)(LunListLength >> 16);
1306 LunList->LunListLength[2] = (
UCHAR)(LunListLength >> 8);
1307 LunList->LunListLength[3] = (
UCHAR)LunListLength;
1331 return sizeof(*SupportedPages) +
i;
1345 DevExt->IdentifyDeviceData.SerialNumber,
1389 (
PUCHAR)DevExt->IdentifyDeviceData.WorldWideName,
1411 DevExt->IdentifyDeviceData.ModelNumber,
1417 DevExt->IdentifyDeviceData.SerialNumber,
1432 PageLength =
sizeof(*BlockLimitsPage) -
1455 return sizeof(*BlockLimitsPage);
1464 USHORT MediumRotationRate;
1468 sizeof(*Characteristics) -
1476 return sizeof(*Characteristics);
1488 LogicalBlockProvisioningPage->
PageLength[1] =
1496 LogicalBlockProvisioningPage->
LBPU = 1;
1497 LogicalBlockProvisioningPage->
LBPWS = 1;
1498 LogicalBlockProvisioningPage->
LBPWS10 = 1;
1502 LogicalBlockProvisioningPage->
ANC_SUP = 1;
1505 LogicalBlockProvisioningPage->
LBPRZ = 1;
1529 &DevExt->InquiryData,
1530 sizeof(DevExt->InquiryData));
1581 Buffer = DevExt->Device.LocalBuffer;
1582 Buffer->DeviceType = DevExt->InquiryData.DeviceType;
1583 Buffer->DeviceTypeQualifier = DevExt->InquiryData.DeviceTypeQualifier;
1662 switch (TaskFile->Command)
1757 UCHAR SK, ASK, ASCQ;
1831 if (!(DevExt->Device.DeviceFlags &
DEVICE_NCQ))
1896 TRACE(
"TF: Send %02x:%02x:%02x:%02x:%02x:%02x:%02x\n",
1952 UCHAR ServiceAction = ((
PCDB)
Srb->
Cdb)->READ_CAPACITY16.ServiceAction;
2041 &DevExt->InquiryData,
2042 sizeof(DevExt->InquiryData));
#define IDE_GP_LOG_SECTOR_SIZE
#define IDE_COMMAND_READ_DMA_EXT
#define IDE_COMMAND_WRITE_EXT
#define IDE_COMMAND_WRITE_FPDMA_QUEUED
#define IDE_ERROR_CRC_ERROR
#define IDE_COMMAND_WRITE_MULTIPLE_FUA_EXT
#define IDE_COMMAND_WRITE_DMA_FUA_EXT
#define IDE_COMMAND_READ_MULTIPLE_EXT
#define IDE_STATUS_DEVICE_FAULT
#define IDE_COMMAND_WRITE_DMA_EXT
#define IDE_COMMAND_VERIFY_EXT
#define IDE_COMMAND_READ_LOG_EXT
#define IDE_COMMAND_READ_FPDMA_QUEUED
#define IDE_COMMAND_READ_EXT
#define IDE_COMMAND_WRITE_MULTIPLE_EXT
#define IDE_FEATURE_SET_TRANSFER_MODE
#define IDE_COMMAND_SET_FEATURE
#define IDE_ERROR_ADDRESS_NOT_FOUND
#define REQUEST_FLAG_DATA_IN
#define REQUEST_FLAG_PASSTHROUGH
#define REQUEST_FLAG_EXCLUSIVE
#define REQUEST_FLAG_DATA_OUT
#define REQUEST_DMA_FLAGS
#define REQUEST_FLAG_SAVE_TASK_FILE
#define REQUEST_FLAG_POLL
#define REQUEST_FLAG_HAS_TASK_FILE
#define REQUEST_FLAG_READ_WRITE
#define ATA_MAX_SECTORS_PER_IO
VOID AtaDeviceSetAddressingMode(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
#define SRB_FLAG_PIO_RETRY
#define SRB_GET_FLAGS(Srb)
UCHAR AtaReqSetFixedSenseData(_In_ PSCSI_REQUEST_BLOCK Srb, _In_ SCSI_SENSE_CODE SenseCode)
VOID AtaReqSetLbaInformation(_In_ PSCSI_REQUEST_BLOCK Srb, _In_ ULONG64 Lba)
#define IDE_ERROR_WRITE_PROTECT
struct _ATAPORT_IO_CONTEXT * PATAPORT_IO_CONTEXT
#define DEVICE_PIO_FOR_LBA48_XFER
#define IDE_DRIVE_SELECT_SLAVE
UCHAR AtaDeviceGetFlushCacheCommand(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
BOOLEAN AtaReqAllocateMdl(_In_ PATA_DEVICE_REQUEST Request)
#define IDE_DEVICE_FUA_NCQ
#define DEVICE_DESCRIPTOR_SENSE
#define DEVICE_HAS_MEDIA_STATUS
FORCEINLINE BOOLEAN AtaPacketCommandUseDma(_In_ UCHAR OpCode)
#define DEVICE_PIO_VIA_DMA
#define DEVICE_CACHE_INQUIRY
PUCHAR AtaCopyIdStringUnsafe(_Out_writes_bytes_all_(Length) PUCHAR Destination, _In_reads_bytes_(Length) PUCHAR Source, _In_ ULONG Length)
#define ATA_LOCAL_BUFFER_SIZE
#define IDE_ERROR_END_OF_MEDIA
#define IDE_COMMAND_GET_MEDIA_STATUS
#define IDE_COMMAND_SET_DRIVE_PARAMETERS
#define IDE_COMMAND_WRITE_DMA
#define IDE_COMMAND_IDENTIFY
#define IDE_ERROR_COMMAND_ABORTED
#define IDE_COMMAND_WRITE_MULTIPLE
#define IDE_COMMAND_WRITE
#define IDE_COMMAND_VERIFY
#define IDE_ERROR_MEDIA_CHANGE
#define IDE_COMMAND_READ_MULTIPLE
#define IDE_COMMAND_READ_DMA
#define IDE_ERROR_MEDIA_CHANGE_REQ
#define IDE_COMMAND_MEDIA_EJECT
#define IDE_ERROR_DATA_ERROR
#define IDE_COMMAND_SET_MULTIPLE
#define IDE_ERROR_ID_NOT_FOUND
_In_ PSCSI_REQUEST_BLOCK Srb
_In_ ULONG _In_ UCHAR PageCode
#define SCSI_ADSENSE_ILLEGAL_BLOCK
#define SCSISTAT_CHECK_CONDITION
#define SCSIOP_MODE_SENSE10
#define SCSI_SENSE_NO_SENSE
#define SCSIOP_REQUEST_SENSE
#define MODE_DSP_FUA_SUPPORTED
#define SCSIOP_GET_CONFIGURATION
#define SCSIOP_TEST_UNIT_READY
#define SCSI_SENSE_DATA_PROTECT
#define SCSI_ADSENSE_INVALID_CDB
#define SCSI_ADSENSE_WRITE_PROTECT
#define SCSIOP_MEDIUM_REMOVAL
#define DIRECT_ACCESS_DEVICE
#define SCSI_SENSE_MEDIUM_ERROR
#define MODE_SENSE_SAVED_VALUES
#define SCSI_ADSENSE_ILLEGAL_COMMAND
#define MODE_PAGE_CACHING
#define SCSIOP_READ_CAPACITY
#define MODE_SENSE_RETURN_ALL
#define SCSI_SENSE_ILLEGAL_REQUEST
#define SCSIOP_MODE_SENSE
#define SCSI_ADSENSE_NO_SENSE
#define SCSI_SENSE_UNIT_ATTENTION
#define MODE_PAGE_ERROR_RECOVERY
#define SCSI_ADSENSE_NO_MEDIA_IN_DEVICE
#define SCSI_ADSENSE_MEDIUM_CHANGED
#define MODE_PAGE_POWER_CONDITION
#define MODE_DSP_WRITE_PROTECT
#define SCSIOP_START_STOP_UNIT
#define SCSI_SENSE_HARDWARE_ERROR
struct _MODE_PARAMETER_HEADER * PMODE_PARAMETER_HEADER
#define SCSI_SENSE_RECOVERED_ERROR
#define SCSIOP_MODE_SELECT10
#define SCSIOP_MODE_SELECT
#define SCSI_SENSE_NOT_READY
#define SCSI_SENSE_ABORTED_COMMAND
#define SCSIOP_SYNCHRONIZE_CACHE
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR _In_ UCHAR Lun
#define RtlUlongByteSwap(_x)
#define SCSIOP_REPORT_LUNS
#define SRB_STATUS_DATA_OVERRUN
#define SRB_STATUS_PENDING
#define SRB_STATUS_AUTOSENSE_VALID
#define SRB_FLAGS_UNSPECIFIED_DIRECTION
#define SRB_STATUS_SUCCESS
#define SRB_STATUS_INVALID_REQUEST
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
#define REQUEST_FLAG_LBA48
FORCEINLINE BOOLEAN AtaCommandUseLba48(_In_ ULONG64 SectorNumber, _In_ ULONG SectorCount)
#define REQUEST_FLAG_READ_WRITE_MULTIPLE
#define REQUEST_FLAG_PACKET_COMMAND
#define REQUEST_FLAG_SET_DEVICE_REGISTER
FORCEINLINE UCHAR AtaDevNominalFormFactor(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevIsReadLookAHeadEnabled(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasIeee1667(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasSmartFeature(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE ULONG AtaDevLogicalSectorsPerPhysicalSector(_In_ PIDENTIFY_DEVICE_DATA IdentifyData, _Out_ PULONG Exponent)
FORCEINLINE UCHAR AtaDevZonedCapabilities(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasRzatFunction(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasRemovableMediaFeature(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasTrimFunction(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasWorldWideName(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE USHORT AtaDevMediumRotationRate(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevIsRemovable(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevIsVolatileWriteCacheEnabled(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE ULONG AtaDevLogicalSectorAlignment(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
FORCEINLINE BOOLEAN AtaDevHasDratFunction(_In_ PIDENTIFY_DEVICE_DATA IdentifyData)
#define RTL_FIELD_SIZE(type, field)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
#define RTL_SIZEOF_THROUGH_FIELD(type, field)
_In_ ULONG _In_ ULONG Offset
_In_ ULONG _In_ ULONG _In_ ULONG Length
UCHAR AtaReqTerminateInvalidFieldParameter(_In_ PSCSI_REQUEST_BLOCK Srb)
static ULONG AtaReqScsiInquirySerialNumber(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
static UCHAR AtaReadWriteCommand(_In_ PATA_DEVICE_REQUEST Request, _In_ PATAPORT_IO_CONTEXT Device)
static const UCHAR AtapReadWriteCommandMap[12][2]
static UCHAR AtaReqScsiMediumRemoval(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb)
static BOOLEAN AtaReqTranslateFixedError(_In_ PATA_DEVICE_REQUEST Request, _Out_ PUCHAR SK, _Out_ PUCHAR ASK, _Out_ PUCHAR ASCQ)
static UCHAR AtaReqTerminateInvalidField(_In_ PSCSI_REQUEST_BLOCK Srb)
static UCHAR AtaReqScsiSynchronizeCache(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb)
static UCHAR AtaReqScsiReadWrite(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb)
UCHAR AtaReqExecuteScsi(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb)
static ATA_COMPLETION_ACTION AtaReqCompleteAtaPassThrough(_In_ PATA_DEVICE_REQUEST Request)
static BOOLEAN AtaReqBuildLbaTaskFile(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ ULONG64 Lba, _In_ ULONG SectorCount)
static ATA_COMPLETION_ACTION AtaReqCompleteModeSense(_In_ PATA_DEVICE_REQUEST Request)
static ULONG AtaReqCachingModePage(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PVOID Buffer)
static UCHAR AtaReqScsiStartStopUnit(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb)
static UCHAR AtaReqScsiAtaPassThrough(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb)
static ULONG AtaReqRwErrorRecoveryModePage(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PVOID Buffer)
static ULONG AtaReqScsiInquiryBlockLimits(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
static ULONG AtaReqScsiInquiryBlockDeviceCharacteristics(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
VOID AtaReqBuildReadLogTaskFile(_In_ PATA_DEVICE_REQUEST Request, _In_ UCHAR LogAddress, _In_ UCHAR PageNumber, _In_ USHORT LogPageCount)
static ULONG AtaReqCopySatlBuffer(_In_ PATA_DEVICE_REQUEST Request, _In_ PVOID Buffer, _In_ ULONG Length)
static UCHAR AtaReqExecuteScsiAta(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb)
static UCHAR AtaReqTerminateInvalidOpCode(_In_ PSCSI_REQUEST_BLOCK Srb)
static ATA_COMPLETION_ACTION AtaReqCompleteReadCapacity(_In_ PATA_DEVICE_REQUEST Request)
static ULONG AtaReqScsiInquiryDeviceIdentifiers(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
static BOOLEAN AtaReqBuildIdentifyCommand(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request)
static ULONG AtaReqScsiInquirySupportedPages(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
static ULONG AtaReqScsiReportLuns(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb)
static VOID AtaReqSetAtaStatusSenseData(_In_ PATA_DEVICE_REQUEST Request, _In_ UCHAR SK, _In_ UCHAR ASK, _In_ UCHAR ASCQ)
static UCHAR AtaReqScsiRequestSense(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb)
static ULONG AtaReqScsiInquiryLogicalBlockProvisioning(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
static UCHAR AtaReqScsiReadCapacity(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb)
UCHAR AtaReqSetFixedAtaSenseData(_In_ PATA_DEVICE_REQUEST Request)
static UCHAR AtaReqPreparePacketCommand(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb)
static ULONG AtaReqInformationalExceptionsControlModePage(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PVOID Buffer)
BOOLEAN AtaReqDmaTransferToPioTransfer(_In_ PATA_DEVICE_REQUEST Request)
static ULONG AtaReqControlExtensionModePage(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PVOID Buffer)
static ULONG64 AtaReqLbaFromTaskFile(_In_ PATA_DEVICE_REQUEST Request)
static UCHAR AtaReqScsiInquiry(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb)
static UCHAR AtaReqTerminateInvalidRange(_In_ PSCSI_REQUEST_BLOCK Srb)
static ULONG AtaReqControlModePage(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PVOID Buffer)
static UCHAR AtaReqExecuteScsiAtapi(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb)
static UCHAR AtaReqScsiModeSense(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb, _In_ BOOLEAN Is6ByteCommand)
VOID AtaCreateStandardInquiryData(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
static UCHAR AtaReqScsiTestUnitReady(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb)
static UCHAR AtaReqScsiVerify(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb)
static UCHAR AtaReqScsiModeSelect(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb, _In_ BOOLEAN Is6ByteCommand)
static BOOLEAN AtaReqFilterPassThrough(_In_ PATA_TASKFILE TaskFile)
static BOOLEAN AtaReqBuildNcqReadWriteTaskFile(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ ULONG64 Lba, _In_ ULONG SectorCount)
_In_opt_ WDFREQUEST _In_ ULONG _In_ BOOLEAN _In_ PCDB Cdb
FORCEINLINE ULONG CdbGetTransferLength12(_In_ PCDB Cdb)
FORCEINLINE ULONG CdbGetAllocationLength16(_In_ PCDB Cdb)
FORCEINLINE ULONG CdbGetTransferLength16(_In_ PCDB Cdb)
FORCEINLINE ULONG CdbGetLogicalBlockAddress6(_In_ PCDB Cdb)
#define SCSI_ADSENSE_ADDRESS_MARK_NOT_FOUND_FOR_DATA_FIELD
FORCEINLINE ULONG CdbGetLogicalBlockAddress10(_In_ PCDB Cdb)
FORCEINLINE ULONG CdbGetLogicalBlockAddress12(_In_ PCDB Cdb)
FORCEINLINE USHORT CdbGetTransferLength10(_In_ PCDB Cdb)
FORCEINLINE ULONG64 CdbGetLogicalBlockAddress16(_In_ PCDB Cdb)
#define SCSI_ADSENSE_INVALID_FIELD_PARAMETER_LIST
#define VPD_ATA_INFORMATION
#define VPD_BLOCK_DEVICE_CHARACTERISTICS
#define VPD_LOGICAL_BLOCK_PROVISIONING
#define MODE_PAGE_CONTROL
#define SERVICE_ACTION_READ_CAPACITY16
#define VPD_EXTENDED_INQUIRY_DATA
#define SCSIOP_SERVICE_ACTION_IN16
#define SCSI_SENSEQ_UNRECOVERED_READ_ERROR
#define MODE_PAGE_FAULT_REPORTING
#define SCSI_ADSENSE_UNRECOVERED_ERROR
#define SCSI_SESNEQ_COMM_CRC_ERROR
#define SCSI_ADSENSE_LUN_COMMUNICATION
struct _VPD_IDENTIFICATION_DESCRIPTOR * PVPD_IDENTIFICATION_DESCRIPTOR
#define VPD_SUPPORTED_PAGES
#define SCSIOP_ATA_PASSTHROUGH12
#define SCSI_SENSEQ_INTERNAL_TARGET_FAILURE
struct _SCSI_SENSE_DESCRIPTOR_ATA_STATUS_RETURN * PSCSI_SENSE_DESCRIPTOR_ATA_STATUS_RETURN
#define SCSI_SENSEQ_MEDIUM_REMOVAL
#define SCSI_SENSE_ERRORCODE_DESCRIPTOR_CURRENT
#define SCSIOP_SYNCHRONIZE_CACHE16
@ VpdIdentifierTypeVendorId
@ VpdIdentifierTypeFCPHName
#define SCSI_ADSENSE_OPERATOR_REQUEST
#define SCSIOP_ATA_PASSTHROUGH16
#define SCSI_SENSE_DESCRIPTOR_TYPE_ATA_STATUS_RETURN
#define SCSI_SENSEQ_LOGICAL_ADDRESS_OUT_OF_RANGE
#define SCSI_ADSENSE_INTERNAL_TARGET_FAILURE
_In_ UCHAR _Outptr_result_bytebuffer_ DescriptorBufferLength PVOID * DescriptorBuffer
struct _FORMAT_DESCRIPTOR * PFORMAT_DESCRIPTOR
#define VPD_SERIAL_NUMBER
#define VPD_DEVICE_IDENTIFIERS
#define SRB_STATUS_INSUFFICIENT_RESOURCES
#define ATA_PASSTHROUGH_PROTOCOL_PIO_DATA_IN
#define ATA_PASSTHROUGH_PROTOCOL_NON_DATA
#define ATA_PASSTHROUGH_PROTOCOL_UDMA_DATA_IN
#define ATA_PASSTHROUGH_PROTOCOL_NCQ
#define ATA_PASSTHROUGH_PROTOCOL_PIO_DATA_OUT
#define ATA_PASSTHROUGH_PROTOCOL_DMA
#define ATA_PASSTHROUGH_PROTOCOL_UDMA_DATA_OUT
#define SCSI_SENSEQ_ATA_PASS_THROUGH_INFORMATION_AVAILABLE
IDENTIFY_DEVICE_DATA IdentifyDeviceData
ATAPORT_IO_CONTEXT Device
UCHAR MidLba
LBA bits 8-15.
UCHAR LowLbaEx
LBA bits 24-31.
UCHAR HighLba
LBA bits 16-23.
UCHAR HighLbaEx
LBA bits 40-47.
UCHAR LowLba
LBA bits 0-7.
UCHAR MidLbaEx
LBA bits 32-39.
UCHAR AdditionalSenseLength
UCHAR DescriptorBuffer[ANYSIZE_ARRAY]
UCHAR AdditionalSenseCodeQualifier
UCHAR AdditionalSenseCode
UCHAR FirmwareRevision[8]
UCHAR ProductRevisionLevel[4]
UCHAR BusyTimeoutPeriod[2]
UCHAR QueueAlgorithmModifier
UCHAR LogicalPerPhysicalExponent
UCHAR LowestAlignedBlock_MSB
UCHAR LowestAlignedBlock_LSB
ULONGLONG LogicalBlockAddress
ULONG LogicalBlockAddress
UCHAR SenseInfoBufferLength
UCHAR MediumRotationRateLsb
UCHAR MediumRotationRateMsb
UCHAR MaximumUnmapLBACount[4]
UCHAR MaximumUnmapBlockDescriptorCount[4]
UCHAR SupportedPageList[0]
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
#define IDE_COMMAND_DOOR_UNLOCK
#define IDE_COMMAND_DOOR_LOCK
struct _CDB::_CDB10 CDB10
struct _CDB::_MEDIA_REMOVAL MEDIA_REMOVAL
struct _CDB::_CDB6INQUIRY3 CDB6INQUIRY3
struct _CDB::_CDB12 CDB12
struct _CDB::_VERIFY16 VERIFY16
struct _CDB::_ATA_PASSTHROUGH16 ATA_PASSTHROUGH16
struct _CDB::_START_STOP START_STOP
struct _CDB::_MODE_SENSE MODE_SENSE
struct _CDB::_REPORT_LUNS REPORT_LUNS
struct _CDB::_CDB16 CDB16
struct _CDB::_ATA_PASSTHROUGH12 ATA_PASSTHROUGH12
UCHAR AdditionalSenseCodeQualifier
UCHAR AdditionalSenseCode
_Must_inspect_result_ _In_ WDFDEVICE Device
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
_In_ WDFDEVICE _In_ PVOID _In_opt_ PMDL Mdl
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
#define MmGetMdlVirtualAddress(_Mdl)
#define MmGetSystemAddressForMdlSafe(_Mdl, _Priority)
#define RtlUlonglongByteSwap(_x)