A overview of the win32k device driver. ---------------------------------------- Notation: --------- --> () A Call to the given routine. The procedings of that routine continues at the next indent level. <-- [return value description] : Identifing when and what happens. Init packet - $elf ----------------------- _strategyAsm0 (devFirst.asm) _strategyAsm (devFirst.asm) --> strategy(PRPH pRpH, unsigned short usDev) (d16strat.c) init - dev 0: --> dev0Init(PRPINITIN pRpIn, PRPINITOUT pRpOut) (d16init.c) <-- (STATUS_DONE - can't fail) <-- (fwd) <-- (fwd) Init packet - $win32k ---------------------- _strategyAsm1 (devFirst.asm) _strategyAsm (devFirst.asm) --> strategy(PRPH pRpH, unsigned short usDev) (d16strat.c) init - dev 1: --> dev1Init(PRPINITIN pRpIn, PRPINITOUT pRpOut) (d16init.c) --> ProbeKrnl (probkrnl.c) <-- (NO_ERROR - may fail) <-- (STATUS_DONE - may fail) <-- (fwd) <-- (fwd) D16_IOCTL_GETKERNELINFO packet ------------------------------ _strategyAsm0 (devFirst.asm) _strategyAsm (devFirst.asm) --> strategy(PRPH pRpH, unsigned short usDev) (d16strat.c) gen IO-Ctrl - dev 0: --> dev0GenIOCtl(PRP_GENIOCTL pRp) (d16strat.c) D16_IOCTL_GETKERNELINFO: --> CallGetKernelInfo32(ULONG addressKrnlInfoBuf) (devfirst.asm) --> GetKernelInfo32(PKRNLINFO pKrnlInfo) (d32init.c) --> GetOS2KrnlMTE(void) (devfirst.asm) <-- <-- <-- <-- <-- <-- D16_IOCTL_VERIFYIMPORTTAB packet -------------------------------- _strategyAsm0 (devFirst.asm) _strategyAsm (devFirst.asm) --> strategy(PRPH pRpH, unsigned short usDev) (d16strat.c) gen IO-Ctrl - dev 0: --> dev0GenIOCtl(PRP_GENIOCTL pRp) (d16strat.c) D16_IOCTL_VERIFYIMPORTTAB: --> CallVerifyImportTab32(void) (devlast.c) --> VerifyImportTab32(void) (d32init.c) --> GetOS2KrnlMTE(void) (devfirst.asm) <-- --> interpretFunctionProlog32(..) <-- --> interpretFunctionProlog16(..) <-- <-- <-- <-- <-- <-- D16_IOCTL_RING0INIT packet --------------------------- _strategyAsm0 (devFirst.asm) _strategyAsm (devFirst.asm) --> strategy(PRPH pRpH, unsigned short usDev) (d16strat.c) gen IO-Ctrl - dev 0: --> dev0GenIOCtl(PRP_GENIOCTL pRp) (d16strat.c) D16_IOCTL_RING0INIT: --> R0Init16(PRP_GENIOCTL pRp) (d16init.c) --> CallR0Init32(LIN pRpInit) (devlast.asm) --> R0Init32(RP32INIT *pRpInit) (d32init.c) --> heapInit(unsigned cbSize) (malloc.c) ... <-- --> ldrInit(void) (ldr.cpp) ... <-- --> procInit(void) (d32init.c) ... <-- <-- <-- <-- <-- <-- <--