Home | Info | Community | Development | myReactOS | Contact Us
Definition at line 103 of file fdo.c.
{ PPCIIDEX_DRIVER_EXTENSION DriverExtension; PFDO_DEVICE_EXTENSION DeviceExtension; PDEVICE_OBJECT Fdo; ULONG BytesRead; PCI_COMMON_CONFIG PciConfig; NTSTATUS Status; DPRINT("PciIdeXAddDevice(%p %p)\n", DriverObject, Pdo); DriverExtension = IoGetDriverObjectExtension(DriverObject, DriverObject); ASSERT(DriverExtension); Status = IoCreateDevice( DriverObject, sizeof(FDO_DEVICE_EXTENSION) + DriverExtension->MiniControllerExtensionSize, NULL, FILE_DEVICE_BUS_EXTENDER, FILE_DEVICE_SECURE_OPEN, TRUE, &Fdo); if (!NT_SUCCESS(Status)) { DPRINT("IoCreateDevice() failed with status 0x%08lx\n", Status); return Status; } DeviceExtension = (PFDO_DEVICE_EXTENSION)Fdo->DeviceExtension; RtlZeroMemory(DeviceExtension, sizeof(FDO_DEVICE_EXTENSION)); DeviceExtension->Common.IsFDO = TRUE; Status = IoAttachDeviceToDeviceStackSafe(Fdo, Pdo, &DeviceExtension->LowerDevice); if (!NT_SUCCESS(Status)) { DPRINT("IoAttachDeviceToDeviceStackSafe() failed with status 0x%08lx\n", Status); return Status; } Status = GetBusInterface(DeviceExtension); if (!NT_SUCCESS(Status)) { DPRINT("GetBusInterface() failed with status 0x%08lx\n", Status); IoDetachDevice(DeviceExtension->LowerDevice); return Status; } BytesRead = (*DeviceExtension->BusInterface->GetBusData)( DeviceExtension->BusInterface->Context, PCI_WHICHSPACE_CONFIG, &PciConfig, 0, PCI_COMMON_HDR_LENGTH); if (BytesRead != PCI_COMMON_HDR_LENGTH) { DPRINT("BusInterface->GetBusData() failed()\n"); ReleaseBusInterface(DeviceExtension); IoDetachDevice(DeviceExtension->LowerDevice); return STATUS_IO_DEVICE_ERROR; } DeviceExtension->VendorId = PciConfig.VendorID; DeviceExtension->DeviceId = PciConfig.DeviceID; Fdo->Flags &= ~DO_DEVICE_INITIALIZING; return STATUS_SUCCESS; }