阅读:1907回复:10
急救!
我如何能在驱动程序里通过文件对象指针PFILE_OBJECT获得该文件的
句柄HANDLE? |
|
最新喜欢:![]() |
沙发#
发布于:2001-08-03 15:56
先从文件对象中获取文件的名称(如C:\a.c)或其代表的设备名称(如\Device\Tcp),然后用ZwCreateFile打开之即可获得一句柄。
|
|
板凳#
发布于:2001-08-03 20:27
首先非常感谢softice的拔刀相助,有一点我需要说明一下,我需要获得的文件句柄是已经打开的文件句柄,请教softice,通过您指点的方法获得的句柄是同一个文件的又一新的句柄还是跟原来已经打开的文件句柄是同一个?如果不是同一个,我怎样能获得先前已经打开的句柄?感谢之及!
|
|
地板#
发布于:2001-08-06 13:32
ObReferenceObjectByPointer(...)
|
|
|
地下室#
发布于:2001-08-07 09:48
陆斑竹提到的ObReferenceObjectByPointer好象只能增加给定对象的指针引用记数,而不能得到其句柄。我想你可以试着用对应于unix系统下sysctl系统调用的内核服务ZwQuerySystemInformation得到所有进程的SystemHandleInformation,然后用你已知的进程句柄(希望得到哪个进程的句柄)的对象指针索引调用返回的内容就可得到其句柄值。
当然,还有一个办法:先用KeAttachProcess切换到你想要的进程空间中去(即使你要的仅是自己的句柄,当你的驱动不能确定当前进程的时候也需这样处理),然后让句柄从低到高(4,8...)依次调用ObReferenceObjectByHandle,当返回的指针和你已知的指针相等时... |
|
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 ); |
|
|
6楼#
发布于:2001-08-08 15:07
ObOpenObjectByPointer 要回生成新的handle,而不是返回老的handle
|
|
7楼#
发布于:2001-08-09 15:35
感谢LU0斑主的帮忙,请问您给我提供的那个函数到底是打开一个新的句柄还是打开旧的句柄?如果打开的是一个新的句柄,那么我对这个新句柄进行写FLUSH操作,对原来的句柄会产生同样的效果吗?有机会我到上海找你,请问陆兄的联系方式。我的EMAIL :
chaosvclv@sina.com |
|
8楼#
发布于:2001-08-11 11:51
句柄本身仅在生成句柄的进程里有效. 给你一个其他进程的句柄有什么用? 在KERNEL MODE, OBJECT POINTER才是真正有用的东西. 有了OBJECT POINT可以随时生成一个HANDLE.
生成的句柄当然是新的.大家不要管生成的这个句柄是不是老的句柄, 只要他管用就可. TO PPL: 新的HANDLE和老的HANDLE对你有什么意义么? HANDLE本身没有任何意义. 只有OBJECT POINTER才是KERNEL MODE通用的数据结构. |
|
|
9楼#
发布于:2001-08-14 23:57
to 斑竹:
难道区分新旧文件句柄真的没有意义吗?如果我要在自己的 进程里对另一进程中已打开的 文件句柄进行FLUSH操作,该怎么办? 是安照你说的在自己进程中生成 一个新的文件句柄,然后对该新文件句柄进行FLUSH操作就可以实现目的吗? |
|
10楼#
发布于:2001-08-15 12:53
任何一个句柄都具有同样的功能.
|
|
|