Отключение USB устройств

Тема в разделе "WASM.NT.KERNEL", создана пользователем irusrubin, 18 окт 2010.

  1. irusrubin

    irusrubin New Member

    Публикаций:
    0
    Регистрация:
    7 июл 2010
    Сообщения:
    16
    Очень нужна помощь! Сделал драйвер, установил нотификатор на втыкание/вытыкание usb, получаю DeviceObject, FileObject для соответствующего драйвера, но вот как отключить usb девайс так и не понял.
    Пытался вызвать IoDeleteDevice - не помогло. BSOD с указанием на usbstor, IoDetachDevice + IoDeleteDevice BSOD с указанием на мой драйвер

    Пытался Irp = IoBuildAsynchronousFsdRequest(IRP_MJ_SHUTDOWN,deviceObject,NULL,0,0,NULL);
    IoCallDriver(deviceObject,Irp);
    выдало STATUS_INVALID_DEVICE_REQUEST
    Пытался irp = IoBuildDeviceIoControlRequest(FSCTL_LOCK_VOLUME,
    DeviceObject,
    NULL,
    0,
    NULL,
    0,
    FALSE, //IRP_MJ_INTERNAL_DEVICE_CONTROL
    &event,
    &ioStatus);
    выдало STATUS_NOT_SUPPORTED
    Попытался в предыдущем варианте сделать вот такие изменения:
    irpSp = IoGetСurrentIrpStackLocation(irp);
    irpSp->MajorFunction = IRP_MJ_FILE_SYSTEM_CONTROL;
    irpSp->FileObject = FileObject;
    irpSp->DeviceObject = DeviceObject;
    Результат - STATUS_NOT_SUPPORTED
     
  2. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Тут чуть поподробнее можно? Мне для повышения образованности.
     
  3. tchunya

    tchunya New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    29
    Зачем вам драйвер? Выключите из user-mode. Пример в WDK, devcon.
     
  4. tchunya

    tchunya New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    29
    x64
    IoRegisterPlugPlayNotification с EventCategoryDeviceInterfaceChange + Открытие символической ссылки
     
  5. irusrubin

    irusrubin New Member

    Публикаций:
    0
    Регистрация:
    7 июл 2010
    Сообщения:
    16
    tchunya, Вы думаете я не догадался бы выключать в user-mode, если бы так можно было бы?)
    Просто нужно через драйвер.
     
  6. tchunya

    tchunya New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    29
    Почему бы тогда не сесть верхним фильтром на USB-устройства и фейлить IRP_MJ_PNP с IRP_MN_START_DEVICE для необходимого устройства?
    Встречный вопрос: зачем всё-таки драйвер?
     
  7. irusrubin

    irusrubin New Member

    Публикаций:
    0
    Регистрация:
    7 июл 2010
    Сообщения:
    16
    tchunya
    В стек устройств тоже не хочется вставать. Задача достаточна специфичная, как до конца её доделаю отвечу на твой вопрос.
     
  8. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    Блокировка USB устройств ?

    http://www.microsoft.com/whdc/driver/tips/remlock.mspx

    When handling a device-removal request (IRP_MN_REMOVE_DEVICE), a driver releases the remove lock that it acquired in its DispatchPnP routine by calling IoReleaseRemoveLockAndWait. This call does not return until the reference count associated with the remove lock reaches zero, which indicates that all other acquisitions of the remove lock have been released. After IoReleaseRemoveLockAndWait returns, the driver passes the IRP down its device stack (if necessary), calls IoDetachDevice to remove its device object from the device stack, and then frees resources such as pool memory that it allocated in its AddDevice routine. Finally, the driver calls IoDeleteDevice to mark the device object for deletion
     
  9. tchunya

    tchunya New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    29
    Только IRP_MN_REMOVE_DEVICE шлет PnP-менеджер, а если вы зашлете стеку ентот запрос, то это может привести к некорректной работе связанных с данным стеков и ОС. Точно также и с IRP_MN_STOP_DEVICE. Не имея полной информации о реализации драйверов для устройства, а также внутренней структуре ОС, делать такое чревато BSOD.
     
  10. tchunya

    tchunya New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    29
    Можете сделать хак: перехватить MajorFunction[IRP_MJ_PNP] у вашего целевого драйвера (USBSTOR?) и либо: а)фейлить IRP_MJ_START_DEVICE, либо: б) IoInvalidateDeviceState с последующим ответом PNP_DEVICE_FAILED на IRP_MN_QUERY_PNP_DEVICE_STATE (См. http://msdn.microsoft.com/en-us/library/ff546699(VS.85).aspx). Только совместимость с другим софтом, антивирусами, x64 и т.п не гарантируется ;)
     
  11. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    irusrubin
    Либо минифильтром, либо опускай USB devices ...