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

📄 dvdioctl.cod

📁 PXA270的BSP
💻 COD
📖 第 1 页 / 共 4 页
字号:
; 262  :     DWORD dwTmp;
; 263  :     PRKCDB pcdb = (PRKCDB)pCmd;
; 264  :     PVOID pdata = &(pKey->KeyData[0]);
; 265  : 
; 266  : 
; 267  :     KeyType = (BYTE)pKey->KeyType;

  00010	e5dae00c	 ldrb        lr, [r10, #0xC]
  00014	e5da300d	 ldrb        r3, [r10, #0xD]
  00018	e5da400e	 ldrb        r4, [r10, #0xE]
  0001c	e5da500f	 ldrb        r5, [r10, #0xF]

; 268  :     agid = (BYTE)pKey->SessionId;

  00020	e5da7008	 ldrb        r7, [r10, #8]
  00024	e18e3403	 orr         r3, lr, r3, lsl #8
  00028	e5dae009	 ldrb        lr, [r10, #9]
  0002c	e1833804	 orr         r3, r3, r4, lsl #16
  00030	e5da400a	 ldrb        r4, [r10, #0xA]
  00034	e5da600b	 ldrb        r6, [r10, #0xB]
  00038	e1835c05	 orr         r5, r3, r5, lsl #24
  0003c	e187340e	 orr         r3, r7, lr, lsl #8
  00040	e1833804	 orr         r3, r3, r4, lsl #16

; 269  : 
; 270  :     pcdb->OpCode = DVDOP_SEND_KEY;
; 271  :     pcdb->Lun = 0;
; 272  :     pcdb->KeyFmt = (agid << 6) | KeyType;

  00044	e1833c06	 orr         r3, r3, r6, lsl #24
  00048	e21540ff	 ands        r4, r5, #0xFF
  0004c	e1843303	 orr         r3, r4, r3, lsl #6
  00050	e3a020a3	 mov         r2, #0xA3
  00054	e3a07000	 mov         r7, #0
  00058	e5c9300a	 strb        r3, [r9, #0xA]
  0005c	e28a6020	 add         r6, r10, #0x20
  00060	e5c92000	 strb        r2, [r9]
  00064	e5c97001	 strb        r7, [r9, #1]

; 273  : 
; 274  :     if (!KeyType || KeyType > DvdBusKey2 || (pKey->KeyLength <
; 275  :             ((dwRet = rkret[KeyType]) >> 24)))

  00068	0a00003c	 beq         |$L32931|
  0006c	e3540003	 cmp         r4, #3
  00070	8a00003a	 bhi         |$L32931|
  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         |$L32931|

; 278  :     }
; 279  : 
; 280  :     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]

; 281  :     keyBuf->Reserved[0] = keyBuf->Reserved[1] = 0;

  000b4	e5c87003	 strb        r7, [r8, #3]
  000b8	e5c87002	 strb        r7, [r8, #2]

; 282  : 
; 283  :     if (KeyType == DvdBusKey2)

  000bc	e3540003	 cmp         r4, #3
  000c0	1a00000f	 bne         |$L32933|

; 284  :     {
; 285  :         for (dwTmp = 0;dwTmp < 5;dwTmp++ )

  000c4	e1a02008	 mov         r2, r8
  000c8	e0460008	 sub         r0, r6, r8
  000cc	e3a01005	 mov         r1, #5
  000d0		 |$L32934|

; 286  :         {
; 287  :             *((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         |$L32934|

; 288  :         }
; 289  : 
; 290  :         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		 |$L33166|
  000f4	e4c31001	 strb        r1, [r3], #1
  000f8	e1530002	 cmp         r3, r2
  000fc	1afffffc	 bne         |$L33166|

; 291  :         {
; 292  :             *((PBYTE)(&keyBuf->chlgkey) + dwTmp) = 0;
; 293  :         }
; 294  :     }
; 295  :     else

  00100	ea000007	 b           |$L32946|
  00104		 |$L32933|

; 296  :     {
; 297  :         for (dwTmp = 0;dwTmp < ((dwRet >> 26) - 1);dwTmp++ )

  00104	e1a03d2e	 mov         r3, lr, lsr #26
  00108	e2532001	 subs        r2, r3, #1
  0010c	0a000004	 beq         |$L32946|
  00110	e0461008	 sub         r1, r6, r8
  00114		 |$L32944|

; 298  :         {
; 299  :             *((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         |$L32944|
  00124		 |$L32946|

; 300  :         }
; 301  :     }
; 302  : 
; 303  : 
; 304  :     //
; 305  :     // set up endian swapped allocation length, and clear reserved
; 306  :     //
; 307  : 
; 308  :     *(PDWORD)(&pcdb->Reserved) = dwRet;
; 309  :     
; 310  :     pcdb->LBA = 0;
; 311  : 
; 312  :     pcdb->NACA = 0;
; 313  : 
; 314  :     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           |$L32920|
  00160		 |$L32931|

; 276  :     {
; 277  :         return(0);

  00160	e3a03000	 mov         r3, #0
  00164		 |$L32920|

; 300  :         }
; 301  :     }
; 302  : 
; 303  : 
; 304  :     //
; 305  :     // set up endian swapped allocation length, and clear reserved
; 306  :     //
; 307  : 
; 308  :     *(PDWORD)(&pcdb->Reserved) = dwRet;
; 309  :     
; 310  :     pcdb->LBA = 0;
; 311  : 
; 312  :     pcdb->NACA = 0;
; 313  : 
; 314  :     return(EndSwap(dwRet));

  00164	e1a00003	 mov         r0, r3

; 315  : }

  00168	e8bd47f0	 ldmia       sp!, {r4 - r10, lr}
  0016c	e12fff1e	 bx          lr
  00170		 |$L33182|
  00170	00000000	 DCD         |rkret|
  00174		 |$M33178|

			 ENDP  ; |?DVDSetupSendKey@@YAKPAU_ATAPI_COMMAND_PACKET@@PAU_DVD_COPY_PROTECT_KEY@@PAU_RKFMT_CHLGKEY@@@Z|, DVDSetupSendKey

	EXPORT	|?DVDSendKey@CDisk@@QAAKPAU_IOREQ@@@Z|	; CDisk::DVDSendKey
	IMPORT	|?AtapiSendData@CDisk@@QAAHPAU_SGX_BUF@@KPAK@Z| ; CDisk::AtapiSendData

  00000			 AREA	 |.text| { |?DVDSendKey@CDisk@@QAAKPAU_IOREQ@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?DVDSendKey@CDisk@@QAAKPAU_IOREQ@@@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?DVDSendKey@CDisk@@QAAKPAU_IOREQ@@@Z| } ; comdat associative
|$T33197| DCD	|$L33196|
	DCD	0x40004002
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?DVDSendKey@CDisk@@QAAKPAU_IOREQ@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |?DVDSendKey@CDisk@@QAAKPAU_IOREQ@@@Z| PROC ; CDisk::DVDSendKey

; 319  : {

  00000		 |$L33196|
  00000	e92d40f0	 stmdb       sp!, {r4 - r7, lr}
  00004	e24dd034	 sub         sp, sp, #0x34
  00008		 |$M33194|
  00008	e1a04001	 mov         r4, r1
  0000c	e1a07000	 mov         r7, r0

; 320  :     DWORD dwError = ERROR_SUCCESS;
; 321  :     ATAPI_COMMAND_PACKET    CmdPkt;
; 322  :     PDVD_COPY_PROTECT_KEY pKey = (PDVD_COPY_PROTECT_KEY)pIOReq->pInBuf;
; 323  :     DWORD dwLength;
; 324  :     RKFMT_CHLGKEY keyBuf;
; 325  :     SGX_BUF SgBuf;
; 326  :     DWORD dwRet;
; 327  : 
; 328  :     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

; 329  : 
; 330  :     if (pIOReq->dwCode ==  IOCTL_DVD_END_SESSION) {

  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         |$L32963|

; 331  :         BYTE bAgid;
; 332  :         pKey->KeyType = DvdAGID;
; 333  :         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

; 334  :         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]

; 335  :             bAgid = 0;

  00074	03a02000	 moveq       r2, #0

; 336  : 
; 337  :         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|

; 338  :     } else {

  00088	ea000003	 b           |$L33193|
  0008c		 |$L32963|

; 339  :         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		 |$L33193|

; 340  :     }
; 341  : 
; 342  :     SgBuf.sb_len = dwLength;
; 343  :     SgBuf.sb_buf = (PBYTE) &keyBuf;

  0009c	e28d3010	 add         r3, sp, #0x10
  000a0	e58d3008	 str         r3, [sp, #8]
  000a4	e1a0e000	 mov         lr, r0

; 344  : 
; 345  :     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@CDisk@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z|
  000c0	e3500000	 cmp         r0, #0
  000c4	0a000008	 beq         |$L32969|

; 346  :         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@CDisk@@QAAHPAU_SGX_BUF@@KPAK@Z|
  000dc	e3500000	 cmp         r0, #0
  000e0	1a000002	 bne         |$L32972|

; 347  :             DEBUGMSG( ZONE_ERROR|ZONE_CDROM, (TEXT("Atapi::DVDSendKey Failed\r\n")));
; 348  :             dwError = ERROR_WRITE_FAULT;

  000e4	e3a0501d	 mov         r5, #0x1D

; 349  :         }
; 350  :     } else {

  000e8	ea000000	 b           |$L32972|
  000ec		 |$L32969|

⌨️ 快捷键说明

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