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

📄 diskio.cod

📁 ARM对MMC卡的编程文档
💻 COD
📖 第 1 页 / 共 5 页
字号:
; 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 + -