内核驱动程序中获取当前用户进程的进程名的一种方法

内核驱动程序中获取当前用户进程的进程名的一种方法

在内核驱动程序中,可以通过PsGetCurrentProcess函数来获取当前调用驱动的进程的EPROCESS结构的地址.很多文章都说在EPROCESS结构的0x174偏移处存放着进程名.这里提供另外一种方法来获取这个进程名.思路如下:驱动程序的加载函数DriverEntry是运行在System进程中的.通过PsGetCurrentProcess可以获取System进程的内核EPROCESS结构的地址,然后从该地址开始寻找"System"字符串.找到后,便是EPROCESS的进程名存放的偏移处.得到进程名在EPROCESS结构的偏移后,以后的进程调用驱动的时候,就可以直接在该偏移处获取当前进程名.代码如下:

 

DWORD GetProcessNameOffset()

{

    PEPROCESS curproc;

    DWORD procNameOffset;

    curproc = PsGetCurrentProcess();

    for(int i=0; i< 4096; i++)

    {

        if( !strncmp( "System", (PCHAR) curproc + i, strlen("System") ))

        {
            procNameOffset = i;

            return procNameOffset;

        }

    }

    return 0;
}

你可能感兴趣的:(内核驱动程序中获取当前用户进程的进程名的一种方法)