场景
- 驱动中获取当前上下文进程的进程名
 - 通过 
PsGetCurrentProcess函数来获取当前调用驱动的进程的EPROCESS结构的地址,EPROCESS结构的0x174偏移(现在就是要实现动态定位这个硬编码)处存放着进程名。 
思路
- 驱动程序的入口 
DriverEntry是运行在System进程中的; - 通过 
PsGetCurrentProcess可以获取System进程的内核EPROCESS结构的地址; - 从该地址开始搜索特征码 
System字符串; - 找到了便是 
EPROCESS的进程名存放的偏移处,计算得到进程名在EPROCESS结构中的偏移offset; - 应用层调用驱动的时候,就可以直接在该偏移处获取当前进程名。
 
DWORD GetProcessNameOffset()
{
    PEPROCESS curproc;
    DWORD procNameOffset;
    //获取EPROCESS结构的地址
    curproc = PsGetCurrentProcess();
    for(int i=0; i< 4096; i++)
    {
        if( !strncmp( "System", (PCHAR) curproc + i, strlen("System") ))
        {
            procNameOffset = i;
            return procNameOffset;
        }
    }
    return 0;
}优化
可以使用 Sunday 搜索匹配算法,大大提高搜索效率。