32 &DevExt->IdentifyDeviceData);
35 if (!DevExt->GtfDataBuffer)
96 if (FinalRemove && DevExt->ReportedMissing)
123 if (DevExt->Common.PageFiles ||
124 DevExt->Common.HibernateFiles ||
125 DevExt->Common.DumpFiles)
142 if (
Irp->PendingReturned)
164 RtlZeroMemory(&ParentCapabilities,
sizeof(ParentCapabilities));
165 ParentCapabilities.Size =
sizeof(ParentCapabilities);
166 ParentCapabilities.Version = 1;
167 ParentCapabilities.Address =
MAXULONG;
168 ParentCapabilities.UINumber =
MAXULONG;
176 AtaScsiAddress = DevExt->Device.AtaScsiAddress;
208 sizeof(*DeviceRelations),
210 if (!DeviceRelations)
213 DeviceRelations->
Count = 1;
214 DeviceRelations->
Objects[0] = DevExt->Common.Self;
233 size_t CharCount, Remaining;
237 switch (IoStack->Parameters.QueryId.IdType)
249 CharCount *
sizeof(
WCHAR),
255 (
PUCHAR)DevExt->FriendlyName,
260 (
PUCHAR)DevExt->RevisionNumber,
298 (
sizeof(
"IDE\\") - 1) * 3 +
305 CharCount *
sizeof(
WCHAR),
311 (
PUCHAR)DevExt->FriendlyName,
316 (
PUCHAR)DevExt->RevisionNumber,
320 INFO(
"HardwareIDs:\n");
349 INFO(
" '%S'\n", IdStart);
366 INFO(
" '%S'\n", IdStart);
382 INFO(
" '%S'\n", IdStart);
400 INFO(
" '%S'\n", IdStart);
412 CharCount *
sizeof(
WCHAR),
437 CharCount =
sizeof(
"FF.FF.FF");
440 CharCount *
sizeof(
WCHAR),
445 AtaScsiAddress = DevExt->Device.AtaScsiAddress;
462 return Irp->IoStatus.Status;
483 switch (IoStack->Parameters.QueryDeviceText.DeviceTextType)
490 CharCount *
sizeof(
WCHAR),
501 DevExt->FriendlyName);
512 CharCount =
sizeof(
"Channel 255, Target 255, Lun 255");
515 CharCount *
sizeof(
WCHAR),
520 AtaScsiAddress = DevExt->Device.AtaScsiAddress;
526 L"Channel %u, Target %u, Lun %u",
532 INFO(
"TextLocationInformation: '%S'\n",
Buffer);
537 return Irp->IoStatus.Status;
556 INFO(
"(%p, %p) Tid.%lu %s\n",
559 DevExt->Device.AtaScsiAddress.TargetId,
663 if (DevExt->Device.PowerIdleCounter)
671 if (DevExt->GtfDataBuffer)
674 DevExt->GtfDataBuffer =
NULL;
677 if (DevExt->Device.Requests)
694 WCHAR DeviceNameBuffer[
sizeof(
"\\Device\\Ide\\IdeDeviceP99999T9L9-FFF")];
697 static ULONG AtapPdoNumber = 0;
702 sizeof(DeviceNameBuffer),
704 ChanExt->DeviceObjectNumber,
705 AtaScsiAddress.TargetId,
727 Pdo->AlignmentRequirement = ChanExt->Common.Self->AlignmentRequirement;
732 DevExt =
Pdo->DeviceExtension;
743 DevExt->
Device.TransportFlags = AtaScsiAddress.TargetId;
749 DevExt->
Device.DeviceSelect |= ((AtaScsiAddress.TargetId & 1) << 4);
781 Request->Signature = ATA_DEVICE_REQUEST_SIGNATURE;
#define ExAllocatePoolUninitialized
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
struct _ATA_IO_CONTEXT_COMMON * PATA_IO_CONTEXT_COMMON
#define ATA_MIN_SECTOR_SIZE
256 sectors of 512 bytes (128 kB).
#define ATA_MIN_BUFFER_ALIGNMENT
NTSTATUS AtaPnpQueryPnpDeviceState(_In_ PATAPORT_COMMON_EXTENSION CommonExt, _In_ PIRP Irp)
NTSTATUS AtaPnpRepeatRequest(_In_ PATAPORT_COMMON_EXTENSION CommonExt, _In_ PIRP Irp, _In_opt_ PDEVICE_CAPABILITIES DeviceCapabilities)
VOID AtaPnpInitializeCommonExtension(_In_ PATAPORT_COMMON_EXTENSION CommonExt, _In_ PDEVICE_OBJECT SelfDeviceObject, _In_ ULONG Flags)
PCSTR AtaTypeCodeToName(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ DEVICE_TYPE_NAME Type)
NTSTATUS AtaPnpQueryDeviceUsageNotification(_In_ PATAPORT_COMMON_EXTENSION CommonExt, _In_ PIRP Irp)
PCHAR AtaCopyIdStringSafe(_Out_writes_bytes_all_(MaxLength) PCHAR Destination, _In_reads_bytes_(MaxLength) PUCHAR Source, _In_ ULONG MaxLength, _In_ CHAR DefaultCharacter)
#define PORT_FLAG_PIO_FOR_LBA48_XFER
NTSTATUS AtaFdoPnp(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _Inout_ PIRP Irp)
#define PORT_FLAG_PIO_VIA_DMA
#define DEVICE_IS_PDO_REMOVABLE
#define DECLARE_PAGED_WSTRING(v, n)
#define NUM_TO_BITMAP(num)
DECLSPEC_NOINLINE_FROM_PAGED VOID AtaReqFlushDeviceQueue(_In_ PATAPORT_IO_CONTEXT Device)
#define PORT_FLAG_IS_AHCI
NTSTATUS AtaPdoWmiRegistration(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ BOOLEAN Register)
#define QUEUE_FLAG_FROZEN_PNP
#define DEVICE_PIO_FOR_LBA48_XFER
DECLSPEC_NOINLINE_FROM_PAGED VOID AtaReqThawQueue(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ ULONG ReasonFlags)
DECLSPEC_NOINLINE_FROM_PAGED VOID AtaDeviceQueueEvent(_In_ PATAPORT_PORT_DATA PortData, _In_opt_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ ATA_PORT_ACTION Action)
#define PORT_FLAG_IS_EXTERNAL
DECLSPEC_NOINLINE_FROM_PAGED VOID AtaReqWaitForOutstandingIoToComplete(_In_ PATAPORT_IO_CONTEXT Device, _In_ PSCSI_REQUEST_BLOCK Srb)
#define DEVICE_UNINITIALIZED
DECLSPEC_NOINLINE_FROM_PAGED VOID AtaReqFreezeQueue(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ ULONG ReasonFlags)
#define DEVICE_PNP_STARTED
#define DEVICE_PIO_VIA_DMA
DECLSPEC_NOINLINE_FROM_PAGED VOID AtaFdoDeviceListInsert(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ BOOLEAN DoInsert)
#define ATAPORT_FN_FIELD
The maximum length of identifier strings for ATA devices excluding the terminating NULL.
IO_COMPLETION_ROUTINE AtaPdoCompletionRoutine
#define QUEUE_FLAG_FROZEN_REMOVED
#define FILE_DEVICE_SECURE_OPEN
#define NT_SUCCESS(StatCode)
_ACRTIMP size_t __cdecl strlen(const char *)
FORCEINLINE PCHAR GetIRPMinorFunctionString(UCHAR MinorFunction)
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
#define KeInitializeEvent(pEvt, foo, foo2)
#define KeSetEvent(pEvt, foo, foo2)
#define InitializeListHead(ListHead)
#define KeInitializeSpinLock(sl)
VOID NTAPI KeClearEvent(IN PKEVENT Event)
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 ExFreePoolWithTag(_P, _T)
#define FILE_DEVICE_MASS_STORAGE
static PVOID ExAllocatePoolZero(ULONG PoolType, SIZE_T NumberOfBytes, ULONG Tag)
_In_ PIOMMU_DEVICE_PATH _In_ PIOMMU_SVM_CAPABILITIES DeviceCapabilities
#define _In_reads_opt_(s)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define DBG_UNREFERENCED_LOCAL_VARIABLE(L)
#define UNREFERENCED_PARAMETER(P)
#define IRP_MN_SURPRISE_REMOVAL
NTSTATUS NTAPI IoCreateDevice(IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
#define IoCompleteRequest
PULONG NTAPI PoRegisterDeviceForIdleDetection(IN PDEVICE_OBJECT DeviceObject, IN ULONG ConservationIdleTime, IN ULONG PerformanceIdleTime, IN DEVICE_POWER_STATE State)
NTSTRSAFEVAPI RtlStringCbPrintfW(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cbDest, _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,...)
NTSTRSAFEVAPI RtlStringCchPrintfExW(_Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cchDest, _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PWSTR *ppszDestEnd, _Out_opt_ size_t *pcchRemaining, _In_ STRSAFE_DWORD dwFlags, _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,...)
#define STATUS_MORE_PROCESSING_REQUIRED
static NTSTATUS AtaPdoStartDevice(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PIRP Irp)
VOID AtaPdoFreeDevice(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
static NTSTATUS AtaPdoStopDevice(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PIRP Irp)
static NTSTATUS AtaPdoQueryTargetDeviceRelations(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PIRP Irp)
NTSTATUS NTAPI AtaDispatchPnp(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
static NTSTATUS AtaPdoQueryDeviceText(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PIRP Irp, _In_ PIO_STACK_LOCATION IoStack)
PATAPORT_DEVICE_EXTENSION AtaPdoCreateDevice(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _In_ ATA_SCSI_ADDRESS AtaScsiAddress)
static NTSTATUS AtaPdoQueryCapabilities(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PIRP Irp, _In_ PIO_STACK_LOCATION IoStack)
static NTSTATUS AtaPdoQueryStopRemoveDevice(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PIRP Irp)
static NTSTATUS AtaPdoQueryId(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PIRP Irp, _In_ PIO_STACK_LOCATION IoStack)
static NTSTATUS AtaPdoRemoveDevice(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _Inout_ PIRP Irp, _In_ BOOLEAN FinalRemove)
static NTSTATUS AtaPdoPnp(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _Inout_ PIRP Irp)
ATAPORT_COMMON_EXTENSION Common
ATA_WORKER_DEVICE_CONTEXT Worker
LIST_ENTRY PowerIrpQueueList
ATAPORT_IO_CONTEXT Device
ULONG TransferModeAllowedMask
ATAPORT_COMMON_EXTENSION Common
PATAPORT_PORT_DATA PortData
LIST_ENTRY DeviceQueueList
PATA_DEVICE_REQUEST Requests
ATA_SCSI_ADDRESS AtaScsiAddress
PCHANNEL_SET_DEVICE_DATA SetDeviceData
PCHANNEL_GET_INIT_TASK_FILE GetInitTaskFile
PATA_IO_CONTEXT_COMMON Device
PDEVICE_OBJECT Objects[1]
union _IO_STACK_LOCATION::@1696 Parameters
struct _IO_STACK_LOCATION::@4366::@4391 QueryDeviceRelations
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define STATUS_DEVICE_BUSY
#define STATUS_INSUFFICIENT_RESOURCES
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
_In_ UCHAR _In_ UCHAR MinorFunction
WDF_EXTERN_C_START typedef _Must_inspect_result_ _In_ WDFDRIVER _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ PDEVICE_OBJECT _In_opt_ PDEVICE_OBJECT _In_opt_ PDEVICE_OBJECT Pdo
#define DeviceCapabilities
#define IoAcquireRemoveLock(RemoveLock, Tag)
#define IoReleaseRemoveLockAndWait(_RemoveLock, _Tag)
#define IoReleaseRemoveLock(_RemoveLock, _Tag)
#define IRP_MN_CANCEL_STOP_DEVICE
#define IRP_MN_QUERY_PNP_DEVICE_STATE
#define IRP_MN_START_DEVICE
#define IRP_MN_DEVICE_USAGE_NOTIFICATION
#define IRP_MN_REMOVE_DEVICE
#define IRP_MN_QUERY_DEVICE_RELATIONS
#define IRP_MN_QUERY_STOP_DEVICE
#define IRP_MN_QUERY_DEVICE_TEXT
#define IRP_MN_QUERY_CAPABILITIES
#define IRP_MN_CANCEL_REMOVE_DEVICE
#define IRP_MN_STOP_DEVICE
@ DeviceTextLocationInformation
#define IRP_MN_QUERY_REMOVE_DEVICE
#define ObReferenceObject