39 DPRINT(
"IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryDeviceID\n");
45 DPRINT(
"IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryHardwareIDs\n");
47 switch (FdoDeviceExtension->
VendorId)
63 switch (FdoDeviceExtension->
DeviceId)
83 if (DeviceExtension->
Channel == 0)
95 DPRINT(
"IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryCompatibleIDs\n");
105 DPRINT(
"IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryInstanceID\n");
111 DPRINT1(
"IRP_MJ_PNP / IRP_MN_QUERY_ID / unknown query id type 0x%lx\n",
IdType);
141 BaseIndex = DeviceExtension->
Channel * 2;
155 DPRINT(
"Found IDE Bus Master controller!\n");
157 DPRINT(
" IDE Bus Master Registers at IO %lx\n", *BusMasterPortBase);
161 *BusMasterPortBase = 0;
164 if ((PciConfig.ProgIf >> BaseIndex) & 0x1)
173 *InterruptVector = PciConfig.u.type0.InterruptLine;
180 switch (DeviceExtension->
Channel)
187 *CommandPortBase = 0x1F0;
188 *ControlPortBase = 0x3F6;
189 *InterruptVector = 14;
198 *CommandPortBase = 0x170;
199 *ControlPortBase = 0x376;
200 *InterruptVector = 15;
216 ULONG CommandPortBase;
217 ULONG ControlPortBase;
218 ULONG BusMasterPortBase;
219 ULONG InterruptVector;
226 &ControlPortBase, &BusMasterPortBase, &InterruptVector);
230 DPRINT(
"IDE Channel %lu: IO %x and %x, BM %lx, Irq %lu\n",
232 CommandPortBase, ControlPortBase,
233 BusMasterPortBase, InterruptVector);
284 Descriptor->u.Interrupt.MinimumVector = InterruptVector;
285 Descriptor->u.Interrupt.MaximumVector = InterruptVector;
298 ULONG DeviceTextType;
310 DPRINT(
"IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_TEXT / %S\n",
312 if (DeviceExtension->
Channel == 0)
319 DPRINT1(
"IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_TEXT / unknown type 0x%lx\n", DeviceTextType);
347 if (!DeviceRelations)
351 DeviceRelations->
Count = 1;
354 *pDeviceRelations = DeviceRelations;
405 DPRINT(
"IRP_MJ_PNP / IRP_MN_START_DEVICE\n");
411 DPRINT(
"IRP_MJ_PNP / IRP_MN_QUERY_REMOVE_DEVICE\n");
417 switch (
Stack->Parameters.QueryDeviceRelations.Type)
422 DPRINT(
"IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / TargetDeviceRelation\n");
429 DPRINT1(
"IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / Unknown type 0x%lx\n",
430 Stack->Parameters.QueryDeviceRelations.Type);
441 DPRINT(
"IRP_MJ_PNP / IRP_MN_QUERY_CAPABILITIES\n");
474 DPRINT(
"IRP_MJ_PNP / IRP_MN_QUERY_RESOURCE_REQUIREMENTS\n");
485 DPRINT(
"IRP_MJ_PNP / IRP_MN_FILTER_RESOURCE_REQUIREMENTS\n");
497 DPRINT(
"IRP_MJ_PNP / IRP_MN_QUERY_PNP_DEVICE_STATE\n");
505 DPRINT(
"IRP_MJ_PNP / IRP_MN_QUERY_BUS_INFORMATION\n");
struct _IO_RESOURCE_REQUIREMENTS_LIST IO_RESOURCE_REQUIREMENTS_LIST
_In_ BUS_QUERY_ID_TYPE IdType
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define NT_SUCCESS(StatCode)
struct _FDO_DEVICE_EXTENSION * PFDO_DEVICE_EXTENSION
struct _PDO_DEVICE_EXTENSION * PPDO_DEVICE_EXTENSION
#define ExAllocatePool(type, size)
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 RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE
#define CmResourceTypePort
#define CmResourceTypeInterrupt
NTSTATUS DuplicateUnicodeString(IN ULONG Flags, IN PCUNICODE_STRING SourceString, OUT PUNICODE_STRING DestinationString)
PCONFIGURATION_INFORMATION NTAPI IoGetConfigurationInformation(VOID)
#define CM_RESOURCE_PORT_POSITIVE_DECODE
#define CM_RESOURCE_PORT_IO
#define CM_RESOURCE_PORT_16_BIT_DECODE
#define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE
_Out_ _Inout_ POEM_STRING _In_ PCUNICODE_STRING SourceString
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define IoCompleteRequest
#define STATUS_NOT_SUPPORTED
static NTSTATUS PciIdeXPdoQueryDeviceRelations(IN PDEVICE_OBJECT DeviceObject, OUT PDEVICE_RELATIONS *pDeviceRelations)
static NTSTATUS GetCurrentResources(IN PDEVICE_OBJECT DeviceObject, OUT PULONG CommandPortBase, OUT PULONG ControlPortBase, OUT PULONG BusMasterPortBase, OUT PULONG InterruptVector)
static NTSTATUS PciIdeXPdoQueryResourceRequirements(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, OUT ULONG_PTR *Information)
NTSTATUS NTAPI PciIdeXPdoPnpDispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
static NTSTATUS PciIdeXPdoQueryDeviceText(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, OUT ULONG_PTR *Information)
static NTSTATUS PciIdeXPdoQueryId(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, OUT ULONG_PTR *Information)
PGET_SET_DEVICE_DATA GetBusData
PDEVICE_OBJECT Objects[1]
COMMON_DEVICE_EXTENSION Common
PBUS_INTERFACE_STANDARD BusInterface
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
PDEVICE_OBJECT ControllerFdo
unsigned short MaximumLength
#define RtlZeroMemory(Destination, Length)
#define STATUS_IO_DEVICE_ERROR
#define STATUS_UNSUCCESSFUL
#define STATUS_INSUFFICIENT_RESOURCES
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
_In_ UCHAR _In_ UCHAR MinorFunction
_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
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
_In_ WDFREQUEST _In_ NTSTATUS _In_ ULONG_PTR Information
_In_ WDFIORESREQLIST RequirementsList
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
#define DeviceCapabilities
struct _PNP_BUS_INFORMATION * PPNP_BUS_INFORMATION
@ CmResourceShareDeviceExclusive
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
#define IRP_MN_QUERY_PNP_DEVICE_STATE
#define PNP_DEVICE_NOT_DISABLEABLE
#define PCI_WHICHSPACE_CONFIG
#define PCI_ADDRESS_IO_ADDRESS_MASK
#define IRP_MN_START_DEVICE
#define IRP_MN_QUERY_RESOURCE_REQUIREMENTS
#define PCI_ADDRESS_IO_SPACE
#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS
struct _DEVICE_RELATIONS * PDEVICE_RELATIONS
#define IRP_MN_QUERY_DEVICE_RELATIONS
#define PCI_COMMON_HDR_LENGTH
#define IRP_MN_QUERY_DEVICE_TEXT
#define IRP_MN_QUERY_CAPABILITIES
#define IRP_MN_QUERY_RESOURCES
@ DeviceTextLocationInformation
#define IRP_MN_QUERY_BUS_INFORMATION
#define IRP_MN_QUERY_REMOVE_DEVICE
#define ObReferenceObject