?? atapipm.cod
字號(hào):
00074 e3a06000 mov r6, #0
00078 e58de000 str lr, [sp]
0007c eb000000 bl RegOpenKeyExW
00080 e3500000 cmp r0, #0
; 389 : if(dwStatus == ERROR_SUCCESS) {
00084 1a00003e bne |$L32553|
; 390 : // read the PM class
; 391 : DWORD dwSize = sizeof(szClass);
; 392 : dwStatus = RegQueryValueEx(hk, L"PowerClass", NULL, NULL, (LPBYTE) szClass, &dwSize);
00088 e59f137c ldr r1, [pc, #0x37C]
0008c e59d0028 ldr r0, [sp, #0x28]
00090 e3a08080 mov r8, #0x80
00094 e28de02c add lr, sp, #0x2C
00098 e28d4060 add r4, sp, #0x60
0009c e3a03000 mov r3, #0
000a0 e3a02000 mov r2, #0
000a4 e58d802c str r8, [sp, #0x2C]
000a8 e58de004 str lr, [sp, #4]
000ac e58d4000 str r4, [sp]
000b0 eb000000 bl RegQueryValueExW
; 393 : if(dwStatus == ERROR_SUCCESS) {
; 394 : fGotClass = TRUE;
; 395 : }
; 396 :
; 397 : // get the inactivity timeout
; 398 : DWORD dwValue;
; 399 : dwSize = sizeof(dwValue);
; 400 : dwStatus = RegQueryValueEx(hk, L"InactivityTimeout", NULL, NULL, (LPBYTE) &dwValue, &dwSize);
000b4 e59f134c ldr r1, [pc, #0x34C]
000b8 e3500000 cmp r0, #0
000bc e59d0028 ldr r0, [sp, #0x28]
000c0 e3a08004 mov r8, #4
000c4 e28de02c add lr, sp, #0x2C
000c8 e28d4030 add r4, sp, #0x30
000cc e3a03000 mov r3, #0
000d0 e3a02000 mov r2, #0
000d4 03a06001 moveq r6, #1
000d8 e58d802c str r8, [sp, #0x2C]
000dc e58de004 str lr, [sp, #4]
000e0 e58d4000 str r4, [sp]
000e4 eb000000 bl RegQueryValueExW
000e8 e3500000 cmp r0, #0
; 401 : if(dwStatus == ERROR_SUCCESS) {
; 402 : m_dwPowerTimeout = dwValue;
000ec 059d3030 ldreq r3, [sp, #0x30]
; 403 : }
; 404 : DEBUGMSG(ZONE_INIT, (_T("CDiskPower::Init: inactivity timeout is %u ms\r\n"), m_dwPowerTimeout));
; 405 :
; 406 : // get the inactivity timeout
; 407 : dwSize = sizeof(dwValue);
; 408 : dwStatus = RegQueryValueEx(hk, L"TimeoutDx", NULL, NULL, (LPBYTE) &dwValue, &dwSize);
000f0 e59f130c ldr r1, [pc, #0x30C]
000f4 e59d0028 ldr r0, [sp, #0x28]
000f8 05853018 streq r3, [r5, #0x18]
000fc e3a08004 mov r8, #4
00100 e28de02c add lr, sp, #0x2C
00104 e28d4030 add r4, sp, #0x30
00108 e3a03000 mov r3, #0
0010c e3a02000 mov r2, #0
00110 e58d802c str r8, [sp, #0x2C]
00114 e58de004 str lr, [sp, #4]
00118 e58d4000 str r4, [sp]
0011c eb000000 bl RegQueryValueExW
00120 e3500000 cmp r0, #0
; 409 : if(dwStatus == ERROR_SUCCESS) {
00124 1a000004 bne |$L32152|
; 410 : if(VALID_DX((CEDEVICE_POWER_STATE)dwValue) && dwValue != D3) {
00128 e59d3030 ldr r3, [sp, #0x30]
0012c e3530004 cmp r3, #4
00130 8a000001 bhi |$L32152|
00134 e3530003 cmp r3, #3
; 411 : m_timeoutDx = (CEDEVICE_POWER_STATE) dwValue;
00138 1585300c strne r3, [r5, #0xC]
0013c |$L32152|
; 412 : } else {
; 413 : DEBUGMSG(ZONE_WARNING, (_T("CDiskPower::Init: invalid or unsupported timeout device power state %d (0x%x)\r\n"), dwValue, dwValue));
; 414 : }
; 415 : }
; 416 : DEBUGMSG(ZONE_INIT, (_T("CDiskPower::Init: timeout state is D%d\r\n"), m_timeoutDx));
; 417 :
; 418 : // get the inactivity timeout
; 419 : dwSize = sizeof(dwValue);
; 420 : dwStatus = RegQueryValueEx(hk, L"InactivityPriority256", NULL, NULL, (LPBYTE) &dwValue, &dwSize);
0013c e59f12bc ldr r1, [pc, #0x2BC]
00140 e59d0028 ldr r0, [sp, #0x28]
00144 e3a08004 mov r8, #4
00148 e28de02c add lr, sp, #0x2C
0014c e28d4030 add r4, sp, #0x30
00150 e3a03000 mov r3, #0
00154 e3a02000 mov r2, #0
00158 e58d802c str r8, [sp, #0x2C]
0015c e58de004 str lr, [sp, #4]
00160 e58d4000 str r4, [sp]
00164 eb000000 bl RegQueryValueExW
00168 e3500000 cmp r0, #0
; 421 : if(dwStatus == ERROR_SUCCESS) {
; 422 : nPriority = (int) dwValue;
0016c 059d3030 ldreq r3, [sp, #0x30]
; 423 : }
; 424 : DEBUGMSG(ZONE_INIT, (_T("CDiskPower::Init: inactivity timeout thread priority is %d\r\n"), nPriority));
; 425 :
; 426 : RegCloseKey(hk);
00170 e59d0028 ldr r0, [sp, #0x28]
00174 058d3048 streq r3, [sp, #0x48]
00178 eb000000 bl RegCloseKey
; 427 : }
; 428 :
; 429 : // did we get a class string?
; 430 : if(!fGotClass) {
0017c e3560000 cmp r6, #0
00180 1a000005 bne |$L32162|
00184 |$L32553|
; 431 : // no, use the default disk class
; 432 : wcsncpy(szClass, PMCLASS_BLOCK_DEVICE, dim(szClass));
00184 e59f1270 ldr r1, [pc, #0x270]
00188 e3a02040 mov r2, #0x40
0018c e28d0060 add r0, sp, #0x60
00190 eb000000 bl wcsncpy
; 433 : szClass[dim(szClass) - 1] = 0;
00194 e3a03000 mov r3, #0
00198 e1cd3dbe strh r3, [sp, #0xDE]
0019c |$L32162|
; 434 : }
; 435 :
; 436 : // convert to a GUID
; 437 : fOk = GUIDFromString(szClass, &gPMClass);
0019c e1dd36b0 ldrh r3, [sp, #0x60]
001a0 e353007b cmp r3, #0x7B
001a4 1a000007 bne |$L32573|
001a8 e28d1038 add r1, sp, #0x38
001ac e28d0062 add r0, sp, #0x62
001b0 eb000000 bl |?wUUIDFromString@@YAHPBGPAU_GUID@@@Z|
001b4 e3500001 cmp r0, #1
001b8 1a000002 bne |$L32573|
001bc e1dd3aba ldrh r3, [sp, #0xAA]
001c0 e353007d cmp r3, #0x7D
001c4 0a000001 beq |$L32540|
001c8 |$L32573|
001c8 e3a04000 mov r4, #0
001cc ea000000 b |$L32537|
001d0 |$L32540|
001d0 e3a04001 mov r4, #1
001d4 |$L32537|
; 438 : if(!fOk) {
; 439 : DEBUGMSG(ZONE_WARNING || ZONE_INIT, (_T("CDiskPower::Init: invalid power management class '%s'\r\n"),
; 440 : szClass));
; 441 : }
; 442 : }
; 443 :
; 444 : // get our active key from the registry
; 445 : if(fOk) {
001d4 e3540000 cmp r4, #0
001d8 0a000080 beq |$L32213|
; 446 : HKEY hk;
; 447 : dwStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE, m_pDisk->m_szActiveKey, 0, 0, &hk);
001dc e5952044 ldr r2, [r5, #0x44]
001e0 e28de028 add lr, sp, #0x28
001e4 e3a03000 mov r3, #0
001e8 e2821070 add r1, r2, #0x70
001ec e3a02000 mov r2, #0
001f0 e3a0010a mov r0, #0xA, 2
001f4 e58de000 str lr, [sp]
001f8 eb000000 bl RegOpenKeyExW
001fc e3500000 cmp r0, #0
; 448 : if(dwStatus == ERROR_SUCCESS) {
00200 1a00000d bne |$L32177|
; 449 : DWORD dwValue;
; 450 : DWORD dwSize = sizeof(dwValue);
; 451 : dwStatus = RegQueryValueEx(hk, DEVLOAD_HANDLE_VALNAME, NULL, NULL, (LPBYTE) &dwValue, &dwSize);
00204 e59f11ec ldr r1, [pc, #0x1EC]
00208 e59d0028 ldr r0, [sp, #0x28]
0020c e3a05004 mov r5, #4
00210 e28de030 add lr, sp, #0x30
00214 e28d402c add r4, sp, #0x2C
00218 e3a03000 mov r3, #0
0021c e3a02000 mov r2, #0
00220 e58d5030 str r5, [sp, #0x30]
00224 e58de004 str lr, [sp, #4]
00228 e58d4000 str r4, [sp]
0022c eb000000 bl RegQueryValueExW
00230 e3500000 cmp r0, #0
; 452 : if(dwStatus != ERROR_SUCCESS) {
; 453 : DEBUGMSG(ZONE_WARNING || ZONE_INIT, (_T("CDiskPower::Init: can't read '%s' from '%s'\r\n"),
; 454 : DEVLOAD_HANDLE_VALNAME, m_pDisk->m_szActiveKey));
; 455 : fOk = FALSE;
; 456 : } else {
00234 1a00005f bne |$L32574|
; 457 : DEBUGCHK(dwValue != 0);
; 458 : hActive = (HANDLE) dwValue;
00238 e59d702c ldr r7, [sp, #0x2C]
0023c |$L32177|
; 459 : }
; 460 : }
; 461 : }
; 462 :
; 463 : // figure out the name we are using
; 464 : if(fOk) {
; 465 : WCHAR szName[MAX_PATH];
; 466 : DWORD dwIndex = 0;
0023c e3a05000 mov r5, #0
00240 e3a08f82 mov r8, #0x82, 30
00244 e28d6028 add r6, sp, #0x28
00248 |$L32183|
; 467 : do {
; 468 : DWORD dwSize = sizeof(szName);
; 469 : GUID gClass;
; 470 : fOk = EnumDeviceInterfaces(hActive, dwIndex, &gClass, szName, &dwSize);
00248 e28d30e0 add r3, sp, #0xE0
0024c e28d2050 add r2, sp, #0x50
00250 e1a01005 mov r1, r5
00254 e1a00007 mov r0, r7
00258 e58d8028 str r8, [sp, #0x28]
0025c e58d6000 str r6, [sp]
00260 eb000000 bl EnumDeviceInterfaces
00264 e1b04000 movs r4, r0
; 471 : if(fOk && gPMClass == gClass) {
00268 0a000005 beq |$L32550|
0026c e3a02010 mov r2, #0x10
00270 e28d1050 add r1, sp, #0x50
00274 e28d0038 add r0, sp, #0x38
00278 eb000000 bl memcmp
0027c e3500000 cmp r0, #0
00280 0a000003 beq |$L32555|
00284 |$L32550|
; 472 : // we found the interface
; 473 : break;
; 474 : }
; 475 : dwIndex++;
00284 e2855001 add r5, r5, #1
; 476 : } while(fOk);
00288 e3540000 cmp r4, #0
0028c 1affffed bne |$L32183|
00290 ea000052 b |$L32213|
00294 |$L32555|
; 477 : DEBUGMSG(!fOk && (ZONE_WARNING || ZONE_INIT), (_T("CDiskPower::Init: can't find PM interface\r\n")));
; 478 :
; 479 : // did we find the name?
; 480 : if(fOk) {
; 481 : // yes, allocate a name buffer to use to talk to the power manager
; 482 : DWORD dwChars = wcslen(PMCLASS_BLOCK_DEVICE) + wcslen(szName) + 2; // class + separator + name + null
00294 e28d00e0 add r0, sp, #0xE0
00298 eb000000 bl wcslen
0029c e2803028 add r3, r0, #0x28
; 483 : LPWSTR pszPMName = (LPWSTR) LocalAlloc(LPTR, dwChars * sizeof(WCHAR));
002a0 e1a01083 mov r1, r3, lsl #1
002a4 e3a00040 mov r0, #0x40
002a8 e58d3028 str r3, [sp, #0x28]
002ac eb000000 bl LocalAlloc
; 484 : fOk = FALSE; // assume failure
002b0 e3a04000 mov r4, #0
002b4 e58d402c str r4, [sp, #0x2C]
002b8 e3500000 cmp r0, #0
002bc e58d0030 str r0, [sp, #0x30]
; 485 : if(pszPMName) {
002c0 0a000046 beq |$L32213|
; 486 : HRESULT hr = StringCchPrintfW(pszPMName, dwChars, L"{%08x-%04x-%04x-%04x-%02x%02x%02x%02x%02x%02x}\\%s",
; 487 : gPMClass.Data1, gPMClass.Data2, gPMClass.Data3,
; 488 : (gPMClass.Data4[0] << 8) + gPMClass.Data4[1], gPMClass.Data4[2], gPMClass.Data4[3],
; 489 : gPMClass.Data4[4], gPMClass.Data4[5], gPMClass.Data4[6], gPMClass.Data4[7],
; 490 : szName);
002c4 e5dd4041 ldrb r4, [sp, #0x41]
002c8 e5dde040 ldrb lr, [sp, #0x40]
002cc e5dd5047 ldrb r5, [sp, #0x47]
002d0 e5dd6046 ldrb r6, [sp, #0x46]
002d4 e084e40e add lr, r4, lr, lsl #8
002d8 e5dd7045 ldrb r7, [sp, #0x45]
002dc e5dd8044 ldrb r8, [sp, #0x44]
002e0 e5dd9043 ldrb r9, [sp, #0x43]
002e4 e5dda042 ldrb r10, [sp, #0x42]
002e8 e1ddb3be ldrh r11, [sp, #0x3E]
002ec e58de008 str lr, [sp, #8]
002f0 e1dde3bc ldrh lr, [sp, #0x3C]
002f4 e59d3038 ldr r3, [sp, #0x38]
002f8 e59f20f4 ldr r2, [pc, #0xF4]
002fc e59d1028 ldr r1, [sp, #0x28]
00300 e28d40e0 add r4, sp, #0xE0
00304 e58de000 str lr, [sp]
00308 e58d4024 str r4, [sp, #0x24]
0030c e58d5020 str r5, [sp, #0x20]
00310 e58d601c str r6, [sp, #0x1C]
00314 e58d7018 str r7, [sp, #0x18]
00318 e58d8014 str r8, [sp, #0x14]
0031c e58d9010 str r9, [sp, #0x10]
00320 e58da00c str r10, [sp, #0xC]
00324 e58db004 str r11, [sp, #4]
00328 eb000000 bl StringCchPrintfW
0032c e3500000 cmp r0, #0
; 491 : if(SUCCEEDED(hr)) {
00330 4a000029 bmi |$L32572|
; 492 : m_pszPMName = (LPCWSTR) pszPMName;
; 493 : fOk = TRUE;
; 494 : }
; 495 : }
; 496 : DEBUGMSG(!fOk && (ZONE_WARNING || ZONE_INIT), (_T("CDiskPower::Init: can't find PM interface\r\n")));
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -