Uploaded image for project: 'Core ReactOS'
  1. Core ReactOS
  2. CORE-20343

battc handles IOCTL_BATTERY_QUERY_STATUS incorrectly

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • Major
    • None
    • Drivers: Other
    • None

    Description

      Summary:

      • battc needs to handle "waiting" even if the miniport driver doesn't support notifications.
      • The wait should not be synchronous

       

      some pseudo code:

      IOCTL_BATTERY_QUERY_STATUS:
          Status = BattClass->MiniportInfo.QueryStatus(...)
          if (!NT_SUCCESS(Status))
              goto Fail;
       
          if (Wait && StatusWithinWaitMargins(&BattStatus, &WaitStatus))
          {
              QueueWait(...); // queues WaitStatus + Irp to miniport info
       
              // Determine new margins to include all active queries
       
              Status = BattClass->MiniportInfo.SetStatusNotify(...);
              if (!NT_SUCCESS(Status))
              {
                  BattcSetSyntheticStatusNotify(...);
              }
          }
       
      QueueWait:
          WaitEntry = ExAllocatePool(...);
          WaitEntry->WaiStatus = WaitStatus;
          WaitEntry-Irp = Irp;
          // Set absolute timeout or create timer
       
          InsertTailList(&MiniPortData->WaitList, &WaitEntry->ListLink);
       
      BattcSetSyntheticStatusNotify:
          // Enable regular polling event
       
      BattcStatusNotify:
          // Loop WaitList to process and complete all satisfied IRPs

       

      References:

       

      Attachments

        Activity

          People

            Unassigned Unassigned
            ThePhysicist Timo Kreuzer
            Votes:
            1 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: