📄 diskio.cod
字号:
00000 AREA |.rdata| { |??_C@_1O@ONFM@?$AAF?$AAo?$AAl?$AAd?$AAe?$AAr?$AA?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1O@ONFM@?$AAF?$AAo?$AAl?$AAd?$AAe?$AAr?$AA?$AA@| DCB "F", 0x0, "o", 0x0
DCB "l", 0x0, "d", 0x0, "e", 0x0, "r", 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |GetFolderName| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |GetFolderName| PROC
; 646 : {
00000 e92d40f0 stmdb sp!, {r4 - r7, lr}
00004 e24dd00c sub sp, sp, #0xC
00008 |$M41713|
00008 e1a05001 mov r5, r1
0000c e1a04002 mov r4, r2
00010 e1a07003 mov r7, r3
; 647 : HKEY DriverKey;
; 648 : DWORD ValType;
; 649 : DWORD status;
; 650 :
; 651 : DriverKey = OpenDriverKey(pDisk->d_ActivePath);
00014 e5900044 ldr r0, [r0, #0x44]
00018 eb000000 bl OpenDriverKey
0001c e1b06000 movs r6, r0
; 652 : if (DriverKey) {
00020 0a000016 beq |$L41428|
; 653 : *pcBytes = cBytes;
; 654 : status = RegQueryValueEx(
; 655 : DriverKey,
; 656 : TEXT("Folder"),
; 657 : NULL,
; 658 : &ValType,
; 659 : (PUCHAR)FolderName,
; 660 : pcBytes);
00024 e59f1068 ldr r1, [pc, #0x68]
00028 e28d3008 add r3, sp, #8
0002c e3a02000 mov r2, #0
00030 e5874000 str r4, [r7]
00034 e1a00006 mov r0, r6
00038 e58d7004 str r7, [sp, #4]
0003c e58d5000 str r5, [sp]
00040 eb000000 bl RegQueryValueExW
00044 e1b04000 movs r4, r0
00048 e3a05000 mov r5, #0
; 661 : if (status != ERROR_SUCCESS) {
; 662 : DEBUGMSG(ZONE_INIT|ZONE_ERROR,
; 663 : (TEXT("MMCDISK:GetFolderName - RegQueryValueEx(Folder) returned %d\r\n"),
; 664 : status));
; 665 : *pcBytes = 0;
0004c 15875000 strne r5, [r7]
; 666 : } else {
; 667 : DEBUGMSG(ZONE_INIT|ZONE_ERROR,
; 668 : (TEXT("MMCDISK:GetFolderName - FolderName = %s, length = %d\r\n"),
; 669 : FolderName, *pcBytes));
; 670 : *pcBytes += sizeof(WCHAR);
00050 05970000 ldreq r0, [r7]
00054 02801002 addeq r1, r0, #2
; 671 : }
; 672 : RegCloseKey(DriverKey);
00058 e1a00006 mov r0, r6
0005c 05871000 streq r1, [r7]
00060 eb000000 bl RegCloseKey
; 673 : if (status || (*pcBytes == 0)) {
00064 e3540000 cmp r4, #0
00068 1a000005 bne |$L41424|
0006c e5970000 ldr r0, [r7]
00070 e3500000 cmp r0, #0
00074 0a000002 beq |$L41424|
; 674 : return FALSE;
; 675 : }
; 676 : return TRUE;
00078 e3a05001 mov r5, #1
0007c ea000000 b |$L41424|
00080 |$L41428|
; 677 : }
; 678 : return FALSE;
00080 e3a05000 mov r5, #0
00084 |$L41424|
; 674 : return FALSE;
; 675 : }
; 676 : return TRUE;
00084 e1a00005 mov r0, r5
; 679 : }
00088 e28dd00c add sp, sp, #0xC
0008c e8bd40f0 ldmia sp!, {r4 - r7, lr}
00090 e12fff1e bx lr
00094 |$L41717|
00094 00000000 DCD |??_C@_1O@ONFM@?$AAF?$AAo?$AAl?$AAd?$AAe?$AAr?$AA?$AA@|
00098 |$M41714|
ENDP ; |GetFolderName|
EXPORT |GetStorageID|
EXPORT |??_C@_1CM@FFGP@?$AAE?$AAn?$AAt?$AAe?$AAr?$AA?5?$AAG?$AAe?$AAt?$AAS?$AAt?$AAo?$AAr?$AAa?$AAg?$AAe?$AAI?$AAD?$AA?5?$AA?$AN@| [ DATA ] ; `string'
IMPORT |strlen|
IMPORT |GetLastError|
IMPORT |SetLastError|
IMPORT |mmc_read_serial|
00000 AREA |.text| { |GetStorageID| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.xdata$$GetStorageID|, DATA, SELECTION=5, ASSOC=|.text| { |GetStorageID| } ; comdat associative
|$T41746| DCD 0x1
DCD |$L41729|
DCD |$L41730|
DCD |$L41725|
DCD |$L41726|
00000 AREA |.text| { |GetStorageID| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$GetStorageID|, PDATA, SELECTION=5, ASSOC=|.text| { |GetStorageID| } ; comdat associative
|$T41747| DCD |GetStorageID|
DCD 0xc0005005
00000 AREA |.text| { |GetStorageID| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$GetStorageID|, PDATA, SELECTION=5, ASSOC=|.text| { |GetStorageID| } ; comdat associative
|$T41749| DCD |$L41725|
DCD 0x40000300
00000 AREA |.rdata| { |??_C@_1CM@FFGP@?$AAE?$AAn?$AAt?$AAe?$AAr?$AA?5?$AAG?$AAe?$AAt?$AAS?$AAt?$AAo?$AAr?$AAa?$AAg?$AAe?$AAI?$AAD?$AA?5?$AA?$AN@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1CM@FFGP@?$AAE?$AAn?$AAt?$AAe?$AAr?$AA?5?$AAG?$AAe?$AAt?$AAS?$AAt?$AAo?$AAr?$AAa?$AAg?$AAe?$AAI?$AAD?$AA?5?$AA?$AN@| DCB "E"
DCB 0x0, "n", 0x0, "t", 0x0, "e", 0x0, "r", 0x0, " ", 0x0, "G"
DCB 0x0, "e", 0x0, "t", 0x0, "S", 0x0, "t", 0x0, "o", 0x0, "r"
DCB 0x0, "a", 0x0, "g", 0x0, "e", 0x0, "I", 0x0, "D", 0x0, " "
DCB 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |GetStorageID| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 00000000 DCD |__C_specific_handler|
00004 00000000 DCD |$T41746|
00008 |GetStorageID| PROC
; 688 : {
00008 e1a0c00d mov r12, sp
0000c e92d000e stmdb sp!, {r1 - r3}
00010 e92d5ff0 stmdb sp!, {r4 - r12, lr}
00014 e28db028 add r11, sp, #0x28
00018 e24dd044 sub sp, sp, #0x44
0001c |$L41744|
0001c e1a07001 mov r7, r1
00020 e1a08002 mov r8, r2
00024 e1a09003 mov r9, r3
; 689 :
; 690 : DRV_GEOMETRY_DESC * pmy_geom_desc;
; 691 : DRV_GEOMETRY_DESC my_geom_desc;
; 692 : PCHAR pDstOffset;
; 693 : WORD str_length;
; 694 : RETAILMSG(1, (TEXT("Enter GetStorageID \r\n")));
00028 e59f0120 ldr r0, [pc, #0x120]
0002c eb000000 bl NKDbgPrintfW
; 695 : if (cBytes < sizeof(*psid)) {
00030 e3580010 cmp r8, #0x10
00034 2a000003 bcs |$L41453|
; 696 : SetLastError(ERROR_INVALID_PARAMETER);
00038 e3a00057 mov r0, #0x57
0003c eb000000 bl SetLastError
; 697 : return FALSE;
00040 e3a0a000 mov r10, #0
00044 ea00003c b |$L41447|
00048 |$L41453|
00048 |$L41729|
; 698 : }
; 699 :
; 700 :
; 701 : __try {
; 702 : psid->dwSize = sizeof(*psid);
00048 e3a00010 mov r0, #0x10
0004c e5870000 str r0, [r7]
; 703 : psid->dwFlags = 0;
00050 e3a06000 mov r6, #0
00054 e5876004 str r6, [r7, #4]
; 704 : psid->dwManufactureIDOffset = 0;
00058 e5876008 str r6, [r7, #8]
; 705 : pDstOffset = (PCHAR)(psid + 1);
0005c e2875010 add r5, r7, #0x10
00060 e50b506c str r5, [r11, #-0x6C]
; 706 : psid->dwSerialNumOffset = pDstOffset - (PCHAR) psid;
00064 e0450007 sub r0, r5, r7
00068 e587000c str r0, [r7, #0xC]
0006c |$L41730|
0006c e51ba068 ldr r10, [r11, #-0x68]
00070 ea000008 b |$L41731|
00074 |$L41726|
; 708 : SetLastError(ERROR_INVALID_PARAMETER);
00074 e3a00057 mov r0, #0x57
00078 eb000000 bl SetLastError
; 709 : return FALSE;
0007c e3a06000 mov r6, #0
00080 e1a0a006 mov r10, r6
00084 e59b9008 ldr r9, [r11, #8]
00088 e59b8004 ldr r8, [r11, #4]
0008c e59b7000 ldr r7, [r11]
00090 e51b506c ldr r5, [r11, #-0x6C]
00094 ea000028 b |$L41447|
00098 |$L41731|
; 710 : }
; 711 :
; 712 : pmy_geom_desc=&my_geom_desc;
; 713 :
; 714 :
; 715 : #if (USE_SPI || USE_SPI_EMULATION)
; 716 :
; 717 : if (spi_read_serial(0, pmy_geom_desc) == NO) {
; 718 : return FALSE;
; 719 : }
; 720 :
; 721 : #else
; 722 :
; 723 : if (mmc_read_serial(0, pmy_geom_desc) == NO) {
00098 e3e01063 mvn r1, #0x63
0009c e08b1001 add r1, r11, r1
000a0 e3a00000 mov r0, #0
000a4 eb000000 bl mmc_read_serial
000a8 e3500000 cmp r0, #0
; 724 : return FALSE;
000ac 0a000021 beq |$L41743|
; 725 : }
; 726 :
; 727 :
; 728 : #endif
; 729 :
; 730 :
; 731 :
; 732 :
; 733 :
; 734 :
; 735 :
; 736 : psid->dwFlags = MANUFACTUREID_INVALID;
000b0 e3a0a001 mov r10, #1
000b4 e587a004 str r10, [r7, #4]
; 737 :
; 738 : str_length=strlen(&my_geom_desc.serialNum[0]);
000b8 e3e00057 mvn r0, #0x57
000bc e08b0000 add r0, r11, r0
000c0 eb000000 bl strlen
000c4 e1a01800 mov r1, r0, lsl #16
000c8 e1a02821 mov r2, r1, lsr #16
; 739 :
; 740 :
; 741 : if (cBytes == sizeof(*psid)) {
000cc e3580010 cmp r8, #0x10
000d0 1a000007 bne |$L41458|
; 742 : psid->dwSize = cBytes + str_length + 1;
000d4 e1a00802 mov r0, r2, lsl #16
000d8 e1a01820 mov r1, r0, lsr #16
000dc e2812011 add r2, r1, #0x11
000e0 e5872000 str r2, [r7]
; 743 : SetLastError(ERROR_INSUFFICIENT_BUFFER);
000e4 e3a0007a mov r0, #0x7A
000e8 eb000000 bl SetLastError
; 754 :
; 755 : return (GetLastError() == ERROR_SUCCESS);
000ec e1a0a006 mov r10, r6
000f0 ea000011 b |$L41447|
000f4 |$L41458|
; 744 : return FALSE;
; 745 : }
; 746 :
; 747 : memcpy(pDstOffset, &my_geom_desc.serialNum[0], str_length + 1);
000f4 e1a04802 mov r4, r2, lsl #16
000f8 e1a00824 mov r0, r4, lsr #16
000fc e2802001 add r2, r0, #1
00100 e3e01057 mvn r1, #0x57
00104 e08b1001 add r1, r11, r1
00108 e1a00005 mov r0, r5
0010c eb000000 bl memcpy
; 748 :
; 749 : pDstOffset += (str_length + 1);
00110 e0853824 add r3, r5, r4, lsr #16
00114 e2830001 add r0, r3, #1
; 750 :
; 751 : psid->dwSize = pDstOffset - (PCHAR)psid;
00118 e0401007 sub r1, r0, r7
0011c e5871000 str r1, [r7]
; 752 :
; 753 : *pcBytes = min(psid->dwSize, cBytes);
00120 e1510008 cmp r1, r8
00124 21a01008 movcs r1, r8
00128 e5891000 str r1, [r9]
; 754 :
; 755 : return (GetLastError() == ERROR_SUCCESS);
0012c eb000000 bl GetLastError
00130 e3500000 cmp r0, #0
00134 0a000000 beq |$L41447|
00138 |$L41743|
00138 e1a0a006 mov r10, r6
0013c |$L41447|
; 697 : return FALSE;
0013c e1a0000a mov r0, r10
; 756 : }
00140 e91b6ff0 ldmdb r11, {r4 - r11, sp, lr}
00144 e12fff1e bx lr
ENDP ; |GetStorageID|
00148 |$L41728|
00148 |$L41745|
00148 |$L41725|
; 707 : } __except (EXCEPTION_EXECUTE_HANDLER) {
00148 e3a00001 mov r0, #1
0014c |$L41727|
0014c e1a0f00e mov pc, lr
00150 |$L41753|
00150 00000000 DCD |??_C@_1CM@FFGP@?$AAE?$AAn?$AAt?$AAe?$AAr?$AA?5?$AAG?$AAe?$AAt?$AAS?$AAt?$AAo?$AAr?$AAa?$AAg?$AAe?$AAI?$AAD?$AA?5?$AA?$AN@|
00154 |$L41748|
EXPORT |InitDisk|
EXPORT |??_C@_1CI@GLOK@?$AAI?$AAn?$AAi?$AAt?$AAD?$AAi?$AAs?$AAk?$AA?$CI?$AA?$CJ?$AA?5?$AAe?$AAn?$AAt?$AAe?$AAr?$AA?5?$AA?$AN?$AA?6?$AA?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_1DE@JBKA@?$AAm?$AAm?$AAc?$AA_?$AAi?$AAn?$AAi?$AAt?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt?$AAu?$AAr?$AAn?$AA?5?$AAF?$AAA@| [ DATA ] ; `string'
EXPORT |??_C@_1EA@LMJJ@?$AAm?$AAm?$AAc?$AA_?$AAd?$AAr?$AAi?$AAv?$AAe?$AA_?$AAo?$AAp?$AAe?$AAn?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt@| [ DATA ] ; `string'
EXPORT |??_C@_1BI@IDAK@?$AAs?$AAe?$AAt?$AA?5?$AAc?$AAo?$AAl?$AAc?$AAk?$AA?$AN?$AA?6?$AA?$AA@| [ DATA ] ; `string'
IMPORT |setMMCClockRate|
IMPORT |setMMCmastclock|
IMPORT |mmc_init|
IMPORT |mmc_drive_open|
IMPORT |controller_s|
00000 AREA |.text| { |InitDisk| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$InitDisk|, PDATA, SELECTION=5, ASSOC=|.text| { |InitDisk| } ; comdat associative
|$T41762| DCD |InitDisk|
DCD 0x40003701
00000 AREA |.rdata| { |??_C@_1CI@GLOK@?$AAI?$AAn?$AAi?$AAt?$AAD?$AAi?$AAs?$AAk?$AA?$CI?$AA?$CJ?$AA?5?$AAe?$AAn?$AAt?$AAe?$AAr?$AA?5?$AA?$AN?$AA?6?$AA?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1CI@GLOK@?$AAI?$AAn?$AAi?$AAt?$AAD?$AAi?$AAs?$AAk?$AA?$CI?$AA?$CJ?$AA?5?$AAe?$AAn?$AAt?$AAe?$AAr?$AA?5?$AA?$AN?$AA?6?$AA?$AA@| DCB "I"
DCB 0x0, "n", 0x0, "i", 0x0, "t", 0x0, "D", 0x0, "i", 0x0, "s"
DCB 0x0, "k", 0x0, "(", 0x0, ")", 0x0, " ", 0x0, "e", 0x0, "n"
DCB 0x0, "t", 0x0, "e", 0x0, "r", 0x0, " ", 0x0, 0xd, 0x0, 0xa
DCB 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1DE@JBKA@?$AAm?$AAm?$AAc?$AA_?$AAi?$AAn?$AAi?$AAt?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt?$AAu?$AAr?$AAn?$AA?5?$AAF?$AAA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1DE@JBKA@?$AAm?$AAm?$AAc?$AA_?$AAi?$AAn?$AAi?$AAt?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt?$AAu?$AAr?$AAn?$AA?5?$AAF?$AAA@| DCB "m"
DCB 0x0, "m", 0x0, "c", 0x0, "_", 0x0, "i", 0x0, "n", 0x0, "i"
DCB 0x0, "t", 0x0, "(", 0x0, ")", 0x0, " ", 0x0, "r", 0x0, "e"
DCB 0x0, "t", 0x0, "u", 0x0, "r", 0x0, "n", 0x0, " ", 0x0, "F"
DCB 0x0, "A", 0x0, "L", 0x0, "S", 0x0, "E", 0x0, 0xd, 0x0, 0xa
DCB 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1EA@LMJJ@?$AAm?$AAm?$AAc?$AA_?$AAd?$AAr?$AAi?$AAv?$AAe?$AA_?$AAo?$AAp?$AAe?$AAn?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1EA@LMJJ@?$AAm?$AAm?$AAc?$AA_?$AAd?$AAr?$AAi?$AAv?$AAe?$AA_?$AAo?$AAp?$AAe?$AAn?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt@| DCB "m"
DCB 0x0, "m", 0x0, "c", 0x0, "_", 0x0, "d", 0x0, "r", 0x0, "i"
DCB 0x0, "v", 0x0, "e", 0x0, "_", 0x0, "o", 0x0, "p", 0x0, "e"
DCB 0x0, "n", 0x0, "(", 0x0, ")", 0x0, " ", 0x0, "r", 0x0, "e"
DCB 0x0, "t", 0x0, "u", 0x0, "r", 0x0, "n", 0x0, " ", 0x0, "F"
DCB 0x0, "A", 0x0, "L", 0x0, "S", 0x0, "E", 0x0, 0xd, 0x0, 0xa
DCB 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1BI@IDAK@?$AAs?$AAe?$AAt?$AA?5?$AAc?$AAo?$AAl?$AAc?$AAk?$AA?$AN?$AA?6?$AA?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1BI@IDAK@?$AAs?$AAe?$AAt?$AA?5?$AAc?$AAo?$AAl?$AAc?$AAk?$AA?$AN?$AA?6?$AA?$AA@| DCB "s"
DCB 0x0, "e", 0x0, "t", 0x0, " ", 0x0, "c", 0x0, "o", 0x0, "l"
DCB 0x0, "c", 0x0, "k", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |InitDisk| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |InitDisk| PROC
; 764 : {
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 |$M41760|
00004 e1a05000 mov r5, r0
; 765 : #if (USE_MEMMODE)
; 766 :
; 767 : ULONG virt_address;
; 768 :
; 769 : #endif
; 770 :
; 771 :
; 772 : PDEVICE_CONTROLLER pc;
; 773 :
; 774 : pc = &controller_s[0];
; 775 :
; 776 : RETAILMSG(1, (TEXT("InitDisk() enter \r\
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -