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

📄 diskio.cod

📁 ARM对MMC卡的编程文档
💻 COD
📖 第 1 页 / 共 5 页
字号:

; 473  :     p++;

  00040	e2833001	 add       r3, r3, #1
  00044	e3520000	 cmp       r2, #0
  00048	8afffff1	 bhi       |$L41341|
  0004c		 |$L41342|

; 474  :     len--;
; 475  :     }
; 476  :     *pT = 0;    


  0004c	e3a00000	 mov       r0, #0
  00050	e1c400b0	 strh      r0, [r4]

; 477  : }   


  00054	e8bd4010	 ldmia     sp!, {r4, lr}
  00058	e12fff1e	 bx        lr
  0005c		 |$M41659|

			 ENDP  ; |FormatSBCS|

	EXPORT	|GetDiskInfo|
	EXPORT	|??_C@_1CI@NGPL@?$AAE?$AAn?$AAt?$AAe?$AAr?$AA?5?$AAG?$AAe?$AAt?$AAD?$AAs?$AAi?$AAk?$AAI?$AAn?$AAf?$AAo?$AA?$AN?$AA?6?$AA?$AA@| [ DATA ] ; `string'
	IMPORT	|memcpy|

  00000			 AREA	 |.text| { |GetDiskInfo| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$GetDiskInfo|, PDATA, SELECTION=5, ASSOC=|.text| { |GetDiskInfo| } ; comdat associative
|$T41670| DCD	|GetDiskInfo|
	DCD	0x40001101

  00000			 AREA	 |.rdata| { |??_C@_1CI@NGPL@?$AAE?$AAn?$AAt?$AAe?$AAr?$AA?5?$AAG?$AAe?$AAt?$AAD?$AAs?$AAi?$AAk?$AAI?$AAn?$AAf?$AAo?$AA?$AN?$AA?6?$AA?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1CI@NGPL@?$AAE?$AAn?$AAt?$AAe?$AAr?$AA?5?$AAG?$AAe?$AAt?$AAD?$AAs?$AAi?$AAk?$AAI?$AAn?$AAf?$AAo?$AA?$AN?$AA?6?$AA?$AA@| DCB "E"
	DCB	0x0, "n", 0x0, "t", 0x0, "e", 0x0, "r", 0x0, " ", 0x0, "G"
	DCB	0x0, "e", 0x0, "t", 0x0, "D", 0x0, "s", 0x0, "i", 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| { |GetDiskInfo| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |GetDiskInfo| PROC

; 489  : {

  00000	e92d4030	 stmdb     sp!, {r4, r5, lr}
  00004		 |$M41668|
  00004	e1a04000	 mov       r4, r0
  00008	e1a05001	 mov       r5, r1

; 490  : 	RETAILMSG(1, (TEXT("Enter GetDsikInfo\r\n")));

  0000c	e59f002c	 ldr       r0, [pc, #0x2C]
  00010	eb000000	 bl        NKDbgPrintfW

; 491  :     *pInfo = pDisk->d_DiskInfo;

  00014	e2841020	 add       r1, r4, #0x20
  00018	e3a02018	 mov       r2, #0x18
  0001c	e1a00005	 mov       r0, r5
  00020	eb000000	 bl        memcpy

; 492  :     pInfo->di_flags |= DISK_INFO_FLAG_PAGEABLE;

  00024	e5953014	 ldr       r3, [r5, #0x14]
  00028	e3c3000c	 bic       r0, r3, #0xC
  0002c	e3801008	 orr       r1, r0, #8

; 493  :     pInfo->di_flags &= ~DISK_INFO_FLAG_UNFORMATTED;

  00030	e5851014	 str       r1, [r5, #0x14]

; 494  : 

; 495  :     return ERROR_SUCCESS;

  00034	e3a00000	 mov       r0, #0

; 496  : }   


  00038	e8bd4030	 ldmia     sp!, {r4, r5, lr}
  0003c	e12fff1e	 bx        lr
  00040		 |$L41672|
  00040	00000000	 DCD       |??_C@_1CI@NGPL@?$AAE?$AAn?$AAt?$AAe?$AAr?$AA?5?$AAG?$AAe?$AAt?$AAD?$AAs?$AAi?$AAk?$AAI?$AAn?$AAf?$AAo?$AA?$AN?$AA?6?$AA?$AA@|
  00044		 |$M41669|

			 ENDP  ; |GetDiskInfo|

	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
|$T41682| DCD	|SetDiskInfo|
	DCD	0x40001a01
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |SetDiskInfo| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |SetDiskInfo| PROC

; 507  : {

  00000	e92d40f0	 stmdb     sp!, {r4 - r7, lr}
  00004		 |$M41680|
  00004	e1a06000	 mov       r6, r0
  00008	e1a05001	 mov       r5, r1

; 508  :     DWORD sectsize;
; 509  : 

; 510  : 
; 511  :     sectsize = pDisk->d_DiskInfo.di_bytes_per_sect;

  0000c	e5964024	 ldr       r4, [r6, #0x24]

; 512  :     pDisk->d_DiskInfo   = *pInfo;

  00010	e2860020	 add       r0, r6, #0x20
  00014	e3a02018	 mov       r2, #0x18
  00018	eb000000	 bl        memcpy

; 513  : 
; 514  :     

; 515  :     

; 516  :     

; 517  :     if (pInfo->di_bytes_per_sect != sectsize) {

  0001c	e5953004	 ldr       r3, [r5, #4]
  00020	e3a07000	 mov       r7, #0
  00024	e1530004	 cmp       r3, r4
  00028	0a000004	 beq       |$L41361|

; 518  :     if (pDisk->d_AlignBuf != NULL) {

  0002c	e5960040	 ldr       r0, [r6, #0x40]
  00030	e3500000	 cmp       r0, #0
  00034	0a000004	 beq       |$L41675|

; 519  :         LocalFree(pDisk->d_AlignBuf);

  00038	eb000000	 bl        LocalFree

; 520  :         pDisk->d_AlignBuf = NULL;

  0003c	e5867040	 str       r7, [r6, #0x40]
  00040		 |$L41361|

; 521  :     }
; 522  :     }
; 523  :     if (pDisk->d_AlignBuf == NULL) {

  00040	e5960040	 ldr       r0, [r6, #0x40]
  00044	e3500000	 cmp       r0, #0
  00048	1a000003	 bne       |$L41364|
  0004c		 |$L41675|

; 524  :     pDisk->d_AlignBuf = (PUSHORT)LocalAlloc(LPTR,
; 525  :                      pInfo->di_bytes_per_sect);

  0004c	e5951004	 ldr       r1, [r5, #4]
  00050	e3a00040	 mov       r0, #0x40
  00054	eb000000	 bl        LocalAlloc
  00058	e5860040	 str       r0, [r6, #0x40]
  0005c		 |$L41364|

; 526  :     }
; 527  :     return ERROR_SUCCESS;

  0005c	e1a00007	 mov       r0, r7

; 528  : }   


  00060	e8bd40f0	 ldmia     sp!, {r4 - r7, lr}
  00064	e12fff1e	 bx        lr
  00068		 |$M41681|

			 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
|$T41693| DCD	|DumpRegKey|
	DCD	0x40002a02
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |DumpRegKey| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |DumpRegKey| PROC

; 532  : {

  00000	e92d41f0	 stmdb     sp!, {r4 - r8, lr}
  00004	e24ddfca	 sub       sp, sp, #0xCA, 30
  00008		 |$M41691|
  00008	e1a05002	 mov       r5, r2

; 533  :     DWORD dwIndex=0;
; 534  :     WCHAR szValueName[MAX_PATH];
; 535  :     DWORD dwValueNameSize = MAX_PATH;
; 536  :     BYTE pValueData[256];
; 537  :     DWORD dwType;
; 538  :     DWORD dwValueDataSize = sizeof(pValueData);
; 539  :     DEBUGMSG( dwZone, (TEXT("Dumping registry for key %s \r\n"), szKey));
; 540  :     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         |$L41690|
  00058		 |$L41383|
  00058	e28d0010	 add       r0, sp, #0x10

; 541  :         if (REG_SZ == dwType) {
; 542  :             DEBUGMSG( dwZone, (TEXT("\t\t%s = %s\r\n"), szValueName, (LPWSTR)pValueData));
; 543  :         } else
; 544  :         if (REG_DWORD == dwType) {
; 545  :             DEBUGMSG( dwZone, (TEXT("\t\t%s = %08X\r\n"), szValueName, *(PDWORD)pValueData));
; 546  :         }
; 547  :         dwIndex++;
; 548  :         dwValueDataSize = sizeof(pValueData);

  0005c	e58d6010	 str       r6, [sp, #0x10]
  00060	e58d000c	 str       r0, [sp, #0xC]
  00064	e28d1020	 add       r1, sp, #0x20
  00068	e28d0018	 add       r0, sp, #0x18
  0006c	e58d1008	 str       r1, [sp, #8]
  00070	e2844001	 add       r4, r4, #1
  00074	e58d0004	 str       r0, [sp, #4]
  00078	e28d3014	 add       r3, sp, #0x14

; 549  :         dwValueNameSize = MAX_PATH;

  0007c	e58d7014	 str       r7, [sp, #0x14]
  00080	e28d2e12	 add       r2, sp, #0x12, 28
  00084	e58d8000	 str       r8, [sp]
  00088	e1a01004	 mov       r1, r4
  0008c	e1a00005	 mov       r0, r5
  00090	eb000000	 bl        RegEnumValueW
  00094		 |$L41690|

; 533  :     DWORD dwIndex=0;
; 534  :     WCHAR szValueName[MAX_PATH];
; 535  :     DWORD dwValueNameSize = MAX_PATH;
; 536  :     BYTE pValueData[256];
; 537  :     DWORD dwType;
; 538  :     DWORD dwValueDataSize = sizeof(pValueData);
; 539  :     DEBUGMSG( dwZone, (TEXT("Dumping registry for key %s \r\n"), szKey));
; 540  :     while(ERROR_SUCCESS == RegEnumValue( hKey, dwIndex, szValueName, &dwValueNameSize, NULL, &dwType, pValueData, &dwValueDataSize)) {

  00094	e3500000	 cmp       r0, #0
  00098	0affffee	 beq       |$L41383|

; 550  :     }
; 551  : }

  0009c	e28ddfca	 add       sp, sp, #0xCA, 30
  000a0	e8bd41f0	 ldmia     sp!, {r4 - r8, lr}
  000a4	e12fff1e	 bx        lr
  000a8		 |$M41692|

			 ENDP  ; |DumpRegKey|

	EXPORT	|OpenDriverKey|
	EXPORT	|??_C@_17KLID@?$AAK?$AAe?$AAy?$AA?$AA@| [ DATA ] ; `string'
	IMPORT	|RegCloseKey|
	IMPORT	|RegOpenKeyExW|
	IMPORT	|RegQueryValueExW|

  00000			 AREA	 |.text| { |OpenDriverKey| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$OpenDriverKey|, PDATA, SELECTION=5, ASSOC=|.text| { |OpenDriverKey| } ; comdat associative
|$T41701| DCD	|OpenDriverKey|
	DCD	0x40002b02

  00000			 AREA	 |.rdata| { |??_C@_17KLID@?$AAK?$AAe?$AAy?$AA?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_17KLID@?$AAK?$AAe?$AAy?$AA?$AA@| DCB "K", 0x0, "e", 0x0, "y", 0x0, 0x0
	DCB	0x0					; `string'
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |OpenDriverKey| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |OpenDriverKey| PROC

; 567  : {

  00000	e92d4010	 stmdb     sp!, {r4, lr}
  00004	e24ddf86	 sub       sp, sp, #0x86, 30
  00008		 |$M41699|

; 568  :     TCHAR DevKey[256];
; 569  :     HKEY hDevKey;
; 570  :     HKEY hActive;
; 571  :     DWORD ValType;
; 572  :     DWORD ValLen;
; 573  :     DWORD status;
; 574  : 
; 575  :     

; 576  :     

; 577  :     

; 578  :     status = RegOpenKeyEx(
; 579  :         HKEY_LOCAL_MACHINE,
; 580  :         ActiveKey,
; 581  :         0,
; 582  :         0,
; 583  :         &hActive);

  00008	e28d100c	 add       r1, sp, #0xC
  0000c	e58d1000	 str       r1, [sp]
  00010	e1a01000	 mov       r1, r0
  00014	e3a03000	 mov       r3, #0
  00018	e3a02000	 mov       r2, #0
  0001c	e3a0010a	 mov       r0, #0xA, 2
  00020	eb000000	 bl        RegOpenKeyExW

; 584  : 
; 585  :     
; 586  :     if (status) {

  00024	e3500000	 cmp       r0, #0

; 587  :     DEBUGMSG(ZONE_INIT|ZONE_ERROR,
; 588  :         (TEXT("MMCDISK:OpenDriverKey RegOpenKeyEx(HLM\\%s) returned %d!!!\r\n"),
; 589  :           ActiveKey, status));
; 590  :     return NULL;

  00028	13a00000	 movne     r0, #0
  0002c	1a00001a	 bne       |$L41392|

; 591  :     }
; 592  : #ifdef DEBUG
; 593  : 

; 594  : #endif
; 595  : 
; 596  :     hDevKey = NULL;
; 597  : 
; 598  :     ValLen = sizeof(DevKey);

  00030	e3a00c02	 mov       r0, #2, 24
  00034	e58d0010	 str       r0, [sp, #0x10]

; 599  :     status = RegQueryValueEx(
; 600  :         hActive,
; 601  :         DEVLOAD_DEVKEY_VALNAME,
; 602  :         NULL,
; 603  :         &ValType,
; 604  :         (PUCHAR)DevKey,
; 605  :         &ValLen);

  00038	e28d1010	 add       r1, sp, #0x10
  0003c	e28d0018	 add       r0, sp, #0x18
  00040	e58d1004	 str       r1, [sp, #4]
  00044	e58d0000	 str       r0, [sp]
  00048	e3a04000	 mov       r4, #0
  0004c	e59f1054	 ldr       r1, [pc, #0x54]
  00050	e28d3014	 add       r3, sp, #0x14
  00054	e59d000c	 ldr       r0, [sp, #0xC]
  00058	e3a02000	 mov       r2, #0
  0005c	e58d4008	 str       r4, [sp, #8]
  00060	eb000000	 bl        RegQueryValueExW

; 606  :     if (status != ERROR_SUCCESS) {

  00064	e3500000	 cmp       r0, #0
  00068	1a000008	 bne       |$odk_fail$41410|

; 607  :     DEBUGMSG(ZONE_INIT|ZONE_ERROR,
; 608  :         (TEXT("MMCDISK:OpenDriverKey - RegQueryValueEx(%s) returned %d\r\n"),
; 609  :           DEVLOAD_DEVKEY_VALNAME, status));
; 610  :     goto odk_fail;
; 611  :     }
; 612  : 
; 613  :     

; 614  :     

; 615  :     

; 616  :     status = RegOpenKeyEx(
; 617  :         HKEY_LOCAL_MACHINE,
; 618  :         DevKey,
; 619  :         0,
; 620  :         0,
; 621  :         &hDevKey);

  0006c	e28d0008	 add       r0, sp, #8
  00070	e58d0000	 str       r0, [sp]
  00074	e3a03000	 mov       r3, #0
  00078	e3a02000	 mov       r2, #0
  0007c	e28d1018	 add       r1, sp, #0x18
  00080	e3a0010a	 mov       r0, #0xA, 2
  00084	eb000000	 bl        RegOpenKeyExW

; 622  :     if (status) {

  00088	e3500000	 cmp       r0, #0

; 623  :     hDevKey = NULL;

  0008c	158d4008	 strne     r4, [sp, #8]
  00090		 |$odk_fail$41410|

; 624  :     DEBUGMSG(ZONE_INIT|ZONE_ERROR,
; 625  :         (TEXT("MMCDISK:OpenDriverKey RegOpenKeyEx(HLM\\%s) returned %d!!!\r\n"),
; 626  :           DevKey, status));
; 627  :     }
; 628  : 

; 629  : 
; 630  : odk_fail:
; 631  :     RegCloseKey(hActive);

  00090	e59d000c	 ldr       r0, [sp, #0xC]
  00094	eb000000	 bl        RegCloseKey

; 632  :     return hDevKey;

  00098	e59d0008	 ldr       r0, [sp, #8]
  0009c		 |$L41392|

; 633  : }   


  0009c	e28ddf86	 add       sp, sp, #0x86, 30
  000a0	e8bd4010	 ldmia     sp!, {r4, lr}
  000a4	e12fff1e	 bx        lr
  000a8		 |$L41703|
  000a8	00000000	 DCD       |??_C@_17KLID@?$AAK?$AAe?$AAy?$AA?$AA@|
  000ac		 |$M41700|

			 ENDP  ; |OpenDriverKey|

	EXPORT	|GetFolderName|
	EXPORT	|??_C@_1O@ONFM@?$AAF?$AAo?$AAl?$AAd?$AAe?$AAr?$AA?$AA@| [ DATA ] ; `string'

  00000			 AREA	 |.text| { |GetFolderName| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$GetFolderName|, PDATA, SELECTION=5, ASSOC=|.text| { |GetFolderName| } ; comdat associative
|$T41715| DCD	|GetFolderName|
	DCD	0x40002602

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -