首页 > 编程知识 正文

object tostring,get diagnostics

时间:2023-05-04 16:09:28 阅读:116341 作者:1879

最近,我读了源代码在过程通讯中遇到了这个问题,在网上查了半天也很模糊,所以我决定总结别人的成果,整理一下,希望对有需要的人有帮助,如果有不正当的期待的话就指出来。

首先,我们介绍系统对象:

在系统中,对象分为两类:用户对象和内核对象。 用户的对象是窗口、菜单等。 内核对象包括进程对象、线程对象和文件映射对象等。 标识用户对象的句柄在系统中是唯一的。 因此,两个用户对象进程可以通过该句柄进行交互。 编程中常用的FindWindow ) )函数就是这样。 此函数返回指定窗口的句柄。 你可以把这个方向盘叫做实方向盘吧。 为了提高系统的稳定性,内核对象句柄与进程相关。 每个进程都有一个内核对象表,每个对象的索引都用作内核对象的句柄,从而实现进程相关。 同一对象在每个进程中可能有不同的索引。 也就是说,返回的句柄每次都不同,就像打开文件时一样。 因此,在进行进程通信时,必须使用DuplicateHandle ()函数复制句柄。 这个过程经常用于以下两个函数:

1.GetCurrentProcess()

函数的声明如下:

手持设备连接流程(语音) )。

功能:获取当前进程的句柄。 (此句柄是进程的虚拟句柄,只能在进程内部使用。 如果脱离当前进程,这个句柄就没什么意义了。 此虚拟句柄(CloseHandle ) )不需要关闭。

由此可见,假句柄的存在意义在于使用方便,不会引起内存泄漏。

2.DuplicateHandle()

BOOL DuplicateHandle (

HANDLE hSourceProcessHandle,//handle to source process

HANDLE hSourceHandle,//handle to duplicate

HANDLE hTargetProcessHandle,//handle to target process

LPHANDLE lpTargetHandle,//duplicate handle

DWORD dwDesiredAccess,//requested access

BOOL bInheritHandle,//handle inheritance选项

dworddwoptions//选项动作

);

功能:将一个进程中的伪句柄转换为可用于进程间通信的实际句柄。

主要参数分析:

hSourceProcessHandle :源进程内核的句柄

hSourceHandle :要传递的内核对象句柄。 这是模拟方向盘。

hTargetProcessHandle :目标进程内核的句柄

lpTargetHandle :接受内核对象句柄的地址(实际句柄)

该函数据此将hSourceHandle的资源伪句柄转换为实句柄,复制到lpTargetHandle,通信时用lpTargetHandle指定的句柄进行通信。

其中,第一个和第三个参数可以相同或不同。 如果将一个进程的内核资源句柄复制到另一个进程对象,且两个参数都是GetCurrentProcess (),则表示将该资源对象句柄(即第二个参数句柄)转换为实际句柄因为第一个和第三个参数相同,所以该函数只是将伪句柄转换为实句柄。 要使两个进程通信,必须将此转换后的实句柄传递给其他进程。 如果第三个参数句柄是一个进程的实句柄,而不是GetCurrentProcess (),则此函数不仅会将伪句柄转换为实句柄,还会将转换后的实句柄传递给另一个进程。 (这是我个人的理解,但不知道对不对。 请参阅。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。