구리의 창고

USB드라이버가 URB를 IRP에 담아서 사용하는 방법 본문

Window Driver

USB드라이버가 URB를 IRP에 담아서 사용하는 방법

구리z 2010. 2. 25. 09:57
IRP를 사용하는 방법은 다른 WDM 드라이버와 다르지 않다.
대신, USBDI에서는 URB가 필요하므로
클라이언트 드라이버는 URB를 만들어서, IRP 내의 NextStackLocation으로 보관한 뒤
IRP를 버스 드라이버로 보내게 된다. 이런 과정을 통해서 USB Transfer가 완성된다.



IRP 내의 StackLocation에 URB를 기록하는 방법은 다음과 같은 규칙이 있다.

pNextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;

pNextStack->Parameters.DeviceIoControl.IoControlCode = IOCTL_INTERNAL_USB_SUBMIT_URB;

pNextStack->Parameters.Others.Argument1 = &Urb;


이 방법은 비동기식으로 USB 버스 드라이버가 STATUS_PENDING 값을 반환하므로 이에 대한 코드를 준비해야한다.


출처 : IT EXPERT 윈도우 디바이스 드라이버
Comments