📄 oemioctl.cod
字号:
; 449 :
; 450 : SetLastError(ERROR_INVALID_PARAMETER);
003b4 e59f1758 ldr r1, [pc, #0x758]
003b8 e3a00057 mov r0, #0x57
003bc e1a0e00f mov lr, pc
003c0 e12fff11 bx r1
; 620 : return(FALSE);
003c4 e3a00000 mov r0, #0
003c8 ea0001cb b |$L14784|
003cc |$L14819|
; 156 : }
; 157 :
; 158 : break;
; 159 :
; 160 : case IOCTL_PROCESSOR_INFORMATION:
; 161 : if (!lpOutBuf) {
003cc e3580000 cmp r8, #0
003d0 1a000005 bne |$L14820|
; 162 : SetLastError(ERROR_INVALID_PARAMETER);
003d4 e59f1738 ldr r1, [pc, #0x738]
003d8 e3a00057 mov r0, #0x57
003dc e1a0e00f mov lr, pc
003e0 e12fff11 bx r1
; 620 : return(FALSE);
003e4 e3a00000 mov r0, #0
003e8 ea0001c3 b |$L14784|
003ec |$L14820|
; 163 : return FALSE;
; 164 : }
; 165 :
; 166 : if (sizeof(PROCESSOR_INFO) > nOutBufSize) {
003ec e59d0050 ldr r0, [sp, #0x50]
003f0 e3500d09 cmp r0, #9, 26
003f4 2a000005 bcs |$L14824|
; 167 : SetLastError(ERROR_INSUFFICIENT_BUFFER);
003f8 e59f1714 ldr r1, [pc, #0x714]
003fc e3a0007a mov r0, #0x7A
00400 e1a0e00f mov lr, pc
00404 e12fff11 bx r1
; 620 : return(FALSE);
00408 e3a00000 mov r0, #0
0040c ea0001ba b |$L14784|
00410 |$L14824|
; 168 : return FALSE;
; 169 : } else {
; 170 : const WCHAR OEMProcCore[] = L"ARM";
00410 e59f1780 ldr r1, [pc, #0x780]
; 171 : const WCHAR OEMProcName[] = L"ARM920T";
00414 e3a02010 mov r2, #0x10
00418 e5910000 ldr r0, [r1]
0041c e5911004 ldr r1, [r1, #4]
00420 e58d0004 str r0, [sp, #4]
00424 e28d000c add r0, sp, #0xC
00428 e58d1008 str r1, [sp, #8]
0042c e59f1760 ldr r1, [pc, #0x760]
00430 eb000000 bl memcpy
; 172 : const WCHAR OEMProcVendor[] = L"ARM Ltd.";
00434 e59f1754 ldr r1, [pc, #0x754]
00438 e28d001c add r0, sp, #0x1C
0043c e3a02012 mov r2, #0x12
00440 eb000000 bl memcpy
; 173 : PPROCESSOR_INFO pProcInfo = (PPROCESSOR_INFO)lpOutBuf;
; 174 :
; 175 : if (lpBytesReturned) *lpBytesReturned = sizeof(PROCESSOR_INFO);
00444 e59d3054 ldr r3, [sp, #0x54]
; 176 : memset(pProcInfo, 0, *lpBytesReturned);
00448 e3a01000 mov r1, #0
0044c e3530000 cmp r3, #0
00450 13a00d09 movne r0, #9, 26
00454 15830000 strne r0, [r3]
00458 e1a00008 mov r0, r8
0045c e5932000 ldr r2, [r3]
00460 eb000000 bl memset
; 177 :
; 178 : pProcInfo->wVersion = 1;
00464 e3a07001 mov r7, #1
; 179 :
; 180 : memcpy(pProcInfo->szProcessCore, OEMProcCore, (strlenW(OEMProcCore) + 1) * sizeof(WCHAR));
00468 e1a04008 mov r4, r8
0046c e28d0004 add r0, sp, #4
00470 e0c470b2 strh r7, [r4], #2
00474 eb000000 bl strlenW
00478 e2801001 add r1, r0, #1
0047c e1a02081 mov r2, r1, lsl #1
00480 e28d1004 add r1, sp, #4
00484 e1a00004 mov r0, r4
00488 eb000000 bl memcpy
; 181 : memcpy(pProcInfo->szProcessorName, OEMProcName, (strlenW(OEMProcName) + 1) * sizeof(WCHAR));
0048c e28d000c add r0, sp, #0xC
00490 eb000000 bl strlenW
00494 e2801001 add r1, r0, #1
00498 e1a02081 mov r2, r1, lsl #1
0049c e28d100c add r1, sp, #0xC
004a0 e2880054 add r0, r8, #0x54
004a4 eb000000 bl memcpy
; 182 : memcpy(pProcInfo->szVendor, OEMProcVendor, (strlenW(OEMProcVendor) + 1 ) * sizeof(WCHAR));
004a8 e28d001c add r0, sp, #0x1C
004ac eb000000 bl strlenW
004b0 e2801001 add r1, r0, #1
004b4 e2880c01 add r0, r8, #1, 24
004b8 e1a02081 mov r2, r1, lsl #1
004bc e28d101c add r1, sp, #0x1C
004c0 e280006e add r0, r0, #0x6E
004c4 eb000000 bl memcpy
; 183 :
; 184 : pProcInfo->dwInstructionSet = PROCESSOR_16BITINSTRUCTION;
004c8 e3a03004 mov r3, #4
004cc e5883238 str r3, [r8, #0x238]
; 631 : }
; 632 :
; 633 : return(TRUE);
004d0 e1a00007 mov r0, r7
004d4 ea000188 b |$L14784|
004d8 |$L14916|
; 330 :
; 331 : return FALSE;
; 332 : break;
; 333 :
; 334 : case IOCTL_QUERY_PHYSICALMEM:
; 335 : if (!lpOutBuf || nOutBufSize < sizeof(PHYSICAL_BASIC_INFORMATION))
004d8 e3580000 cmp r8, #0
004dc 0a000008 beq |$L14919|
004e0 e59d0050 ldr r0, [sp, #0x50]
004e4 e350000c cmp r0, #0xC
; 338 : return(FALSE);
; 339 : }
; 340 :
; 341 : // Return information about physical memory
; 342 : ((PPHYSICAL_BASIC_INFORMATION)lpOutBuf)->lpBaseAddress = (LPVOID)0;
004e8 23a00000 movcs r0, #0
; 343 : ((PPHYSICAL_BASIC_INFORMATION)lpOutBuf)->dwRegionSize = 0x00000000;
; 344 : ((PPHYSICAL_BASIC_INFORMATION)lpOutBuf)->dwType = PHYSICAL_UNKNOWN;
004ec 23a01008 movcs r1, #8
004f0 25880000 strcs r0, [r8]
004f4 25880004 strcs r0, [r8, #4]
; 631 : }
; 632 :
; 633 : return(TRUE);
004f8 21a00007 movcs r0, r7
004fc 25881008 strcs r1, [r8, #8]
00500 2a00017d bcs |$L14784|
00504 |$L14919|
; 336 : {
; 337 : SetLastError(ERROR_INVALID_PARAMETER);
00504 e59f1608 ldr r1, [pc, #0x608]
00508 e3a00057 mov r0, #0x57
0050c e1a0e00f mov lr, pc
00510 e12fff11 bx r1
; 620 : return(FALSE);
00514 e3a00000 mov r0, #0
00518 ea000177 b |$L14784|
0051c |$L14927|
; 345 :
; 346 : break;
; 347 :
; 348 : case IOCTL_HAL_GET_DEVICEID :
; 349 : if (!lpOutBuf || !lpBytesReturned || (nOutBufSize < sizeof(DEVICE_ID))) {
0051c e3580000 cmp r8, #0
00520 0a000029 beq |$L14930|
00524 e59d4054 ldr r4, [sp, #0x54]
00528 e3540000 cmp r4, #0
0052c 0a000026 beq |$L14930|
00530 e59d0050 ldr r0, [sp, #0x50]
00534 e3500014 cmp r0, #0x14
00538 3a000023 bcc |$L14930|
; 351 : return(FALSE);
; 352 : }
; 353 :
; 354 : {
; 355 : PDEVICE_ID pDeviceID = (PDEVICE_ID)lpOutBuf;
; 356 :
; 357 : #define ROUNDUP(len) ((len+3)&0xFFFFFFFC)
; 358 : #define REQ_SIZE (ROUNDUP(sizeof(DEVICE_ID)) + ROUNDUP(sizeof(HALOEMStr)) + ROUNDUP(KITL_MAX_DEV_NAMELEN))
; 359 :
; 360 : if (pDeviceID->dwSize >= REQ_SIZE) {
0053c e5980000 ldr r0, [r8]
00540 e3500034 cmp r0, #0x34
00544 3a000018 bcc |$L14936|
; 361 : // Tell them how much we actually used.
; 362 : pDeviceID->dwSize = REQ_SIZE;
; 363 :
; 364 : pDeviceID->dwPresetIDOffset = ROUNDUP(sizeof(DEVICE_ID));
; 365 : pDeviceID->dwPresetIDBytes = sizeof(HALOEMStr);
00548 e3a0100e mov r1, #0xE
0054c e3a00014 mov r0, #0x14
00550 e5881008 str r1, [r8, #8]
00554 e5880004 str r0, [r8, #4]
00558 e3a05034 mov r5, #0x34
; 366 : memcpy ((PBYTE)lpOutBuf + pDeviceID->dwPresetIDOffset, (PBYTE)HALOEMStr, sizeof(HALOEMStr));
0055c e59f1628 ldr r1, [pc, #0x628]
00560 e2880014 add r0, r8, #0x14
00564 e3a0200e mov r2, #0xE
00568 e5885000 str r5, [r8]
0056c eb000000 bl memcpy
; 367 :
; 368 : pDeviceID->dwPlatformIDOffset = pDeviceID->dwPresetIDOffset + ROUNDUP(pDeviceID->dwPresetIDBytes);
00570 e5980008 ldr r0, [r8, #8]
00574 e5983004 ldr r3, [r8, #4]
00578 e2801003 add r1, r0, #3
0057c e3c12003 bic r2, r1, #3
; 369 : pDeviceID->dwPlatformIDBytes = KITL_MAX_DEV_NAMELEN;
00580 e3a01010 mov r1, #0x10
00584 e0820003 add r0, r2, r3
00588 e5881010 str r1, [r8, #0x10]
0058c e588000c str r0, [r8, #0xC]
; 370 : CreateDeviceName(&pDriverGlobals->eth.EdbgAddr, (PBYTE)lpOutBuf + pDeviceID->dwPlatformIDOffset, "ARMINT");
00590 e0801008 add r1, r0, r8
00594 e59f25ec ldr r2, [pc, #0x5EC]
00598 e59f05e4 ldr r0, [pc, #0x5E4]
0059c eb000000 bl CreateDeviceName
; 371 : if (lpBytesReturned) {
; 372 : *lpBytesReturned = REQ_SIZE;
005a0 e5845000 str r5, [r4]
; 631 : }
; 632 :
; 633 : return(TRUE);
005a4 e1a00007 mov r0, r7
005a8 ea000153 b |$L14784|
005ac |$L14936|
; 373 : }
; 374 :
; 375 : } else {
; 376 : // Tell them how much we actually need.
; 377 : pDeviceID->dwSize = REQ_SIZE;
005ac e3a00034 mov r0, #0x34
; 378 : SetLastError (ERROR_INSUFFICIENT_BUFFER);
005b0 e59f155c ldr r1, [pc, #0x55C]
005b4 e5880000 str r0, [r8]
005b8 e3a0007a mov r0, #0x7A
005bc e1a0e00f mov lr, pc
005c0 e12fff11 bx r1
; 620 : return(FALSE);
005c4 e3a00000 mov r0, #0
005c8 ea00014b b |$L14784|
005cc |$L14930|
; 350 : SetLastError (ERROR_INVALID_PARAMETER);
005cc e59f1540 ldr r1, [pc, #0x540]
005d0 e3a00057 mov r0, #0x57
005d4 e1a0e00f mov lr, pc
005d8 e12fff11 bx r1
; 620 : return(FALSE);
005dc e3a00000 mov r0, #0
005e0 ea000145 b |$L14784|
005e4 |$L14950|
; 379 : return(FALSE);
; 380 : }
; 381 : }
; 382 : break;
; 383 :
; 384 : case IOCTL_HAL_ILTIMING:
; 385 : {
; 386 : PILTIMING_MESSAGE pITM = (PILTIMING_MESSAGE) lpInBuf;
; 387 :
; 388 : extern DWORD PerfCountSinceTick();
; 389 : extern DWORD PerfCountFreq();
; 390 :
; 391 : if ((nInBufSize != sizeof(ILTIMING_MESSAGE)) || !lpInBuf) {
005e4 e3550018 cmp r5, #0x18
005e8 1a000045 bne |$L14957|
005ec e3590000 cmp r9, #0
005f0 0a000043 beq |$L14957|
; 393 : return(FALSE);
; 394 : }
; 395 :
; 396 : switch (pITM->wMsg) {
005f4 e1d900b0 ldrh r0, [r9]
005f8 e1a01800 mov r1, r0, lsl #16
005fc e1a02821 mov r2, r1, lsr #16
00600 e3520001 cmp r2, #1
00604 0a00002c beq |$L14964|
00608 e3520002 cmp r2, #2
0060c 0a000023 beq |$L14966|
00610 e3520003 cmp r2, #3
00614 0a00000f beq |$L14968|
00618 e3520004 cmp r2, #4
0061c 0a000007 beq |$L14969|
; 431 : break;
; 432 :
; 433 : default:
; 434 : RETAILMSG(1, (TEXT("IOCTL_HAL_ILTIMING: BAD MESSAGE!\r\n")));
00620 e59f0558 ldr r0, [pc, #0x558]
00624 eb000000 bl NKDbgPrintfW
; 435 : SetLastError(ERROR_INVALID_PARAMETER);
00628 e59f14e4 ldr r1, [pc, #0x4E4]
0062c e3a00057 mov r0, #0x57
00630 e1a0e00f mov lr, pc
00634 e12fff11 bx r1
; 620 : return(FALSE);
00638 e3a00000 mov r0, #0
0063c ea00012e b |$L14784|
00640 |$L14969|
; 421 : #if 0
; 422 : RETAILMSG(1, (TEXT("ILTiming GetTime @ 0x%08X:%08X\r\n"),
; 423 : pITM->dwParam1, pITM->dwParam2));
; 424 : #endif /* 0/1 */
; 425 :
; 426 : break;
; 427 :
; 428 : case ILTIMING_MSG_GET_PFN:
; 429 : pITM->pfnPerfCountSinceTick = (PVOID)PerfCountSinceTick;
00640 e59f0534 ldr r0, [pc, #0x534]
00644 e5890014 str r0, [r9, #0x14]
; 430 : RETAILMSG (1, (TEXT("ILTiming GetPFN\r\n")));
00648 e59f0528 ldr r0, [pc, #0x528]
0064c eb000000 bl NKDbgPrintfW
; 631 : }
; 632 :
; 633 : return(TRUE);
00650 e1a00007 mov r0, r7
00654 ea000128 b |$L14784|
00658 |$L14968|
; 412 : break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -