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

📄 dvdioctl.cod

📁 windows CE 的BSP开发包.包含众多的驱动程序和OAL层的开发代码
💻 COD
📖 第 1 页 / 共 4 页
字号:
  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

⌨️ 快捷键说明

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