📄 atamain.cod
字号:
; 149 : }
; 150 : // free DSK_ registry value set
; 151 : if (m_pDskReg[0]) {
0007c e5943034 ldr r3, [r4, #0x34]
00080 e3530000 cmp r3, #0
; 152 : LocalFree(m_pDskReg[0]);
00084 11a00003 movne r0, r3
00088 1b000000 blne LocalFree
; 153 : }
; 154 : if (m_pDskReg[1]) {
0008c e5943038 ldr r3, [r4, #0x38]
00090 e3530000 cmp r3, #0
; 155 : LocalFree(m_pDskReg[1]);
00094 11a00003 movne r0, r3
00098 1b000000 blne LocalFree
; 156 : }
; 157 : }
0009c e8bd4010 ldmia sp!, {r4, lr}
000a0 e12fff1e bx lr
000a4 |$M33057|
ENDP ; |??1CPort@@QAA@XZ|, CPort::~CPort
EXPORT |?TakeCS@CPort@@QAAXXZ| ; CPort::TakeCS
IMPORT |EnterCriticalSection|
00000 AREA |.text| { |?TakeCS@CPort@@QAAXXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?TakeCS@CPort@@QAAXXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?TakeCS@CPort@@QAAXXZ| } ; comdat associative
|$T33067| DCD |$L33066|
DCD 0x40000501
; Function compile flags: /Ogsy
00000 AREA |.text| { |?TakeCS@CPort@@QAAXXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?TakeCS@CPort@@QAAXXZ| PROC ; CPort::TakeCS
; 163 : {
00000 |$L33066|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M33064|
; 164 : EnterCriticalSection(&m_csPort);
00004 e2800004 add r0, r0, #4
00008 eb000000 bl EnterCriticalSection
; 165 : }
0000c e49de004 ldr lr, [sp], #4
00010 e12fff1e bx lr
00014 |$M33065|
ENDP ; |?TakeCS@CPort@@QAAXXZ|, CPort::TakeCS
EXPORT |?ReleaseCS@CPort@@QAAXXZ| ; CPort::ReleaseCS
IMPORT |LeaveCriticalSection|
00000 AREA |.text| { |?ReleaseCS@CPort@@QAAXXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?ReleaseCS@CPort@@QAAXXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?ReleaseCS@CPort@@QAAXXZ| } ; comdat associative
|$T33075| DCD |$L33074|
DCD 0x40000501
; Function compile flags: /Ogsy
00000 AREA |.text| { |?ReleaseCS@CPort@@QAAXXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?ReleaseCS@CPort@@QAAXXZ| PROC ; CPort::ReleaseCS
; 171 : {
00000 |$L33074|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M33072|
; 172 : LeaveCriticalSection(&m_csPort);
00004 e2800004 add r0, r0, #4
00008 eb000000 bl LeaveCriticalSection
; 173 : }
0000c e49de004 ldr lr, [sp], #4
00010 e12fff1e bx lr
00014 |$M33073|
ENDP ; |?ReleaseCS@CPort@@QAAXXZ|, CPort::ReleaseCS
EXPORT |?PrintInfo@CPort@@QAAXXZ| ; CPort::PrintInfo
00000 AREA |.text| { |?PrintInfo@CPort@@QAAXXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?PrintInfo@CPort@@QAAXXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?PrintInfo@CPort@@QAAXXZ| } ; comdat associative
|$T33082| DCD |$L33081|
DCD 0x40000100
; Function compile flags: /Ogsy
00000 AREA |.text| { |?PrintInfo@CPort@@QAAXXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?PrintInfo@CPort@@QAAXXZ| PROC ; CPort::PrintInfo
; 179 : {
00000 |$L33081|
00000 |$M33079|
; 180 : DEBUGMSG(ZONE_INIT, (TEXT("dwRegBase = %08X\r\n"), m_dwRegBase));
; 181 : DEBUGMSG(ZONE_INIT, (TEXT("dwRegAlt = %08X\r\n"), m_dwRegAlt));
; 182 : DEBUGMSG(ZONE_INIT, (TEXT("dwBMR = %08X\r\n"), m_dwBMR));
; 183 : DEBUGMSG(ZONE_INIT, (TEXT("dwSysIntr = %08X\r\n"), m_dwSysIntr));
; 184 : DEBUGMSG(ZONE_INIT, (TEXT("dwIrq = %08X\r\n"), m_dwIrq));
; 185 : DEBUGMSG(ZONE_INIT, (TEXT("dwBMRStatic = %08X\r\n"), m_dwBMRStatic));
; 186 : }
00000 e12fff1e bx lr
00004 |$M33080|
ENDP ; |?PrintInfo@CPort@@QAAXXZ|, CPort::PrintInfo
EXPORT |?AtaLoadRegKey@@YAPAUHKEY__@@PAU1@PAPAG@Z| ; AtaLoadRegKey
EXPORT |??_C@_17KACEIPNC@?$AAK?$AAe?$AAy?$AA?$AA@| [ DATA ] ; `string'
IMPORT |LocalAlloc|
IMPORT |RegOpenKeyExW|
IMPORT |RegQueryValueExW|
00000 AREA |.text| { |?AtaLoadRegKey@@YAPAUHKEY__@@PAU1@PAPAG@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?AtaLoadRegKey@@YAPAUHKEY__@@PAU1@PAPAG@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?AtaLoadRegKey@@YAPAUHKEY__@@PAU1@PAPAG@Z| } ; comdat associative
|$T33096| DCD |$L33095|
DCD 0x40003e02
00000 AREA |.rdata| { |??_C@_17KACEIPNC@?$AAK?$AAe?$AAy?$AA?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_17KACEIPNC@?$AAK?$AAe?$AAy?$AA?$AA@| DCB "K", 0x0, "e", 0x0, "y", 0x0
DCB 0x0, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |?AtaLoadRegKey@@YAPAUHKEY__@@PAU1@PAPAG@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?AtaLoadRegKey@@YAPAUHKEY__@@PAU1@PAPAG@Z| PROC ; AtaLoadRegKey
; 197 : {
00000 |$L33095|
00000 e92d41f0 stmdb sp!, {r4 - r8, lr}
00004 e24dd014 sub sp, sp, #0x14
00008 |$M33093|
00008 e1a05001 mov r5, r1
0000c e1a06000 mov r6, r0
; 198 : DWORD dwValueType; // registry value type
; 199 : DWORD dwValueLength = 0; // registry value length
; 200 : PTSTR szDeviceKey = NULL; // name of device key; value associated with "Key"
; 201 : HKEY hDeviceKey = NULL; // handle to device key; handle to "Key"
; 202 :
; 203 : // query the value of "Key" with @dwValueLength=0, to determine the actual
; 204 : // length of the value (so as to allocate the exact amount of memory)
; 205 :
; 206 : if (ERROR_SUCCESS == RegQueryValueEx(hActiveKey, DEVLOAD_DEVKEY_VALNAME, NULL, &dwValueType, NULL, &dwValueLength)) {
00010 e59f10dc ldr r1, [pc, #0xDC]
00014 e3a04000 mov r4, #0
00018 e3a07000 mov r7, #0
0001c e28de008 add lr, sp, #8
00020 e3a08000 mov r8, #0
00024 e58d4008 str r4, [sp, #8]
00028 e28d3010 add r3, sp, #0x10
0002c e3a02000 mov r2, #0
00030 e3a04000 mov r4, #0
00034 e58d700c str r7, [sp, #0xC]
00038 e58de004 str lr, [sp, #4]
0003c e58d8000 str r8, [sp]
00040 eb000000 bl RegQueryValueExW
00044 e3500000 cmp r0, #0
00048 1a00001b bne |$L33087|
; 207 :
; 208 : // allocate just enough memory to store the value of "Key"
; 209 : szDeviceKey = (PTSTR)LocalAlloc(LPTR, dwValueLength);
0004c e59d1008 ldr r1, [sp, #8]
00050 e3a00040 mov r0, #0x40
00054 eb000000 bl LocalAlloc
00058 e1b04000 movs r4, r0
; 210 : if (szDeviceKey) {
0005c 0a000016 beq |$L33087|
; 211 :
; 212 : // read the actual value of "Key" and null terminate the target buffer
; 213 : RegQueryValueEx(hActiveKey, DEVLOAD_DEVKEY_VALNAME, NULL, &dwValueType, (PBYTE)szDeviceKey, &dwValueLength);
00060 e59f108c ldr r1, [pc, #0x8C]
00064 e28d3008 add r3, sp, #8
00068 e58d3004 str r3, [sp, #4]
0006c e28d3010 add r3, sp, #0x10
00070 e3a02000 mov r2, #0
00074 e1a00006 mov r0, r6
00078 e58d4000 str r4, [sp]
0007c eb000000 bl RegQueryValueExW
; 214 : DEBUGCHK(dwValueLength != 0);
; 215 : szDeviceKey[(dwValueLength / sizeof(TCHAR)) - 1] = 0;
00080 e59d2008 ldr r2, [sp, #8]
; 216 :
; 217 : // open the device key
; 218 : if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, szDeviceKey, 0, 0, &hDeviceKey)) {
00084 e28de00c add lr, sp, #0xC
00088 e3a03000 mov r3, #0
0008c e1a020a2 mov r2, r2, lsr #1
00090 e0842082 add r2, r4, r2, lsl #1
00094 e14280b2 strh r8, [r2, #-2]
00098 e3a02000 mov r2, #0
0009c e1a01004 mov r1, r4
000a0 e3a0010a mov r0, #0xA, 2
000a4 e58de000 str lr, [sp]
000a8 eb000000 bl RegOpenKeyExW
000ac e3500000 cmp r0, #0
; 219 : DEBUGMSG(ZONE_INIT, (_T(
; 220 : "AtaLoadRegyKey> Failed to open %s\r\n"
; 221 : ), szDeviceKey));
; 222 : hDeviceKey = NULL;
000b0 13a00000 movne r0, #0
000b4 158d000c strne r0, [sp, #0xC]
000b8 1a000000 bne |$L32413|
000bc |$L33087|
000bc e59d000c ldr r0, [sp, #0xC]
000c0 |$L32413|
; 223 : }
; 224 : }
; 225 : }
; 226 : if (!hDeviceKey) {
000c0 e3500000 cmp r0, #0
000c4 1a000006 bne |$L32415|
; 227 : if (szDeviceKey) {
000c8 e3540000 cmp r4, #0
000cc 0a000002 beq |$L32416|
; 228 : LocalFree(szDeviceKey);
000d0 e1a00004 mov r0, r4
000d4 eb000000 bl LocalFree
000d8 e59d000c ldr r0, [sp, #0xC]
000dc |$L32416|
; 229 : }
; 230 : *pszDevKey = NULL;
000dc e5858000 str r8, [r5]
; 231 : }
; 232 : else {
000e0 ea000000 b |$L32417|
000e4 |$L32415|
; 233 : *pszDevKey = szDeviceKey;
000e4 e5854000 str r4, [r5]
000e8 |$L32417|
; 234 : }
; 235 : return hDeviceKey;
; 236 : }
000e8 e28dd014 add sp, sp, #0x14
000ec e8bd41f0 ldmia sp!, {r4 - r8, lr}
000f0 e12fff1e bx lr
000f4 |$L33098|
000f4 00000000 DCD |??_C@_17KACEIPNC@?$AAK?$AAe?$AAy?$AA?$AA@|
000f8 |$M33094|
ENDP ; |?AtaLoadRegKey@@YAPAUHKEY__@@PAU1@PAPAG@Z|, AtaLoadRegKey
EXPORT |?AtaIsValidDisk@@YAHPAVCDisk@@@Z| ; AtaIsValidDisk
00000 AREA |.text| { |?AtaIsValidDisk@@YAHPAVCDisk@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?AtaIsValidDisk@@YAHPAVCDisk@@@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?AtaIsValidDisk@@YAHPAVCDisk@@@Z| } ; comdat associative
|$T33112| DCD |$L33111|
DCD 0x40000d00
; Function compile flags: /Ogsy
00000 AREA |.text| { |?AtaIsValidDisk@@YAHPAVCDisk@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?AtaIsValidDisk@@YAHPAVCDisk@@@Z| PROC ; AtaIsValidDisk
; 243 : {
00000 |$L33111|
00000 |$M33109|
; 244 : CDisk *pTemp = g_pDiskRoot;
00000 e59f3028 ldr r3, [pc, #0x28]
00004 e5933000 ldr r3, [r3]
00008 ea000002 b |$L33108|
0000c |$L32423|
; 245 : while (pTemp) {
; 246 : if (pTemp == pDisk) {
0000c e1530000 cmp r3, r0
00010 0a000004 beq |$L33102|
; 248 : }
; 249 : pTemp = pTemp->m_pNextDisk;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -