serenum и различные COM - устройства

Тема в разделе "WASM.NT.KERNEL", создана пользователем rttgedt, 12 авг 2011.

  1. rttgedt

    rttgedt Антон

    Публикаций:
    0
    Регистрация:
    12 окт 2010
    Сообщения:
    85
    Здравствуйте! Возникла такая проблема - написал драйвер-фильтр на ком-порт, который цепляет FiDO в стек устройств \Device\Serial*. Перехват данных, отправленных на ком-порт напрямую работает без замечаний. Но данные, поступающие от устройств, подключенных к ком-порту, (например мышь) не перехватывается. Смотрю в чем проблема:
    Код (Text):
    1. !drvobj serenum
    2. Driver object (820932d8) is for:
    3.  \Driver\serenum
    4. Driver Extension List: (id , addr)
    5.  
    6. Device Object list:
    7. 8249c5d0  824dbb58  824a1680  
    8.  
    9. !devstack 8249c5d0
    10.   !DevObj   !DrvObj            !DevExt   ObjectName
    11.   822cae48  \Driver\Mouclass   822caf00  PointerClass4
    12.   822c8b60  \Driver\sermouse   822c8c18  
    13. > 8249c5d0  \Driver\serenum    8249c688  0000007e
    14. !DevNode 81f1e8b0 :
    15.   DeviceInst is "SERENUM\ECM0001\6&23de782&0&0000"
    16.   ServiceName is "sermouse"
    17.  
    18. !devstack 824dbb58
    19.   !DevObj   !DrvObj            !DevExt   ObjectName
    20.   822f7ea8  \Driver\ComFltr    822f7f60  
    21. > 824dbb58  \Driver\serenum    824dbc10  
    22.   8222f8c0  \Driver\Serial     8222f978  Serial1
    23.   824ec748  \Driver\ACPI       82599348  00000072
    24. !DevNode 824ec2a8 :
    25.   DeviceInst is "ACPI\PNP0501\2"
    26.   ServiceName is "Serial"
    27.  
    28. !devstack 824a1680
    29.   !DevObj   !DrvObj            !DevExt   ObjectName
    30.   821f3810  \Driver\ComFltr    821f38c8  
    31. > 824a1680  \Driver\serenum    824a1738  
    32.   820938c0  \Driver\Serial     82093978  Serial0
    33.   824ec860  \Driver\ACPI       82599500  00000071
    34. !DevNode 824ec3c8 :
    35.   DeviceInst is "ACPI\PNP0501\1"
    36.   ServiceName is "Serial"
    То есть получается, что для мыши serenum создает отдельное FDO со своим стеком. Теперь вопрос, есть ли возможность как-то отлавливать момент создания нового объекта устройства serenum и вставлять свой фильтр между ним и новым СОМ устройством?
     
  2. rttgedt

    rttgedt Антон

    Публикаций:
    0
    Регистрация:
    12 окт 2010
    Сообщения:
    85
    Уже разобрался. Открываю объект драйвера "Driver\serenum" с помощью функции ObReferenceObjectByName, потом просто перечисляю все созданные им устройства через DeviceObject и NextDevice.