📄 dvdioctl.cod
字号:
00570 |$L32156|
; 141 : break;
; 142 : }
; 143 :
; 144 : for (;dwTmp >0; dwTmp--) {
00570 ea000002 b |$L32167|
00574 |$L32168|
00574 e59d3004 ldr r3, [sp, #4]
00578 e2433001 sub r3, r3, #1
0057c e58d3004 str r3, [sp, #4]
00580 |$L32167|
00580 e59d3004 ldr r3, [sp, #4]
00584 e3530000 cmp r3, #0
00588 9a00000a bls |$L32169|
; 145 : *pdest++ = *psrc++;
0058c e59d3000 ldr r3, [sp]
00590 e5d32000 ldrb r2, [r3]
00594 e59d3008 ldr r3, [sp, #8]
00598 e5c32000 strb r2, [r3]
0059c e59d3008 ldr r3, [sp, #8]
005a0 e2833001 add r3, r3, #1
005a4 e58d3008 str r3, [sp, #8]
005a8 e59d3000 ldr r3, [sp]
005ac e2833001 add r3, r3, #1
005b0 e58d3000 str r3, [sp]
; 146 : }
005b4 eaffffee b |$L32168|
005b8 |$L32169|
; 147 :
; 148 : return TRUE;
005b8 e3a03001 mov r3, #1
005bc e58d300c str r3, [sp, #0xC]
005c0 e59d000c ldr r0, [sp, #0xC]
; 149 : }
005c4 e28dd014 add sp, sp, #0x14
005c8 e89d6000 ldmia sp, {sp, lr}
005cc e12fff1e bx lr
005d0 |$M32403|
ENDP ; |?CopyDVDKey@@YAKKPAU_DVD_COPY_PROTECT_KEY@@PAU_RKFMT_TITLE@@@Z|, CopyDVDKey
EXPORT |?DVDReadKey@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| ; CPCIDiskAndCD::DVDReadKey
EXPORT |??_C@_1GO@IJCPCCNF@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAP?$AAC?$AAI?$AAD?$AAi?$AAs?$AAk?$AAA?$AAn?$AAd?$AAC?$AAD?$AA?3@| [ DATA ] ; `string'
EXPORT |??_C@_1IA@JFIEMINA@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAP?$AAC?$AAI?$AAD?$AAi?$AAs?$AAk?$AAA?$AAn?$AAd?$AAC?$AAD?$AA?3@| [ DATA ] ; `string'
IMPORT |NKDbgPrintfW|
IMPORT |dpCurSettings|
IMPORT |?AtapiSendCommand@CPCIDiskAndCD@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z| ; CPCIDiskAndCD::AtapiSendCommand
IMPORT |?AtapiReceiveData@CPCIDiskAndCD@@QAAHPAU_SGX_BUF@@KPAK@Z| ; CPCIDiskAndCD::AtapiReceiveData
IMPORT |memset|
00028 AREA |.pdata|, PDATA
|$T32415| DCD |$L32414|
DCD 0x40008b05
00000 AREA |.rdata| { |??_C@_1IA@JFIEMINA@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAP?$AAC?$AAI?$AAD?$AAi?$AAs?$AAk?$AAA?$AAn?$AAd?$AAC?$AAD?$AA?3@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1IA@JFIEMINA@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAP?$AAC?$AAI?$AAD?$AAi?$AAs?$AAk?$AAA?$AAn?$AAd?$AAC?$AAD?$AA?3@| DCB "A"
DCB 0x0, "t", 0x0, "a", 0x0, "p", 0x0, "i", 0x0, "!", 0x0, "C"
DCB 0x0, "P", 0x0, "C", 0x0, "I", 0x0, "D", 0x0, "i", 0x0, "s"
DCB 0x0, "k", 0x0, "A", 0x0, "n", 0x0, "d", 0x0, "C", 0x0, "D"
DCB 0x0, ":", 0x0, ":", 0x0, "D", 0x0, "V", 0x0, "D", 0x0, "R"
DCB 0x0, "e", 0x0, "a", 0x0, "d", 0x0, "K", 0x0, "e", 0x0, "y"
DCB 0x0, ">", 0x0, " ", 0x0, "f", 0x0, "a", 0x0, "i", 0x0, "l"
DCB 0x0, "e", 0x0, "d", 0x0, " ", 0x0, "t", 0x0, "o", 0x0, " "
DCB 0x0, "e", 0x0, "x", 0x0, "e", 0x0, "c", 0x0, "u", 0x0, "t"
DCB 0x0, "e", 0x0, " ", 0x0, "c", 0x0, "o", 0x0, "m", 0x0, "m"
DCB 0x0, "a", 0x0, "n", 0x0, "d", 0x0, " ", 0x0, "%", 0x0, "d"
DCB 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1GO@IJCPCCNF@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAP?$AAC?$AAI?$AAD?$AAi?$AAs?$AAk?$AAA?$AAn?$AAd?$AAC?$AAD?$AA?3@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1GO@IJCPCCNF@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAP?$AAC?$AAI?$AAD?$AAi?$AAs?$AAk?$AAA?$AAn?$AAd?$AAC?$AAD?$AA?3@| DCB "A"
DCB 0x0, "t", 0x0, "a", 0x0, "p", 0x0, "i", 0x0, "!", 0x0, "C"
DCB 0x0, "P", 0x0, "C", 0x0, "I", 0x0, "D", 0x0, "i", 0x0, "s"
DCB 0x0, "k", 0x0, "A", 0x0, "n", 0x0, "d", 0x0, "C", 0x0, "D"
DCB 0x0, ":", 0x0, ":", 0x0, "D", 0x0, "V", 0x0, "D", 0x0, "R"
DCB 0x0, "e", 0x0, "a", 0x0, "d", 0x0, "K", 0x0, "e", 0x0, "y"
DCB 0x0, ">", 0x0, " ", 0x0, "i", 0x0, "l", 0x0, "l", 0x0, "e"
DCB 0x0, "g", 0x0, "a", 0x0, "l", 0x0, " ", 0x0, "k", 0x0, "e"
DCB 0x0, "y", 0x0, " ", 0x0, "r", 0x0, "e", 0x0, "q", 0x0, "u"
DCB 0x0, "e", 0x0, "s", 0x0, "t", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0
DCB 0x0 ; `string'
; Function compile flags: /Odt
005d0 AREA |.text|, CODE, ARM
005d0 |?DVDReadKey@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| PROC ; CPCIDiskAndCD::DVDReadKey
; 155 : {
005d0 |$L32414|
005d0 e1a0c00d mov r12, sp
005d4 e92d0003 stmdb sp!, {r0, r1}
005d8 e92d5000 stmdb sp!, {r12, lr}
005dc e59fc214 ldr r12, [pc, #0x214]
005e0 e08dd00c add sp, sp, r12
005e4 |$M32412|
; 156 : DWORD dwError = ERROR_SUCCESS;
005e4 e3a03000 mov r3, #0
005e8 e58d3834 str r3, [sp, #0x834]
; 157 : SGX_BUF SgBuf;
; 158 : ATAPI_COMMAND_PACKET CmdPkt;
; 159 : PDVD_COPY_PROTECT_KEY pKey = (PDVD_COPY_PROTECT_KEY)pIOReq->pInBuf;
005ec e59d3860 ldr r3, [sp, #0x860]
005f0 e2833018 add r3, r3, #0x18
005f4 e5933000 ldr r3, [r3]
005f8 e58d3830 str r3, [sp, #0x830]
; 160 : DWORD dwLength;
; 161 : RKFMT_DISC keyBuf;
; 162 : DWORD dwRet;
; 163 :
; 164 : memset(&CmdPkt, 0, sizeof(ATAPI_COMMAND_PACKET));
005fc e3a02014 mov r2, #0x14
00600 e3a01000 mov r1, #0
00604 e28d0e81 add r0, sp, #0x81, 28
00608 eb000000 bl memset
; 165 :
; 166 : if (IOCTL_DVD_START_SESSION == pIOReq->dwCode) {
0060c e59d3860 ldr r3, [sp, #0x860]
00610 e2833014 add r3, r3, #0x14
00614 e5933000 ldr r3, [r3]
00618 e35309cd cmp r3, #0xCD, 18
0061c 1a000014 bne |$L32183|
; 167 : pKey->KeyType = DvdAGID;
00620 e59d3830 ldr r3, [sp, #0x830]
00624 e283100c add r1, r3, #0xC
00628 e3a03000 mov r3, #0
0062c e5c13000 strb r3, [r1]
00630 e1a02423 mov r2, r3, lsr #8
00634 e1a03002 mov r3, r2
00638 e5c13001 strb r3, [r1, #1]
0063c e1a02422 mov r2, r2, lsr #8
00640 e1a03002 mov r3, r2
00644 e5c13002 strb r3, [r1, #2]
00648 e1a03422 mov r3, r2, lsr #8
0064c e5c13003 strb r3, [r1, #3]
; 168 : // TODO: Check region
; 169 : dwLength = DVDSetupReadTitleKey(&CmdPkt, DvdAGID, 0, 0);
00650 e3a03000 mov r3, #0
00654 e3a02000 mov r2, #0
00658 e3a01000 mov r1, #0
0065c e28d0e81 add r0, sp, #0x81, 28
00660 eb000000 bl |?DVDSetupReadTitleKey@@YAKPAU_ATAPI_COMMAND_PACKET@@EEK@Z|
00664 e58d083c str r0, [sp, #0x83C]
00668 e59d383c ldr r3, [sp, #0x83C]
0066c e58d3824 str r3, [sp, #0x824]
; 170 : }
; 171 : else {
00670 ea000005 b |$L32184|
00674 |$L32183|
; 172 : dwLength = DVDSetupReadKey(&CmdPkt, pKey);
00674 e59d1830 ldr r1, [sp, #0x830]
00678 e28d0e81 add r0, sp, #0x81, 28
0067c eb000000 bl |?DVDSetupReadKey@@YAKPAU_ATAPI_COMMAND_PACKET@@PAU_DVD_COPY_PROTECT_KEY@@@Z|
00680 e58d0840 str r0, [sp, #0x840]
00684 e59d3840 ldr r3, [sp, #0x840]
00688 e58d3824 str r3, [sp, #0x824]
0068c |$L32184|
; 173 : }
; 174 :
; 175 : if (dwLength > pKey->KeyLength) {
0068c e59d3830 ldr r3, [sp, #0x830]
00690 e2830004 add r0, r3, #4
00694 e59d1824 ldr r1, [sp, #0x824]
00698 e5d03003 ldrb r3, [r0, #3]
0069c e1a02403 mov r2, r3, lsl #8
006a0 e5d03002 ldrb r3, [r0, #2]
006a4 e1833002 orr r3, r3, r2
006a8 e1a02403 mov r2, r3, lsl #8
006ac e5d03001 ldrb r3, [r0, #1]
006b0 e1833002 orr r3, r3, r2
006b4 e1a02403 mov r2, r3, lsl #8
006b8 e5d03000 ldrb r3, [r0]
006bc e1833002 orr r3, r3, r2
006c0 e1510003 cmp r1, r3
006c4 9a00000d bls |$L32185|
; 176 : DEBUGMSG(ZONE_ERROR, (TEXT(
; 177 : "Atapi!CPCIDiskAndCD::DVDReadKey> illegal key request\r\n"
; 178 : )));
006c8 e59f3120 ldr r3, [pc, #0x120]
006cc e5933440 ldr r3, [r3, #0x440]
006d0 e3130a02 tst r3, #2, 20
006d4 0a000004 beq |$L32407|
006d8 e59f0114 ldr r0, [pc, #0x114]
006dc eb000000 bl NKDbgPrintfW
006e0 e3a03001 mov r3, #1
006e4 e58d3844 str r3, [sp, #0x844]
006e8 ea000001 b |$L32408|
006ec |$L32407|
006ec e3a03000 mov r3, #0
006f0 e58d3844 str r3, [sp, #0x844]
006f4 |$L32408|
; 179 : return ERROR_INVALID_PARAMETER;
006f4 e3a03057 mov r3, #0x57
006f8 e58d3838 str r3, [sp, #0x838]
006fc ea000034 b |$L32173|
00700 |$L32185|
; 180 : }
; 181 :
; 182 : SgBuf.sb_len = dwLength;
00700 e59d3824 ldr r3, [sp, #0x824]
00704 e58d382c str r3, [sp, #0x82C]
; 183 : SgBuf.sb_buf = (PBYTE) &keyBuf;
00708 e28d3008 add r3, sp, #8
0070c e58d3828 str r3, [sp, #0x828]
; 184 :
; 185 : if (AtapiSendCommand(&CmdPkt)) {
00710 e3a03000 mov r3, #0
00714 e3a02000 mov r2, #0
00718 e28d1e81 add r1, sp, #0x81, 28
0071c e59d085c ldr r0, [sp, #0x85C]
00720 eb000000 bl |?AtapiSendCommand@CPCIDiskAndCD@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z|
00724 e58d0848 str r0, [sp, #0x848]
00728 e59d3848 ldr r3, [sp, #0x848]
0072c e3530000 cmp r3, #0
00730 0a000023 beq |$L32189|
; 186 : if (AtapiReceiveData(&SgBuf, 1, &dwRet)) {
00734 e28d3000 add r3, sp, #0
00738 e3a02001 mov r2, #1
0073c e3a01e82 mov r1, #0x82, 28
00740 e3811008 orr r1, r1, #8
00744 e08d1001 add r1, sp, r1
00748 e59d085c ldr r0, [sp, #0x85C]
0074c eb000000 bl |?AtapiReceiveData@CPCIDiskAndCD@@QAAHPAU_SGX_BUF@@KPAK@Z|
00750 e58d084c str r0, [sp, #0x84C]
00754 e59d384c ldr r3, [sp, #0x84C]
00758 e3530000 cmp r3, #0
0075c 0a000004 beq |$L32190|
; 187 : CopyDVDKey(dwLength, pKey, (PRKFMT_TITLE)&keyBuf);
00760 e28d2008 add r2, sp, #8
00764 e59d1830 ldr r1, [sp, #0x830]
00768 e59d0824 ldr r0, [sp, #0x824]
0076c eb000000 bl |?CopyDVDKey@@YAKKPAU_DVD_COPY_PROTECT_KEY@@PAU_RKFMT_TITLE@@@Z|
; 188 : }
; 189 : else {
00770 ea000012 b |$L32192|
00774 |$L32190|
; 190 : DEBUGMSG(ZONE_ERROR|ZONE_CDROM, (TEXT(
; 191 : "Atapi!CPCIDiskAndCD::DVDReadKey> failed to execute command %d\r\n"
; 192 : ), CmdPkt.Opcode));
00774 e59f3074 ldr r3, [pc, #0x74]
00778 e5933440 ldr r3, [r3, #0x440]
0077c e2032a02 and r2, r3, #2, 20
00780 e59f3068 ldr r3, [pc, #0x68]
00784 e5933440 ldr r3, [r3, #0x440]
00788 e2033080 and r3, r3, #0x80
0078c e1923003 orrs r3, r2, r3
00790 0a000006 beq |$L32409|
00794 e5dd3810 ldrb r3, [sp, #0x810]
00798 e1a01003 mov r1, r3
0079c e59f0048 ldr r0, [pc, #0x48]
007a0 eb000000 bl NKDbgPrintfW
007a4 e3a03001 mov r3, #1
007a8 e58d3850 str r3, [sp, #0x850]
007ac ea000001 b |$L32410|
007b0 |$L32409|
007b0 e3a03000 mov r3, #0
007b4 e58d3850 str r3, [sp, #0x850]
007b8 |$L32410|
; 193 : dwError = ERROR_READ_FAULT;
007b8 e3a0301e mov r3, #0x1E
007bc e58d3834 str r3, [sp, #0x834]
007c0 |$L32192|
; 194 : }
; 195 : }
; 196 : else {
007c0 ea000001 b |$L32195|
007c4 |$L32189|
; 197 : dwError = ERROR_GEN_FAILURE;
007c4 e3a0301f mov r3, #0x1F
007c8 e58d3834 str r3, [sp, #0x834]
007cc |$L32195|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -