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

📄 dvdioctl.cod

📁 2440 CE500BSP包, EBOOT可用DEBUG版调试
💻 COD
📖 第 1 页 / 共 5 页
字号:
  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 + -