chaosvc
驱动牛犊
驱动牛犊
  • 注册日期2001-03-30
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1907回复:10

急救!

楼主#
更多 发布于:2001-08-02 09:34
我如何能在驱动程序里通过文件对象指针PFILE_OBJECT获得该文件的
句柄HANDLE?

最新喜欢:

flyfoxflyfox
softice
驱动牛犊
驱动牛犊
  • 注册日期2001-05-09
  • 最后登录2009-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-08-03 15:56
先从文件对象中获取文件的名称(如C:\a.c)或其代表的设备名称(如\Device\Tcp),然后用ZwCreateFile打开之即可获得一句柄。

chaosvc
驱动牛犊
驱动牛犊
  • 注册日期2001-03-30
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-08-03 20:27
首先非常感谢softice的拔刀相助,有一点我需要说明一下,我需要获得的文件句柄是已经打开的文件句柄,请教softice,通过您指点的方法获得的句柄是同一个文件的又一新的句柄还是跟原来已经打开的文件句柄是同一个?如果不是同一个,我怎样能获得先前已经打开的句柄?感谢之及!
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-08-06 13:32
ObReferenceObjectByPointer(...)
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
softice
驱动牛犊
驱动牛犊
  • 注册日期2001-05-09
  • 最后登录2009-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-08-07 09:48
陆斑竹提到的ObReferenceObjectByPointer好象只能增加给定对象的指针引用记数,而不能得到其句柄。我想你可以试着用对应于unix系统下sysctl系统调用的内核服务ZwQuerySystemInformation得到所有进程的SystemHandleInformation,然后用你已知的进程句柄(希望得到哪个进程的句柄)的对象指针索引调用返回的内容就可得到其句柄值。
当然,还有一个办法:先用KeAttachProcess切换到你想要的进程空间中去(即使你要的仅是自己的句柄,当你的驱动不能确定当前进程的时候也需这样处理),然后让句柄从低到高(4,8...)依次调用ObReferenceObjectByHandle,当返回的指针和你已知的指针相等时...
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-08-08 11:32
Use following proto-type for the popurse
Since the function is not documented. Use on your own risk.

NTSTATUS
ObOpenObjectByPointer (
    IN PVOID            Object,
    IN ULONG            HandleAttributes,
    IN PACCESS_STATE    PassedAccessState OPTIONAL,
    IN ACCESS_MASK      DesiredAccess OPTIONAL,
    IN POBJECT_TYPE     ObjectType OPTIONAL,
    IN KPROCESSOR_MODE  AccessMode,
    OUT PHANDLE         Handle
);
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
ppl
ppl
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2006-05-21
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-08-08 15:07
ObOpenObjectByPointer 要回生成新的handle,而不是返回老的handle

chaosvc
驱动牛犊
驱动牛犊
  • 注册日期2001-03-30
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2001-08-09 15:35
感谢LU0斑主的帮忙,请问您给我提供的那个函数到底是打开一个新的句柄还是打开旧的句柄?如果打开的是一个新的句柄,那么我对这个新句柄进行写FLUSH操作,对原来的句柄会产生同样的效果吗?有机会我到上海找你,请问陆兄的联系方式。我的EMAIL :
chaosvclv@sina.com
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2001-08-11 11:51
句柄本身仅在生成句柄的进程里有效. 给你一个其他进程的句柄有什么用? 在KERNEL MODE, OBJECT POINTER才是真正有用的东西. 有了OBJECT POINT可以随时生成一个HANDLE.
生成的句柄当然是新的.大家不要管生成的这个句柄是不是老的句柄, 只要他管用就可.
TO PPL:
新的HANDLE和老的HANDLE对你有什么意义么? HANDLE本身没有任何意义. 只有OBJECT POINTER才是KERNEL MODE通用的数据结构.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
chaosvc
驱动牛犊
驱动牛犊
  • 注册日期2001-03-30
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2001-08-14 23:57
to 斑竹:

    难道区分新旧文件句柄真的没有意义吗?如果我要在自己的 进程里对另一进程中已打开的 文件句柄进行FLUSH操作,该怎么办?
是安照你说的在自己进程中生成 一个新的文件句柄,然后对该新文件句柄进行FLUSH操作就可以实现目的吗?
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2001-08-15 12:53
任何一个句柄都具有同样的功能.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
游客

返回顶部