📄 system.cod
字号:
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 + -