VirtualBox

Ignore:
Timestamp:
May 25, 2009 8:49:30 AM (16 years ago)
Author:
vboxsync
Message:

initterm-r0drv-nt.cpp: Some more data.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r0drv/nt/initterm-r0drv-nt.cpp

    r19975 r19983  
    106106
    107107    /*
    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.) */
    110119    __try
    111120    {
    112         /* HACK ALERT! The offsets are from poking around in windbg. */
    113121#if defined(RT_ARCH_X86)
    114122        PKPCR    pPcr   = (PKPCR)__readfsdword(RT_OFFSETOF(KPCR,SelfPcr));
     
    122130            g_offrtNtPbDpcQueueDepth = 0x870;
    123131        }
     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
    124143        /** @todo more */
    125144        //pbQuantumEnd = (uint8_t volatile *)pPcr->Prcb + 0x1a41;
     
    142161            g_cbrtNtPbQuantumEnd     = 1;
    143162            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;
    144171        }
    145172
     
    148175#endif
    149176    }
    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? */
    151178    {
    152179        g_offrtNtPbQuantumEnd    = 0;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette