当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: 好久没有访问CSDN,现在都变的不太认识.由于这几年从事驱动开发
 

 

    摘要:第一部分 数据库基础 一、基本概念 1.什么是sql? sql即结构化查询语言,是用于关系数据库通迅的标准语言,通过sql用户可向数据库表达自已的需求。 2.什么是客户机/服务器技术? 在客户机/服务器中,主机叫作服务器,网络通常是局域网(lan)或是广域网(wan).服务器通常被个人计算机或是其他的服务器或个人计算机而不是终端访问.每一台pc机都叫做一个客户机,都有访问网络的功能,允许在客户机和......
    摘要:  查看mfc中与clistctrl和clistview相关的源码时发现,clistview派生自cwnd->cview->cctrlview,而clistctrl则直接派生自cwnd类,而clistview::getlistctrl函数居然仅仅用了一句 return *(clistctrl*)this; 将clistview活生生的转换成了clistctrl,百思不得其解,后在csd......


在windows 2003中,如何在驱动中取得当前进程完整路径?

好久没有访问csdn,现在都变的不太认识.

【程序编程相关:学习DTS:数据库之间的导入和导出。

【推荐阅读: 用java实现print screen

由于这几年从事驱动开发,就发一些自已的心得. 【扩展信息:C++ Advanced Trainin

在驱动开发中,有时候我们需要取得当前进程的路径,在之前,大家都是在抄xfilt的代码(xfilt是抄osr).

#define base_process_peb_offset     0x01b0

#define base_peb_process_parameter_offset  0x0010

#define base_process_parameter_full_image_name 0x003c

pcwstr kfgetprocessfullname()

/*++

arguments:

    pfullimagename - pointer to get the process name, etc: "c:\winnt\notepad.exe".

--*/

{

 dword dwaddress;

 if(kegetcurrentirql() != passive_level)

  return null;

 dwaddress = (dword)psgetcurrentprocess();

 if(dwaddress == 0 || dwaddress == 0xffffffff)

  return null;

 dwaddress += base_process_peb_offset;

 if((dwaddress = *(dword*)dwaddress) == 0) return 0;

 dwaddress += base_peb_process_parameter_offset;

 if((dwaddress = *(dword*)dwaddress) == 0) return 0;

 dwaddress += base_process_parameter_full_image_name;

 if((dwaddress = *(dword*)dwaddress) == 0) return 0;

 return (pcwstr)dwaddress;

}

这段代码在2k/xp能正确工作,可在2003上,一执行就蓝屏,为什么呢???

首先你要理想这段代码的工作原理(知道还看什么,快关ie.)

流程:

1.取得eprocess(psgetcurrentprocess();)

2. 通过偏移量取得peb, (address + base_process_peb_offset )

3.通过peb指针的偏移量取得rtl_user_process_parameter( address + base_peb_process_parameter_offset)

最后是取得其imagepathname, 得到是unicode_string结构.

知道原理后,下面演示我是如何在2003上取得:

调试心得记录:使用windbg 分析2003的全路径存在哪儿?


...   下一页
 ·lava的伪指令- -    »显示摘要«
    摘要: 虚拟指令意义 (括号内代码为注释。名称下的为同义代码,有相同的意思,主要是为了wqx里书写方便) 名称 寻址方式 字节码 代码格式 伪代码表示1.ph1 立即 ph1 #num [sp]<-num,0,0,0; sp+=4; (栈单元大小为4bytes,不够的部分用0补齐,下同) (phs) 直接 ph1 addr [sp]<-{addr},0,0,0; sp+=4......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE