Changeset 70341 in vbox for trunk/src/VBox/Runtime/r0drv
- Timestamp:
- Dec 26, 2017 2:42:28 PM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 119941
- Location:
- trunk/src/VBox/Runtime/r0drv/nt
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/r0drv/nt/initterm-r0drv-nt.cpp
r70336 r70341 93 93 /** KeSetTargetProcessorDpc - Introducted in NT 3.51. */ 94 94 decltype(KeSetTargetProcessorDpc) *g_pfnrtKeSetTargetProcessorDpc; 95 /** KeInitializeTimerEx - Introduced in NT 4. */ 96 decltype(KeInitializeTimerEx) *g_pfnrtKeInitializeTimerEx; 95 97 /** Pointer to the MmProtectMdlSystemAddress kernel function if it's available. 96 98 * This API was introduced in XP. */ … … 303 305 GET_SYSTEM_ROUTINE(KeSetImportanceDpc); 304 306 GET_SYSTEM_ROUTINE(KeSetTargetProcessorDpc); 307 GET_SYSTEM_ROUTINE(KeInitializeTimerEx); 305 308 GET_SYSTEM_ROUTINE(MmProtectMdlSystemAddress); 306 309 GET_SYSTEM_ROUTINE(MmAllocatePagesForMdl); -
trunk/src/VBox/Runtime/r0drv/nt/internal-r0drv-nt.h
r70336 r70341 84 84 extern decltype(KeSetImportanceDpc) *g_pfnrtKeSetImportanceDpc; 85 85 extern decltype(KeSetTargetProcessorDpc) *g_pfnrtKeSetTargetProcessorDpc; 86 extern decltype(KeInitializeTimerEx) *g_pfnrtKeInitializeTimerEx; 86 87 extern decltype(MmProtectMdlSystemAddress) *g_pfnrtMmProtectMdlSystemAddress; 87 88 extern decltype(MmAllocatePagesForMdl) *g_pfnrtMmAllocatePagesForMdl; -
trunk/src/VBox/Runtime/r0drv/nt/nt3fakes-r0drv-nt.cpp
r70336 r70341 96 96 decltype(KfAcquireSpinLock) *g_pfnrtKfAcquireSpinLock; 97 97 decltype(KfReleaseSpinLock) *g_pfnrtKfReleaseSpinLock; 98 decltype(KefAcquireSpinLockAtDpcLevel) *g_pfnrtKefAcquireSpinLockAtDpcLevel; 99 decltype(KefReleaseSpinLockFromDpcLevel) *g_pfnrtKefReleaseSpinLockFromDpcLevel; 98 100 decltype(KfLowerIrql) *g_pfnrtKfLowerIrql; 99 101 decltype(KfRaiseIrql) *g_pfnrtKfRaiseIrql; … … 104 106 KIRQL (__stdcall *g_pfnrtKeAcquireSpinLock)(PKSPIN_LOCK); 105 107 VOID (__stdcall *g_pfnrtKeReleaseSpinLock)(PKSPIN_LOCK, KIRQL); 108 KIRQL (__stdcall *g_pfnrtKeAcquireSpinLockAtDpcLevel)(PKSPIN_LOCK); 109 VOID (__stdcall *g_pfnrtKeReleaseSpinLockFromDpcLevel)(PKSPIN_LOCK); 106 110 VOID (__stdcall *g_pfnrtKeLowerIrql)(KIRQL); 107 111 KIRQL (__stdcall *g_pfnrtKeRaiseIrql)(KIRQL); … … 468 472 uint32_t cbRm = 1; 469 473 470 if ( (bRm & X86_MODRM_MOD_MASK) == 3474 if ( (bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT) 471 475 || (bRm & (X86_MODRM_MOD_MASK | X86_MODRM_RM_MASK)) == 5) 472 476 cbRm += 4; /* disp32 */ 473 else if ((bRm & X86_MODRM_MOD_MASK) == 1)477 else if ((bRm & X86_MODRM_MOD_MASK) == (1 << X86_MODRM_MOD_SHIFT)) 474 478 cbRm += 1; /* disp8 */ 475 else if ((bRm & X86_MODRM_MOD_MASK) == 2)479 else if ((bRm & X86_MODRM_MOD_MASK) == (2 << X86_MODRM_MOD_SHIFT)) 476 480 cbRm += 2; /* disp16 */ 477 481 478 if ((bRm & X86_MODRM_RM_MASK) == 4 && (bRm & X86_MODRM_MOD_MASK) != 3)482 if ((bRm & X86_MODRM_RM_MASK) == 4 && (bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) 479 483 cbRm += 1; /* SIB */ 480 484 … … 515 519 AssertLogRelReturn(RT_CONCAT(g_pfnrt,a_fnFastcall) || RT_CONCAT(g_pfnrt,a_fnStdcall), VERR_INTERNAL_ERROR_3); \ 516 520 } while (0) 517 GET_FAST_CALL_SYSTEM_ROUTINE(IofCompleteRequest, IoCompleteRequest); 518 GET_FAST_CALL_SYSTEM_ROUTINE(ObfDereferenceObject, ObDereferenceObject); 519 GET_FAST_CALL_SYSTEM_ROUTINE(IofCallDriver, IofCallDriver); 520 GET_FAST_CALL_SYSTEM_ROUTINE(KfAcquireSpinLock, KeAcquireSpinLock); 521 GET_FAST_CALL_SYSTEM_ROUTINE(KfReleaseSpinLock, KeReleaseSpinLock); 522 GET_FAST_CALL_SYSTEM_ROUTINE(KfLowerIrql, KeLowerIrql); 523 GET_FAST_CALL_SYSTEM_ROUTINE(KfRaiseIrql, KeRaiseIrql); 521 GET_FAST_CALL_SYSTEM_ROUTINE(IofCompleteRequest, IoCompleteRequest); 522 GET_FAST_CALL_SYSTEM_ROUTINE(ObfDereferenceObject, ObDereferenceObject); 523 GET_FAST_CALL_SYSTEM_ROUTINE(IofCallDriver, IoCallDriver); 524 GET_FAST_CALL_SYSTEM_ROUTINE(KfAcquireSpinLock, KeAcquireSpinLock); 525 GET_FAST_CALL_SYSTEM_ROUTINE(KfReleaseSpinLock, KeReleaseSpinLock); 526 GET_FAST_CALL_SYSTEM_ROUTINE(KfLowerIrql, KeLowerIrql); 527 GET_FAST_CALL_SYSTEM_ROUTINE(KfRaiseIrql, KeRaiseIrql); 528 GET_FAST_CALL_SYSTEM_ROUTINE(KefAcquireSpinLockAtDpcLevel, KeAcquireSpinLockAtDpcLevel); 529 GET_FAST_CALL_SYSTEM_ROUTINE(KefReleaseSpinLockFromDpcLevel, KeReleaseSpinLockFromDpcLevel); 524 530 525 531 /* … … 541 547 if (!_imp__KeTickCount) 542 548 { 549 if (!g_fNt3VersionInitialized) 550 rtR0Nt3InitVersion(); 543 551 Assert(g_uNt3MajorVer == 3 && g_uNt3MinorVer < 50); 552 544 553 uint8_t const *pbCode = (uint8_t const *)RTR0DbgKrnlInfoGetSymbol(hKrnlInfo, NULL, "KeQueryTickCount"); 545 554 AssertLogRelReturn(pbCode, VERR_INTERNAL_ERROR_2); … … 550 559 switch (b1) 551 560 { 552 case 0x89: 553 /* mov reg, r/m ; We're looking for absolute address in r/m. */ 561 case 0x8b: /* mov reg, r/m ; We're looking for absolute address in r/m. */ 554 562 if ((pbCode[off] & (X86_MODRM_MOD_MASK | X86_MODRM_RM_MASK)) == 5 /*disp32*/) 555 563 _imp__KeTickCount = *(KSYSTEM_TIME **)&pbCode[off + 1]; 556 564 RT_FALL_THRU(); 557 case 0x8 b:565 case 0x89: /* mov r/m, reg */ 558 566 off += rtR0Nt3CalcModRmLength(pbCode[off]); 559 567 break; -
trunk/src/VBox/Runtime/r0drv/nt/nt3fakesA-r0drv-nt.asm
r70336 r70341 77 77 ; @param 2 The stdcall name. 78 78 ; @param 3 Byte size of arguments. 79 %macro FastOrStdCallWrapper 3 79 ; @param 4 Zero if 1:1 mapping; 80 ; One if 2nd parameter is a byte pointer that the farcall version 81 ; instead returns in al. 82 %macro FastOrStdCallWrapper 4 80 83 BEGINCODE 81 84 extern _g_pfnrt %+ %1 … … 91 94 push ebp 92 95 mov ebp, esp 96 %if %4 == 1 97 push dword 0 98 push esp 99 %else 93 100 push edx 101 %endif 94 102 push ecx 95 103 call [_g_pfnrt %+ %2] 104 %if %4 == 1 105 movzx eax, byte [ebp - 4] 106 %endif 96 107 leave 97 108 ret … … 107 118 %endmacro 108 119 109 FastOrStdCallWrapper IofCompleteRequest, IoCompleteRequest, 8 110 FastOrStdCallWrapper IofCallDriver, IoCallDriver, 8 111 FastOrStdCallWrapper ObfDereferenceObject, ObDereferenceObject, 4 112 FastOrStdCallWrapper KfAcquireSpinLock, KeAcquireSpinLock, 4 113 FastOrStdCallWrapper KfReleaseSpinLock, KeReleaseSpinLock, 8 114 FastOrStdCallWrapper KfLowerIrql, KeLowerIrql, 4 115 FastOrStdCallWrapper KfRaiseIrql, KeRaiseIrql, 4 120 FastOrStdCallWrapper IofCompleteRequest, IoCompleteRequest, 8, 0 121 FastOrStdCallWrapper IofCallDriver, IoCallDriver, 8, 0 122 FastOrStdCallWrapper ObfDereferenceObject, ObDereferenceObject, 4, 0 123 FastOrStdCallWrapper KfAcquireSpinLock, KeAcquireSpinLock, 4, 1 124 FastOrStdCallWrapper KfReleaseSpinLock, KeReleaseSpinLock, 8, 0 125 FastOrStdCallWrapper KfRaiseIrql, KeRaiseIrql, 4, 1 126 FastOrStdCallWrapper KfLowerIrql, KeLowerIrql, 4, 0 127 FastOrStdCallWrapper KefAcquireSpinLockAtDpcLevel, KeAcquireSpinLockAtDpcLevel, 4, 0 128 FastOrStdCallWrapper KefReleaseSpinLockFromDpcLevel,KeReleaseSpinLockFromDpcLevel, 4, 0 116 129 117 130 -
trunk/src/VBox/Runtime/r0drv/nt/timer-r0drv-nt.cpp
r70212 r70341 510 510 pTimer->pvUser = pvUser; 511 511 pTimer->u64NanoInterval = u64NanoInterval; 512 KeInitializeTimerEx(&pTimer->NtTimer, SynchronizationTimer); 512 if (g_pfnrtKeInitializeTimerEx) 513 g_pfnrtKeInitializeTimerEx(&pTimer->NtTimer, SynchronizationTimer); 514 else 515 KeInitializeTimer(&pTimer->NtTimer); 513 516 int rc = VINF_SUCCESS; 514 517 if (pTimer->fOmniTimer)
Note:
See TracChangeset
for help on using the changeset viewer.