Заставить шину пересчитать устройства

Discussion in 'WASM.NT.KERNEL' started by h0t, Feb 24, 2012.

  1. h0t

    h0t Member

    Blog Posts:
    0
    В общем как я понимаю нужно вызвать IoInvalidateDeviceRelations. Но для этого нужен PDO самой шины. (как пример USB). Как получить этот PDO?

    P.S. Делать это через SetupAPI и прочее не предлагать.)
     
  2. shchetinin

    shchetinin Member

    Blog Posts:
    0
    h0t
    SetupApi в kernel ? )) таик улыбнуло ...

    Что вы вообще хотите зделать ? у вас драйвер который хочет отослать нотификацию другому драйверу? или что?
     
  3. h0t

    h0t Member

    Blog Posts:
    0
    Да нет, из ring3 конечно). Под "делать" подразумевалось не получение PDO шины, а пересчитывание устройств. Хочу что-бы шина пере опросила устройства) Т.е. некий аналог "обновить конфигурацию оборудования" в диспетчере устройств.
     
  4. Mika0x65

    Mika0x65 New Member

    Blog Posts:
    0
    h0t
    Никогда не вызывал IoInvalidateDeviceRelations, но получить PDO, имея адрес объекта устройства на вершине (или в середине) стека, можно с помощью ф-ии IoGetDeviceAttachmentBaseRef. Но что-то мне подсказывает, что вопрос не совсем в этом...
     
  5. h0t

    h0t Member

    Blog Posts:
    0
    Нее, это не много не то. Это будет PDO, но не шины.(
     
  6. h0t

    h0t Member

    Blog Posts:
    0
    Уолтер Они не знает, так что вопрос еще актуальнее
     
  7. shchetinin

    shchetinin Member

    Blog Posts:
    0
    h0t
    ну вот хоть вопрос теперь ясен.

    Вообщем я знаю :)
    cfgmgr32 это то что юзает Device Manager.
    http://msdn.microsoft.com/en-us/library/windows/hardware/ff549794%28v=vs.85%29.aspx

    CM_Reenumerate_DevNode
    CM_Reenumerate_DevNode_Ex
    Должны помочь

    Обратите внимание на привелегии для вызова.
     
  8. h0t

    h0t Member

    Blog Posts:
    0
    говорю же из драйвера...
    про это я знаю
     
  9. x64

    x64 New Member

    Blog Posts:
    0
    Так у тебя проблема-то в чём?
    Не можешь получить PDO шины или что?
     
  10. h0t

    h0t Member

    Blog Posts:
    0
    Ну да, в общем то в этом.
     
  11. shchetinin

    shchetinin Member

    Blog Posts:
    0
    h0t
    - это ваша фраза.

    1) Не надо делать не какой PDO для шины.
    2) Смотрите реализацию ACPI в Reactos.
     
  12. h0t

    h0t Member

    Blog Posts:
    0
    Вы ее из контекста вцепили, я это писал к вопросу о setupAPI.
    Система делает это через PDO шины
     
  13. TermoSINteZ

    TermoSINteZ Синоби даоса Staff Member

    Blog Posts:
    2
    Обычно чтоб добраться до PDO, посылают устройству запрос IRP_MJ_PNP c доп кодом IRP_MN_QUERY_DEVICE_RELATIONS с параметром (если не забыл) Type = TargetDeviceRelation.
    Дряйвер PDO должен вернуть адрес PDO .
     
  14. h0t

    h0t Member

    Blog Posts:
    0
    к сожалению, это будет PDO устройства а не шины, т.е. то что создается НА шине, и если устройство отключено(программно) то PDO уже не валиден.
     
  15. TermoSINteZ

    TermoSINteZ Синоби даоса Staff Member

    Blog Posts:
    2
    h0t
    Ну так это надо посылать от драйвера устройства, подключенного к шине. Тогда получишь PDO шины.
    Иначе тока установить свой драйвер фильтр шины. Других "нормальных" вариантов не вижу.
     
  16. h0t

    h0t Member

    Blog Posts:
    0
    смотрите, ситуация такая у меня есть приаттаченный девайс, отсылая ему это сообщение, он вернет мне PDO свое, это будет PDO, которое создается шиной при обнаружении нового устройства, шина лежит еще выше. В итоге если устройство отключено полученное на предидущем этапе PDO уже не валиден так как относится к устройству а не шине.
     
  17. TermoSINteZ

    TermoSINteZ Синоби даоса Staff Member

    Blog Posts:
    2
    h0t
    Вот я вам и говорю - что мешает сделать фильтр драйвер шины. Даже если устройство отключится ваше, фильтр будет работать - и будет возвращать PDO шины.
     
  18. h0t

    h0t Member

    Blog Posts:
    0
    TermoSINteZ
    Спасибо, невнимательно прочел Вы натолкнули меня на возможное решение проблемы.