由于句柄值实际上是放入进程句柄表的索引,因此这些句柄 是与进程相关的,并且不能由其他进程成功地使用
2012-06-29 09:58
344 查看
用于创建内核对象的所有函数均返回与进程相关的句柄,这些句柄可以被在相同进程中运
行的任何或所有线程成功地加以使用。该句柄值实际上是放入进程的句柄表中的索引,它用于
标识内核对象的信息存放的位置。因此当调试一个应用程序并且观察内核对象句柄的实际值时,
会看到一些较小的值,如1,2等。请记住,句柄的含义并没有记入文档资料,并且可能随时变
更。实际上在Windows 2000中,返回的值用于标识放入进程的句柄表的该对象的字节数,而不
是索引号本身。
每当调用一个将内核对象句柄接受为参数的函数时,就要传递由一个C r e a t e * &函数返回的
值。从内部来说,该函数要查看进程的句柄表,以获取要生成的内核对象的地址,然后按定义
得很好的方式来生成该对象的数据结构。
如果传递了一个无效索引(句柄),该函数便返回失败,而G e t L a s t E r r o r则返回6
(E R R O R I N VA L I D H A N D L E)。由于句柄值实际上是放入进程句柄表的索引,因此这些句柄
是与进程相关的,并且不能由其他进程成功地使用。
如果调用一个函数以便创建内核对象,但是调用失败了,那么返回的句柄值通常是0
(N U L L)。发生这种情况是因为系统的内存非常短缺,或者遇到了安全方面的问题。不过有少
数函数在运行失败时返回的句柄值是-1(I N VA L I D H A N D L E VA L U E)。例如,如果C r e a t e F i l e
未能打开指定的文件,那么它将返回I N VA L I D H A N D L E VA L U E,而不是返回N U L L。当查看
创建内核对象的函数返回值时,必须格外小心。特别要注意的是,只有当调用C r e a t e F i l e函数时,
才能将该值与I N VA L I D H A N D L E VA L U E进行比较。下面的代码是不正确的:
行的任何或所有线程成功地加以使用。该句柄值实际上是放入进程的句柄表中的索引,它用于
标识内核对象的信息存放的位置。因此当调试一个应用程序并且观察内核对象句柄的实际值时,
会看到一些较小的值,如1,2等。请记住,句柄的含义并没有记入文档资料,并且可能随时变
更。实际上在Windows 2000中,返回的值用于标识放入进程的句柄表的该对象的字节数,而不
是索引号本身。
每当调用一个将内核对象句柄接受为参数的函数时,就要传递由一个C r e a t e * &函数返回的
值。从内部来说,该函数要查看进程的句柄表,以获取要生成的内核对象的地址,然后按定义
得很好的方式来生成该对象的数据结构。
如果传递了一个无效索引(句柄),该函数便返回失败,而G e t L a s t E r r o r则返回6
(E R R O R I N VA L I D H A N D L E)。由于句柄值实际上是放入进程句柄表的索引,因此这些句柄
是与进程相关的,并且不能由其他进程成功地使用。
如果调用一个函数以便创建内核对象,但是调用失败了,那么返回的句柄值通常是0
(N U L L)。发生这种情况是因为系统的内存非常短缺,或者遇到了安全方面的问题。不过有少
数函数在运行失败时返回的句柄值是-1(I N VA L I D H A N D L E VA L U E)。例如,如果C r e a t e F i l e
未能打开指定的文件,那么它将返回I N VA L I D H A N D L E VA L U E,而不是返回N U L L。当查看
创建内核对象的函数返回值时,必须格外小心。特别要注意的是,只有当调用C r e a t e F i l e函数时,
才能将该值与I N VA L I D H A N D L E VA L U E进行比较。下面的代码是不正确的:
相关文章推荐
- C#操作Office文件,成功释放,但读取文件时提示"文件***正由另一进程使用,因此该进程无法访问此文件"的解决办法
- c# 读取其他程序正打开的文件的时“正由另一进程使用,因此该进程无法访问该文件。"的问题解决方法
- 由于一个或多个其他网络页属性已经打开,这个属性页上的部分控件被禁用。想要使用这些控件,请先关闭所有属性页,然后将这个属性页重新打开
- 如何使PC上运行的程序不能退出,并且用户只能使用当前正在运行的程序。不能使用PC上的其他程序
- C# System.IO.FileStream 读取被其他程序打开的文件提示“文件正由另一进程使用,因此该进程无法访问该文件。”
- linux中共享内存使用过程中奇怪的问题:shmctl删除后其他进程不能再连接该共享内存
- C# System.IO.FileStream 读取被其他程序打开的文件提示“文件正由另一进程使用,因此该进程无法访问该文件。”
- 用FileMenu Tools玩转系统右键菜单 软件还有其他的内置命令,这里由于篇幅原因不能全部介绍了,比如注册DLL、反注册命令,当注册表中的某个dll或ocx文件受损时,可以使用该命令进行恢
- C# System.IO.FileStream 读取被其他程序打开的文件提示“文件正由另一进程使用,因此该进程无法访问该文件。”
- C# System.IO.FileStream 读取被其他程序打开的文件提示“文件正由另一进程使用,因此该进程无法访问该文件。”
- 多个进程同时等待网络的连接事件,当这个事件发生时,这些进程被同时唤醒,我们知道进程被唤醒,需要进行内核重新调度,这样每个进程同时去响应这一个事件,而最终只有一个进程能处理事件成功,其他的进程在处理该事件失败后重新休眠或其他。
- FileStream 读取文件时提示“xx文件正在被另一进程使用,因此该进程无法访问该文件”
- 由于套接 字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址
- 剑指offer 46---实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字
- javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
- wpf-由于其他线程拥有此对象,因此调用线程无法对其进行访问。
- 查看一个进程所使用的文件句柄数
- 关于在虚拟机上使用mysql其他主机不能访问的解决办法
- hexo安装成功,并且正确运行,但是localhost:4000不能访问
- firefox调试::此地址使用了一个通常应该用于其他网页浏览的端口。由于安全原因,Firefox 取消了该请求。