📄 atapipm.cod
字号:
008c0 e59f05b8 ldr r0, [pc, #0x5B8]
008c4 eb000000 bl NKDbgPrintfW
008c8 e6000010 DCD 0xe6000010
008cc e3a03000 mov r3, #0
008d0 e58d3018 str r3, [sp, #0x18]
008d4 |$L32511|
; 256 : DEBUGCHK(m_hevDummy);
008d4 e59d3068 ldr r3, [sp, #0x68]
008d8 e2833024 add r3, r3, #0x24
008dc e5933000 ldr r3, [r3]
008e0 e3530000 cmp r3, #0
008e4 0a000002 beq |$L32512|
008e8 e3a03001 mov r3, #1
008ec e58d301c str r3, [sp, #0x1C]
008f0 ea000007 b |$L32513|
008f4 |$L32512|
008f4 e3a03c01 mov r3, #1, 24
008f8 e59f2584 ldr r2, [pc, #0x584]
008fc e59f1574 ldr r1, [pc, #0x574]
00900 e59f0578 ldr r0, [pc, #0x578]
00904 eb000000 bl NKDbgPrintfW
00908 e6000010 DCD 0xe6000010
0090c e3a03000 mov r3, #0
00910 e58d301c str r3, [sp, #0x1C]
00914 |$L32513|
; 257 :
; 258 : DEBUGMSG(ZONE_INIT, (_T("CDiskPower::DiskPowerThread: starting up for '%s', timeout is %d ms\r\n"), m_pszPMName, m_dwPowerTimeout));
00914 e59f355c ldr r3, [pc, #0x55C]
00918 e5933440 ldr r3, [r3, #0x440]
0091c e3130001 tst r3, #1
00920 0a00000a beq |$L32514|
00924 e59d3068 ldr r3, [sp, #0x68]
00928 e2833018 add r3, r3, #0x18
0092c e5932000 ldr r2, [r3]
00930 e59d3068 ldr r3, [sp, #0x68]
00934 e2833048 add r3, r3, #0x48
00938 e5931000 ldr r1, [r3]
0093c e59f0558 ldr r0, [pc, #0x558]
00940 eb000000 bl NKDbgPrintfW
00944 e3a03001 mov r3, #1
00948 e58d3020 str r3, [sp, #0x20]
0094c ea000001 b |$L32515|
00950 |$L32514|
00950 e3a03000 mov r3, #0
00954 e58d3020 str r3, [sp, #0x20]
00958 |$L32515|
00958 |$L32094|
; 259 :
; 260 : while(!fDone) {
00958 e59d3000 ldr r3, [sp]
0095c e3530000 cmp r3, #0
00960 1a000132 bne |$L32095|
; 261 : //DEBUGMSG(ZONE_POWER, (_T("CDiskPower::DiskPowerThread: waiting on '%s', timeout is %u\r\n"), m_pszPMName, dwTimeout));
; 262 : DWORD dwStatus = WaitForSingleObject(hev, dwTimeout);
00964 e59d1008 ldr r1, [sp, #8]
00968 e59d0004 ldr r0, [sp, #4]
0096c eb000000 bl WaitForSingleObject
00970 e58d0024 str r0, [sp, #0x24]
00974 e59d3024 ldr r3, [sp, #0x24]
00978 e58d300c str r3, [sp, #0xC]
; 263 : //DEBUGMSG(ZONE_POWER, (_T("CDiskPower::DiskPowerThread: WaitForSingleObject() returned %u\r\n"), dwStatus));
; 264 : switch(dwStatus) {
0097c e59d300c ldr r3, [sp, #0xC]
00980 e58d3028 str r3, [sp, #0x28]
00984 e59d3028 ldr r3, [sp, #0x28]
00988 e3530000 cmp r3, #0
0098c 0a000005 beq |$L32101|
00990 e59d2028 ldr r2, [sp, #0x28]
00994 e3a03c01 mov r3, #1, 24
00998 e3833002 orr r3, r3, #2
0099c e1520003 cmp r2, r3
009a0 0a00004d beq |$L32110|
009a4 ea000111 b |$L32129|
009a8 |$L32101|
; 265 : case WAIT_OBJECT_0:
; 266 : // are we supposed to exit?
; 267 : if(m_fShutdownPowerThread) {
009a8 e59d3068 ldr r3, [sp, #0x68]
009ac e2833028 add r3, r3, #0x28
009b0 e5933000 ldr r3, [r3]
009b4 e3530000 cmp r3, #0
009b8 0a00000d beq |$L32102|
; 268 : DEBUGMSG(ZONE_INIT, (_T("CDiskPower::DiskPowerThread: shutdown event signaled\r\n")));
009bc e59f34b4 ldr r3, [pc, #0x4B4]
009c0 e5933440 ldr r3, [r3, #0x440]
009c4 e3130001 tst r3, #1
009c8 0a000004 beq |$L32516|
009cc e59f04c4 ldr r0, [pc, #0x4C4]
009d0 eb000000 bl NKDbgPrintfW
009d4 e3a03001 mov r3, #1
009d8 e58d302c str r3, [sp, #0x2C]
009dc ea000001 b |$L32517|
009e0 |$L32516|
009e0 e3a03000 mov r3, #0
009e4 e58d302c str r3, [sp, #0x2C]
009e8 |$L32517|
; 269 : fDone = TRUE;
009e8 e3a03001 mov r3, #1
009ec e58d3000 str r3, [sp]
; 270 : } else {
009f0 ea000038 b |$L32105|
009f4 |$L32102|
; 271 : // ignore further activity until the timeout expires
; 272 : TakeCS(); // Note: if you take the disk cs here, take it first
009f4 e59d3068 ldr r3, [sp, #0x68]
009f8 e5933000 ldr r3, [r3]
009fc e2833024 add r3, r3, #0x24
00a00 e59d0068 ldr r0, [sp, #0x68]
00a04 e5933000 ldr r3, [r3]
00a08 e1a0e00f mov lr, pc
00a0c e12fff13 bx r3
; 273 : DEBUGMSG(ZONE_POWER, (_T("CDiskPower::DiskPowerThread: disk activity detected on '%s', use count is %d\r\n"), m_pszPMName, m_UseCount));
00a10 e59f3460 ldr r3, [pc, #0x460]
00a14 e5933440 ldr r3, [r3, #0x440]
00a18 e3130c02 tst r3, #2, 24
00a1c 0a00000a beq |$L32518|
00a20 e59d3068 ldr r3, [sp, #0x68]
00a24 e283304c add r3, r3, #0x4C
00a28 e5932000 ldr r2, [r3]
00a2c e59d3068 ldr r3, [sp, #0x68]
00a30 e2833048 add r3, r3, #0x48
00a34 e5931000 ldr r1, [r3]
00a38 e59f0454 ldr r0, [pc, #0x454]
00a3c eb000000 bl NKDbgPrintfW
00a40 e3a03001 mov r3, #1
00a44 e58d3030 str r3, [sp, #0x30]
00a48 ea000001 b |$L32519|
00a4c |$L32518|
00a4c e3a03000 mov r3, #0
00a50 e58d3030 str r3, [sp, #0x30]
00a54 |$L32519|
; 274 : DEBUGCHK(hev != m_hevDummy);
00a54 e59d3068 ldr r3, [sp, #0x68]
00a58 e2833024 add r3, r3, #0x24
00a5c e59d2004 ldr r2, [sp, #4]
00a60 e5933000 ldr r3, [r3]
00a64 e1520003 cmp r2, r3
00a68 0a000002 beq |$L32520|
00a6c e3a03001 mov r3, #1
00a70 e58d3034 str r3, [sp, #0x34]
00a74 ea000008 b |$L32521|
00a78 |$L32520|
00a78 e3a03e11 mov r3, #0x11, 28
00a7c e3833002 orr r3, r3, #2
00a80 e59f23fc ldr r2, [pc, #0x3FC]
00a84 e59f13ec ldr r1, [pc, #0x3EC]
00a88 e59f03f0 ldr r0, [pc, #0x3F0]
00a8c eb000000 bl NKDbgPrintfW
00a90 e6000010 DCD 0xe6000010
00a94 e3a03000 mov r3, #0
00a98 e58d3034 str r3, [sp, #0x34]
00a9c |$L32521|
; 275 : hev = m_hevDummy;
00a9c e59d3068 ldr r3, [sp, #0x68]
00aa0 e2833024 add r3, r3, #0x24
00aa4 e5933000 ldr r3, [r3]
00aa8 e58d3004 str r3, [sp, #4]
; 276 : dwTimeout = m_dwPowerTimeout;
00aac e59d3068 ldr r3, [sp, #0x68]
00ab0 e2833018 add r3, r3, #0x18
00ab4 e5933000 ldr r3, [r3]
00ab8 e58d3008 str r3, [sp, #8]
; 277 : ReleaseCS();
00abc e59d3068 ldr r3, [sp, #0x68]
00ac0 e5933000 ldr r3, [r3]
00ac4 e2833028 add r3, r3, #0x28
00ac8 e59d0068 ldr r0, [sp, #0x68]
00acc e5933000 ldr r3, [r3]
00ad0 e1a0e00f mov lr, pc
00ad4 e12fff13 bx r3
00ad8 |$L32105|
; 278 : }
; 279 : break;
00ad8 ea0000d3 b |$L32098|
00adc |$L32110|
; 280 : case WAIT_TIMEOUT:
; 281 : // inactivity timeout -- see if we should spin down the disk
; 282 : m_pDisk->TakeCS();
00adc e59d3068 ldr r3, [sp, #0x68]
00ae0 e2833044 add r3, r3, #0x44
00ae4 e5932000 ldr r2, [r3]
00ae8 e59d3068 ldr r3, [sp, #0x68]
00aec e2833044 add r3, r3, #0x44
00af0 e5930000 ldr r0, [r3]
00af4 e5923000 ldr r3, [r2]
00af8 e2833030 add r3, r3, #0x30
00afc e5933000 ldr r3, [r3]
00b00 e1a0e00f mov lr, pc
00b04 e12fff13 bx r3
; 283 : TakeCS();
00b08 e59d3068 ldr r3, [sp, #0x68]
00b0c e5933000 ldr r3, [r3]
00b10 e2833024 add r3, r3, #0x24
00b14 e59d0068 ldr r0, [sp, #0x68]
00b18 e5933000 ldr r3, [r3]
00b1c e1a0e00f mov lr, pc
00b20 e12fff13 bx r3
; 284 :
; 285 : // we should be the only thread in the driver at this point
; 286 : DEBUGCHK(m_UseCount == 0);
00b24 e59d3068 ldr r3, [sp, #0x68]
00b28 e283304c add r3, r3, #0x4C
00b2c e5933000 ldr r3, [r3]
00b30 e3530000 cmp r3, #0
00b34 1a000002 bne |$L32522|
00b38 e3a03001 mov r3, #1
00b3c e58d3038 str r3, [sp, #0x38]
00b40 ea000008 b |$L32523|
00b44 |$L32522|
00b44 e3a03f47 mov r3, #0x47, 30
00b48 e3833002 orr r3, r3, #2
00b4c e59f2330 ldr r2, [pc, #0x330]
00b50 e59f1320 ldr r1, [pc, #0x320]
00b54 e59f0324 ldr r0, [pc, #0x324]
00b58 eb000000 bl NKDbgPrintfW
00b5c e6000010 DCD 0xe6000010
00b60 e3a03000 mov r3, #0
00b64 e58d3038 str r3, [sp, #0x38]
00b68 |$L32523|
; 287 :
; 288 : // By the time we have acquired these critical sections, we may have seen
; 289 : // some disk activity from an I/O thread that held them previously. Check
; 290 : // for this by polling our timeout event.
; 291 : if(WaitForSingleObject(m_hevPowerSignal, 0) == WAIT_TIMEOUT) {
00b68 e3a01000 mov r1, #0
00b6c e59d3068 ldr r3, [sp, #0x68]
00b70 e2833020 add r3, r3, #0x20
00b74 e5930000 ldr r0, [r3]
00b78 eb000000 bl WaitForSingleObject
00b7c e58d003c str r0, [sp, #0x3C]
00b80 e59d203c ldr r2, [sp, #0x3C]
00b84 e3a03c01 mov r3, #1, 24
00b88 e3833002 orr r3, r3, #2
00b8c e1520003 cmp r2, r3
00b90 1a000048 bne |$L32113|
; 292 : // don't bother asking the PM if we've already requested to spin down
; 293 : DEBUGMSG(ZONE_POWER, (_T("CDiskPower::DiskPowerThread: no disk activity on '%s', m_fReductionRequested is %d\r\n"), m_pszPMName, m_fReductionRequested));
00b94 e59f32dc ldr r3, [pc, #0x2DC]
00b98 e5933440 ldr r3, [r3, #0x440]
00b9c e3130c02 tst r3, #2, 24
00ba0 0a00000a beq |$L32524|
00ba4 e59d3068 ldr r3, [sp, #0x68]
00ba8 e2833014 add r3, r3, #0x14
00bac e5932000 ldr r2, [r3]
00bb0 e59d3068 ldr r3, [sp, #0x68]
00bb4 e2833048 add r3, r3, #0x48
00bb8 e5931000 ldr r1, [r3]
00bbc e59f02cc ldr r0, [pc, #0x2CC]
00bc0 eb000000 bl NKDbgPrintfW
00bc4 e3a03001 mov r3, #1
00bc8 e58d3040 str r3, [sp, #0x40]
00bcc ea000001 b |$L32525|
00bd0 |$L32524|
00bd0 e3a03000 mov r3, #0
00bd4 e58d3040 str r3, [sp, #0x40]
00bd8 |$L32525|
; 294 : if(!m_fReductionRequested) {
00bd8 e59d3068 ldr r3, [sp, #0x68]
00bdc e2833014 add r3, r3, #0x14
00be0 e5933000 ldr r3, [r3]
00be4 e3530000 cmp r3, #0
00be8 1a00002b bne |$L32116|
; 295 : // spin down the disk to m_timeoutDx
; 296 : m_fReductionRequested = TRUE;
00bec e59d3068 ldr r3, [sp, #0x68]
00bf0 e2832014 add r2, r3, #0x14
00bf4 e3a03001 mov r3, #1
00bf8 e5823000 str r3, [r2]
; 297 : dwStatus = m_pfnDevicePowerNotify((PVOID) m_pszPMName, m_timeoutDx, POWER_NAME);
00bfc e3a02001 mov r2, #1
00c00 e59d3068 ldr r3, [sp, #0x68]
00c04 e283300c add r3, r3, #0xC
00c08 e5931000 ldr r1, [r3]
00c0c e59d3068 ldr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -