DuplicateHandle有什么用
if(! ::CreatePipe( hConnectRead , &hConnectWrite ,&saAttr, 0))return;
if(! ::DuplicateHandle(GetCurrentProcess(),hConnectRead,
GetCurrentProcess(),&hReadDup,
0, FALSE,DUPLICATE_SAME_ACCESS)
)return;
::CloseHandle( hConnectRead );
为什么要这样做呢?
我发现不这么也没有什么问题啊!
问题点数:0、回复次数:8Top
1 楼peon(加菲-加菲 一只特立独行的猫)回复于 2003-06-03 21:59:26 得分 0
DuplicateHandle can be called by either the source process or the target process. It can also be invoked where the source and target process are the same. For example, a process can use DuplicateHandle to create a noninheritable duplicate of an inheritable handle, or a handle with different access than the original handle.Top
2 楼wing_pn(麦田守望者)回复于 2003-06-05 08:19:59 得分 0
UPTop
3 楼roland_c(归去来兮)回复于 2003-06-05 10:41:10 得分 0
DuplicateHandle的作用是用来在不同进程之间复制句柄,你的例子中是在同一个进程中,所以没什么很大区别,至少是不容易看出来。Top
4 楼peon(加菲-加菲 一只特立独行的猫)回复于 2003-06-09 11:59:56 得分 0
同意roland_c,DuplicateHandle是在不同的进程里复制句柄的方法之一Top
5 楼sandrowjw(我的小猫照片给弄坏了,心都碎了)回复于 2003-06-09 14:26:59 得分 0
这里好像就是保持引用计数。Top
6 楼force_eagle(战鹰)回复于 2003-06-09 15:50:48 得分 0
同意roland_c
摘自WINDOWS核心编程的一段
假设一个进程拥有对一个文件映射对象的读和写访问权。在某个位置上,一个函数被调用,它通过读取文件映射对象来访问它。为了使应用程序更加健壮,可以使用D u p l i c a t e H a n d l e为现有的对象创建一个新句柄,并确保这个新句柄拥有对该对象的只读访问权。然后将只读句柄传递给该函数,这样,该函数中的代码就永远不会偶然对该文件映射对象执行写入操作。Top
7 楼yueyue()回复于 2003-06-09 16:13:10 得分 0
DuplicateHandle妙用无穷啊。
DuplicateHandle(GetCurrentProcess(),GetCurrentProcess(),
GetCurrentProcess(),&hReadDup,
0, FALSE,DUPLICATE_SAME_ACCESS)
的用处就不小:)Top
8 楼opqit(0freeman0)回复于 2003-06-09 16:38:39 得分 0
markTop




