⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testusb.cod

📁 usb开发的资料!!USB标准
💻 COD
📖 第 1 页 / 共 2 页
字号:

  00140	5f		pop	edi
  00141	5e		pop	esi
  00142	5b		pop	ebx
  00143	c9		leave
  00144	c2 08 00	ret	8
_Test_ProcessIOCTL@8 ENDP
_TEXT	ENDS
EXTRN	__imp__ExAllocatePoolWithTag@12:NEAR
EXTRN	__imp__ExFreePool@4:NEAR
;	COMDAT _Test_GetDeviceDescriptor@8
_TEXT	SEGMENT
_DeviceObject$ = 8
_pvOutputBuffer$ = 12
_deviceData$ = -12
_ntStatus$ = -16
_urb$ = -8
_length$ = -4
_Test_GetDeviceDescriptor@8 PROC NEAR			; COMDAT

; 234  : {

  00000	55		push	ebp
  00001	8b ec		mov	ebp, esp
  00003	83 ec 10	sub	esp, 16			; 00000010H
  00006	53		push	ebx
  00007	56		push	esi
  00008	57		push	edi

; 235  :     PFDO_DEVICE_DATA deviceData = NULL;

  00009	c7 45 f4 00 00
	00 00		mov	DWORD PTR _deviceData$[ebp], 0

; 236  :     
; 237  :     NTSTATUS            ntStatus        = STATUS_SUCCESS;

  00010	c7 45 f0 00 00
	00 00		mov	DWORD PTR _ntStatus$[ebp], 0

; 238  :     PURB                urb             = NULL;

  00017	c7 45 f8 00 00
	00 00		mov	DWORD PTR _urb$[ebp], 0

; 239  :     ULONG               length          = 0;

  0001e	c7 45 fc 00 00
	00 00		mov	DWORD PTR _length$[ebp], 0

; 240  :     
; 241  :     deviceData = (PFDO_DEVICE_DATA) DeviceObject->DeviceExtension;

  00025	8b 45 08	mov	eax, DWORD PTR _DeviceObject$[ebp]
  00028	8b 40 28	mov	eax, DWORD PTR [eax+40]
  0002b	89 45 f4	mov	DWORD PTR _deviceData$[ebp], eax

; 242  :     
; 243  :     urb = ExAllocatePool(NonPagedPool, 
; 244  :                          sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST));

  0002e	68 47 61 6d 65	push	1701667143		; 656d6147H
  00033	6a 50		push	80			; 00000050H
  00035	6a 00		push	0
  00037	ff 15 00 00 00
	00		call	DWORD PTR __imp__ExAllocatePoolWithTag@12
  0003d	89 45 f8	mov	DWORD PTR _urb$[ebp], eax

; 245  :                          
; 246  :     if (urb) {

  00040	83 7d f8 00	cmp	DWORD PTR _urb$[ebp], 0
  00044	0f 84 8d 00 00
	00		je	$L3017

; 247  :         
; 248  :         if (pvOutputBuffer) {    

  0004a	83 7d 0c 00	cmp	DWORD PTR _pvOutputBuffer$[ebp], 0
  0004e	0f 84 64 00 00
	00		je	$L3018

; 249  :         
; 250  :             UsbBuildGetDescriptorRequest(urb,
; 251  :                                          (USHORT) sizeof (struct _URB_CONTROL_DESCRIPTOR_REQUEST),
; 252  :                                          USB_DEVICE_DESCRIPTOR_TYPE,    //descriptor type
; 253  :                                          0,                             //index
; 254  :                                          0,                             //language ID
; 255  :                                          pvOutputBuffer,                //transfer buffer
; 256  :                                          NULL,                          //MDL
; 257  :                                          sizeof(USB_DEVICE_DESCRIPTOR), //buffer length
; 258  :                                          NULL);                         //link

  00054	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  00057	66 c7 40 02 0b
	00		mov	WORD PTR [eax+2], 11	; 0000000bH
  0005d	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  00060	66 c7 00 50 00	mov	WORD PTR [eax], 80	; 00000050H
  00065	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  00068	c7 40 18 12 00
	00 00		mov	DWORD PTR [eax+24], 18	; 00000012H
  0006f	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  00072	c7 40 20 00 00
	00 00		mov	DWORD PTR [eax+32], 0
  00079	8b 45 0c	mov	eax, DWORD PTR _pvOutputBuffer$[ebp]
  0007c	8b 4d f8	mov	ecx, DWORD PTR _urb$[ebp]
  0007f	89 41 1c	mov	DWORD PTR [ecx+28], eax
  00082	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  00085	c6 40 4b 01	mov	BYTE PTR [eax+75], 1
  00089	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  0008c	c6 40 4a 00	mov	BYTE PTR [eax+74], 0
  00090	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  00093	66 c7 40 4c 00
	00		mov	WORD PTR [eax+76], 0
  00099	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  0009c	c7 40 24 00 00
	00 00		mov	DWORD PTR [eax+36], 0

; 259  :                                                                   
; 260  :             ntStatus = Test_CallUSBD(DeviceObject, urb);

  000a3	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  000a6	50		push	eax
  000a7	8b 45 08	mov	eax, DWORD PTR _DeviceObject$[ebp]
  000aa	50		push	eax
  000ab	e8 00 00 00 00	call	_Test_CallUSBD@8
  000b0	89 45 f0	mov	DWORD PTR _ntStatus$[ebp], eax

; 261  : 
; 262  :         } else {

  000b3	e9 07 00 00 00	jmp	$L3019
$L3018:

; 263  :             ntStatus = STATUS_NO_MEMORY;

  000b8	c7 45 f0 17 00
	00 c0		mov	DWORD PTR _ntStatus$[ebp], -1073741801 ; c0000017H
$L3019:

; 264  :         }    
; 265  : 
; 266  :         // Get the length from the Urb
; 267  :         length = urb->UrbControlDescriptorRequest.TransferBufferLength;

  000bf	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  000c2	8b 40 18	mov	eax, DWORD PTR [eax+24]
  000c5	89 45 fc	mov	DWORD PTR _length$[ebp], eax

; 268  : 
; 269  :         ExFreePool(urb);

  000c8	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  000cb	50		push	eax
  000cc	ff 15 00 00 00
	00		call	DWORD PTR __imp__ExFreePool@4

; 270  :         
; 271  :     } else {

  000d2	e9 07 00 00 00	jmp	$L3020
$L3017:

; 272  :         ntStatus = STATUS_NO_MEMORY;        

  000d7	c7 45 f0 17 00
	00 c0		mov	DWORD PTR _ntStatus$[ebp], -1073741801 ; c0000017H
$L3020:

; 273  :     }        
; 274  :    
; 275  :     return length;

  000de	8b 45 fc	mov	eax, DWORD PTR _length$[ebp]
  000e1	e9 00 00 00 00	jmp	$L3012
$L3012:

; 276  : 
; 277  : }    

  000e6	5f		pop	edi
  000e7	5e		pop	esi
  000e8	5b		pop	ebx
  000e9	c9		leave
  000ea	c2 08 00	ret	8
_Test_GetDeviceDescriptor@8 ENDP
_TEXT	ENDS
;	COMDAT _Test_GetConfigDescriptor@12
_TEXT	SEGMENT
_DeviceObject$ = 8
_pvOutputBuffer$ = 12
_ulLength$ = 16
_deviceData$ = -12
_ntStatus$ = -16
_urb$ = -8
_length$ = -4
_Test_GetConfigDescriptor@12 PROC NEAR			; COMDAT

; 339  : {

  00000	55		push	ebp
  00001	8b ec		mov	ebp, esp
  00003	83 ec 10	sub	esp, 16			; 00000010H
  00006	53		push	ebx
  00007	56		push	esi
  00008	57		push	edi

; 340  :     PFDO_DEVICE_DATA deviceData = NULL;

  00009	c7 45 f4 00 00
	00 00		mov	DWORD PTR _deviceData$[ebp], 0

; 341  :     NTSTATUS            ntStatus        = STATUS_SUCCESS;

  00010	c7 45 f0 00 00
	00 00		mov	DWORD PTR _ntStatus$[ebp], 0

; 342  :     PURB                urb             = NULL;

  00017	c7 45 f8 00 00
	00 00		mov	DWORD PTR _urb$[ebp], 0

; 343  :     ULONG               length          = 0;

  0001e	c7 45 fc 00 00
	00 00		mov	DWORD PTR _length$[ebp], 0

; 344  :     
; 345  :     deviceData = (PFDO_DEVICE_DATA) DeviceObject->DeviceExtension;

  00025	8b 45 08	mov	eax, DWORD PTR _DeviceObject$[ebp]
  00028	8b 40 28	mov	eax, DWORD PTR [eax+40]
  0002b	89 45 f4	mov	DWORD PTR _deviceData$[ebp], eax

; 346  :     
; 347  :     urb = ExAllocatePool(NonPagedPool, 
; 348  :                          sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST));

  0002e	68 47 61 6d 65	push	1701667143		; 656d6147H
  00033	6a 50		push	80			; 00000050H
  00035	6a 00		push	0
  00037	ff 15 00 00 00
	00		call	DWORD PTR __imp__ExAllocatePoolWithTag@12
  0003d	89 45 f8	mov	DWORD PTR _urb$[ebp], eax

; 349  :                          
; 350  :     if (urb) {

  00040	83 7d f8 00	cmp	DWORD PTR _urb$[ebp], 0
  00044	0f 84 8c 00 00
	00		je	$L3029

; 351  :         
; 352  :         if (pvOutputBuffer) {    

  0004a	83 7d 0c 00	cmp	DWORD PTR _pvOutputBuffer$[ebp], 0
  0004e	0f 84 63 00 00
	00		je	$L3030

; 353  :         
; 354  :             UsbBuildGetDescriptorRequest(urb,
; 355  :                                          (USHORT) sizeof (struct _URB_CONTROL_DESCRIPTOR_REQUEST),
; 356  :                                          USB_CONFIGURATION_DESCRIPTOR_TYPE, //descriptor type
; 357  :                                          0,                             //index
; 358  :                                          0,                             //language ID
; 359  :                                          pvOutputBuffer,                //transfer buffer
; 360  :                                          NULL,                          //MDL
; 361  :                                          ulLength,                      //buffer length
; 362  :                                          NULL);                         //link

  00054	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  00057	66 c7 40 02 0b
	00		mov	WORD PTR [eax+2], 11	; 0000000bH
  0005d	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  00060	66 c7 00 50 00	mov	WORD PTR [eax], 80	; 00000050H
  00065	8b 45 10	mov	eax, DWORD PTR _ulLength$[ebp]
  00068	8b 4d f8	mov	ecx, DWORD PTR _urb$[ebp]
  0006b	89 41 18	mov	DWORD PTR [ecx+24], eax
  0006e	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  00071	c7 40 20 00 00
	00 00		mov	DWORD PTR [eax+32], 0
  00078	8b 45 0c	mov	eax, DWORD PTR _pvOutputBuffer$[ebp]
  0007b	8b 4d f8	mov	ecx, DWORD PTR _urb$[ebp]
  0007e	89 41 1c	mov	DWORD PTR [ecx+28], eax
  00081	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  00084	c6 40 4b 02	mov	BYTE PTR [eax+75], 2
  00088	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  0008b	c6 40 4a 00	mov	BYTE PTR [eax+74], 0
  0008f	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  00092	66 c7 40 4c 00
	00		mov	WORD PTR [eax+76], 0
  00098	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  0009b	c7 40 24 00 00
	00 00		mov	DWORD PTR [eax+36], 0

; 363  :                                                                   
; 364  :             ntStatus = Test_CallUSBD(DeviceObject, urb);

  000a2	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  000a5	50		push	eax
  000a6	8b 45 08	mov	eax, DWORD PTR _DeviceObject$[ebp]
  000a9	50		push	eax
  000aa	e8 00 00 00 00	call	_Test_CallUSBD@8
  000af	89 45 f0	mov	DWORD PTR _ntStatus$[ebp], eax

; 365  : 
; 366  :         } else {

  000b2	e9 07 00 00 00	jmp	$L3031
$L3030:

; 367  :             ntStatus = STATUS_NO_MEMORY;

  000b7	c7 45 f0 17 00
	00 c0		mov	DWORD PTR _ntStatus$[ebp], -1073741801 ; c0000017H
$L3031:

; 368  :         }    
; 369  : 
; 370  :         // Get the length from the Urb
; 371  :         length = urb->UrbControlDescriptorRequest.TransferBufferLength;

  000be	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  000c1	8b 40 18	mov	eax, DWORD PTR [eax+24]
  000c4	89 45 fc	mov	DWORD PTR _length$[ebp], eax

; 372  : 
; 373  :         ExFreePool(urb);

  000c7	8b 45 f8	mov	eax, DWORD PTR _urb$[ebp]
  000ca	50		push	eax
  000cb	ff 15 00 00 00
	00		call	DWORD PTR __imp__ExFreePool@4

; 374  :         
; 375  :     } else {

  000d1	e9 07 00 00 00	jmp	$L3032
$L3029:

; 376  :         ntStatus = STATUS_NO_MEMORY;        

  000d6	c7 45 f0 17 00
	00 c0		mov	DWORD PTR _ntStatus$[ebp], -1073741801 ; c0000017H
$L3032:

; 377  :     }        
; 378  :     
; 379  :     return length;

  000dd	8b 45 fc	mov	eax, DWORD PTR _length$[ebp]
  000e0	e9 00 00 00 00	jmp	$L3024
$L3024:

; 380  : }    

  000e5	5f		pop	edi
  000e6	5e		pop	esi
  000e7	5b		pop	ebx
  000e8	c9		leave
  000e9	c2 0c 00	ret	12			; 0000000cH
_Test_GetConfigDescriptor@12 ENDP
_TEXT	ENDS
PUBLIC	_Test_Read@8
;	COMDAT _Test_Read@8
_TEXT	SEGMENT
_ntStatus$ = -4
_Test_Read@8 PROC NEAR					; COMDAT

; 397  : {

  00000	55		push	ebp
  00001	8b ec		mov	ebp, esp
  00003	83 ec 04	sub	esp, 4
  00006	53		push	ebx
  00007	56		push	esi
  00008	57		push	edi

; 398  :         NTSTATUS ntStatus = STATUS_SUCCESS;

  00009	c7 45 fc 00 00
	00 00		mov	DWORD PTR _ntStatus$[ebp], 0

; 399  :         UNREFERENCED_PARAMETER (DeviceObject);
; 400  :         UNREFERENCED_PARAMETER (Irp);
; 401  :         return (ntStatus);

  00010	8b 45 fc	mov	eax, DWORD PTR _ntStatus$[ebp]
  00013	e9 00 00 00 00	jmp	$L3035
$L3035:

; 402  : 
; 403  : }

  00018	5f		pop	edi
  00019	5e		pop	esi
  0001a	5b		pop	ebx
  0001b	c9		leave
  0001c	c2 08 00	ret	8
_Test_Read@8 ENDP
_TEXT	ENDS
PUBLIC	_Test_Write@8
;	COMDAT _Test_Write@8
_TEXT	SEGMENT
_ntStatus$ = -4
_Test_Write@8 PROC NEAR					; COMDAT

; 420  : {

  00000	55		push	ebp
  00001	8b ec		mov	ebp, esp
  00003	83 ec 04	sub	esp, 4
  00006	53		push	ebx
  00007	56		push	esi
  00008	57		push	edi

; 421  : 
; 422  :         NTSTATUS ntStatus = STATUS_SUCCESS;

  00009	c7 45 fc 00 00
	00 00		mov	DWORD PTR _ntStatus$[ebp], 0

; 423  :         UNREFERENCED_PARAMETER (DeviceObject);
; 424  :         UNREFERENCED_PARAMETER (Irp);
; 425  :         return (ntStatus);

  00010	8b 45 fc	mov	eax, DWORD PTR _ntStatus$[ebp]
  00013	e9 00 00 00 00	jmp	$L3039
$L3039:

; 426  : 
; 427  : }

  00018	5f		pop	edi
  00019	5e		pop	esi
  0001a	5b		pop	ebx
  0001b	c9		leave
  0001c	c2 08 00	ret	8
_Test_Write@8 ENDP
_TEXT	ENDS
PUBLIC	_Test_Create@8
;	COMDAT _Test_Create@8
_TEXT	SEGMENT
_Irp$ = 12
_ntStatus$ = -4
_Test_Create@8 PROC NEAR				; COMDAT

; 435  : {

  00000	55		push	ebp
  00001	8b ec		mov	ebp, esp
  00003	83 ec 04	sub	esp, 4
  00006	53		push	ebx
  00007	56		push	esi
  00008	57		push	edi

; 436  :     NTSTATUS ntStatus;
; 437  : 
; 438  :     Irp->IoStatus.Status = STATUS_SUCCESS;

  00009	8b 45 0c	mov	eax, DWORD PTR _Irp$[ebp]
  0000c	c7 40 18 00 00
	00 00		mov	DWORD PTR [eax+24], 0

; 439  :     Irp->IoStatus.Information = 0;

  00013	8b 45 0c	mov	eax, DWORD PTR _Irp$[ebp]
  00016	c7 40 1c 00 00
	00 00		mov	DWORD PTR [eax+28], 0

; 440  : 
; 441  :         // Create all the symbolic links here
; 442  :     ntStatus = Irp->IoStatus.Status;

  0001d	8b 45 0c	mov	eax, DWORD PTR _Irp$[ebp]
  00020	8b 40 18	mov	eax, DWORD PTR [eax+24]
  00023	89 45 fc	mov	DWORD PTR _ntStatus$[ebp], eax

; 443  : 
; 444  :     IoCompleteRequest (Irp,IO_NO_INCREMENT);

  00026	33 d2		xor	edx, edx
  00028	8b 4d 0c	mov	ecx, DWORD PTR _Irp$[ebp]
  0002b	ff 15 00 00 00
	00		call	DWORD PTR __imp_@IofCompleteRequest@8

; 445  : 
; 446  :     UNREFERENCED_PARAMETER (DeviceObject);
; 447  : 
; 448  :     return ntStatus;

  00031	8b 45 fc	mov	eax, DWORD PTR _ntStatus$[ebp]
  00034	e9 00 00 00 00	jmp	$L3043
$L3043:

; 449  : 
; 450  : }

  00039	5f		pop	edi
  0003a	5e		pop	esi
  0003b	5b		pop	ebx
  0003c	c9		leave
  0003d	c2 08 00	ret	8
_Test_Create@8 ENDP
_TEXT	ENDS
END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -