句柄

Windows进程的内核对象句柄表

有些话、适合烂在心里 提交于 2020-02-24 05:54:45
当一个进程被初始化时,系统要为它分配一个句柄表。该句柄表只用于内核对象 ,不用于用户对象或GDI对象。 创建内核对象 当进程初次被初始化时,它的句柄表是空的。然后,当进程中的线程调用创建内核对象的函数时,比如CreateFileMapping,内核就为该对象分配一个内存块,并对它初始化。这时,内核对进程的句柄表进行扫描,找出一个空项。由于表 3 - 1中的句柄表是空的,内核便找到索引1位置上的结构并对它进行初始化。该指针成员将被设置为内核对象的数据结构的内存地址,访问屏蔽设置为全部访问权,同时,各个标志也作了设置。 下面列出了用于创建内核对象的一些函数(不是个完整的列表): HANDLE CreateThread( PSECURITY_ATTRIBUTE psa, DWORD dwStackSize, LPTHREAD_START_ROUTINE pfnStartAddr, PVOID pvParam, DWORD dwCreationFlags, PDWORD pdwThreadId); HANDLE CreateFile( PCTSTR pszFileNAme, DWORD dwDesiredAccess, DWORD dwShareMode, PSECURITY_ATTRIBUTES psa, DWORD dwCreationDistribution, DWORD

【整理】句柄.内核对象

人走茶凉 提交于 2020-02-24 05:53:08
  句柄是一个标识符,是拿来标识对象或者项目的。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是驻留在内存中的。 C#中的IntPtr类型称为“平台特定的整数类型”,它们用于本机资源,如窗口句柄。 资源的大小取决于使用的硬件和操作系统,但其大小总是足以包含系统的指针(因此也可以包含资源的名称)。 内核对象    内核对象只是内核分配的一个内存块,并且只能由该内核访问。该内存块是一种数据结构,它的成员负责维护该对象的各种信息。 有些数据成员(如安全性描述符、使用计数等)在所有对象类型中是相同的,但大多数数据成员属于特定的对象类型。例如,进程对象有一个进程 I D 、一个基本优先级和一个退出代码,而文件对象则拥有一个字节位移、一个共享模式和一个打开模式。    内核对象的数据结构只能被内核访问,因此应用程序无法在内存中找到这些数据结构并直接改变它们的内容 。 Microsoft 规定了这个限制条件,目的是为了确保内核对象结构保持状态的一致。这个限制也使 Microsoft 能够在不破坏任何应用程序的情况下在这些结构中添加、 删除和修改数据成员。 内核对象包括 如下

windows内核对象句柄

青春壹個敷衍的年華 提交于 2020-02-24 05:27:56
内核对象用于管理进程、线程和文件等诸多种类的大量资源,每一个内核对象都只是一个句内存快,它由操作系统内核分配,并只能右操作系统内核访问。这个内存块是一个数据结构,其维护着与对象相关的信息,其中少数成员是所有对象都有的,其他大多数都是不同类型的对象特有的。 由于内核对象只能由操作系统内核访问,因此windows提供了句柄来标识内核对象,对于应用程序来说,这个句柄就相当于这个内核对象。应用程序创建一个内核对象,就会返回对应的句柄,然后可以以这个句柄作为参数,去调用操纵和关闭内核对象的函数。 操作系统内核通过记录内核对象的使用计数,来维护内核对象的生存周期。初始创建的内核对象使用计数被设置为1,当其他进程获得对现有内核对象的访问后,使用计数就会递增,当其他进程主动关闭内核对象或者退出进程时,使用计数递减,当使用计数减为0时,操作系统内核就会销毁该对象。 为了维护内核对象的安全性,windows提供了安全描述符来记录谁拥有对象,哪些组和用户被允许访问或者使用对象,哪些组和用户被拒绝访问此对象。因此,几乎所有创建时提供了SECURITY_ATTRUBUTES(这个结构体包含了安全描述符对象指针)作为指针参数的对象,都是内核对象。 每个进程在初始化时,系统都为它分配了一个句柄表,这个句柄表仅供内核对象使用,我们称其为进程内核对象句柄表。 一个进程内核对象句柄表(简称进程的句柄表),只是一个数组

什么是句柄

无人久伴 提交于 2020-02-21 14:26:41
版权声明 :转载时请以超链接形式标明文章原始出处和作者信息及 本声明 http://jellyfish.blogbus.com/logs/319589.html 所谓 句柄实际上是一个数据,是一个Long (整长型)的数据。 句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。 从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。 如果想更透彻一点地认识句柄,我可以告诉大家, 句柄是一种指向指针的指针。 我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象

操作系统中的句柄是什么?(转)

懵懂的女人 提交于 2020-02-16 08:03:16
1.这里将句柄所能标识的所有东西(如窗口、文件、画笔等)统称为“对象”。 2.图中一个小横框表示一定大小的内存区域,并不代表一个字节,如标有0X00000AC6的横框表示4个字节。 程序运行到某时刻的内存快照 程序往后运行到另一时刻时的内存快照 Windows是一个以虚拟内存为基础的操作系统,很多时候,进程的代码和数据并不全部装入内存,进程的某一段装入内存后,还可能被换出到外存,当再次需要时,再装入内存。两次装入的地址绝大多数情况下是不一样的。也就是说,同一对象在内存中的地址会变化。那么,程序怎么才能准确地访问到对象呢?为了解决这个问题,Windows引入了句柄。 系统为每个进程在内存中分配一定的区域,用来存放各个句柄,即一个个32位无符号整型值(32位操作系统中)。每个32位无符号整型值相当于一个指针,指向内存中的另一个区域(我们不妨称之为区域A)。而区域A中存放的正是对象在内存中的地址。当对象在内存中的位置发生变化时,区域A的值被更新,变为当前时刻对象在内存中的地址,而在这个过程中,区域A的位置以及对应句柄的值是不发生变化的。这种机制,用一种形象的说法可以表述为:有一个固定的地址(句柄),指向一个固定的位置(区域A),而区域A中的值可以动态地变化,它时刻记录着当前时刻对象在内存中的地址。这样,无论对象的位置在内存中如何变化,只要我们掌握了句柄的值,就可以找到区域A

4、selenium webdriver + java 进行元素定位时的页面跳转问题

孤人 提交于 2020-02-09 18:56:46
在使用selenium-Java对元素进行定位时经常遇见以下两种问题: 问题一:在当前页面进行跳转时,提示 Unable to locate element 原因:driver在打开网页时,网页加载速度过慢,导致接下来的语句找不到元素; 解决办法:在跳转之前Thread.sleep(3000); 问题二:在页面跳转时产生窗口切换,提示Unable to locate element 原因:窗口句柄还停留在上一个页面,需要对窗口进行切换,获得当前句柄之后,再进行跳转,就不会出现问题了。 java实现如下: /* * 窗口切换,获取窗口句柄 */ String winHandleBefore = driver.getWindowHandle(); for(String winHandle : driver.getWindowHandles()) { if (winHandle.equals(winHandleBefore)) { continue; } driver.switchTo().window(winHandle); break; } driver.findElement(By.linkText("基本信息")).click(); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto

GC时如何处理对象引用

China☆狼群 提交于 2020-02-09 02:23:51
疑问: 在学习GC的时候发现,无论是 Mark and Copy ,还是 Mark-Sweep-Compact 算法,都要 移动对象 ,这必然会导致对象的 内存地址 发生变动,那么移动后,对象是怎么找到在堆中对象的新内存地址的? 难道每移动一个对象,就会找到并更新所有引用这个对象的 reference? 垃圾收集算法: https://plumbr.io/handbook/garbage-collection-algorithms Sun HotSpot 对象的访问方式: 《深入理解Java虚拟机》第2版中,第2章的 2.3.3 对象的访问定位 中提到,对象访问方式目前主流有两种: 句柄 直接指针 * HotSpot 中是使用 直接指针 来定位对象的。 句柄: 如果使用句柄访问的话,那么 Java 堆中将会划分出一块内存来作为句柄池,reference 中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体信息。 使用句柄来访问的最大好处就是 reference 中存储的是稳定的句柄地址,在对象被移动( 垃圾收集 时移动对象是非常普遍的行为)时只会改变句柄中的实例数据指针,而 reference 本身不需要修改。 直接指针: 如果使用直接指针访问,那么 Java 对象的布局中就必须考虑如何放置访问类型数据的相关信息,而 reference

python File常用操作

狂风中的少年 提交于 2020-02-04 22:41:37
python File常用操作 data = open(“yesterday”,encoding=“utf-8”).read() print(data) 文件句柄,"w"为写模式,“r"为读模式 “a"为追加模式 模式一直一种一种使用,不能混着用 //读模式: f = open(“yesterday”,“r”,encoding=“utf-8”)//文件句柄 data = f.read() print(data) //写模式: f = open(“yesterday”,“w”,encoding=“utf-8”)//文件句柄 f.write(“hello world beijingtiananmen*******”) f.write(”////hengekda 嗯哼大量”) //追加模式:(如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件进行写入。) f = open(“yesterday”,“a”,encoding=“utf-8”)//文件句柄 f.write(“hello *******”) f.write(“44444”) f.close() //关闭文件 f = open(“yesterday”,“r”,encoding=“utf-8”)//文件句柄 print(f.readline())//读第一行 for i in range(5): print

python3基础篇05(文件操作)

徘徊边缘 提交于 2020-02-03 08:31:48
文件操作 基本规则: 文件操作 打开文件:open(参数1,参数2,参数3) 参数1:指定文件 参数2:打开的模式 r:读取模式,如果被打开的文件不存在,直接报错 a:追加写入(在文件中原有的内容最后追加写入),被打开的文件不存在,会自动创建一个 w:覆盖写入(清空文件中原有的内容),被打开的文件不存在,会自动创建一个 # 操作一些图片,视频等文件 rb:读取模式,如果被打开的文件不存在,直接报错(以二进制模式去打开文件) ab:追加写入(在文件中原有的内容最后追加写入),被打开的文件不存在,会自动创建一个(以二进制模式去打开文件) wb:覆盖写入(清空文件中原有的内容),被打开的文件不存在,会自动创建一个(以二进制模式去打开文件) 参数3:编码方式("utf-8") 1.打开一个文件 text文件内容 # 打开一个文件,返回一个操作的句柄 f = open(file="text.txt", mode="r", encoding="utf-8") print(f) #显示打印内容的信息 结果: 2.读取文件内容的三种方式 (1)读取全部内容 read() # 打开一个文件,返回一个操作的句柄 f = open(file="text.txt", mode="r", encoding="utf-8") # 读取内容 # 第一种:读取全部的内容 content = f.read()

面试常见的selenium问题

落爺英雄遲暮 提交于 2020-02-02 12:20:23
面试常见的selenium问题 1.如何切换iframe   问题:如果你在一个default content中查找一个在iframe中的元素,那肯定是找不到的。反之你在一个iframe中查找另一个iframe元素或default content中的元素,那必然也定位不到   基本步骤:先通过switch进入到iframe中,找到想找的元素,然后跳出来,进行其他的操作   1).定位到iframe:WebElement IframeElement=driver.findElement(By.id(“frame”));   2).切到这个iframe 里面:Driver.switch().frame(IframeElement);   3).定位Iframe里面,你想要的元素:   WebElement content=driver.findElement(By.className("CSS1Compat")); //在iframe中定位要找的元素   content.sendKeys("cke_contents_content"); //操作元素   driver.switchTo().defaultContent(); //跳出iframe,不跳出来是不能进行iframe外的操作的 2.如何处理弹窗   1)处理弹窗就是一行代码:driver.switchTo().alert()