📄 diskio.cod
字号:
; 379 :
; 380 : DEBUGMSG(ZONE_IO, (TEXT("MMCDISK:DoDiskIO entered\r\n")));
; 381 :
; 382 : pSgr->sr_status = ERROR_IO_PENDING;
00010 e3a00ff9 mov r0, #0xF9, 30
00014 e3800001 orr r0, r0, #1
00018 e587000c str r0, [r7, #0xC]
; 383 :
; 384 : if (pSgr->sr_num_sg > MAX_SG_BUF) {
0001c e5970008 ldr r0, [r7, #8]
00020 e3500008 cmp r0, #8
; 385 : status = ERROR_INVALID_PARAMETER;
00024 83a05057 movhi r5, #0x57
00028 8a000028 bhi |$ddi_exit$36777|
; 386 : goto ddi_exit;
; 387 : }
; 388 :
; 389 : if (pDisk->d_DiskCardState != STATE_OPENED) {
0002c e596001c ldr r0, [r6, #0x1C]
00030 e3500003 cmp r0, #3
00034 0a000002 beq |$L36778|
; 390 : status = GetDiskStateError(pDisk->d_DiskCardState);
00038 eb000000 bl GetDiskStateError
0003c e1a05000 mov r5, r0
; 391 : goto ddi_exit;
00040 ea000022 b |$ddi_exit$36777|
00044 |$L36778|
; 392 : }
; 393 :
; 394 :
; 395 : EnterCriticalSection(&(pDisk->d_DiskCardCrit));
00044 e2864004 add r4, r6, #4
00048 e1a00004 mov r0, r4
0004c eb000000 bl EnterCriticalSection
; 396 :
; 397 : if (pDisk->d_DiskCardState != STATE_OPENED) {
00050 e596001c ldr r0, [r6, #0x1C]
00054 e3500003 cmp r0, #3
00058 0a000001 beq |$L36779|
; 398 : status = GetDiskStateError(pDisk->d_DiskCardState);
0005c eb000000 bl GetDiskStateError
; 399 : goto ddi_leave;
00060 ea000017 b |$L37091|
00064 |$L36779|
; 400 : }
; 401 :
; 402 : if (!IsCardInserted(pDisk)) {
00064 e1a00006 mov r0, r6
00068 eb000000 bl IsCardInserted
0006c e31000ff tst r0, #0xFF
00070 1a000007 bne |$L36781|
; 403 : RETAILMSG(1,
; 404 : (TEXT("MMCDISK:DoDiskIO - CF Card no longer present!\r\n")));
00074 e59f0064 ldr r0, [pc, #0x64]
00078 eb000000 bl NKDbgPrintfW
; 405 : if (pDisk->d_DiskCardState != STATE_DEAD) {
0007c e596301c ldr r3, [r6, #0x1C]
; 406 : pDisk->d_DiskCardState = STATE_REMOVED;
; 407 : }
; 408 : status = DISK_REMOVED_ERROR;
00080 e3a05014 mov r5, #0x14
00084 e3530004 cmp r3, #4
00088 13a00005 movne r0, #5
0008c 1586001c strne r0, [r6, #0x1C]
; 409 : goto ddi_leave;
00090 ea00000c b |$ddi_leave$36780|
00094 |$L36781|
; 410 : }
; 411 :
; 412 :
; 413 :
; 414 :
; 415 :
; 416 : if ((Opcode == DISK_IOCTL_READ) || (Opcode == IOCTL_DISK_READ)){
00094 e3550002 cmp r5, #2
00098 0a000006 beq |$L36785|
0009c e59f0038 ldr r0, [pc, #0x38]
000a0 e1550000 cmp r5, r0
000a4 0a000003 beq |$L36785|
; 418 : } else {
; 419 : status = MMCWRITE(pDisk, pSgr);
000a8 e1a01007 mov r1, r7
000ac e1a00006 mov r0, r6
000b0 eb000000 bl MMCWRITE
000b4 ea000002 b |$L37091|
000b8 |$L36785|
; 417 : status = MMCREAD(pDisk, pSgr);
000b8 e1a01007 mov r1, r7
000bc e1a00006 mov r0, r6
000c0 eb000000 bl MMCREAD
000c4 |$L37091|
000c4 e1a05000 mov r5, r0
000c8 |$ddi_leave$36780|
; 420 : }
; 421 :
; 422 :
; 423 : ddi_leave:
; 424 : LeaveCriticalSection(&(pDisk->d_DiskCardCrit));
000c8 e1a00004 mov r0, r4
000cc eb000000 bl LeaveCriticalSection
000d0 |$ddi_exit$36777|
; 425 :
; 426 : ddi_exit:
; 427 : DEBUGMSG(ZONE_IO, (TEXT("MMCDISK:DoDiskIO done\r\n")));
; 428 : pSgr->sr_status = status;
000d0 e587500c str r5, [r7, #0xC]
; 429 : return status;
000d4 e1a00005 mov r0, r5
; 430 : }
000d8 e8bd80f0 ldmia sp!, {r4 - r7, pc}
000dc |$L37096|
000dc 00075c08 DCD 0x75c08
000e0 00000000 DCD |??_C@_1GA@LHAD@?$AAM?$AAM?$AAC?$AAD?$AAI?$AAS?$AAK?$AA?3?$AAD?$AAo?$AAD?$AAi?$AAs?$AAk?$AAI?$AAO?$AA?5?$AA?9?$AA?5?$AAC@|
000e4 |$M37093|
ENDP ; |DoDiskIO|
EXPORT |FormatSBCS|
00000 AREA |.text| { |FormatSBCS| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$FormatSBCS|, PDATA, SELECTION=5, ASSOC=|.text| { |FormatSBCS| } ; comdat associative
|$T37107| DCD |FormatSBCS|
DCD 0x40001601
; Function compile flags: /Ogsy
00000 AREA |.text| { |FormatSBCS| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |FormatSBCS| PROC
; 440 : {
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M37105|
00004 e1a03000 mov r3, r0
00008 e1a04001 mov r4, r1
; 441 : while (len) {
0000c e3520000 cmp r2, #0
00010 0a00000d beq |$L36798|
00014 |$L36797|
; 442 : if ((*p > 0x20) && (*p < 0x7F)) {
00014 e5d31000 ldrb r1, [r3]
00018 e1a00001 mov r0, r1
0001c e3500020 cmp r0, #0x20
00020 9a000002 bls |$L36799|
00024 e350007f cmp r0, #0x7F
; 443 : *pT = (TCHAR)*p;
00028 e20100ff and r0, r1, #0xFF
0002c 3a000000 bcc |$L37104|
00030 |$L36799|
; 444 : } else {
; 445 : *pT = (TCHAR)'.';
00030 e3a0002e mov r0, #0x2E
00034 |$L37104|
; 441 : while (len) {
00034 e2422001 sub r2, r2, #1
; 444 : } else {
; 445 : *pT = (TCHAR)'.';
00038 e1c400b0 strh r0, [r4]
; 446 : }
; 447 : pT++;
0003c e2844002 add r4, r4, #2
; 448 : p++;
00040 e2833001 add r3, r3, #1
00044 e3520000 cmp r2, #0
00048 8afffff1 bhi |$L36797|
0004c |$L36798|
; 449 : len--;
; 450 : }
; 451 : *pT = 0;
0004c e3a00000 mov r0, #0
00050 e1c400b0 strh r0, [r4]
; 452 : }
00054 e8bd8010 ldmia sp!, {r4, pc}
00058 |$M37106|
ENDP ; |FormatSBCS|
EXPORT |GetDiskInfo|
IMPORT |memcpy|
00000 AREA |.text| { |GetDiskInfo| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$GetDiskInfo|, PDATA, SELECTION=5, ASSOC=|.text| { |GetDiskInfo| } ; comdat associative
|$T37117| DCD |GetDiskInfo|
DCD 0x40000c01
; Function compile flags: /Ogsy
00000 AREA |.text| { |GetDiskInfo| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |GetDiskInfo| PROC
; 464 : {
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M37115|
00004 e1a04001 mov r4, r1
; 465 :
; 466 : *pInfo = pDisk->d_DiskInfo;
00008 e2801020 add r1, r0, #0x20
0000c e3a02018 mov r2, #0x18
00010 e1a00004 mov r0, r4
00014 eb000000 bl memcpy
; 467 : pInfo->di_flags |= DISK_INFO_FLAG_PAGEABLE;
00018 e5943014 ldr r3, [r4, #0x14]
0001c e3c3000c bic r0, r3, #0xC
00020 e3801008 orr r1, r0, #8
; 468 : pInfo->di_flags &= ~DISK_INFO_FLAG_UNFORMATTED;
00024 e5841014 str r1, [r4, #0x14]
; 469 :
; 470 : return ERROR_SUCCESS;
00028 e3a00000 mov r0, #0
; 471 : }
0002c e8bd8010 ldmia sp!, {r4, pc}
00030 |$M37116|
ENDP ; |GetDiskInfo|
EXPORT |??_C@_1CI@BBFB@?$AAE?$AAn?$AAt?$AAe?$AAr?$AA?5?$AAS?$AAe?$AAt?$AAD?$AAi?$AAs?$AAk?$AAI?$AAn?$AAf?$AAo?$AA?$AN?$AA?6?$AA?$AA@| [ DATA ] ; `string'
EXPORT |SetDiskInfo|
IMPORT |LocalAlloc|
00000 AREA |.text| { |SetDiskInfo| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$SetDiskInfo|, PDATA, SELECTION=5, ASSOC=|.text| { |SetDiskInfo| } ; comdat associative
|$T37128| DCD |SetDiskInfo|
DCD 0x40001d01
00000 AREA |.rdata| { |??_C@_1CI@BBFB@?$AAE?$AAn?$AAt?$AAe?$AAr?$AA?5?$AAS?$AAe?$AAt?$AAD?$AAi?$AAs?$AAk?$AAI?$AAn?$AAf?$AAo?$AA?$AN?$AA?6?$AA?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1CI@BBFB@?$AAE?$AAn?$AAt?$AAe?$AAr?$AA?5?$AAS?$AAe?$AAt?$AAD?$AAi?$AAs?$AAk?$AAI?$AAn?$AAf?$AAo?$AA?$AN?$AA?6?$AA?$AA@| DCB "E"
DCB 0x0, "n", 0x0, "t", 0x0, "e", 0x0, "r", 0x0, " ", 0x0, "S"
DCB 0x0, "e", 0x0, "t", 0x0, "D", 0x0, "i", 0x0, "s", 0x0, "k"
DCB 0x0, "I", 0x0, "n", 0x0, "f", 0x0, "o", 0x0, 0xd, 0x0, 0xa
DCB 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |SetDiskInfo| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |SetDiskInfo| PROC
; 482 : {
00000 e92d40f0 stmdb sp!, {r4 - r7, lr}
00004 |$M37126|
00004 e1a06000 mov r6, r0
00008 e1a05001 mov r5, r1
; 483 : DWORD sectsize;
; 484 : RETAILMSG(1, (TEXT("Enter SetDiskInfo\r\n")));
0000c e59f005c ldr r0, [pc, #0x5C]
00010 eb000000 bl NKDbgPrintfW
; 485 :
; 486 : sectsize = pDisk->d_DiskInfo.di_bytes_per_sect;
00014 e5964024 ldr r4, [r6, #0x24]
; 487 : pDisk->d_DiskInfo = *pInfo;
00018 e2860020 add r0, r6, #0x20
0001c e3a02018 mov r2, #0x18
00020 e1a01005 mov r1, r5
00024 eb000000 bl memcpy
; 488 :
; 489 :
; 490 :
; 491 :
; 492 : if (pInfo->di_bytes_per_sect != sectsize) {
00028 e5953004 ldr r3, [r5, #4]
0002c e3a07000 mov r7, #0
00030 e1530004 cmp r3, r4
00034 0a000004 beq |$L36817|
; 493 : if (pDisk->d_AlignBuf != NULL) {
00038 e5960040 ldr r0, [r6, #0x40]
0003c e3500000 cmp r0, #0
00040 0a000004 beq |$L37121|
; 494 : LocalFree(pDisk->d_AlignBuf);
00044 eb000000 bl LocalFree
; 495 : pDisk->d_AlignBuf = NULL;
00048 e5867040 str r7, [r6, #0x40]
0004c |$L36817|
; 496 : }
; 497 : }
; 498 : if (pDisk->d_AlignBuf == NULL) {
0004c e5960040 ldr r0, [r6, #0x40]
00050 e3500000 cmp r0, #0
00054 1a000003 bne |$L36820|
00058 |$L37121|
; 499 : pDisk->d_AlignBuf = (PUSHORT)LocalAlloc(LPTR,
; 500 : pInfo->di_bytes_per_sect);
00058 e5951004 ldr r1, [r5, #4]
0005c e3a00040 mov r0, #0x40
00060 eb000000 bl LocalAlloc
00064 e5860040 str r0, [r6, #0x40]
00068 |$L36820|
; 501 : }
; 502 : return ERROR_SUCCESS;
00068 e1a00007 mov r0, r7
; 503 : }
0006c e8bd80f0 ldmia sp!, {r4 - r7, pc}
00070 |$L37130|
00070 00000000 DCD |??_C@_1CI@BBFB@?$AAE?$AAn?$AAt?$AAe?$AAr?$AA?5?$AAS?$AAe?$AAt?$AAD?$AAi?$AAs?$AAk?$AAI?$AAn?$AAf?$AAo?$AA?$AN?$AA?6?$AA?$AA@|
00074 |$M37127|
ENDP ; |SetDiskInfo|
EXPORT |DumpRegKey|
IMPORT |RegEnumValueW|
00000 AREA |.text| { |DumpRegKey| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$DumpRegKey|, PDATA, SELECTION=5, ASSOC=|.text| { |DumpRegKey| } ; comdat associative
|$T37140| DCD |DumpRegKey|
DCD 0x40002902
; Function compile flags: /Ogsy
00000 AREA |.text| { |DumpRegKey| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |DumpRegKey| PROC
; 507 : {
00000 e92d41f0 stmdb sp!, {r4 - r8, lr}
00004 e24ddfca sub sp, sp, #0xCA, 30
00008 |$M37138|
00008 e1a05002 mov r5, r2
; 508 : DWORD dwIndex=0;
; 509 : WCHAR szValueName[MAX_PATH];
; 510 : DWORD dwValueNameSize = MAX_PATH;
; 511 : BYTE pValueData[256];
; 512 : DWORD dwType;
; 513 : DWORD dwValueDataSize = sizeof(pValueData);
; 514 : DEBUGMSG( dwZone, (TEXT("Dumping registry for key %s \r\n"), szKey));
; 515 : while(ERROR_SUCCESS == RegEnumValue( hKey, dwIndex, szValueName, &dwValueNameSize, NULL, &dwType, pValueData, &dwValueDataSize)) {
0000c e28d0010 add r0, sp, #0x10
00010 e58d000c str r0, [sp, #0xC]
00014 e28d1020 add r1, sp, #0x20
00018 e28d0018 add r0, sp, #0x18
0001c e58d1008 str r1, [sp, #8]
00020 e3a08000 mov r8, #0
00024 e58d0004 str r0, [sp, #4]
00028 e3a07f41 mov r7, #0x41, 30
0002c e58d8000 str r8, [sp]
00030 e3a06c01 mov r6, #1, 24
00034 e58d7014 str r7, [sp, #0x14]
00038 e28d3014 add r3, sp, #0x14
0003c e58d6010 str r6, [sp, #0x10]
00040 e28d2e12 add r2, sp, #0x12, 28
00044 e3a01000 mov r1, #0
00048 e1a00005 mov r0, r5
0004c e1a04008 mov r4, r8
00050 eb000000 bl RegEnumValueW
00054 ea00000e b |$L37137|
00058 |$L36839|
00058 e28d0010 add r0, sp, #0x10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -