23 for (FunctionNumber = 0; FunctionNumber <
PCI_MAX_FUNCTION; ++FunctionNumber)
44 if (FunctionNumber == 0)
78 Controller->GetBusData(Controller->BusInterfaceContext,
92 Controller->SetBusData(Controller->BusInterfaceContext,
241 Counter = &CommonExt->PageFiles;
245 Counter = &CommonExt->HibernateFiles;
249 Counter = &CommonExt->DumpFiles;
272 if (CommonExt->PageFiles || CommonExt->HibernateFiles || CommonExt->DumpFiles)
290 if (
Irp->PendingReturned)
317 CommonExt->LowerDeviceObject,
327 Irp->IoStatus.Information = 0;
331 Stack->Parameters.QueryInterface.InterfaceType =
Guid;
357 ULONG DeviceExtensionSize;
360 WCHAR DeviceNameBuffer[
sizeof(
"\\Device\\Ide\\PciIde99999")];
366 sizeof(DeviceNameBuffer),
367 L"\\Device\\Ide\\PciIde%lu",
372 INFO(
"%s(%p, %p, %p) '%wZ'\n",
380 &DeviceExtensionSize);
383 ERR(
"Invalid miniport extension size %lx\n",
DriverExtension->MiniControllerExtensionSize);
396 ERR(
"Failed to create FDO 0x%lx\n",
Status);
421 ERR(
"Failed to attach FDO 0x%lx\n",
Status);
426 Fdo->AlignmentRequirement =
FdoExtension->Common.LowerDeviceObject->AlignmentRequirement;
429#if defined(ATA_DETECT_LEGACY_DEVICES)
430 if (ControllerContext)
441 &GUID_BUS_INTERFACE_STANDARD,
444 sizeof(BusInterface));
447 ERR(
"No PCI bus interface 0x%lx\n",
Status);
456 Fdo->Flags &= ~DO_DEVICE_INITIALIZING;
525 INFO(
"PciIdeXInitialize(%p '%wZ' %p 0x%lx)\n",
531#if defined(ATA_DETECT_LEGACY_DEVICES)
534 ControllerInferface = (
PVOID)HwGetControllerProperties;
555 DriverExtension->HwGetControllerProperties = HwGetControllerProperties;
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
#define PCIIDEX_INTERFACE_VERSION
#define PCIIDEX_GET_CONTROLLER_INTERFACE_SIGNATURE
#define ATA_MIN_BUFFER_ALIGNMENT
PDEVICE_OBJECT PhysicalDeviceObject
#define FILE_DEVICE_SECURE_OPEN
_In_ PCHAR _In_ ULONG DeviceNumber
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define STATUS_NOT_SUPPORTED
#define NT_SUCCESS(StatCode)
#define RTL_CONSTANT_STRING(s)
DRIVER_INITIALIZE DriverEntry
NTSTATUS NTAPI PciIdeXDispatchPower(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
#define KeInitializeEvent(pEvt, foo, foo2)
#define KeSetEvent(pEvt, foo, foo2)
#define KeGetCurrentIrql()
#define InitializeListHead(ListHead)
#define KeInitializeSpinLock(sl)
ULONG NTAPI HalGetBusDataByOffset(IN BUS_DATA_TYPE BusDataType, IN ULONG BusNumber, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length)
NTSTATUS(NTAPI * PCONTROLLER_PROPERTIES)(_In_ PVOID DeviceExtension, _In_ PIDE_CONTROLLER_PROPERTIES ControllerProperties)
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
nsresult QueryInterface(nsIIDRef riid, void **result)
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
#define InitializeObjectAttributes(p, n, a, r, s)
__in UCHAR __in POWER_STATE __in_opt PVOID __in PIO_STATUS_BLOCK IoStatus
_In_ PIOMMU_DEVICE_PATH _In_ PIOMMU_SVM_CAPABILITIES DeviceCapabilities
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
NTSYSAPI NTSTATUS NTAPI ZwCreateDirectoryObject(_Out_ PHANDLE DirectoryHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes)
#define _In_reads_bytes_(s)
#define _In_reads_opt_(s)
#define _Out_writes_bytes_all_(s)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define DIRECTORY_ALL_ACCESS
#define RTL_SIZEOF_THROUGH_FIELD(type, field)
#define UNREFERENCED_PARAMETER(P)
#define IoSkipCurrentIrpStackLocation(Irp)
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)
NTSTATUS NTAPI IoAttachDeviceToDeviceStackSafe(IN PDEVICE_OBJECT SourceDevice, IN PDEVICE_OBJECT TargetDevice, IN OUT PDEVICE_OBJECT *AttachedToDeviceObject)
VOID NTAPI IoDetachDevice(IN PDEVICE_OBJECT TargetDevice)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
PDEVICE_OBJECT NTAPI IoGetAttachedDeviceReference(PDEVICE_OBJECT DeviceObject)
PVOID NTAPI IoGetDriverObjectExtension(IN PDRIVER_OBJECT DriverObject, IN PVOID ClientIdentificationAddress)
NTSTATUS NTAPI IoAllocateDriverObjectExtension(IN PDRIVER_OBJECT DriverObject, IN PVOID ClientIdentificationAddress, IN ULONG DriverObjectExtensionSize, OUT PVOID *DriverObjectExtension)
PIRP NTAPI IoBuildSynchronousFsdRequest(IN ULONG MajorFunction, IN PDEVICE_OBJECT DeviceObject, IN PVOID Buffer, IN ULONG Length, IN PLARGE_INTEGER StartingOffset, IN PKEVENT Event, IN PIO_STATUS_BLOCK IoStatusBlock)
#define IoCompleteRequest
PIRP NTAPI IoAllocateIrp(IN CCHAR StackSize, IN BOOLEAN ChargeQuota)
BOOLEAN NTAPI IoForwardIrpSynchronously(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
VOID NTAPI IoFreeIrp(IN PIRP Irp)
NTSTRSAFEVAPI RtlStringCbPrintfW(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cbDest, _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,...)
PPCI_DRIVER_EXTENSION DriverExtension
NTSTATUS PciIdeXPnpQueryDeviceUsageNotification(_In_ PCOMMON_DEVICE_EXTENSION CommonExt, _In_ PIRP Irp)
VOID PciWrite(_In_ PATA_CONTROLLER Controller, _In_reads_bytes_(BufferLength) PVOID Buffer, _In_ ULONG ConfigDataOffset, _In_ ULONG BufferLength)
VOID PciRead(_In_ PATA_CONTROLLER Controller, _Out_writes_bytes_all_(BufferLength) PVOID Buffer, _In_ ULONG ConfigDataOffset, _In_ ULONG BufferLength)
static NTSTATUS PciIdeXAddDeviceEx(_In_ PDRIVER_OBJECT DriverObject, _In_ PDEVICE_OBJECT PhysicalDeviceObject, _Out_ PVOID *ControllerContext)
NTSTATUS NTAPI PciIdeXInitialize(_In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath, _In_ PCONTROLLER_PROPERTIES HwGetControllerProperties, _In_ ULONG ExtensionSize)
NTSTATUS PciIdeXPnpRepeatRequest(_In_ PCOMMON_DEVICE_EXTENSION CommonExt, _In_ PIRP Irp, _In_opt_ PDEVICE_CAPABILITIES DeviceCapabilities)
BOOLEAN PciFindDevice(_In_ __callback PATA_PCI_MATCH_FN MatchFunction, _In_ PVOID Context)
static VOID PciIdeXCreateIdeDirectory(VOID)
static NTSTATUS PciIdeXPnpQueryInterface(_In_ PCOMMON_DEVICE_EXTENSION CommonExt, _In_ const GUID *Guid, _Out_ PVOID Interface, _In_ ULONG Version, _In_ ULONG Size)
NTSTATUS NTAPI PciIdeXDispatchWmi(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
NTSTATUS PciIdeXPnpQueryPnpDeviceState(_In_ PCOMMON_DEVICE_EXTENSION CommonExt, _In_ PIRP Irp)
ULONG PciIdeControllerNumber
CONTROLLER_PNP_START_DEVICE PciIdeXFdoStartDevice
DRIVER_UNLOAD PciIdeXUnload
_In_ ULONG _In_ PCI_SLOT_NUMBER PciSlot
#define CTRL_FLAG_NON_PNP
DRIVER_ADD_DEVICE PciIdeXAddDevice
#define PORT_TIMER_TICK_MS
ATA_PCI_MATCH_FN * PATA_PCI_MATCH_FN
IO_COMPLETION_ROUTINE PciIdeXPdoCompletionRoutine
CONTROLLER_PNP_REMOVE_DEVICE PciIdeXFdoRemoveDevice
_In_ ULONG _In_ PCI_SLOT_NUMBER _In_ PPCI_COMMON_HEADER PciConfig
VOID NTAPI IoInvalidateDeviceState(IN PDEVICE_OBJECT DeviceObject)
#define FILE_DEVICE_BUS_EXTENDER
#define OBJ_KERNEL_HANDLE
#define OBJ_CASE_INSENSITIVE
#define STATUS_MORE_PROCESSING_REQUIRED
NTSTATUS NTAPI PciIdeXDispatchPnp(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
PGET_SET_DEVICE_DATA SetBusData
PGET_SET_DEVICE_DATA GetBusData
union _IO_STACK_LOCATION::@1696 Parameters
struct _IO_STACK_LOCATION::@4454::@4487 UsageNotification
struct _IO_STACK_LOCATION::@4454::@4481 DeviceCapabilities
Legacy detection interface with the PCIIDEX driver.
PCONTROLLER_PNP_REMOVE_DEVICE RemoveDevice
PCONTROLLER_PNP_START_DEVICE StartDevice
PCONTROLLER_PNP_ADD_DEVICE AddDevice
struct _PCI_SLOT_NUMBER::@4498::@4499 bits
union _PCI_SLOT_NUMBER::@4498 u
static LARGE_INTEGER Counter
BOOLEAN NTAPI KeSetTimer(IN OUT PKTIMER Timer, IN LARGE_INTEGER DueTime, IN PKDPC Dpc OPTIONAL)
VOID NTAPI KeInitializeTimer(OUT PKTIMER Timer)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define STATUS_UNSUCCESSFUL
#define STATUS_INSUFFICIENT_RESOURCES
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
_Must_inspect_result_ _In_ WDFDEVICE Fdo
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE Interface
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE _In_ USHORT _In_ USHORT Version
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesRead
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID * Guid
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
_In_ WDFTIMER _In_ LONGLONG DueTime
#define DeviceCapabilities
FORCEINLINE VOID ExInitializeFastMutex(_Out_ PFAST_MUTEX FastMutex)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
#define IoAdjustPagingPathCount(_Count, _Increment)
#define IoInitializeRemoveLock(Lock, AllocateTag, MaxLockedMinutes, HighWatermark)
#define PCI_BUS_INTERFACE_STANDARD_VERSION
#define PCI_INVALID_VENDORID
#define PNP_DEVICE_NOT_DISABLEABLE
#define PCI_WHICHSPACE_CONFIG
#define IRP_MN_QUERY_INTERFACE
#define IRP_MJ_SYSTEM_CONTROL
struct _PCI_COMMON_HEADER * PPCI_COMMON_HEADER
_In_ USHORT _In_ UCHAR RevisionID
#define PCI_MULTIFUNCTION_DEVICE(PciData)
@ DeviceUsageTypeHibernation
@ DeviceUsageTypeDumpFile
#define ObDereferenceObject