📄 atamain.cod
字号:
00a68 |$L32442|
; 247 : return TRUE;
00a68 e59d0004 ldr r0, [sp, #4]
; 252 : }
00a6c e28dd008 add sp, sp, #8
00a70 e89d6000 ldmia sp, {sp, lr}
00a74 e12fff1e bx lr
00a78 |$L33151|
00a78 00000000 DCD |?g_pDiskRoot@@3PAVCDisk@@A|
00a7c |$M33148|
ENDP ; |?AtaIsValidDisk@@YAHPAVCDisk@@@Z|, AtaIsValidDisk
EXPORT |?AtaGetRegistryResources@@YAHPAUHKEY__@@PAU_DDKWINDOWINFO_tag@@@Z| ; AtaGetRegistryResources
EXPORT |??_C@_1JM@EKFEHKBM@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAA?$AAt?$AAa?$AAG?$AAe?$AAt?$AAR?$AAe?$AAg?$AAi?$AAs?$AAt?$AAr?$AAy@| [ DATA ] ; `string'
IMPORT |DDKReg_GetWindowInfo|
00048 AREA |.pdata|, PDATA
|$T33161| DCD |$L33160|
DCD 0x40004404
00000 AREA |.rdata| { |??_C@_1JM@EKFEHKBM@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAA?$AAt?$AAa?$AAG?$AAe?$AAt?$AAR?$AAe?$AAg?$AAi?$AAs?$AAt?$AAr?$AAy@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1JM@EKFEHKBM@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAA?$AAt?$AAa?$AAG?$AAe?$AAt?$AAR?$AAe?$AAg?$AAi?$AAs?$AAt?$AAr?$AAy@| DCB "A"
DCB 0x0, "t", 0x0, "a", 0x0, "p", 0x0, "i", 0x0, "!", 0x0, "A"
DCB 0x0, "t", 0x0, "a", 0x0, "G", 0x0, "e", 0x0, "t", 0x0, "R"
DCB 0x0, "e", 0x0, "g", 0x0, "i", 0x0, "s", 0x0, "t", 0x0, "r"
DCB 0x0, "y", 0x0, "R", 0x0, "e", 0x0, "s", 0x0, "o", 0x0, "u"
DCB 0x0, "r", 0x0, "c", 0x0, "e", 0x0, "s", 0x0, ">", 0x0, " "
DCB 0x0, "b", 0x0, "u", 0x0, "s", 0x0, " ", 0x0, "t", 0x0, "y"
DCB 0x0, "p", 0x0, "e", 0x0, " ", 0x0, "n", 0x0, "o", 0x0, "t"
DCB 0x0, " ", 0x0, "s", 0x0, "p", 0x0, "e", 0x0, "c", 0x0, "i"
DCB 0x0, "f", 0x0, "i", 0x0, "e", 0x0, "d", 0x0, ",", 0x0, " "
DCB 0x0, "u", 0x0, "s", 0x0, "i", 0x0, "n", 0x0, "g", 0x0, " "
DCB 0x0, "P", 0x0, "C", 0x0, "I", 0x0, " ", 0x0, "a", 0x0, "s"
DCB 0x0, " ", 0x0, "d", 0x0, "e", 0x0, "f", 0x0, "a", 0x0, "u"
DCB 0x0, "l", 0x0, "t", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Odt
00a7c AREA |.text|, CODE, ARM
00a7c |?AtaGetRegistryResources@@YAHPAUHKEY__@@PAU_DDKWINDOWINFO_tag@@@Z| PROC ; AtaGetRegistryResources
; 262 : {
00a7c |$L33160|
00a7c e1a0c00d mov r12, sp
00a80 e92d0003 stmdb sp!, {r0, r1}
00a84 e92d5000 stmdb sp!, {r12, lr}
00a88 e24dd010 sub sp, sp, #0x10
00a8c |$M33158|
; 263 : DEBUGCHK(pdwi != NULL);
00a8c e59d301c ldr r3, [sp, #0x1C]
00a90 e3530000 cmp r3, #0
00a94 0a000002 beq |$L33153|
00a98 e3a03001 mov r3, #1
00a9c e58d3004 str r3, [sp, #4]
00aa0 ea000008 b |$L33154|
00aa4 |$L33153|
00aa4 e3a03f41 mov r3, #0x41, 30
00aa8 e3833003 orr r3, r3, #3
00aac e59f20d4 ldr r2, [pc, #0xD4]
00ab0 e59f10c8 ldr r1, [pc, #0xC8]
00ab4 e59f00c8 ldr r0, [pc, #0xC8]
00ab8 eb000000 bl NKDbgPrintfW
00abc e6000010 DCD 0xe6000010
00ac0 e3a03000 mov r3, #0
00ac4 e58d3004 str r3, [sp, #4]
00ac8 |$L33154|
; 264 :
; 265 : if (!pdwi) {
00ac8 e59d301c ldr r3, [sp, #0x1C]
00acc e3530000 cmp r3, #0
00ad0 1a000002 bne |$L32454|
; 266 : return FALSE;
00ad4 e3a03000 mov r3, #0
00ad8 e58d3000 str r3, [sp]
00adc ea000022 b |$L32451|
00ae0 |$L32454|
; 267 : }
; 268 :
; 269 : // fetch I/O window information
; 270 : pdwi->cbSize = sizeof(*pdwi);
00ae0 e59d201c ldr r2, [sp, #0x1C]
00ae4 e3a03074 mov r3, #0x74
00ae8 e5823000 str r3, [r2]
; 271 : if (ERROR_SUCCESS != ::DDKReg_GetWindowInfo(hDevKey, pdwi)) {
00aec e59d101c ldr r1, [sp, #0x1C]
00af0 e59d0018 ldr r0, [sp, #0x18]
00af4 eb000000 bl DDKReg_GetWindowInfo
00af8 e58d0008 str r0, [sp, #8]
00afc e59d3008 ldr r3, [sp, #8]
00b00 e3530000 cmp r3, #0
00b04 0a000002 beq |$L32455|
; 272 : return FALSE;
00b08 e3a03000 mov r3, #0
00b0c e58d3000 str r3, [sp]
00b10 ea000015 b |$L32451|
00b14 |$L32455|
; 273 : }
; 274 : // if interface not specified, then assume PCI
; 275 : if (pdwi->dwInterfaceType == InterfaceTypeUndefined) {
00b14 e59d301c ldr r3, [sp, #0x1C]
00b18 e2833008 add r3, r3, #8
00b1c e5933000 ldr r3, [r3]
00b20 e3730001 cmn r3, #1
00b24 1a00000e bne |$L32456|
; 276 : DEBUGMSG(ZONE_WARNING, (_T(
; 277 : "Atapi!AtaGetRegistryResources> bus type not specified, using PCI as default\r\n"
; 278 : )));
00b28 e59f3050 ldr r3, [pc, #0x50]
00b2c e5933440 ldr r3, [r3, #0x440]
00b30 e3130a01 tst r3, #1, 20
00b34 0a000004 beq |$L33155|
00b38 e59f003c ldr r0, [pc, #0x3C]
00b3c eb000000 bl NKDbgPrintfW
00b40 e3a03001 mov r3, #1
00b44 e58d300c str r3, [sp, #0xC]
00b48 ea000001 b |$L33156|
00b4c |$L33155|
00b4c e3a03000 mov r3, #0
00b50 e58d300c str r3, [sp, #0xC]
00b54 |$L33156|
; 279 : pdwi->dwInterfaceType = PCIBus;
00b54 e59d301c ldr r3, [sp, #0x1C]
00b58 e2832008 add r2, r3, #8
00b5c e3a03005 mov r3, #5
00b60 e5823000 str r3, [r2]
00b64 |$L32456|
; 280 : }
; 281 :
; 282 : return TRUE;
00b64 e3a03001 mov r3, #1
00b68 e58d3000 str r3, [sp]
00b6c |$L32451|
; 266 : return FALSE;
00b6c e59d0000 ldr r0, [sp]
; 283 : }
00b70 e28dd010 add sp, sp, #0x10
00b74 e89d6000 ldmia sp, {sp, lr}
00b78 e12fff1e bx lr
00b7c |$L33162|
00b7c 00000000 DCD |??_C@_1JM@EKFEHKBM@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAA?$AAt?$AAa?$AAG?$AAe?$AAt?$AAR?$AAe?$AAg?$AAi?$AAs?$AAt?$AAr?$AAy@|
00b80 00000000 DCD |dpCurSettings|
00b84 00000000 DCD |??_C@_1FK@FNONLNGN@?$AA?$CF?$AAs?$AA?3?$AA?5?$AAD?$AAE?$AAB?$AAU?$AAG?$AAC?$AAH?$AAK?$AA?5?$AAf?$AAa?$AAi?$AAl?$AAe?$AAd?$AA?5@|
00b88 00000000 DCD |??_C@_1HA@HPHGJOKB@?$AAd?$AA?3?$AA?2?$AAw?$AAi?$AAn?$AAc?$AAe?$AA5?$AA0?$AA0?$AA?2?$AAp?$AAl?$AAa?$AAt?$AAf?$AAo?$AAr?$AAm@|
00b8c |$M33159|
ENDP ; |?AtaGetRegistryResources@@YAHPAUHKEY__@@PAU_DDKWINDOWINFO_tag@@@Z|, AtaGetRegistryResources
EXPORT |?DoIoTranslation@@YAKPAU_DDKWINDOWINFO_tag@@K@Z| ; DoIoTranslation
IMPORT |TransBusAddrToVirtual|
00050 AREA |.pdata|, PDATA
|$T33172| DCD |$L33171|
DCD 0x40005904
; Function compile flags: /Odt
00b8c AREA |.text|, CODE, ARM
00b8c |?DoIoTranslation@@YAKPAU_DDKWINDOWINFO_tag@@K@Z| PROC ; DoIoTranslation
; 291 : {
00b8c |$L33171|
00b8c e1a0c00d mov r12, sp
00b90 e92d0003 stmdb sp!, {r0, r1}
00b94 e92d5000 stmdb sp!, {r12, lr}
00b98 e24dd02c sub sp, sp, #0x2C
00b9c |$M33169|
; 292 : PHYSICAL_ADDRESS PhysicalAddress; // bus address
; 293 : DWORD AddressSpace = 1; // mark bus address as being in an I/O window
00b9c e3a03001 mov r3, #1
00ba0 e58d3018 str r3, [sp, #0x18]
; 294 : LPVOID pAddress; // return
; 295 :
; 296 : DEBUGCHK(pdwi != NULL);
00ba4 e59d3034 ldr r3, [sp, #0x34]
00ba8 e3530000 cmp r3, #0
00bac 0a000002 beq |$L33164|
00bb0 e3a03001 mov r3, #1
00bb4 e58d3020 str r3, [sp, #0x20]
00bb8 ea000007 b |$L33165|
00bbc |$L33164|
00bbc e3a03f4a mov r3, #0x4A, 30
00bc0 e59f2124 ldr r2, [pc, #0x124]
00bc4 e59f111c ldr r1, [pc, #0x11C]
00bc8 e59f0114 ldr r0, [pc, #0x114]
00bcc eb000000 bl NKDbgPrintfW
00bd0 e6000010 DCD 0xe6000010
00bd4 e3a03000 mov r3, #0
00bd8 e58d3020 str r3, [sp, #0x20]
00bdc |$L33165|
; 297 : DEBUGCHK(dwIoWindowIndex < MAX_DEVICE_WINDOWS);
00bdc e59d3038 ldr r3, [sp, #0x38]
00be0 e3530006 cmp r3, #6
00be4 2a000002 bcs |$L33166|
00be8 e3a03001 mov r3, #1
00bec e58d3024 str r3, [sp, #0x24]
00bf0 ea000008 b |$L33167|
00bf4 |$L33166|
00bf4 e3a03f4a mov r3, #0x4A, 30
00bf8 e3833001 orr r3, r3, #1
00bfc e59f20e8 ldr r2, [pc, #0xE8]
00c00 e59f10e0 ldr r1, [pc, #0xE0]
00c04 e59f00d8 ldr r0, [pc, #0xD8]
00c08 eb000000 bl NKDbgPrintfW
00c0c e6000010 DCD 0xe6000010
00c10 e3a03000 mov r3, #0
00c14 e58d3024 str r3, [sp, #0x24]
00c18 |$L33167|
; 298 : if (!pdwi) {
00c18 e59d3034 ldr r3, [sp, #0x34]
00c1c e3530000 cmp r3, #0
00c20 1a000002 bne |$L32470|
; 299 : return NULL;
00c24 e3a03000 mov r3, #0
00c28 e58d301c str r3, [sp, #0x1C]
00c2c ea000028 b |$L32462|
00c30 |$L32470|
; 300 : }
; 301 :
; 302 : // extract the target bus address
; 303 : PhysicalAddress.HighPart = 0;
00c30 e3a03000 mov r3, #0
00c34 e58d3010 str r3, [sp, #0x10]
; 304 : PhysicalAddress.LowPart = pdwi->ioWindows[dwIoWindowIndex].dwBase;
00c38 e59d3034 ldr r3, [sp, #0x34]
00c3c e2831010 add r1, r3, #0x10
00c40 e59d2038 ldr r2, [sp, #0x38]
00c44 e3a03008 mov r3, #8
00c48 e0030392 mul r3, r2, r3
00c4c e0813003 add r3, r1, r3
00c50 e5933000 ldr r3, [r3]
00c54 e58d300c str r3, [sp, #0xC]
; 305 :
; 306 : // translate the target bus address to a virtual address
; 307 : if (!TransBusAddrToVirtual(
; 308 : (INTERFACE_TYPE)pdwi->dwInterfaceType,
; 309 : pdwi->dwBusNumber,
; 310 : PhysicalAddress,
; 311 : pdwi->ioWindows[dwIoWindowIndex].dwLen,
; 312 : &AddressSpace,
; 313 : &pAddress
; 314 : )) {
00c58 e28d3014 add r3, sp, #0x14
00c5c e58d3008 str r3, [sp, #8]
00c60 e28d3018 add r3, sp, #0x18
00c64 e58d3004 str r3, [sp, #4]
00c68 e59d3034 ldr r3, [sp, #0x34]
00c6c e2831010 add r1, r3, #0x10
00c70 e59d2038 ldr r2, [sp, #0x38]
00c74 e3a03008 mov r3, #8
00c78 e0030392 mul r3, r2, r3
00c7c e0813003 add r3, r1, r3
00c80 e2833004 add r3, r3, #4
00c84 e5933000 ldr r3, [r3]
00c88 e58d3000 str r3, [sp]
00c8c e59d200c ldr r2, [sp, #0xC]
00c90 e59d3010 ldr r3, [sp, #0x10]
00c94 e59d1034 ldr r1, [sp, #0x34]
00c98 e2811004 add r1, r1, #4
00c9c e5911000 ldr r1, [r1]
00ca0 e59d0034 ldr r0, [sp, #0x34]
00ca4 e2800008 add r0, r0, #8
00ca8 e5900000 ldr r0, [r0]
00cac eb000000 bl TransBusAddrToVirtual
00cb0 e58d0028 str r0, [sp, #0x28]
00cb4 e59d3028 ldr r3, [sp, #0x28]
00cb8 e3530000 cmp r3, #0
00cbc 1a000002 bne |$L32472|
; 315 : return NULL;
00cc0 e3a03000 mov r3, #0
00cc4 e58d301c str r3, [sp, #0x1C]
00cc8 ea000001 b |$L32462|
00ccc |$L32472|
; 316 : }
; 317 :
; 318 : return (DWORD)pAddress;
00ccc e59d3014 ldr r3, [sp, #0x14]
00cd0 e58d301c str r3, [sp, #0x1C]
00cd4 |$L32462|
; 299 : return NULL;
00cd4 e59d001c ldr r0, [sp, #0x1C]
; 319 : }
00cd8 e28dd02c add sp, sp, #0x2C
00cdc e89d6000 ldmia sp, {sp, lr}
00ce0 e12fff1e bx lr
00ce4 |$L33173|
00ce4 00000000 DCD |??_C@_1FK@FNONLNGN@?$AA?$CF?$AAs?$AA?3?$AA?5?$AAD?$AAE?$AAB?$AAU?$AAG?$AAC?$AAH?$AAK?$AA?5?$AAf?$AAa?$AAi?$AAl?$AAe?$AAd?$AA?5@|
00ce8 00000000 DCD |dpCurSettings|
00cec 00000000 DCD |??_C@_1HA@HPHGJOKB@?$AAd?$AA?3?$AA?2?$AAw?$AAi?$AAn?$AAc?$AAe?$AA5?$AA0?$AA0?$AA?2?$AAp?$AAl?$AAa?$AAt?$AAf?$AAo?$AAr?$AAm@|
00cf0 |$M33170|
ENDP ; |?DoIoTranslation@@YAKPAU_DDKWINDOWINFO_tag@@K@Z|, DoIoTranslation
EXPORT |?DoStaticTranslation@@YAKPAU_DDKWINDOWINFO_tag@@K@Z| ; DoStaticTranslation
IMPORT |TransBusAddrToStatic|
00058 AREA |.pdata|, PDATA
|$T3318
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -