wiiu titlekeys site keys just funciona dance usb device drivers

titlekeys - Creando un dispositivo USB virtual



wii u usb helper title key site (4)

Soy un novato que aprende a escribir controladores de dispositivos WDM para dispositivos USB y descubrí que los materiales disponibles son muy difíciles de comprender (el documento en línea del DDK es uno de los más difíciles de leer, y el libro de controladores de dispositivos WDM de Oney no es t algo mejor).

Entonces, tengo una pregunta simple. ¿Dónde empiezo si quiero crear un dispositivo USB virtual (por ejemplo, un mouse USB virtual que se parece a un mouse USB real conectado a un puerto USB) para realizar pruebas / aprender?

Hasta ahora, lo que entiendo es que el controlador HIDClass (hidclass.sys) tiene un minidriver para el bus usb (hidusb.sys) que lleva a cabo la enumeración del hardware USB conectado. Entonces, si quiero secuestrar el proceso de enumeración de hardware y crear mi propio hardware virtual, ¿debo incluir un controlador de filtro en algún lugar para interceptar algunos IRP relacionados con el proceso de enumeración de hardware?

Lo siento si lo anterior no tiene ningún sentido ya que todavía estoy en la etapa de aprendizaje y este es uno de los ejercicios que creo que podría ayudarme a aprender sobre cómo escribir mejor los controladores de dispositivos USB.


¿No tendría más sentido proporcionar su propio tipo de bus y enumerador?


Puede usar el proyecto USB / IP para emular cualquier dispositivo que desee. En mi blog, demostré cómo emular el dispositivo USB Mouse en Python utilizando el proyecto USB / IP: http://breaking-the-system.blogspot.com/2014/08/emulating-usb-devices-in-python-with-no.html

No le ayudará a entender cómo crear el dispositivo USB virtual (el proceso se realiza en el controlador USB / IP, puede leer el código), pero creará el dispositivo USB HID virtual y podrá jugar con los argumentos HID enviados. al controlador USB.



Windows usa una arquitectura Plug and Play. Cuando inserta un dispositivo USB, envía una solicitud de USB de bajo nivel al dispositivo y luego, basándose en la respuesta de un dispositivo, decide qué controlador cargar. La coincidencia se realiza comparando la identificación del proveedor, la identificación del producto y etc. con las secciones de archivos inf. Los controladores vienen en forma de un archivo xxx.sys compilado con el archivo xxx.inf y se cargan en el espacio del kernel. Windows decide qué xxx.sys cargar en función del archivo * .inf que viene con el controlador del dispositivo.

Estos archivos tienen secciones como esta:

[Manufacturer] %Manufacturer% = DeviceInstall [DeviceInstall] "some usb dev"=OTHER_SECTION_DEV, USB/Vid_XXXX&Pid_yyyy # This is where windows learns to match this information # to your device, using the product id (Pid) and the # vendor id (Vid) that Windows gets back during the # low level USB DeviceDescriptor request [OTHER_SECTION_DEV] CopyFiles = xxx.sys, 10,system32/drivers

(se puede encontrar una descripción más detallada de lo que hay en los archivos inf en https://docs.microsoft.com/en-us/windows-hardware/drivers/install/inf-manufacturer-section )

Una mirada detallada al proceso de enumeración de USB (Use USB Logger):

  • Dispositivo USB conectado
  • Solicitud de controlador de bus USB
    • GetDescriptor (Dispositivo)
    • GetDescriptor (Configuración)
    • GetDescriptor (String iSerialNumber), utilizado como ID de instancia de dispositivo
    • GetDescriptor (String iProduct), utilizado en las ventanas emergentes de "Nuevo hardware identificado"
  • Se informa al administrador de PNP (Plug and Play) que los controladores del bus agregaron un dispositivo.
  • El administrador de PNP luego le pide al conductor del bus la información del dispositivo mediante una solicitud PNP, solicitando:
    • Cadena DeviceID, que representa el proveedor USB y la identificación del producto,
    • Cadena de ID de hardware,
    • Cadena CompatibleIDs, que representa la clase de interfaz, subclase y protocolo del dispositivo USB, y
    • Cadena de InstanceID, que representa el uid para este dispositivo en particular dentro del conjunto de todas las instancias con la misma identificación compatible conectada a la computadora.

Para cualquier dispositivo USB conectado, puede ver estas cadenas utilizando el Administrador de dispositivos:

  • Abra el Administrador de dispositivos (menú de ventanas -> "administrador de dispositivos", o panel de control -> "Sistema" -> "Hardware" -> "Administrador de dispositivos")
  • luego use el menú "ver" para cambiar a "Dispositivo por conexión"
  • abrir "ACPI [...]" -> "bus PCI" / "PCI Express Root Complex" -> "[...] USB Controlador de host"
  • expanda cualquiera de las entradas bajo el controlador host, y para cualquiera de los dispositivos enumerados, haga clic con el botón derecho para obtener sus propiedades, abra la pestaña "detalles" y luego use el menú desplegable de propiedades para encontrar "Id. de hardware", "Id. compatibles" , "ID de instancia de dispositivo", "Id. De dispositivo coincidente", "Servicio", etc.

Por ejemplo, tengo un dispositivo de almacenamiento USB con Device Id = usb/class_08&subclass_06&prot_50 conectado, y esta cadena puede coincidir con un archivo .inf que se agregó a la lista de dispositivos conocidos después de la primera enumeración. Este archivo tiene una cadena de Service = USBSTOR , por lo que sabemos que usbstor.sys se usa para interactuar con este dispositivo de almacenamiento masivo USB.

Continuemos con el proceso de emparejamiento.

  • El Administrador de PNP intenta determinar si el dispositivo ya estaba "instalado":
    • Busca en el registro una clave que coincida con la "ID de instancia de dispositivo" para ver qué servicio maneja la interfaz con este dispositivo. Específicamente, busca esto en HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Enum/USB

Para el disco en clave, puedes ver algo como:

[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Enum/USB/Vid_0781&Pid_5406/0775555ACA54ADE3] "Service"="USBSTOR"

  • El Administrador de PNP luego carga el controlador asociado en función de una coincidencia entre las cadenas en las solicitudes de PNP y los datos de la base de datos .inf:
    • base de datos inf ubicada en: C: / WINDOWS / inf /
    • Archivos .sys de los controladores ubicados: C: / WINDOWS / system32 / drivers
  • Si PNP no puede encontrar una cadena coincidente, recibirá un mensaje para mostrar una ruta a xxx.sys y xxx.inf

Para escribir drivers mi consejo es:

  1. No empiece con la implementación de dispositivos HID (dispositivo de interfaz humana), ya que puede hacer que Windows use su controlador personalizado para su mouse o teclado en lugar del controlador original, esto deshabilitará su mouse o teclado, muy peligroso.
  2. No cargue controladores en su máquina dev:
    1. Use una máquina virtual e instale sus controladores allí. Configure un depurador de kernel para su máquina virtual: http://www.codeproject.com/KB/winsdk/KernelModeDebuggerSetup.asp
    2. o cargar controladores en otra máquina de prueba.
  3. La buena plataforma de aprendizaje para controladores USB es "OSR USB-FX2 Learning Kit"