?? dvdioctl.cod
字號:
0005c e28a6020 add r6, r10, #0x20
00060 e5c92000 strb r2, [r9]
00064 e5c97001 strb r7, [r9, #1]
; 376 :
; 377 : if (
; 378 : !KeyType || KeyType > DvdBusKey2 ||
; 379 : (pKey->KeyLength < ((dwRet = rkret[KeyType]) >> 24))
; 380 : ) {
00068 0a00003c beq |$L32230|
0006c e3540003 cmp r4, #3
00070 8a00003a bhi |$L32230|
00074 e5da1004 ldrb r1, [r10, #4]
00078 e5da3005 ldrb r3, [r10, #5]
0007c e59f00ec ldr r0, [pc, #0xEC]
00080 e5da2006 ldrb r2, [r10, #6]
00084 e1813403 orr r3, r1, r3, lsl #8
00088 e5da1007 ldrb r1, [r10, #7]
0008c e790e104 ldr lr, [r0, +r4, lsl #2]
00090 e1833802 orr r3, r3, r2, lsl #16
00094 e1833c01 orr r3, r3, r1, lsl #24
00098 e1530c2e cmp r3, lr, lsr #24
0009c 3a00002f bcc |$L32230|
; 382 : }
; 383 :
; 384 : keyBuf->Len = (WORD)((dwRet >> 16) - (2 << 8));
000a0 e1a0582e mov r5, lr, lsr #16
000a4 e2852cfe add r2, r5, #0xFE, 24
000a8 e1a03422 mov r3, r2, lsr #8
000ac e5c83001 strb r3, [r8, #1]
000b0 e5c82000 strb r2, [r8]
; 385 : keyBuf->Reserved[0] = keyBuf->Reserved[1] = 0;
000b4 e5c87003 strb r7, [r8, #3]
000b8 e5c87002 strb r7, [r8, #2]
; 386 :
; 387 : if (KeyType == DvdBusKey2) {
000bc e3540003 cmp r4, #3
000c0 1a00000f bne |$L32232|
; 388 : for (dwTmp = 0; dwTmp < 5; dwTmp++) {
000c4 e1a02008 mov r2, r8
000c8 e0460008 sub r0, r6, r8
000cc e3a01005 mov r1, #5
000d0 |$L32233|
; 389 : *((PBYTE)(&keyBuf->chlgkey) + dwTmp) = *((PBYTE)pdata + dwTmp);
000d0 e7d03002 ldrb r3, [r0, +r2]
000d4 e2511001 subs r1, r1, #1
000d8 e5c23004 strb r3, [r2, #4]
000dc e2822001 add r2, r2, #1
000e0 1afffffa bne |$L32233|
; 390 : }
; 391 :
; 392 : for (;dwTmp < 8; dwTmp++) {
000e4 e2883005 add r3, r8, #5
000e8 e2833004 add r3, r3, #4
000ec e2832003 add r2, r3, #3
000f0 e3a01000 mov r1, #0
000f4 |$L32457|
000f4 e4c31001 strb r1, [r3], #1
000f8 e1530002 cmp r3, r2
000fc 1afffffc bne |$L32457|
; 393 : *((PBYTE)(&keyBuf->chlgkey) + dwTmp) = 0;
; 394 : }
; 395 : }
; 396 : else {
00100 ea000007 b |$L32245|
00104 |$L32232|
; 397 : for (dwTmp = 0; dwTmp < ((dwRet >> 26) - 1); dwTmp++ ) {
00104 e1a03d2e mov r3, lr, lsr #26
00108 e2532001 subs r2, r3, #1
0010c 0a000004 beq |$L32245|
00110 e0461008 sub r1, r6, r8
00114 |$L32243|
; 398 : *((PDWORD)(&keyBuf->chlgkey) + dwTmp) = *((PDWORD)pdata + dwTmp);
00114 e7983001 ldr r3, [r8, +r1]
00118 e2522001 subs r2, r2, #1
0011c e5a83004 str r3, [r8, #4]!
00120 1afffffb bne |$L32243|
00124 |$L32245|
; 399 : }
; 400 : }
; 401 :
; 402 : *(PDWORD)(&pcdb->Reserved) = dwRet;
; 403 :
; 404 : pcdb->LBA = 0;
; 405 : pcdb->NACA = 0;
; 406 :
; 407 : return (EndSwap(dwRet));
00124 e20e3cff and r3, lr, #0xFF, 24
00128 e183380e orr r3, r3, lr, lsl #16
0012c e20e28ff and r2, lr, #0xFF, 16
00130 e1a01403 mov r1, r3, lsl #8
00134 e1823005 orr r3, r2, r5
00138 e1a0082e mov r0, lr, lsr #16
0013c e1813423 orr r3, r1, r3, lsr #8
00140 e1c9e0b6 strh lr, [r9, #6]
00144 e1c900b8 strh r0, [r9, #8]
00148 e5c97002 strb r7, [r9, #2]
0014c e5c97003 strb r7, [r9, #3]
00150 e5c97004 strb r7, [r9, #4]
00154 e5c97005 strb r7, [r9, #5]
00158 e5c9700b strb r7, [r9, #0xB]
0015c ea000000 b |$L32219|
00160 |$L32230|
; 381 : return 0;
00160 e3a03000 mov r3, #0
00164 |$L32219|
; 399 : }
; 400 : }
; 401 :
; 402 : *(PDWORD)(&pcdb->Reserved) = dwRet;
; 403 :
; 404 : pcdb->LBA = 0;
; 405 : pcdb->NACA = 0;
; 406 :
; 407 : return (EndSwap(dwRet));
00164 e1a00003 mov r0, r3
; 408 : }
00168 e8bd47f0 ldmia sp!, {r4 - r10, lr}
0016c e12fff1e bx lr
00170 |$L32473|
00170 00000000 DCD |rkret|
00174 |$M32469|
ENDP ; |?DVDSetupSendKey@@YAKPAU_ATAPI_COMMAND_PACKET@@PAU_DVD_COPY_PROTECT_KEY@@PAU_RKFMT_CHLGKEY@@@Z|, DVDSetupSendKey
EXPORT |?DVDSendKey@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| ; CPCIDiskAndCD::DVDSendKey
IMPORT |?AtapiSendData@CPCIDiskAndCD@@QAAHPAU_SGX_BUF@@KPAK@Z| ; CPCIDiskAndCD::AtapiSendData
00000 AREA |.text| { |?DVDSendKey@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?DVDSendKey@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?DVDSendKey@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| } ; comdat associative
|$T32488| DCD |$L32487|
DCD 0x40004002
; Function compile flags: /Ogsy
00000 AREA |.text| { |?DVDSendKey@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?DVDSendKey@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| PROC ; CPCIDiskAndCD::DVDSendKey
; 414 : {
00000 |$L32487|
00000 e92d40f0 stmdb sp!, {r4 - r7, lr}
00004 e24dd034 sub sp, sp, #0x34
00008 |$M32485|
00008 e1a04001 mov r4, r1
0000c e1a07000 mov r7, r0
; 415 : DWORD dwError = ERROR_SUCCESS;
; 416 : ATAPI_COMMAND_PACKET CmdPkt;
; 417 : PDVD_COPY_PROTECT_KEY pKey = (PDVD_COPY_PROTECT_KEY)pIOReq->pInBuf;
; 418 : DWORD dwLength;
; 419 : RKFMT_CHLGKEY keyBuf;
; 420 : SGX_BUF SgBuf;
; 421 : DWORD dwRet;
; 422 :
; 423 : memset(&CmdPkt, 0, sizeof(ATAPI_COMMAND_PACKET));
00010 e5946018 ldr r6, [r4, #0x18]
00014 e3a02014 mov r2, #0x14
00018 e3a01000 mov r1, #0
0001c e28d0020 add r0, sp, #0x20
00020 e3a05000 mov r5, #0
00024 eb000000 bl memset
; 424 :
; 425 : if (IOCTL_DVD_END_SESSION == pIOReq->dwCode) {
00028 e5942014 ldr r2, [r4, #0x14]
0002c e3a039cd mov r3, #0xCD, 18
00030 e383300c orr r3, r3, #0xC
00034 e1520003 cmp r2, r3
00038 1a000013 bne |$L32262|
; 426 : BYTE bAgid;
; 427 : pKey->KeyType = DvdAGID;
; 428 : bAgid= (BYTE)pKey->SessionId;
0003c e5d6e008 ldrb lr, [r6, #8]
00040 e5d63009 ldrb r3, [r6, #9]
00044 e5d6200a ldrb r2, [r6, #0xA]
00048 e5d6100b ldrb r1, [r6, #0xB]
0004c e18e3403 orr r3, lr, r3, lsl #8
00050 e1833802 orr r3, r3, r2, lsl #16
00054 e1833c01 orr r3, r3, r1, lsl #24
00058 e20320ff and r2, r3, #0xFF
0005c e3a03000 mov r3, #0
; 429 : if (bAgid == -1) {
00060 e3720001 cmn r2, #1
00064 e5c6300c strb r3, [r6, #0xC]
00068 e5c6300d strb r3, [r6, #0xD]
0006c e5c6300e strb r3, [r6, #0xE]
00070 e5c6300f strb r3, [r6, #0xF]
; 430 : bAgid = 0;
00074 03a02000 moveq r2, #0
; 431 : }
; 432 : dwLength = DVDSetupReadTitleKey(&CmdPkt, -1, bAgid, 0);
00078 e3a03000 mov r3, #0
0007c e3a010ff mov r1, #0xFF
00080 e28d0020 add r0, sp, #0x20
00084 eb000000 bl |?DVDSetupReadTitleKey@@YAKPAU_ATAPI_COMMAND_PACKET@@EEK@Z|
; 433 : }
; 434 : else {
00088 ea000003 b |$L32484|
0008c |$L32262|
; 435 : dwLength = DVDSetupSendKey(&CmdPkt, pKey, &keyBuf);
0008c e28d2010 add r2, sp, #0x10
00090 e1a01006 mov r1, r6
00094 e28d0020 add r0, sp, #0x20
00098 eb000000 bl |?DVDSetupSendKey@@YAKPAU_ATAPI_COMMAND_PACKET@@PAU_DVD_COPY_PROTECT_KEY@@PAU_RKFMT_CHLGKEY@@@Z|
0009c |$L32484|
; 436 : }
; 437 :
; 438 : SgBuf.sb_len = dwLength;
; 439 : SgBuf.sb_buf = (PBYTE) &keyBuf;
0009c e28d3010 add r3, sp, #0x10
000a0 e58d3008 str r3, [sp, #8]
000a4 e1a0e000 mov lr, r0
; 440 :
; 441 : if (AtapiSendCommand(&CmdPkt)) {
000a8 e3a03000 mov r3, #0
000ac e3a02000 mov r2, #0
000b0 e28d1020 add r1, sp, #0x20
000b4 e1a00007 mov r0, r7
000b8 e58de00c str lr, [sp, #0xC]
000bc eb000000 bl |?AtapiSendCommand@CPCIDiskAndCD@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z|
000c0 e3500000 cmp r0, #0
000c4 0a000008 beq |$L32268|
; 442 : if (!AtapiSendData(&SgBuf, 1, &dwRet)) {
000c8 e28d3000 add r3, sp, #0
000cc e3a02001 mov r2, #1
000d0 e28d1008 add r1, sp, #8
000d4 e1a00007 mov r0, r7
000d8 eb000000 bl |?AtapiSendData@CPCIDiskAndCD@@QAAHPAU_SGX_BUF@@KPAK@Z|
000dc e3500000 cmp r0, #0
000e0 1a000002 bne |$L32271|
; 443 : DEBUGMSG(ZONE_ERROR|ZONE_CDROM, (TEXT(
; 444 : "Atapi!CPCIDiskAndCD::DVDSendKey> Failed to execute command %d\r\n"
; 445 : ), CmdPkt.Opcode));
; 446 : dwError = ERROR_WRITE_FAULT;
000e4 e3a0501d mov r5, #0x1D
; 447 : }
; 448 : }
; 449 : else {
000e8 ea000000 b |$L32271|
000ec |$L32268|
; 450 : dwError = ERROR_GEN_FAILURE;
000ec e3a0501f mov r5, #0x1F
000f0 |$L32271|
; 451 : }
; 452 :
; 453 : return dwError;
000f0 e1a00005 mov r0, r5
; 454 : }
000f4 e28dd034 add sp, sp, #0x34
000f8 e8bd40f0 ldmia sp!, {r4 - r7, lr}
000fc e12fff1e bx lr
00100 |$M32486|
ENDP ; |?DVDSendKey@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z|, CPCIDiskAndCD::DVDSendKey
EXPORT |?DVDSetRegion@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| ; CPCIDiskAndCD::DVDSetRegion
00000 AREA |.text| { |?DVDSetRegion@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?DVDSetRegion@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?DVDSetRegion@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| } ; comdat associative
|$T32497| DCD |$L32496|
DCD 0x40000200
; Function compile flags: /Ogsy
00000 AREA |.text| { |?DVDSetRegion@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?DVDSetRegion@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| PROC ; CPCIDiskAndCD::DVDSetRegion
; 460 : {
00000 |$L32496|
00000 |$M32494|
; 461 : return ERROR_NOT_SUPPORTED;
00000 e3a00032 mov r0, #0x32
; 462 : }
00004 e12fff1e bx lr
00008 |$M32495|
ENDP ; |?DVDSetRegion@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z|, CPCIDiskAndCD::DVDSetRegion
EXPORT |?DVDGetCopySystem@CPCIDiskAndCD@@QAAHPAE0@Z| ; CPCIDiskAndCD::DVDGetCopySystem
IMPORT |?AtapiIsUnitReady@CPCIDiskAndCD@@QAAHPAU_IOREQ@@@Z| ; CPCIDiskAndCD::AtapiIsUnitReady
00000 AREA |.text| { |?DVDGetCopySystem@CPCIDiskAndCD@@QAAHPAE0@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?DVDGetCopySystem@CPCIDiskAndCD@@QAAHPAE0@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?DVDGetCopySystem@CPCIDiskAndCD@@QAAHPAE0@Z| } ; comdat associative
|$T32511| DCD |$L32510|
DCD 0x40003902
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -