📄 testusb.cod
字号:
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 + -