#
#  Modules Info
#

import pykd

moduleList = []            

def kernelReloadModules():

    global nt 
    global moduleList

    nt = pykd.loadModule("nt")

    modules = pykd.typedVarList( nt.PsLoadedModuleList, "nt", "_LDR_DATA_TABLE_ENTRY", "InLoadOrderLinks" )

    moduleList = []

    moduleList.append( nt )

    for m in modules:	

        baseName = str( pykd.loadUnicodeString( m.BaseDllName.getAddress() ) )

        if baseName=="ntoskrnl.exe":
            continue

        module = pykd.findModule( m.DllBase )

        globals()[ module.name().lower() ] = module

        moduleList.append( module )


def userReloadModules():

    pass  


def printModuleList():
    pykd.dprintln( "\n".join( [ str(m) for m in moduleList ] ) )                      



if pykd.isKernelDebugging():

    kernelReloadModules()

else:

    userReloadModules()