82#define DEVICE_PIO_ONLY 0x00000001
83#define DEVICE_LBA_MODE 0x00000002
84#define DEVICE_LBA48 0x00000004
85#define DEVICE_HAS_FUA 0x00000008
86#define DEVICE_NCQ 0x00000010
87#define DEVICE_HAS_MEDIA_STATUS 0x00000020
88#define DEVICE_SENSE_DATA_REPORTING 0x00000040
89#define DEVICE_IS_SUPER_FLOPPY 0x00000080
90#define DEVICE_IS_PDO_REMOVABLE 0x00000100
91#define DEVICE_UNINITIALIZED 0x00000200
92#define DEVICE_PNP_STARTED 0x00000400
93#define DEVICE_DESCRIPTOR_SENSE 0x00000800
94#define DEVICE_PIO_VIA_DMA 0x00001000
95#define DEVICE_PIO_FOR_LBA48_XFER 0x00002000
96#define DEVICE_CACHE_INQUIRY 0x00004000
105#define QUEUE_FLAG_FROZEN_PORT_BUSY 0x00000001
106#define QUEUE_FLAG_FROZEN_SLOT 0x00000002
107#define QUEUE_FLAG_FROZEN_PNP 0x00000004
108#define QUEUE_FLAG_SIGNAL_STOP 0x00000008
109#define QUEUE_FLAG_FROZEN_QUEUE_FREEZE 0x00000010
110#define QUEUE_FLAG_FROZEN_POWER 0x00000020
111#define QUEUE_FLAG_FROZEN_REMOVED 0x00000040
112#define QUEUE_FLAG_FROZEN_QUEUE_LOCK 0x00080000
114#define QUEUE_FLAGS_FROZEN \
115 (QUEUE_FLAG_FROZEN_PORT_BUSY | \
116 QUEUE_FLAG_FROZEN_SLOT | \
117 QUEUE_FLAG_FROZEN_PNP | \
118 QUEUE_FLAG_FROZEN_QUEUE_FREEZE | \
119 QUEUE_FLAG_FROZEN_POWER | \
120 QUEUE_FLAG_FROZEN_REMOVED | \
121 QUEUE_FLAG_FROZEN_QUEUE_LOCK)
123#define QUEUE_FLAGS_FROZEN_NOT_BYPASS \
124 (QUEUE_FLAGS_FROZEN & ~(QUEUE_FLAG_FROZEN_QUEUE_FREEZE | QUEUE_FLAG_FROZEN_QUEUE_LOCK))
139 ULONG RequestsStarted;
140 ULONG RequestsCompleted;
149#pragma section("PAGECONS", read)
153#define ATAPORT_PAGED_DATA DATA_SEG("PAGECONS")
155#define DECLARE_PAGED_UNICODE_STRING(Variable, Str) \
156 static const ATAPORT_PAGED_DATA WCHAR Variable##_buffer[] = Str; \
157 UNICODE_STRING Variable = { sizeof(Str) - sizeof(WCHAR), sizeof(Str), (PWCH)Variable##_buffer } \
159#define DECLARE_PAGED_STRING(v, n) \
160 static const ATAPORT_PAGED_DATA CHAR (v)[] = (n)
162#define DECLARE_PAGED_WSTRING(v, n) \
163 static const ATAPORT_PAGED_DATA WCHAR (v)[] = (n)
165#define ASSUME(cond) \
171#define ATAPORT_TAG 'PedI'
174 ((((PATAPORT_COMMON_EXTENSION)(p))->Flags & DO_IS_FDO) != 0)
176#define IS_ATAPI(Device) \
177 (((Device)->TransportFlags & DEVICE_IS_ATAPI) != 0)
179#define NUM_TO_BITMAP(num) (0xFFFFFFFF >> (RTL_BITS_OF(ULONG) - (num)))
195#define ATAPORT_FN_FIELD 40
196#define ATAPORT_SN_FIELD 40
197#define ATAPORT_RN_FIELD 8
200#define ATA_RESERVED_PAGES 4
202#define ATA_MAX_LUN_COUNT 8
205#define ATA_LOCAL_BUFFER_SIZE 572
209#define ATA_MAX_LBA_28 0x0FFFFFFFULL
210#define ATA_MAX_LBA_48 (1ULL << 48)
212#define IDE_DRIVE_SELECT_SLAVE 0x10
213#define IDE_HIGH_ORDER_BYTE 0x80
214#define IDE_DRIVE_SELECT 0xA0
216#define IDE_ERROR_WRITE_PROTECT 0x40
218#define IDE_FEATURE_PIO 0x00
219#define IDE_FEATURE_DMA 0x01
220#define IDE_FEATURE_DMADIR 0x04
222#define IDE_DEVICE_FUA_NCQ 0x80
224#define IDE_DC_ALWAYS 0x08
226#define IDE_COMMAND_REQUEST_SENSE_DATA_EXT 0x0B
228#define SRB_FLAG_RETRY_COUNT_MASK 0x000000FF
229#define SRB_FLAG_LOW_MEM_RETRY 0x00000100
230#define SRB_FLAG_PIO_RETRY 0x00000200
232#define SRB_SET_FLAGS(Srb, Flags) \
233 ((Srb)->SrbExtension = (PVOID)((ULONG_PTR)(Srb)->SrbExtension | (Flags)))
235#define SRB_CLEAR_FLAGS(Srb, Flags) \
236 ((Srb)->SrbExtension = (PVOID)((ULONG_PTR)(Srb)->SrbExtension & ~(Flags)))
238#define SRB_GET_FLAGS(Srb) ((ULONG_PTR)(Srb)->SrbExtension)
279#define WORKER_FLAG_NEED_RESCAN 0x00000001
280#define WORKER_FLAG_COMPLETE_PORT_ENUM_EVENT 0x00000002
285 ULONG StateLoopCount;
304#define DEV_WORKER_FLAG_HOLD_REFERENCE 0x00000001
305#define DEV_WORKER_FLAG_REMOVED 0x00000002
310#define QUEUE_ENTRY_FROM_IRP(Irp) \
311 ((PREQUEST_QUEUE_ENTRY)&(((PIRP)(Irp))->Tail.Overlay.DriverContext[0]))
313#define IRP_FROM_QUEUE_ENTRY(QueueEntry) \
314 (PIRP)CONTAINING_RECORD(QueueEntry, IRP, Tail.Overlay.DriverContext[0])
326#define ASSERT_REQUEST(Request) \
327 ASSERT((Request) && (Request)->Signature == ATA_DEVICE_REQUEST_SIGNATURE)
336#define PORT_FLAG_IS_SIMPLEX 0x00000001
337#define PORT_FLAG_PIO_VIA_DMA 0x00000002
338#define PORT_FLAG_IS_EXTERNAL 0x00000004
339#define PORT_FLAG_NCQ 0x00000008
340#define PORT_FLAG_IS_AHCI 0x00000010
341#define PORT_FLAG_SYMLINK_CREATED 0x00000020
342#define PORT_FLAG_IO_TIMER_ACTIVE 0x00000040
343#define PORT_FLAG_CHANNEL_ATTACHED 0x00000080
344#define PORT_FLAG_PIO_ONLY 0x00000100
345#define PORT_FLAG_PIO_FOR_LBA48_XFER 0x00000200
346#define PORT_FLAG_EXIT_THREAD 0x80000000
360#define PORT_INT_FLAG_IS_IO_ACTIVE 0x00000001
361#define PORT_INT_FLAG_IGNORE_LINK_IRQ 0x00000002
369#define PORT_QUEUE_FLAG_EXCLUSIVE_MODE 0x00000001
370#define PORT_QUEUE_FLAG_SIGNAL_STOP 0x00000002
406 volatile LONG PageFiles;
409 volatile LONG HibernateFiles;
412 volatile LONG DumpFiles;
430#define DO_IS_FDO 0x80000000
578 SlotsBitmap = PortData->Worker.PausedSlotsBitmap | PortData->FreeSlotsBitmap;
580 return (SlotsBitmap == PortData->MaxSlotsBitmap);
599 return AtaScsiAddress;
608 return (
x != 0) && ((
x & (
x - 1)) == 0);
#define REQUEST_FLAG_DATA_IN
CHANNEL_ALLOCATE_SLOT * PCHANNEL_ALLOCATE_SLOT
CHANNEL_IDENTIFY_DEVICE * PCHANNEL_IDENTIFY_DEVICE
CHANNEL_ABORT_CHANNEL * PCHANNEL_ABORT_CHANNEL
CHANNEL_START_IO * PCHANNEL_START_IO
#define REQUEST_FLAG_NO_KEEP_AWAKE
CHANNEL_SET_MODE * PCHANNEL_SET_MODE
CONTROLLER_ATTACH_CHANNEL * PCONTROLLER_ATTACH_CHANNEL
#define REQUEST_FLAG_DATA_OUT
CHANNEL_PREPARE_PRD_TABLE * PCHANNEL_PREPARE_PRD_TABLE
CHANNEL_GET_INIT_TASK_FILE * PCHANNEL_GET_INIT_TASK_FILE
CHANNEL_RESET_CHANNEL * PCHANNEL_RESET_CHANNEL
CHANNEL_DOWNGRADE_INTERFACE_SPEED * PCHANNEL_DOWNGRADE_INTERFACE_SPEED
CHANNEL_PREPARE_IO * PCHANNEL_PREPARE_IO
ATA_COMPLETION_ACTION() REQUEST_COMPLETION_ROUTINE(_In_ PATA_DEVICE_REQUEST Request)
CHANNEL_ENUMERATE_CHANNEL * PCHANNEL_ENUMERATE_CHANNEL
CHANNEL_SET_DEVICE_DATA * PCHANNEL_SET_DEVICE_DATA
NTSTATUS NTAPI AtaDispatchCreateClose(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
IO_TIMER_ROUTINE AtaPortIoTimer
PCHAR AtaCopyIdStringSafe(_Out_writes_bytes_all_(MaxLength) PCHAR Destination, _In_reads_bytes_(MaxLength) PUCHAR Source, _In_ ULONG MaxLength, _In_ CHAR DefaultCharacter)
NTSTATUS AtaPnpQueryPnpDeviceState(_In_ PATAPORT_COMMON_EXTENSION CommonExt, _In_ PIRP Irp)
VOID AtaReqCompleteFailedRequest(_In_ PATA_DEVICE_REQUEST Request)
VOID AtaReqSendRequest(_In_ PATA_DEVICE_REQUEST Request)
NTSTATUS AtaFdoPnp(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _Inout_ PIRP Irp)
VOID AtaDeviceFlushPowerIrpQueue(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
VOID AtaPdoFreeDevice(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
struct _ATAPORT_CHANNEL_EXTENSION ATAPORT_CHANNEL_EXTENSION
VOID AtaDeviceSetAddressingMode(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
KDEFERRED_ROUTINE AtaPortWorkerSignalDpc
UCHAR AtaReqExecuteScsi(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb)
SLIST_HEADER AtapCompletionQueueList
union _ATA_SCSI_ADDRESS ATA_SCSI_ADDRESS
UCHAR AtaReqSetFixedSenseData(_In_ PSCSI_REQUEST_BLOCK Srb, _In_ SCSI_SENSE_CODE SenseCode)
KSTART_ROUTINE AtaPortWorkerThread
struct _ATAPORT_PORT_DATA ATAPORT_PORT_DATA
NTSTATUS AtaPnpRepeatRequest(_In_ PATAPORT_COMMON_EXTENSION CommonExt, _In_ PIRP Irp, _In_opt_ PDEVICE_CAPABILITIES DeviceCapabilities)
union _ATA_SCSI_ADDRESS * PATA_SCSI_ADDRESS
VOID AtaReqSetLbaInformation(_In_ PSCSI_REQUEST_BLOCK Srb, _In_ ULONG64 Lba)
VOID AtaSetPortRegistryKey(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _In_ PCWSTR KeyName, _In_ ULONG KeyValue)
FORCEINLINE BOOLEAN AtaCommandUseLba48(_In_ ULONG64 SectorNumber, _In_ ULONG SectorCount)
struct _REQUEST_QUEUE_ENTRY REQUEST_QUEUE_ENTRY
DRIVER_INITIALIZE DriverEntry
NTSTATUS AtaFdoQueryBusRelations(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _In_ PIRP Irp)
VOID AtaSetRegistryKey(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _In_ UCHAR TargetId, _In_ PCWSTR KeyName, _In_ ULONG KeyValue)
UNICODE_STRING AtapDriverRegistryPath
NTSTATUS AtaPortDeviceProcessConfig(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
enum _ATA_PORT_ACTION ATA_PORT_ACTION
VOID AtaReqBuildReadLogTaskFile(_In_ PATA_DEVICE_REQUEST Request, _In_ UCHAR LogAddress, _In_ UCHAR PageNumber, _In_ USHORT LogPageCount)
struct _ATA_WORKER_DEVICE_CONTEXT * PATA_WORKER_DEVICE_CONTEXT
struct _ATAPORT_COMMON_EXTENSION ATAPORT_COMMON_EXTENSION
VOID AtaGetRegistryKey(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _In_ UCHAR TargetId, _In_ PCWSTR KeyName, _Out_ PULONG KeyValue, _In_ ULONG DefaultValue)
NTSTATUS AtaFdoStartDevice(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _In_ PCM_RESOURCE_LIST ResourcesTranslated)
struct _ATAPORT_IO_CONTEXT * PATAPORT_IO_CONTEXT
KDEFERRED_ROUTINE AtaStorageNotificationlDpc
KDEFERRED_ROUTINE AtaReqCompletionDpc
NTSTATUS AtaPortDeviceProcessError(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
DECLSPEC_NOINLINE_FROM_PAGED VOID AtaReqFlushDeviceQueue(_In_ PATAPORT_IO_CONTEXT Device)
NTSTATUS AtaPdoHandleMiniportSmartVersion(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PSCSI_REQUEST_BLOCK Srb)
FORCEINLINE BOOLEAN IsPowerOfTwo(_In_ ULONG x)
VOID AtaPortTimeout(_In_ PATAPORT_PORT_DATA PortData, _In_ ULONG Slot)
FORCEINLINE ATA_SCSI_ADDRESS AtaMarshallScsiAddress(_In_ ULONG PathId, _In_ ULONG TargetId, _In_ ULONG Lun)
NTSTATUS AtaPdoWmiRegistration(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ BOOLEAN Register)
STOP_IO_CALLBACK * PSTOP_IO_CALLBACK
UCHAR AtaReqSmartIoControl(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb)
NTSTATUS AtaOpenRegistryKey(_Out_ PHANDLE KeyHandle, _In_ HANDLE RootKey, _In_ PUNICODE_STRING KeyName, _In_ BOOLEAN Create)
#define QUEUE_FLAG_FROZEN_QUEUE_LOCK
REQUEST_COMPLETION_ROUTINE AtaPortCompleteInternalRequest
VOID AtaPnpInitializeCommonExtension(_In_ PATAPORT_COMMON_EXTENSION CommonExt, _In_ PDEVICE_OBJECT SelfDeviceObject, _In_ ULONG Flags)
struct _REQUEST_QUEUE_ENTRY * PREQUEST_QUEUE_ENTRY
struct _ATAPORT_PORT_DATA * PATAPORT_PORT_DATA
struct _ATA_WORKER_CONTEXT ATA_WORKER_CONTEXT
UCHAR AtaReqSetFixedAtaSenseData(_In_ PATA_DEVICE_REQUEST Request)
DECLSPEC_NOINLINE_FROM_PAGED PATAPORT_DEVICE_EXTENSION AtaFdoFindNextDeviceByPath(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _Inout_ PATA_SCSI_ADDRESS AtaScsiAddress, _In_ BOOLEAN SearchRemoveDev, _In_ PVOID ReferenceTag)
PORT_NOTIFICATION AtaPortNotification
DECLSPEC_NOINLINE_FROM_PAGED VOID AtaReqThawQueue(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ ULONG ReasonFlags)
struct _ATA_WORKER_DEVICE_CONTEXT ATA_WORKER_DEVICE_CONTEXT
DECLSPEC_NOINLINE_FROM_PAGED PATAPORT_DEVICE_EXTENSION AtaFdoFindDeviceByPath(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _In_ ATA_SCSI_ADDRESS AtaScsiAddress, _In_ PVOID ReferenceTag)
VOID AtaReqStartCompletionDpc(_In_ PATA_DEVICE_REQUEST Request)
BOOLEAN AtaReqDmaTransferToPioTransfer(_In_ PATA_DEVICE_REQUEST Request)
VOID AtaSwapIdString(_Inout_updates_bytes_(WordCount *sizeof(USHORT)) PVOID Buffer, _In_range_(>, 0) ULONG WordCount)
struct _ATAPORT_DEVICE_EXTENSION * PATAPORT_DEVICE_EXTENSION
struct _ATAPORT_IO_CONTEXT ATAPORT_IO_CONTEXT
UCHAR AtaDeviceGetFlushCacheCommand(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
IO_WORKITEM_ROUTINE AtaStorageNotificationWorker
PATAPORT_DEVICE_EXTENSION AtaPdoCreateDevice(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _In_ ATA_SCSI_ADDRESS AtaScsiAddress)
DECLSPEC_NOINLINE_FROM_PAGED VOID AtaPortSignalWorkerThread(_In_ PATAPORT_PORT_DATA PortData)
DECLSPEC_NOINLINE_FROM_PAGED VOID AtaDeviceQueueEvent(_In_ PATAPORT_PORT_DATA PortData, _In_opt_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ ATA_PORT_ACTION Action)
NTSTATUS AtaPortCheckDevicePowerState(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
enum _ATA_DEVICE_STATUS ATA_DEVICE_STATUS
DECLSPEC_NOINLINE_FROM_PAGED VOID AtaReqWaitForOutstandingIoToComplete(_In_ PATAPORT_IO_CONTEXT Device, _In_ PSCSI_REQUEST_BLOCK Srb)
struct _ATAPORT_CHANNEL_EXTENSION * PATAPORT_CHANNEL_EXTENSION
NTSTATUS AtaPortSendRequest(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
DRIVER_ADD_DEVICE AtaAddChannel
FORCEINLINE BOOLEAN AtaPortQueueEmpty(_In_ PATAPORT_PORT_DATA PortData)
BOOLEAN AtaReqAllocateMdl(_In_ PATA_DEVICE_REQUEST Request)
PCSTR AtaTypeCodeToName(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ DEVICE_TYPE_NAME Type)
DECLSPEC_NOINLINE_FROM_PAGED VOID AtaReqFreezeQueue(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ ULONG ReasonFlags)
NTSTATUS AtaPdoHandleMiniportIdentify(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PSCSI_REQUEST_BLOCK Srb)
FORCEINLINE BOOLEAN AtaPacketCommandUseDma(_In_ UCHAR OpCode)
DECLSPEC_NOINLINE_FROM_PAGED VOID AtaFdoDeviceListInsert(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ BOOLEAN DoInsert)
enum _ATA_ERROR_LOG_VALUE ATA_ERROR_LOG_VALUE
VOID AtaCreateStandardInquiryData(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
#define ATAPORT_FN_FIELD
The maximum length of identifier strings for ATA devices excluding the terminating NULL.
VOID() STOP_IO_CALLBACK(_In_ PATAPORT_IO_CONTEXT Device)
IO_COMPLETION_ROUTINE AtaPdoCompletionRoutine
NTSTATUS AtaDeviceSendIdentify(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ UCHAR Command)
struct _ATAPORT_COMMON_EXTENSION * PATAPORT_COMMON_EXTENSION
VOID AtaPortSelectTimings(_In_ PATAPORT_PORT_DATA PortData, _In_ BOOLEAN ForceCompatibleTimings)
ATA_DEVICE_STATUS AtaPortIdentifyDevice(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
NTSTATUS AtaPnpQueryInterface(_In_ PATAPORT_COMMON_EXTENSION CommonExt, _In_ const GUID *Guid, _Out_ PVOID Interface, _In_ ULONG Version, _In_ ULONG Size)
PUCHAR AtaCopyIdStringUnsafe(_Out_writes_bytes_all_(Length) PUCHAR Destination, _In_reads_bytes_(Length) PUCHAR Source, _In_ ULONG Length)
struct _ATA_WORKER_CONTEXT * PATA_WORKER_CONTEXT
NTSTATUS AtaPnpQueryDeviceUsageNotification(_In_ PATAPORT_COMMON_EXTENSION CommonExt, _In_ PIRP Irp)
NTSTATUS AtaPortDeviceProcessPowerChange(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
#define QUEUE_FLAG_FROZEN_QUEUE_FREEZE
#define _Dispatch_type_(a)
_In_ PSCSI_REQUEST_BLOCK Srb
#define SCSIOP_READ_CD_MSF
_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
NTSTATUS NTAPI AtaDispatchPower(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
#define DECLSPEC_ALIGN(x)
NTSTATUS NTAPI AtaDispatchDeviceControl(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
NTSTATUS NTAPI AtaDispatchWmi(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
#define SRB_FLAGS_BYPASS_FROZEN_QUEUE
#define SRB_FLAGS_DATA_OUT
#define SRB_FLAGS_BYPASS_LOCKED_QUEUE
#define SRB_FLAGS_DATA_IN
#define SRB_FLAGS_NO_KEEP_AWAKE
GLint GLint GLint GLint GLint x
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
_In_ PIOMMU_DEVICE_PATH _In_ PIOMMU_SVM_CAPABILITIES DeviceCapabilities
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
#define _In_reads_bytes_(s)
#define _Out_writes_bytes_all_(s)
#define _Inout_updates_bytes_(s)
_In_ ULONG _In_ ULONG _In_ ULONG Length
enum _DEVICE_POWER_STATE DEVICE_POWER_STATE
enum _SYSTEM_POWER_STATE SYSTEM_POWER_STATE
#define IRP_MJ_DEVICE_CONTROL
#define DECLSPEC_NOINLINE_FROM_PAGED
NTSTATUS NTAPI AtaDispatchPnp(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
NTSTATUS NTAPI AtaDispatchScsi(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
ATAPORT_PORT_DATA PortData
ATAPORT_COMMON_EXTENSION Common
SINGLE_LIST_ENTRY PdoList
UNICODE_STRING StorageInterfaceName
PDEVICE_OBJECT LowerDeviceObject
_Write_guarded_by_(_Global_interlock_) volatile LONG PageFiles
IO_REMOVE_LOCK RemoveLock
DEVICE_POWER_STATE DevicePowerState
_Write_guarded_by_(_Global_interlock_) volatile LONG HibernateFiles
_Write_guarded_by_(_Global_interlock_) volatile LONG DumpFiles
SYSTEM_POWER_STATE SystemPowerState
ULONG MinimumPioCycleTime
ATA_WORKER_DEVICE_CONTEXT Worker
ULONG MinimumUltraDmaCycleTime
ULONG TransferModeSelectedBitmap
ULONG TransferModeCurrentBitmap
WMILIB_CONTEXT WmiLibInfo
LIST_ENTRY PowerIrpQueueList
IDENTIFY_DEVICE_DATA IdentifyDeviceData
ULONG TransferModeSupportedBitmap
ULONG MinimumSingleWordDmaCycleTime
IDENTIFY_PACKET_DATA IdentifyPacketData
ATAPORT_IO_CONTEXT Device
ULONG MinimumMultiWordDmaCycleTime
SINGLE_LIST_ENTRY ListEntry
ULONG TransferModeAllowedMask
LARGE_INTEGER LastDmaErrorTime
_Field_z_ DECLSPEC_ALIGN(2) CHAR FriendlyName[ATAPORT_FN_FIELD+sizeof(ANSI_NULL)]
ATAPORT_COMMON_EXTENSION Common
ULONG TransferModeUserAllowedMask
PATAPORT_PORT_DATA PortData
LIST_ENTRY DeviceQueueList
PSCSI_REQUEST_BLOCK QuiescenceSrb
PATA_DEVICE_REQUEST Requests
ATA_SCSI_ADDRESS AtaScsiAddress
PCHANNEL_SET_MODE SetTransferMode
PCHANNEL_ENUMERATE_CHANNEL EnumerateChannel
ULONG MaximumPhysicalPages
PDEVICE_OBJECT ChannelObject
ULONG MaximumTransferLength
volatile LONG ReservedMappingLock
PCHANNEL_IDENTIFY_DEVICE IdentifyDevice
PCHANNEL_PREPARE_PRD_TABLE PreparePrdTable
PCHANNEL_SET_DEVICE_DATA SetDeviceData
PATA_DEVICE_REQUEST Slots[MAX_SLOTS]
PCHANNEL_GET_INIT_TASK_FILE GetInitTaskFile
PCHANNEL_START_IO StartIo
PCHANNEL_ABORT_CHANNEL AbortChannel
PCHANNEL_RESET_CHANNEL ResetChannel
volatile LONG InterruptFlags
PCHANNEL_PREPARE_IO PrepareIo
PCHANNEL_DOWNGRADE_INTERFACE_SPEED DowngradeInterfaceSpeed
SCATTER_GATHER_LIST LocalSgList
PKINTERRUPT InterruptObject
ATA_WORKER_CONTEXT Worker
LONG TimerCount[MAX_SLOTS]
PCONTROLLER_ATTACH_CHANNEL AttachChannel
PCHANNEL_ALLOCATE_SLOT AllocateSlot
PCONTROLLER_OBJECT HwSyncObject
ATA_DEVICE_REQUEST InternalRequest
ATAPORT_IO_CONTEXT InternalDevice
volatile ULONG DeviceCount
volatile PATAPORT_DEVICE_EXTENSION EnumDevExt
PATA_DEVICE_REQUEST OldRequest
volatile LONG EventsPending
PATA_DEVICE_REQUEST FailedRequest
volatile LONG EventsPending
_Must_inspect_result_ _In_ WDFDEVICE Device
_In_ WDFCMRESLIST _In_ WDFCMRESLIST ResourcesTranslated
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE Interface
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE _In_ USHORT _In_ USHORT Version
_In_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID * Guid
_Must_inspect_result_ _In_ ULONG Flags
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList
struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST
DRIVER_DISPATCH DRIVER_DISPATCH_RAISED
#define IRP_MJ_SYSTEM_CONTROL