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

📄 dvdioctl.cod

📁 windows CE 的BSP开发包.包含众多的驱动程序和OAL层的开发代码
💻 COD
📖 第 1 页 / 共 4 页
字号:
  00000		 |?CopyDVDKey@@YAKKPAU_DVD_COPY_PROTECT_KEY@@PAU_RKFMT_TITLE@@@Z| PROC ; CopyDVDKey

; 119  : {

  00000		 |$L32425|
  00000	e92d4070	 stmdb       sp!, {r4 - r6, lr}
  00004	e24dd004	 sub         sp, sp, #4
  00008		 |$M32423|
  00008	e1a06001	 mov         r6, r1

; 120  :     DWORD dwTmp;
; 121  :     PBYTE psrc, pdest;
; 122  : 
; 123  :     dwTmp = dwKeyLength - 4;
; 124  : 
; 125  :     pdest = (PBYTE)&(pKey->KeyData[0]);
; 126  : 
; 127  :     switch (pKey->KeyType) {

  0000c	e5d6400c	 ldrb        r4, [r6, #0xC]
  00010	e5d6300d	 ldrb        r3, [r6, #0xD]
  00014	e5d6e00e	 ldrb        lr, [r6, #0xE]
  00018	e5d6500f	 ldrb        r5, [r6, #0xF]
  0001c	e1843403	 orr         r3, r4, r3, lsl #8
  00020	e183380e	 orr         r3, r3, lr, lsl #16
  00024	e1933c05	 orrs        r3, r3, r5, lsl #24
  00028	e286e020	 add         lr, r6, #0x20
  0002c	e2404004	 sub         r4, r0, #4
  00030	0a00000d	 beq         |$L32154|
  00034	e3530004	 cmp         r3, #4

; 137  :         break;
; 138  :     default:
; 139  :         psrc = (PBYTE)&(pTitle->cgms);

  00038	12825004	 addne       r5, r2, #4
  0003c	1a000015	 bne         |$L32148|
  00040	e5d20004	 ldrb        r0, [r2, #4]
  00044	e2825005	 add         r5, r2, #5
  00048	e2444001	 sub         r4, r4, #1
  0004c	e1a03420	 mov         r3, r0, lsr #8
  00050	e1a02820	 mov         r2, r0, lsr #16
  00054	e1a01c20	 mov         r1, r0, lsr #24
  00058	e5c63015	 strb        r3, [r6, #0x15]
  0005c	e5c62016	 strb        r2, [r6, #0x16]
  00060	e5c61017	 strb        r1, [r6, #0x17]
  00064	e5c60014	 strb        r0, [r6, #0x14]
  00068	ea00000a	 b           |$L32148|
  0006c		 |$L32154|

; 128  :     case DvdTitleKey:
; 129  :         pKey->KeyFlags = pTitle->cgms;
; 130  :         dwTmp--;
; 131  :         psrc = (PBYTE)&(pTitle->title[0]);
; 132  :         pdest = (PBYTE)&(pKey->KeyData[0]);
; 133  :         break;
; 134  :     case DvdAGID:
; 135  :         pKey->SessionId = ((PRKFMT_AGID)pTitle)->agid >> 6;

  0006c	e5d23007	 ldrb        r3, [r2, #7]

; 136  :         dwTmp = 0;

  00070	e59d5000	 ldr         r5, [sp]
  00074	e3a04000	 mov         r4, #0
  00078	e1a00323	 mov         r0, r3, lsr #6
  0007c	e1a03420	 mov         r3, r0, lsr #8
  00080	e1a02820	 mov         r2, r0, lsr #16
  00084	e1a01c20	 mov         r1, r0, lsr #24
  00088	e5c63009	 strb        r3, [r6, #9]
  0008c	e5c6200a	 strb        r2, [r6, #0xA]
  00090	e5c6100b	 strb        r1, [r6, #0xB]
  00094	e5c60008	 strb        r0, [r6, #8]
  00098		 |$L32148|

; 140  :         pdest = (PBYTE)&(pKey->KeyData[0]);
; 141  :         break;
; 142  :     }
; 143  : 
; 144  :     for (;dwTmp >0; dwTmp--) {

  00098	e3540000	 cmp         r4, #0
  0009c	0a000003	 beq         |$L32161|
  000a0		 |$L32159|

; 145  :         *pdest++ = *psrc++;

  000a0	e4d53001	 ldrb        r3, [r5], #1
  000a4	e2544001	 subs        r4, r4, #1
  000a8	e4ce3001	 strb        r3, [lr], #1
  000ac	1afffffb	 bne         |$L32159|
  000b0		 |$L32161|

; 146  :     }
; 147  : 
; 148  :     return TRUE;

  000b0	e3a00001	 mov         r0, #1

; 149  : }

  000b4	e28dd004	 add         sp, sp, #4
  000b8	e8bd4070	 ldmia       sp!, {r4 - r6, lr}
  000bc	e12fff1e	 bx          lr
  000c0		 |$M32424|

			 ENDP  ; |?CopyDVDKey@@YAKKPAU_DVD_COPY_PROTECT_KEY@@PAU_RKFMT_TITLE@@@Z|, CopyDVDKey

	EXPORT	|?DVDReadKey@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| ; CPCIDiskAndCD::DVDReadKey
	IMPORT	|?AtapiSendCommand@CPCIDiskAndCD@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z| ; CPCIDiskAndCD::AtapiSendCommand
	IMPORT	|?AtapiReceiveData@CPCIDiskAndCD@@QAAHPAU_SGX_BUF@@KPAK@Z| ; CPCIDiskAndCD::AtapiReceiveData
	IMPORT	|memset|

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

  00000			 AREA	 |.pdata$$?DVDReadKey@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?DVDReadKey@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| } ; comdat associative
|$T32442| DCD	|$L32441|
	DCD	0x40004603
; Function compile flags: /Ogsy

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

  00000		 |?DVDReadKey@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| PROC ; CPCIDiskAndCD::DVDReadKey

; 155  : {

  00000		 |$L32441|
  00000	e92d40f0	 stmdb       sp!, {r4 - r7, lr}
  00004	e59fc108	 ldr         r12, [pc, #0x108]
  00008	e08dd00c	 add         sp, sp, r12
  0000c		 |$M32439|
  0000c	e1a04001	 mov         r4, r1
  00010	e1a07000	 mov         r7, r0

; 156  :     DWORD                 dwError = ERROR_SUCCESS;
; 157  :     SGX_BUF               SgBuf;
; 158  :     ATAPI_COMMAND_PACKET  CmdPkt;
; 159  :     PDVD_COPY_PROTECT_KEY pKey = (PDVD_COPY_PROTECT_KEY)pIOReq->pInBuf;
; 160  :     DWORD                 dwLength;
; 161  :     RKFMT_DISC            keyBuf;
; 162  :     DWORD                 dwRet;
; 163  : 
; 164  :     memset(&CmdPkt, 0, sizeof(ATAPI_COMMAND_PACKET));

  00014	e5946018	 ldr         r6, [r4, #0x18]
  00018	e3a02014	 mov         r2, #0x14
  0001c	e3a01000	 mov         r1, #0
  00020	e28d0010	 add         r0, sp, #0x10
  00024	e3a05000	 mov         r5, #0
  00028	eb000000	 bl          memset

; 165  : 
; 166  :     if (IOCTL_DVD_START_SESSION == pIOReq->dwCode) {

  0002c	e5943014	 ldr         r3, [r4, #0x14]

; 167  :         pKey->KeyType = DvdAGID;
; 168  :         // TODO: Check region
; 169  :         dwLength = DVDSetupReadTitleKey(&CmdPkt, DvdAGID, 0, 0);

  00030	e28d0010	 add         r0, sp, #0x10
  00034	e35309cd	 cmp         r3, #0xCD, 18
  00038	1a000009	 bne         |$L32175|
  0003c	e3a0e000	 mov         lr, #0
  00040	e3a03000	 mov         r3, #0
  00044	e3a02000	 mov         r2, #0
  00048	e3a01000	 mov         r1, #0
  0004c	e5c6e00c	 strb        lr, [r6, #0xC]
  00050	e5c6e00d	 strb        lr, [r6, #0xD]
  00054	e5c6e00e	 strb        lr, [r6, #0xE]
  00058	e5c6e00f	 strb        lr, [r6, #0xF]
  0005c	eb000000	 bl          |?DVDSetupReadTitleKey@@YAKPAU_ATAPI_COMMAND_PACKET@@EEK@Z|

; 170  :     }
; 171  :     else {

  00060	ea000001	 b           |$L32438|
  00064		 |$L32175|

; 172  :         dwLength = DVDSetupReadKey(&CmdPkt, pKey);

  00064	e1a01006	 mov         r1, r6
  00068	eb000000	 bl          |?DVDSetupReadKey@@YAKPAU_ATAPI_COMMAND_PACKET@@PAU_DVD_COPY_PROTECT_KEY@@@Z|
  0006c		 |$L32438|

; 173  :     }
; 174  : 
; 175  :     if (dwLength > pKey->KeyLength) {

  0006c	e5d63005	 ldrb        r3, [r6, #5]
  00070	e1a04000	 mov         r4, r0
  00074	e5d60004	 ldrb        r0, [r6, #4]
  00078	e5d62006	 ldrb        r2, [r6, #6]
  0007c	e5d61007	 ldrb        r1, [r6, #7]
  00080	e1803403	 orr         r3, r0, r3, lsl #8
  00084	e1833802	 orr         r3, r3, r2, lsl #16
  00088	e1833c01	 orr         r3, r3, r1, lsl #24
  0008c	e1540003	 cmp         r4, r3

; 176  :         DEBUGMSG(ZONE_ERROR, (TEXT(
; 177  :             "Atapi!CPCIDiskAndCD::DVDReadKey> illegal key request\r\n"
; 178  :             )));
; 179  :         return ERROR_INVALID_PARAMETER;

  00090	83a05057	 movhi       r5, #0x57
  00094	8a000018	 bhi         |$L32185|

; 180  :     }
; 181  : 
; 182  :     SgBuf.sb_len = dwLength;
; 183  :     SgBuf.sb_buf = (PBYTE) &keyBuf;

  00098	e28d3028	 add         r3, sp, #0x28
  0009c	e58d3000	 str         r3, [sp]

; 184  : 
; 185  :     if (AtapiSendCommand(&CmdPkt)) {

  000a0	e3a03000	 mov         r3, #0
  000a4	e3a02000	 mov         r2, #0
  000a8	e28d1010	 add         r1, sp, #0x10
  000ac	e1a00007	 mov         r0, r7
  000b0	e58d4004	 str         r4, [sp, #4]
  000b4	eb000000	 bl          |?AtapiSendCommand@CPCIDiskAndCD@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z|
  000b8	e3500000	 cmp         r0, #0
  000bc	0a00000d	 beq         |$L32180|

; 186  :         if (AtapiReceiveData(&SgBuf, 1, &dwRet)) {

  000c0	e28d3008	 add         r3, sp, #8
  000c4	e3a02001	 mov         r2, #1
  000c8	e28d1000	 add         r1, sp, #0
  000cc	e1a00007	 mov         r0, r7
  000d0	eb000000	 bl          |?AtapiReceiveData@CPCIDiskAndCD@@QAAHPAU_SGX_BUF@@KPAK@Z|
  000d4	e3500000	 cmp         r0, #0
  000d8	0a000004	 beq         |$L32181|

; 187  :             CopyDVDKey(dwLength, pKey, (PRKFMT_TITLE)&keyBuf);

  000dc	e28d2028	 add         r2, sp, #0x28
  000e0	e1a01006	 mov         r1, r6
  000e4	e1a00004	 mov         r0, r4
  000e8	eb000000	 bl          |?CopyDVDKey@@YAKKPAU_DVD_COPY_PROTECT_KEY@@PAU_RKFMT_TITLE@@@Z|

; 188  :         }
; 189  :         else {

  000ec	ea000002	 b           |$L32185|
  000f0		 |$L32181|

; 190  :             DEBUGMSG(ZONE_ERROR|ZONE_CDROM, (TEXT(
; 191  :                 "Atapi!CPCIDiskAndCD::DVDReadKey> failed to execute command %d\r\n"
; 192  :                 ), CmdPkt.Opcode));
; 193  :             dwError = ERROR_READ_FAULT;

  000f0	e3a0501e	 mov         r5, #0x1E

; 194  :         }
; 195  :     }
; 196  :     else {

  000f4	ea000000	 b           |$L32185|
  000f8		 |$L32180|

; 197  :         dwError = ERROR_GEN_FAILURE;

  000f8	e3a0501f	 mov         r5, #0x1F
  000fc		 |$L32185|

; 176  :         DEBUGMSG(ZONE_ERROR, (TEXT(
; 177  :             "Atapi!CPCIDiskAndCD::DVDReadKey> illegal key request\r\n"
; 178  :             )));
; 179  :         return ERROR_INVALID_PARAMETER;

  000fc	e1a00005	 mov         r0, r5

; 198  :     }
; 199  : 
; 200  :     return dwError;
; 201  : }

  00100	e3a0ce82	 mov         r12, #0x82, 28
  00104	e38cc00c	 orr         r12, r12, #0xC
  00108	e08dd00c	 add         sp, sp, r12
  0010c	e8bd40f0	 ldmia       sp!, {r4 - r7, lr}
  00110	e12fff1e	 bx          lr
  00114		 |$L32444|
  00114	fffff7d4	 DCD         0xfffff7d4
  00118		 |$M32440|

			 ENDP  ; |?DVDReadKey@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z|, CPCIDiskAndCD::DVDReadKey

	EXPORT	|?DVDSetupSendKey@@YAKPAU_ATAPI_COMMAND_PACKET@@PAU_DVD_COPY_PROTECT_KEY@@PAU_RKFMT_CHLGKEY@@@Z| ; DVDSetupSendKey

  00000			 AREA	 |.text| { |?DVDSetupSendKey@@YAKPAU_ATAPI_COMMAND_PACKET@@PAU_DVD_COPY_PROTECT_KEY@@PAU_RKFMT_CHLGKEY@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?DVDSetupSendKey@@YAKPAU_ATAPI_COMMAND_PACKET@@PAU_DVD_COPY_PROTECT_KEY@@PAU_RKFMT_CHLGKEY@@@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?DVDSetupSendKey@@YAKPAU_ATAPI_COMMAND_PACKET@@PAU_DVD_COPY_PROTECT_KEY@@PAU_RKFMT_CHLGKEY@@@Z| } ; comdat associative
|$T32471| DCD	|$L32470|
	DCD	0x40005d01
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?DVDSetupSendKey@@YAKPAU_ATAPI_COMMAND_PACKET@@PAU_DVD_COPY_PROTECT_KEY@@PAU_RKFMT_CHLGKEY@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |?DVDSetupSendKey@@YAKPAU_ATAPI_COMMAND_PACKET@@PAU_DVD_COPY_PROTECT_KEY@@PAU_RKFMT_CHLGKEY@@@Z| PROC ; DVDSetupSendKey

; 362  : {

  00000		 |$L32470|
  00000	e92d47f0	 stmdb       sp!, {r4 - r10, lr}
  00004		 |$M32468|
  00004	e1a08002	 mov         r8, r2
  00008	e1a0a001	 mov         r10, r1
  0000c	e1a09000	 mov         r9, r0

; 363  :     BYTE   KeyType;
; 364  :     BYTE   agid;
; 365  :     DWORD  dwRet;
; 366  :     DWORD  dwTmp;
; 367  :     PRKCDB pcdb = (PRKCDB)pCmd;
; 368  :     PVOID  pdata = &(pKey->KeyData[0]);
; 369  : 
; 370  :     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]

; 371  :     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

; 372  : 
; 373  :     pcdb->OpCode = DVDOP_SEND_KEY;
; 374  :     pcdb->Lun = 0;
; 375  :     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]

⌨️ 快捷键说明

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