일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- docker
- Openswan
- ssh command
- port
- 우분투
- docker registry
- 리눅스
- ssh
- docker-compose
- 드라이버
- Chef
- 방화벽체크
- sudo
- VMware
- DevOps
- VIM
- 패키지
- golang
- RUBY
- opsworks
- ubuntu
- VPN
- 루비
- docker container
- 도커
- QT
- driver
- AWS
- window size
- Linux
- Today
- Total
목록Window Driver (28)
구리의 창고
일단.. 인터럽트 전송 전용 URB를 만든다. 지금부터 할 방법으로는 데이터를 받아오기 위해선 두 개의 함수가 필요하다 한 개는 urb를 생성하는과정이고, 한 개는 데이터를 처리하면서 다시 urb를 생성하게해준다. UsbBuildInterruptOrBulkTransferRequest() 함수를 이용해 URB를 생성해준다. 그리고 IoSetCompletionRoutine() 함수를 이용해서, Irp와 인터럽트가 들어왔을 때 호출 할 함수를 등록해준다. NTSTATUS StartInterruptUrb( PDEVICE_EXTENSION pdx ) { // If the interrupt polling IRP is currently running, don't try to start // it again. BOOL..
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.Arg..
아 햇갈린다.... 생성한 guid가 무시되는 느낌 뭘 까.. 지금 엄청 햇갈린다 여태까지 공부하던 지식이 무너진 느낌
CHRIS CANT 가 쓴 책의 예제파일이다 구하기 힘들었는데, 필요한 사람은 받아가면 좋겠다
USB(Universal Serial Bus)의 개념 1. USB logical structure ㆍEndpoint - 각각의 device가 가지고 있는 하나 이상의 논리적인 connection point. - 모든 device는 device의 제어와 확인에 사용되는 전송을 위한 Endpoint0를 가지고 있음. - pipe : host와 device의 endpoint 사이의 connection. - Default pipe : host USB system software와 device의 endpoint0 사이의 연결. ㆍInterface - 어떻게 software들이 hardware들을 접근할 것인가를 설명. - host를 위해 device가 가지고 있는 일련의 endpoint들의 집합 - composi..
typedef struct _URB { union { struct _URB_HEADER UrbHeader; struct _URB_SELECT_INTERFACE UrbSelectInterface; struct _RUB_SELECT_CONFIGURATION UrbSelectConfiguration; //.... }; } URB, *PURB; struct _URB_HEADER { USHORT Length; USHORT Function; USBD_STATUS Status; //... }; URB 는 USB Request Block 의 약자로 USB와 통신을 하는데 쓰이는 하나의 구조이다. URB 와 관련된 처리를 한 후에는 Status 필드를 받아온다. 아래는 URB의 Status 를 설명한다. 비트 이름 설명..
usb100.h : USB 상수나 구조체 usbioctl.h : IOCTL 관련 usbdlib.h : URB 관련 usbdi.h : URB 구조체를 포함한 USBDI 루틴 IOCTL_INTERNAL_USB_SUMBIT_URB : URB 전송한다. IOCTL_INTERNAL_USB_RESET_PORT : 포트를 리셋한다. IOCTL_INTERNAL_USB_GET_PORT_STATUS : Port Status Bit를 가져온다. (USBD_PORT_ENABLED, USBD_PORT_CONNECTED) IOCTL_INTERNAL_USB_ENABLE_PORT : 비활성화되있는 포트를 활성화시킨다 IOCTL_INTERNAL_USB_GET_HUB_COUNT : 허브드라이버에 의해서 내부적으로 사용된다. IOCTL_..
Endpoint 디바이스는 endpoint를 한 개 이상을 가진다. 각각은 control, interrupt, bulk, isochronous 타입을 가진다. Control : 상대적으로 작은 크기의 데이터 Interrupt : 일정 주기마다 이벤트를 체크하는 방식 Bulk : 큰 크기의 데이터 Isochronous : 동시성 같이 시간이 중요한 경우 (음성채팅) 그리고 모든 디바이스는 Endpoint 0 을 가지며, 이 것은 디바이스는 컨트롤 하거나 설정하는데 쓰인다. 호스트와 디바이스 Endpoint를 연결하는데는 파이프를 사용한다. 그리고 Endpoint 0는 Default Pipe라고한다. Interface Endpoint 의 한 세트를 인터페이스라고 한다. 디바이스 한 개는 여러개의 인터페이스를..
AddDevice 가 호출되면 PDO를 이용해 FDO를 생성한다. IoCreateDevice()의 원형이다. NTSTATUS IoCreateDevice( IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName OPTIONAL, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject ); 인자들을 설명해보면. 1. DriverObject : AddDevice 인자로 받은 DriverObject를 그대로 넣어준다. 2. DeviceExtensionSize..
1. 디바이스 디스크립터를 얻어와서 DEVICE_EXTENSION 에 저장한다. 2. Configuration 디스크립터를 얻어온다 3. Configuration 디스크립터에서 인터페이스 리스트를 가져와, 인터페이스 리스트를 구한다. 4. 인터페이스를 차례데로 검색하면서 값을 정한다. 5. 재설정한 디스크립터를 적용하도록 요청한다. 6. DEVICE_EXTENSION에 값을 저장한다. 주요 함수는 아래와 같다 UsbBuildGetDescriptorRequest : 디스크립터를 얻는 패킷 생성 UsbBuildGetInterruptOrBulkTransferrequest : 데이터 전송 패킷 생성 UsbBuildGetSelectConfigurationRequest : 컨피규레이션 패킷 생성 UsbBuildSe..