📄 dvdioctl.cod
字号:
; 351 : dwError = ERROR_GEN_FAILURE;
000ec e3a0501f mov r5, #0x1F
000f0 |$L32972|
; 352 : }
; 353 :
; 354 : return dwError;
000f0 e1a00005 mov r0, r5
; 355 : }
000f4 e28dd034 add sp, sp, #0x34
000f8 e8bd40f0 ldmia sp!, {r4 - r7, lr}
000fc e12fff1e bx lr
00100 |$M33195|
ENDP ; |?DVDSendKey@CDisk@@QAAKPAU_IOREQ@@@Z|, CDisk::DVDSendKey
EXPORT |?DVDSetRegion@CDisk@@QAAKPAU_IOREQ@@@Z| ; CDisk::DVDSetRegion
00000 AREA |.text| { |?DVDSetRegion@CDisk@@QAAKPAU_IOREQ@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?DVDSetRegion@CDisk@@QAAKPAU_IOREQ@@@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?DVDSetRegion@CDisk@@QAAKPAU_IOREQ@@@Z| } ; comdat associative
|$T33206| DCD |$L33205|
DCD 0x40000200
; Function compile flags: /Ogsy
00000 AREA |.text| { |?DVDSetRegion@CDisk@@QAAKPAU_IOREQ@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?DVDSetRegion@CDisk@@QAAKPAU_IOREQ@@@Z| PROC ; CDisk::DVDSetRegion
; 358 : {
00000 |$L33205|
00000 |$M33203|
; 359 : // TODO: Implement Me
; 360 : return ERROR_NOT_SUPPORTED;
00000 e3a00032 mov r0, #0x32
; 361 : }
00004 e12fff1e bx lr
00008 |$M33204|
ENDP ; |?DVDSetRegion@CDisk@@QAAKPAU_IOREQ@@@Z|, CDisk::DVDSetRegion
EXPORT |?DVDGetCopySystem@CDisk@@QAAHPAE@Z| ; CDisk::DVDGetCopySystem
00000 AREA |.text| { |?DVDGetCopySystem@CDisk@@QAAHPAE@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?DVDGetCopySystem@CDisk@@QAAHPAE@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?DVDGetCopySystem@CDisk@@QAAHPAE@Z| } ; comdat associative
|$T33218| DCD |$L33217|
DCD 0x40002c02
; Function compile flags: /Ogsy
00000 AREA |.text| { |?DVDGetCopySystem@CDisk@@QAAHPAE@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?DVDGetCopySystem@CDisk@@QAAHPAE@Z| PROC ; CDisk::DVDGetCopySystem
; 364 : {
00000 |$L33217|
00000 e92d47f0 stmdb sp!, {r4 - r10, lr}
00004 e24dd02c sub sp, sp, #0x2C
00008 |$M33215|
00008 e1a05001 mov r5, r1
0000c e1a06000 mov r6, r0
; 365 : BOOL fSuccess = TRUE;
; 366 : ATAPI_COMMAND_PACKET CmdPkt;
; 367 : PRDVDCDB pCmd = (PRDVDCDB)&CmdPkt;
; 368 : RDVDFMT_Copy fmtCopy;
; 369 : SGX_BUF SgBuf;
; 370 : DWORD dwRet;
; 371 :
; 372 : memset( &CmdPkt, 0, sizeof(ATAPI_COMMAND_PACKET));
00010 e3a02014 mov r2, #0x14
00014 e3a01000 mov r1, #0
00018 e28d0018 add r0, sp, #0x18
0001c e3a04001 mov r4, #1
00020 eb000000 bl memset
; 373 :
; 374 : pCmd->OpCode= DVDOP_READ_DVD_STRUC;
; 375 : pCmd->Format= DVDSTRUC_FMT_COPY;
; 376 : pCmd->Len = sizeof (RDVDFMT_Copy) << 8; //Endian Swap the length
; 377 : // pCmd->Len = keyLength << 8;
; 378 :
; 379 : SgBuf.sb_len = sizeof(RDVDFMT_Copy);
; 380 : SgBuf.sb_buf = (PBYTE) &fmtCopy;
; 381 :
; 382 :
; 383 : m_dwDeviceFlags &= ~DFLAGS_MEDIA_ISDVD;
00024 e5963004 ldr r3, [r6, #4]
00028 e3a0a0ad mov r10, #0xAD
0002c e3a07001 mov r7, #1
00030 e3c33080 bic r3, r3, #0x80
00034 e5863004 str r3, [r6, #4]
00038 e3a08b02 mov r8, #2, 22
0003c e3a09008 mov r9, #8
00040 e28de010 add lr, sp, #0x10
; 384 :
; 385 : if (AtapiSendCommand(&CmdPkt)) {
00044 e3a03000 mov r3, #0
00048 e3a02000 mov r2, #0
0004c e28d1018 add r1, sp, #0x18
00050 e1a00006 mov r0, r6
00054 e5cda018 strb r10, [sp, #0x18]
00058 e5cd701f strb r7, [sp, #0x1F]
0005c e1cd82b0 strh r8, [sp, #0x20]
00060 e58d900c str r9, [sp, #0xC]
00064 e58de008 str lr, [sp, #8]
00068 eb000000 bl |?AtapiSendCommand@CDisk@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z|
0006c e3500000 cmp r0, #0
00070 0a000009 beq |$L32992|
; 386 : if (AtapiReceiveData(&SgBuf, 1, &dwRet)) {
00074 e28d3000 add r3, sp, #0
00078 e3a02001 mov r2, #1
0007c e28d1008 add r1, sp, #8
00080 e1a00006 mov r0, r6
00084 eb000000 bl |?AtapiReceiveData@CDisk@@QAAHPAU_SGX_BUF@@KPAK@Z|
00088 e3500000 cmp r0, #0
0008c 0a000003 beq |$L32995|
; 387 : *pbCopySystem = (BYTE)(fmtCopy.Data);
00090 e59d3014 ldr r3, [sp, #0x14]
00094 e5c53000 strb r3, [r5]
; 388 : }
; 389 : } else {
00098 ea000000 b |$L32995|
0009c |$L32992|
; 390 : fSuccess = FALSE;
0009c e3a04000 mov r4, #0
000a0 |$L32995|
; 391 : }
; 392 : return fSuccess;
000a0 e1a00004 mov r0, r4
; 393 : }
000a4 e28dd02c add sp, sp, #0x2C
000a8 e8bd47f0 ldmia sp!, {r4 - r10, lr}
000ac e12fff1e bx lr
000b0 |$M33216|
ENDP ; |?DVDGetCopySystem@CDisk@@QAAHPAE@Z|, CDisk::DVDGetCopySystem
EXPORT |?DVDGetRegion@CDisk@@QAAKPAU_IOREQ@@@Z| ; CDisk::DVDGetRegion
IMPORT |MapPtrToProcess|
IMPORT |GetCallerProcess|
00000 AREA |.text| { |?DVDGetRegion@CDisk@@QAAKPAU_IOREQ@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?DVDGetRegion@CDisk@@QAAKPAU_IOREQ@@@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?DVDGetRegion@CDisk@@QAAKPAU_IOREQ@@@Z| } ; comdat associative
|$T33232| DCD |$L33231|
DCD 0x40004302
; Function compile flags: /Ogsy
00000 AREA |.text| { |?DVDGetRegion@CDisk@@QAAKPAU_IOREQ@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?DVDGetRegion@CDisk@@QAAKPAU_IOREQ@@@Z| PROC ; CDisk::DVDGetRegion
; 210 : {
00000 |$L33231|
00000 e92d4070 stmdb sp!, {r4 - r6, lr}
00004 e24dd02c sub sp, sp, #0x2C
00008 |$M33229|
00008 e1a04001 mov r4, r1
0000c e1a06000 mov r6, r0
; 211 : DWORD dwError = ERROR_SUCCESS;
; 212 : DWORD dwLength;
; 213 : SGX_BUF SgBuf;
; 214 : DWORD dwRet;
; 215 : RKFMT_RPC rpcData;
; 216 : PDVD_REGIONCE preg;
; 217 : ATAPI_COMMAND_PACKET CmdPkt;
; 218 :
; 219 : memset( &CmdPkt, 0, sizeof(ATAPI_COMMAND_PACKET));
00010 e3a02014 mov r2, #0x14
00014 e3a01000 mov r1, #0
00018 e28d0018 add r0, sp, #0x18
0001c e3a05000 mov r5, #0
00020 eb000000 bl memset
; 220 : preg = (PDVD_REGIONCE)MapPtrToProcess((LPVOID)pIOReq->pOutBuf, GetCallerProcess());
00024 eb000000 bl GetCallerProcess
00028 e1a01000 mov r1, r0
0002c e5940020 ldr r0, [r4, #0x20]
00030 eb000000 bl MapPtrToProcess
00034 e1a04000 mov r4, r0
; 221 :
; 222 : DVDGetCopySystem(&(preg->CopySystem));
00038 e2841004 add r1, r4, #4
0003c e1a00006 mov r0, r6
00040 eb000000 bl |?DVDGetCopySystem@CDisk@@QAAHPAE@Z|
; 223 : if (m_dwDeviceFlags & DFLAGS_MEDIA_ISDVD) {
00044 e5963004 ldr r3, [r6, #4]
00048 e3130080 tst r3, #0x80
0004c 0a00002a beq |$L32914|
; 224 : memset( &CmdPkt, 0, sizeof(ATAPI_COMMAND_PACKET));
00050 e3a02014 mov r2, #0x14
00054 e3a01000 mov r1, #0
00058 e28d0018 add r0, sp, #0x18
0005c eb000000 bl memset
; 225 :
; 226 : dwLength = DVDSetupReadTitleKey(&CmdPkt, DvdGetRPC, 0, 0);
00060 e3a03000 mov r3, #0
00064 e3a02000 mov r2, #0
00068 e3a01008 mov r1, #8
0006c e28d0018 add r0, sp, #0x18
00070 eb000000 bl |?DVDSetupReadTitleKey@@YAKPAU_ATAPI_COMMAND_PACKET@@EEK@Z|
; 227 :
; 228 : SgBuf.sb_len = sizeof(RKFMT_RPC);
00074 e3a02008 mov r2, #8
; 229 : SgBuf.sb_buf = (PBYTE) &rpcData;
00078 e28d3008 add r3, sp, #8
0007c e58d2014 str r2, [sp, #0x14]
00080 e58d3010 str r3, [sp, #0x10]
; 230 :
; 231 : if (AtapiSendCommand(&CmdPkt)) {
00084 e3a03000 mov r3, #0
00088 e3a02000 mov r2, #0
0008c e28d1018 add r1, sp, #0x18
00090 e1a00006 mov r0, r6
00094 eb000000 bl |?AtapiSendCommand@CDisk@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z|
00098 e3500000 cmp r0, #0
0009c 0a000012 beq |$L32906|
; 232 : if (AtapiReceiveData(&SgBuf, 1, &dwRet)) {
000a0 e28d3000 add r3, sp, #0
000a4 e3a02001 mov r2, #1
000a8 e28d1010 add r1, sp, #0x10
000ac e1a00006 mov r0, r6
000b0 eb000000 bl |?AtapiReceiveData@CDisk@@QAAHPAU_SGX_BUF@@KPAK@Z|
000b4 e3500000 cmp r0, #0
000b8 0a000009 beq |$L32907|
; 233 : if (rpcData.ResetCounts & 0xc0) {
000bc e5dd300c ldrb r3, [sp, #0xC]
000c0 e31300c0 tst r3, #0xC0
000c4 0a000008 beq |$L32906|
; 234 : preg->SystemRegion = rpcData.SystemRegion ^ 0xff;
000c8 e5dd300d ldrb r3, [sp, #0xD]
000cc e1e03003 mvn r3, r3
000d0 e5c43006 strb r3, [r4, #6]
; 235 : preg->ResetCount = rpcData.ResetCounts & 0x07;
000d4 e5dd300c ldrb r3, [sp, #0xC]
000d8 e2033007 and r3, r3, #7
000dc e5c43007 strb r3, [r4, #7]
; 236 : } else {
; 237 : // TODO: This is a virgin drive. Should we set the region ???
; 238 : // TODO: For now send back the default region
; 239 : DEBUGMSG( ZONE_ERROR|ZONE_CDROM, (TEXT("Atapi:Brand new drive !!!\r\n")));
; 240 : preg->SystemRegion = (BYTE)DEFAULT_DECODER_REGION;
; 241 : preg->ResetCount = 0;
; 242 : }
; 243 : } else {
000e0 ea000005 b |$L32914|
000e4 |$L32907|
; 244 : DEBUGMSG( ZONE_ERROR|ZONE_CDROM, (TEXT("Atapi:DVDGetRegion failed on recieve\r\n")));
; 245 : dwError = ERROR_READ_FAULT;
000e4 e3a0501e mov r5, #0x1E
; 246 : }
; 247 : } else {
000e8 ea000003 b |$L32914|
000ec |$L32906|
; 248 : // Probably a RPC I Drive
; 249 : preg->SystemRegion = (BYTE)DEFAULT_DECODER_REGION;
; 250 : preg->ResetCount = 0;
000ec e3a02000 mov r2, #0
000f0 e3a03001 mov r3, #1
000f4 e5c42007 strb r2, [r4, #7]
000f8 e5c43006 strb r3, [r4, #6]
000fc |$L32914|
; 251 : }
; 252 : }
; 253 : return dwError;
000fc e1a00005 mov r0, r5
; 254 : }
00100 e28dd02c add sp, sp, #0x2C
00104 e8bd4070 ldmia sp!, {r4 - r6, lr}
00108 e12fff1e bx lr
0010c |$M33230|
ENDP ; |?DVDGetRegion@CDisk@@QAAKPAU_IOREQ@@@Z|, CDisk::DVDGetRegion
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -