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

📄 system.cod

📁 ARM对MMC卡的编程文档
💻 COD
📖 第 1 页 / 共 4 页
字号:
  00040	eb000000	 bl        EnterCriticalSection

; 321  :     if (pDisk->d_DiskCardState == STATE_CLOSED) {

  00044	e595301c	 ldr       r3, [r5, #0x1C]
  00048	e3530002	 cmp       r3, #2

; 322  :     pDisk->d_DiskCardState = STATE_OPENED;

  0004c	03a00003	 moveq     r0, #3
  00050	0585001c	 streq     r0, [r5, #0x1C]

; 323  :     }
; 324  :     rett = (DWORD)pDisk;
; 325  :     pDisk->d_OpenCount++;

  00054	e595003c	 ldr       r0, [r5, #0x3C]
  00058	e2801001	 add       r1, r0, #1

; 326  :     LeaveCriticalSection(&(pDisk->d_DiskCardCrit));

  0005c	e1a00004	 mov       r0, r4
  00060	e585103c	 str       r1, [r5, #0x3C]
  00064	eb000000	 bl        LeaveCriticalSection
  00068		 |$L36988|

; 310  :     DEBUGMSG(ZONE_IO, (TEXT("MmcDisk DSK_Open - Passed invalid disk handle\r\n")));
; 311  :     return rett;

  00068	e1a00005	 mov       r0, r5

; 327  : 
; 328  :     return rett;
; 329  : }   


  0006c	e8bd4030	 ldmia     sp!, {r4, r5, lr}
  00070	e12fff1e	 bx        lr
  00074		 |$M37248|

			 ENDP  ; |DSK_Open|

	EXPORT	|DSK_IOControl|
	EXPORT	|??_C@_1M@LBOO@?$AAS?$AAD?$AAM?$AAM?$AAC?$AA?$AA@| [ DATA ] ; `string'
	IMPORT	|DoDiskIO|
	IMPORT	|GetDiskInfo|
	IMPORT	|SetDiskInfo|
	IMPORT	|GetFolderName|
	IMPORT	|GetStorageID|
	IMPORT	|wcscpy|

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

  00000			 AREA	 |.pdata$$DSK_IOControl|, PDATA, SELECTION=5, ASSOC=|.text| { |DSK_IOControl| } ; comdat associative
|$T37269| DCD	|DSK_IOControl|
	DCD	0x40008901

  00000			 AREA	 |.rdata| { |??_C@_1M@LBOO@?$AAS?$AAD?$AAM?$AAM?$AAC?$AA?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1M@LBOO@?$AAS?$AAD?$AAM?$AAM?$AAC?$AA?$AA@| DCB "S", 0x0, "D", 0x0
	DCB	"M", 0x0, "M", 0x0, "C", 0x0, 0x0, 0x0	; `string'
; Function compile flags: /Ogsy

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

  00000		 |DSK_IOControl| PROC

; 346  : {

  00000	e92d43f0	 stmdb     sp!, {r4 - r9, lr}
  00004		 |$M37267|
  00004	e1a05000	 mov       r5, r0
  00008	e1a04001	 mov       r4, r1
  0000c	e1a07002	 mov       r7, r2
  00010	e1a06003	 mov       r6, r3

; 347  :     PDISK pDisk = (PDISK)Handle;
; 348  :     PSG_REQ pSG;
; 349  : 
; 350  : 

; 351  : 		

; 352  :     if (IsValidDisk(pDisk) == FALSE) {

  00014	eb000000	 bl        IsValidDisk
  00018	e3500000	 cmp       r0, #0

; 353  :     SetLastError(ERROR_INVALID_HANDLE);

  0001c	03a00006	 moveq     r0, #6
  00020	0a00002b	 beq       |$L37263|

; 355  :     }
; 356  : 	
; 357  : 	
; 358  :     if (pDisk->d_DiskCardState != STATE_OPENED) {

  00024	e595001c	 ldr       r0, [r5, #0x1C]
  00028	e3500003	 cmp       r0, #3
  0002c	0a000001	 beq       |$L37017|

; 359  :     SetLastError(GetDiskStateError(pDisk->d_DiskCardState));

  00030	eb000000	 bl        GetDiskStateError

; 360  :     return FALSE;

  00034	ea000026	 b         |$L37263|
  00038		 |$L37017|

; 361  :     }
; 362  : 
; 363  :     

; 364  :     

; 365  :     

; 366  :     switch (dwIoControlCode) {

  00038	e59f01e0	 ldr       r0, [pc, #0x1E0]
  0003c	e3a02a71	 mov       r2, #0x71, 20
  00040	e59d101c	 ldr       r1, [sp, #0x1C]
  00044	e3822b02	 orr       r2, r2, #2, 22
  00048	e59f81cc	 ldr       r8, [pc, #0x1CC]
  0004c	e1540000	 cmp       r4, r0
  00050	e59f91c0	 ldr       r9, [pc, #0x1C0]
  00054	e59f31b8	 ldr       r3, [pc, #0x1B8]
  00058	8a000012	 bhi       |$L37253|
  0005c	0a000024	 beq       |$L37022|
  00060	e3540000	 cmp       r4, #0
  00064	9a000019	 bls       |$L37048|
  00068	e3540005	 cmp       r4, #5
  0006c	9a000020	 bls       |$L37022|
  00070	e3540006	 cmp       r4, #6
  00074	0a000007	 beq       |$L37028|
  00078	e3540009	 cmp       r4, #9
  0007c	0a000019	 beq       |$L37025|
  00080	e1540002	 cmp       r4, r2
  00084	0a00001a	 beq       |$L37022|
  00088	e3a00a71	 mov       r0, #0x71, 20
  0008c	e3800b03	 orr       r0, r0, #3, 22
  00090	e1540000	 cmp       r4, r0
  00094	ea00000c	 b         |$L37264|
  00098		 |$L37028|

; 390  :     }
; 391  :     break;
; 392  :     case DISK_IOCTL_FORMAT_MEDIA:
; 393  :     SetLastError(ERROR_SUCCESS);

  00098	e3a00000	 mov       r0, #0
  0009c		 |$L37265|
  0009c	eb000000	 bl        SetLastError
  000a0		 |$L37036|

; 394  :     return TRUE;

  000a0	e3a04001	 mov       r4, #1
  000a4	ea00000c	 b         |$L37031|
  000a8		 |$L37253|

; 361  :     }
; 362  : 
; 363  :     

; 364  :     

; 365  :     

; 366  :     switch (dwIoControlCode) {

  000a8	e3a00a71	 mov       r0, #0x71, 20
  000ac	e3800ec1	 orr       r0, r0, #0xC1, 28
  000b0	e1540000	 cmp       r4, r0
  000b4	0a00000e	 beq       |$L37022|
  000b8	e1540003	 cmp       r4, r3
  000bc	0a000009	 beq       |$L37025|
  000c0	e1540008	 cmp       r4, r8
  000c4	0a00000a	 beq       |$L37022|
  000c8	e1540009	 cmp       r4, r9
  000cc		 |$L37264|
  000cc	0a000008	 beq       |$L37022|
  000d0		 |$L37048|

; 442  :         } else {
; 443  :             SetLastError( ERROR_INVALID_PARAMETER);

  000d0	e3a00057	 mov       r0, #0x57
  000d4		 |$L37263|
  000d4	eb000000	 bl        SetLastError

; 444  :             return FALSE;

  000d8	e3a04000	 mov       r4, #0
  000dc		 |$L37031|

; 354  :     return FALSE;

  000dc	e1a00004	 mov       r0, r4

; 459  :     }
; 460  : }   


  000e0	e8bd43f0	 ldmia     sp!, {r4 - r9, lr}
  000e4	e12fff1e	 bx        lr
  000e8		 |$L37025|

; 381  :     }
; 382  :     break;
; 383  : 
; 384  :     case DISK_IOCTL_GETNAME:
; 385  :     

; 386  :     case IOCTL_DISK_GET_STORAGEID:  

; 387  : 		if (pOutBuf == NULL) {

  000e8	e3510000	 cmp       r1, #0
  000ec	1a000002	 bne       |$L37024|

; 388  :         SetLastError(ERROR_INVALID_PARAMETER);
; 389  :         return FALSE;

  000f0	eafffff6	 b         |$L37048|
  000f4		 |$L37022|

; 367  :     case DISK_IOCTL_READ:
; 368  :     case DISK_IOCTL_WRITE:
; 369  :     case DISK_IOCTL_GETINFO:
; 370  :     case DISK_IOCTL_SETINFO:
; 371  :     case DISK_IOCTL_INITIALIZED:
; 372  :     case IOCTL_DISK_READ:
; 373  :     case IOCTL_DISK_WRITE:
; 374  :     case IOCTL_DISK_GETINFO:
; 375  :     case IOCTL_DISK_SETINFO:
; 376  :     case IOCTL_DISK_INITIALIZED:
; 377  :     case IOCTL_DISK_DEVICE_INFO:
; 378  :     if (pInBuf == NULL) {

  000f4	e3570000	 cmp       r7, #0

; 379  :         SetLastError(ERROR_INVALID_PARAMETER);
; 380  :         return FALSE;

  000f8	0afffff4	 beq       |$L37048|
  000fc		 |$L37024|

; 395  :     
; 396  :     default:
; 397  :     SetLastError(ERROR_INVALID_PARAMETER);
; 398  :     return FALSE;
; 399  :     }
; 400  : 
; 401  :     switch (dwIoControlCode) {

  000fc	e3540009	 cmp       r4, #9
  00100	8a000018	 bhi       |$L37254|
  00104	0a000011	 beq       |$L37042|
  00108	e3540001	 cmp       r4, #1
  0010c	0a00000b	 beq       |$L37037|
  00110	9affffee	 bls       |$L37048|
  00114	e3540003	 cmp       r4, #3
  00118	9a00001a	 bls       |$L37034|
  0011c	e3540005	 cmp       r4, #5
  00120	0a000002	 beq       |$L37039|
  00124	e3540006	 cmp       r4, #6
  00128	1affffe8	 bne       |$L37048|

; 422  : 
; 423  :     case DISK_IOCTL_FORMAT_MEDIA:
; 424  :     SetLastError(ERROR_SUCCESS);
; 425  :     return TRUE;

  0012c	eaffffd9	 b         |$L37028|
  00130		 |$L37039|

; 418  : 
; 419  :     case DISK_IOCTL_SETINFO:
; 420  :     SetLastError(SetDiskInfo(pDisk, (PDISK_INFO)pInBuf));

  00130	e1a01007	 mov       r1, r7
  00134	e1a00005	 mov       r0, r5
  00138	eb000000	 bl        SetDiskInfo

; 421  :     return TRUE;

  0013c	eaffffd6	 b         |$L37265|
  00140		 |$L37037|

; 412  :     }
; 413  :     return TRUE;
; 414  : 
; 415  :     case DISK_IOCTL_GETINFO:
; 416  :     SetLastError(GetDiskInfo(pDisk, (PDISK_INFO)pInBuf));

  00140	e1a01007	 mov       r1, r7
  00144	e1a00005	 mov       r0, r5
  00148	eb000000	 bl        GetDiskInfo

; 417  :     return TRUE;

  0014c	eaffffd2	 b         |$L37265|
  00150		 |$L37042|

; 426  :   
; 427  :     case DISK_IOCTL_GETNAME:
; 428  :     return GetFolderName(pDisk, (LPWSTR)pOutBuf, nOutBufSize, pBytesReturned);

  00150	e59d3024	 ldr       r3, [sp, #0x24]
  00154	e1a00005	 mov       r0, r5
  00158	e59d2020	 ldr       r2, [sp, #0x20]
  0015c	eb000000	 bl        GetFolderName
  00160	e1a04000	 mov       r4, r0
  00164	eaffffdc	 b         |$L37031|
  00168		 |$L37254|

; 395  :     
; 396  :     default:
; 397  :     SetLastError(ERROR_INVALID_PARAMETER);
; 398  :     return FALSE;
; 399  :     }
; 400  : 
; 401  :     switch (dwIoControlCode) {

  00168	e1540002	 cmp       r4, r2
  0016c	0a000014	 beq       |$L37044|
  00170	e1540003	 cmp       r4, r3
  00174	0a00000c	 beq       |$L37052|
  00178	e1540008	 cmp       r4, r8
  0017c	0a000001	 beq       |$L37034|
  00180	e1540009	 cmp       r4, r9

; 454  : 
; 455  : 
; 456  :     default:
; 457  :     SetLastError(ERROR_INVALID_PARAMETER);
; 458  :     return FALSE;

  00184	1affffd1	 bne       |$L37048|
  00188		 |$L37034|

; 402  :     case DISK_IOCTL_READ:
; 403  :     case DISK_IOCTL_WRITE:
; 404  :     case IOCTL_DISK_READ:
; 405  :     case IOCTL_DISK_WRITE:
; 406  : 		pSG = (PSG_REQ)pInBuf;
; 407  :     
; 408  :     DoDiskIO(pDisk, dwIoControlCode, pSG);

  00188	e1a02007	 mov       r2, r7
  0018c	e1a01004	 mov       r1, r4
  00190	e1a00005	 mov       r0, r5
  00194	eb000000	 bl        DoDiskIO

; 409  :     if (pSG->sr_status) {

  00198	e597300c	 ldr       r3, [r7, #0xC]
  0019c	e3530000	 cmp       r3, #0
  001a0	0affffbe	 beq       |$L37036|

; 410  :         SetLastError(pSG->sr_status);

  001a4	e1a00003	 mov       r0, r3

; 411  :         return FALSE;

  001a8	eaffffc9	 b         |$L37263|
  001ac		 |$L37052|

; 445  :         }
; 446  :     }    
; 447  :     
; 448  : 
; 449  :     case IOCTL_DISK_GET_STORAGEID:
; 450  :     return GetStorageID(pDisk,
; 451  :                 (PSTORAGE_IDENTIFICATION)pOutBuf,
; 452  :                 nOutBufSize,
; 453  :                 pBytesReturned);

  001ac	e59d3024	 ldr       r3, [sp, #0x24]
  001b0	e1a00005	 mov       r0, r5
  001b4	e59d2020	 ldr       r2, [sp, #0x20]
  001b8	eb000000	 bl        GetStorageID
  001bc	e1a04000	 mov       r4, r0
  001c0	eaffffc5	 b         |$L37031|
  001c4		 |$L37044|

; 429  : 
; 430  :     case IOCTL_DISK_DEVICE_INFO:
; 431  :     {
; 432  :         PSTORAGEDEVICEINFO psdi = (PSTORAGEDEVICEINFO)pInBuf;
; 433  :         if (nInBufSize == sizeof(STORAGEDEVICEINFO)) {

  001c4	e3560050	 cmp       r6, #0x50
  001c8	1affffc0	 bne       |$L37048|

; 434  :             wcscpy( psdi->szProfile, L"SDMMC");

  001cc	e59f103c	 ldr       r1, [pc, #0x3C]
  001d0	e2870004	 add       r0, r7, #4
  001d4	eb000000	 bl        wcscpy

; 435  :             psdi->dwDeviceClass = STORAGE_DEVICE_CLASS_BLOCK;
; 436  :             psdi->dwDeviceType |= STORAGE_DEVICE_TYPE_REMOVABLE_MEDIA;

⌨️ 快捷键说明

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