Changeset 19983 in vbox for trunk/src/VBox/Runtime/r0drv/nt/initterm-r0drv-nt.cpp
- Timestamp:
- May 25, 2009 8:49:30 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/r0drv/nt/initterm-r0drv-nt.cpp
r19975 r19983 106 106 107 107 /* 108 * Try find _KPRCB::QuantumEnd and possibly also _KPRCB::DpcQueueDepth. 109 */ 108 * HACK ALERT (and déjà vu warning)! 109 * 110 * Try find _KPRCB::QuantumEnd and _KPRCB::[DpcData.]DpcQueueDepth. 111 * For purpose of verification we use the VendorString member (12+1 chars). 112 * 113 * The offsets was initially derived by poking around with windbg 114 * (dt _KPRCB, !prcb ++, and such like). Systematic harvesting is now done 115 * by means of dia2dump, grep and the symbol packs. Typically: 116 * dia2dump -type _KDPC_DATA -type _KPRCB EXE\ntkrnlmp.pdb | grep -wE "QuantumEnd|DpcData|DpcQueueDepth|VendorString" 117 */ 118 /** @todo array w/ data + script for extracting a row. (save space + readability; table will be short.) */ 110 119 __try 111 120 { 112 /* HACK ALERT! The offsets are from poking around in windbg. */113 121 #if defined(RT_ARCH_X86) 114 122 PKPCR pPcr = (PKPCR)__readfsdword(RT_OFFSETOF(KPCR,SelfPcr)); … … 122 130 g_offrtNtPbDpcQueueDepth = 0x870; 123 131 } 132 /* WindowsVista.6002.090410-1830.x86fre.Symbols.exe 133 WindowsVista.6002.090410-1830.x86chk.Symbols.exe 134 WindowsVista.6002.090130-1715.x86fre.Symbols.exe */ 135 else if ( BuildNumber == 6002 136 && !memcmp(&pbPrcb[0x1c2c], &u.szVendor[0], 4*3)) 137 { 138 g_offrtNtPbQuantumEnd = 0x1a41; 139 g_cbrtNtPbQuantumEnd = 1; 140 g_offrtNtPbDpcQueueDepth = 0x19e0 + 0xc; 141 } 142 124 143 /** @todo more */ 125 144 //pbQuantumEnd = (uint8_t volatile *)pPcr->Prcb + 0x1a41; … … 142 161 g_cbrtNtPbQuantumEnd = 1; 143 162 g_offrtNtPbDpcQueueDepth = 0x3300 + 0x18; 163 } 164 /* WindowsVista.6002.090410-1830.amd64fre.Symbols */ 165 else if ( BuildNumber == 6002 166 && !memcmp(&pbPrcb[0x399c], &u.szVendor[0], 4*3)) 167 { 168 g_offrtNtPbQuantumEnd = 0x3475; 169 g_cbrtNtPbQuantumEnd = 1; 170 g_offrtNtPbDpcQueueDepth = 0x3400 + 0x18; 144 171 } 145 172 … … 148 175 #endif 149 176 } 150 __except(EXCEPTION_EXECUTE_HANDLER) /** @todo this handler doesn't seem to work... */177 __except(EXCEPTION_EXECUTE_HANDLER) /** @todo this handler doesn't seem to work... Because of Irql? */ 151 178 { 152 179 g_offrtNtPbQuantumEnd = 0;
Note:
See TracChangeset
for help on using the changeset viewer.