Home | Info | Community | Development | myReactOS | Contact Us
Definition at line 649 of file cmbpnp.c.
Referenced by CmBattAddDevice().
{ BATTERY_MINIPORT_INFO MiniportInfo; NTSTATUS Status; PDEVICE_OBJECT FdoDeviceObject; PCMBATT_DEVICE_EXTENSION FdoExtension; PAGED_CODE(); if (CmBattDebug & 0x220) DbgPrint("CmBattAddBattery: pdo %x\n", DeviceObject); /* Create the FDO */ Status = CmBattCreateFdo(DriverObject, DeviceObject, sizeof(CMBATT_DEVICE_EXTENSION), &FdoDeviceObject); if (!NT_SUCCESS(Status)) { if (CmBattDebug & 0xC) DbgPrint("CmBattAddBattery: error (0x%x) creating Fdo\n", Status); return Status; } /* Build the FDO extensio, check if we support trip points */ FdoExtension = FdoDeviceObject->DeviceExtension; FdoExtension->FdoType = CmBattBattery; FdoExtension->Started = 0; FdoExtension->NotifySent = TRUE; InterlockedExchange(&FdoExtension->ArLockValue, 0); FdoExtension->TripPointValue = BATTERY_UNKNOWN_CAPACITY; FdoExtension->Tag = 0; FdoExtension->InterruptTime = KeQueryInterruptTime(); FdoExtension->TripPointSet = CmBattSetTripPpoint(FdoExtension, 0) != STATUS_OBJECT_NAME_NOT_FOUND; /* Setup the battery miniport information structure */ RtlZeroMemory(&MiniportInfo, sizeof(MiniportInfo)); MiniportInfo.Pdo = DeviceObject; MiniportInfo.MajorVersion = BATTERY_CLASS_MAJOR_VERSION; MiniportInfo.MinorVersion = BATTERY_CLASS_MINOR_VERSION; MiniportInfo.Context = FdoExtension; MiniportInfo.QueryTag = (PVOID)CmBattQueryTag; MiniportInfo.QueryInformation = (PVOID)CmBattQueryInformation; MiniportInfo.SetInformation = NULL; MiniportInfo.QueryStatus = (PVOID)CmBattQueryStatus; MiniportInfo.SetStatusNotify = (PVOID)CmBattSetStatusNotify; MiniportInfo.DisableStatusNotify = (PVOID)CmBattDisableStatusNotify; MiniportInfo.DeviceName = FdoExtension->DeviceName; /* Register with the class driver */ Status = BatteryClassInitializeDevice(&MiniportInfo, &FdoExtension->ClassData); if (!NT_SUCCESS(Status)) { IoDetachDevice(FdoExtension->AttachedDevice); CmBattDestroyFdo(FdoExtension->FdoDeviceObject); if (CmBattDebug & 0xC) DbgPrint("CmBattAddBattery: error (0x%x) registering with class\n", Status); return Status; } /* Register WMI */ Status = CmBattWmiRegistration(FdoExtension); if (!NT_SUCCESS(Status)) { if (CmBattDebug & 0xC) DbgPrint("CmBattAddBattery: Could not register as a WMI provider, status = %Lx\n", Status); return Status; } /* Register ACPI */ Status = FdoExtension->AcpiInterface.RegisterForDeviceNotifications(FdoExtension->AcpiInterface.Context, (PVOID)CmBattNotifyHandler, FdoExtension); if (!NT_SUCCESS(Status)) { CmBattWmiDeRegistration(FdoExtension); BatteryClassUnload(FdoExtension->ClassData); IoDetachDevice(FdoExtension->AttachedDevice); CmBattDestroyFdo(FdoExtension->FdoDeviceObject); if (CmBattDebug & 0xC) DbgPrint("CmBattAddBattery: Could not register for battery notify, status = %Lx\n", Status); } /* Return status */ return Status; }