电脑系统工作集怎么设置(电脑系统锁屏怎么设置)
如何清电脑内存清理
如今,软件占用的内存虽说都在标称占用系统资源少、内存小,可遇到浏览网页,多打开几个页面,如果你的电脑硬件跟不上的话,就可能会出现卡顿、幻灯片显示等。有时候大家可能会纳闷为啥自己电脑明明没用开启什么软件,内存却一直占用到40%以上。
可能部分朋友会安装使用一些“360”“电脑管家”之类的软件来清理内存,但是这些软件本身就会占用很多的系统资源,还会有各种各样的广告、臃肿的其他功能。所以今天给大家安利的就是“Memreduct”一款非常轻便小巧的清理工具。这款轻量级的工具能够让你更轻松更简单的清理内存,使电脑恢复流畅!
软件介绍
“Memreduct”是一款轻量级系统内存实时监测与清理工具 ,大小只有350KB。主要用于清理如系统工作集、工作集、备用页面内存或已更改页面内存等系统缓存,瞬间清理缓存节约10~50% 的内存。最重要的是安全、轻量、无广告!
与市面上大部分将物理内存转移到虚拟内存的清理方式不同,本程序采用微软的内存整理内核,释放应用程序不能及时释放的资源,与那些第三方软件内存管理软件不同,本程序不会强迫系统全部释放资源,而是仅仅释放必要的资源,稳定、正确、真正地清理内存,提升系统性能。
软件特点
1
体积小巧
便携版软件,压缩之后仅200多KB,解压之后也才有700多KB
2
清理方式多样
可设置定时清理,内存占用百分比清理
3
功能单一却更专业
页面更简洁,使用更方便,专注于清理内存
4
免费无广告
软件无收费项,无广告,使用更安心
软件使用
1、下载软件压缩包,对压缩文件进行解压。解压后选择电脑对应的位数,点击对应的软件
2、找到“memreduct.exe”双击打开
3、在电脑右下角找到出现数字,然后右键选择“设置”
4、点击常规找到系统启动时运行,在前面进行勾选
5、点击内存清理,在内存管理清理当超过这里,输入75(具体多少可以随意),时间可以设置30分钟
6、然后点击应用即可,这样以后启动电脑就会自动启动;还有当内存超过你设置的度时,将会自动进行清理
7、软件的清理效果
计算机里的虚拟内存是什么东西?
什么是虚拟内存
虚拟内存是用硬盘空间做内存来弥补计算机RAM空间的缺乏。当实际RAM满时(实际上,在RAM满之前),虚拟内存就在硬盘上创建了。当物理内存用完后,虚拟内存管理器选择最近没有用过的,低优先级的内存部分写到交换文件上。这个过程对应用是隐藏的,应用把虚拟内存和实际内存看作是一样的。
技术细节:对于英特尔 IA-32 处理器(包括 386、奔腾等)而言,用户应用程序(进程)访问内存时其内存地址是虚拟的,CPU 会将它转换为实际的物理内存地址。物理内存不够时,操作系统系统会将各个进程中一部分暂时不用的内存换出到页面文件(交换文件)中,并将需要访问内存的程序的内容从页面文件中换入到物理内存。
虚拟内存的作用
不知大家有没有发现,在Windows2000(XP)目录下有一个名为pagefile.sys的系统文件(Windows98下为Win386.swp),它的大小经常自己发生变动,小的时候可能只有几十兆,大的时候则有数百兆,这种毫无规律的变化实在让很多人摸不着头脑。其实,pagefile.sys是Windows下的一个虚拟内存,它的作用与物理内存基本相似,但它是作为物理内存的“后备力量”而存在的,也就是说,只有在物理内存已经不够使用的时候,它才会发挥作用。
虚拟内存的产生
我们都知道,虽然在运行速度上硬盘不如内存,但在容量上内存是无法与硬盘相提并论的。当运行一个程序需要大量数据、占用大量内存时,内存就会被“塞满”,并将那些暂时不用的数据放到硬盘中,而这些数据所占的空间就是虚拟内存。现在我们也明白为什么pagefile.sys的大小会经常变化了。
内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序分配的内存的总量走过了内存大小,就会导致内存消耗殆尽。为了解决这个问题,Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。
举个例子来说,压缩程序在压缩时有时候需要读取文件的很大一部分并保存在内存中作反复的搜索。假设内存大小是128MB,而要压缩的文件有 200MB,且压缩软件需要保存在内存中的大小也是 200MB,那么这时操作系统就要权衡压缩程序和系统中的其他程序,把多出来的那一部分数据放进交换文件。下面,就让我们一起来看看如何对虚拟内存进行设置吧。
虚拟内存的设置
对于虚拟内存主要设置两点,即内存大小和存放位置,内存大小就是设置虚拟内存最小为多少和最大为多少;而存放位置则是设置虚拟内存应使用哪个分区中的硬盘空间。对于内存大小的设置,如何得到最小值和最大值呢?你可以通过下面的方法获得:选择“开始→程序→附件→系统工具→系统监视器”(如果系统工具中没有,可以通过“添加/删除程序”中的Windows安装程序进行安装)打开系统监视器,然后选择“编辑→添加项目”,在“类型”项中选择“内存管理程序”,在右侧的列表选择“交换文件大小”。这样随着你的操作,会显示出交换文件值的波动情况,你可以把经常要使用到的程序打开,然后对它们进行使用,这时查看一下系统监视器中的表现值,由于用户每次使用电脑时的情况都不尽相同,因此,最好能够通过较长时间对交换文件进行监视来找出最符合您的交换文件的数值,这样才能保证系统性能稳定以及保持在最佳的状态。一般来说,交换文件太大不会影响效率,但会占用额外的磁盘空间。交换文件太小有时会引起可以运行的程序数量变少。
找出最合适的范围值后,在设置虚拟内存时,用鼠标右键点击“我的电脑”,选择“属性”,弹出系统属性窗口,选择“性能”标签,点击下面“虚拟内存”按钮,弹出虚拟内存设置窗口,点击“用户自己指定虚拟内存设置”单选按钮,“硬盘”选较大剩余空间的分区,然后在“最小值”和“最大值”文本框中输入合适的范围值。如果您感觉使用系统监视器来获得最大和最小值有些麻烦的话,这里完全可以选择“让Windows管理虚拟内存设置”。
调整分页位置
Windows9x的虚拟内存分页位置,其实就是保存在C盘根目录下的一个虚拟内存文件(也称为交换文件)Win386.swp,它的存放位置可以是任何一个分区,如果系统盘C容量有限,我们可以把Win386.swp调到别的分区中,方法是在记事本中打开System.ini(C:Windows下)文件,在[386Enh]小节中,将“PagingDrive=C:WindowsWin386.swp”,改为其他分区的路径,如将交换文件放在D:中,则改为“PagingDrive=D:Win386.swp”,如没有上述语句可以直接键入即可。
而对于使用Windows2000和WindowsXP的,可以选择“控制面板→系统→高级→性能”中的“设置→高级→更改”,打开虚拟内存设置窗口,在驱动器[卷标]中默认选择的是系统所在的分区,如果想更改到其他分区中,首先要把原先的分区设置为无分页文件,然后再选择其他分区。
或者,WinXP一般要求物理内存在256M以上。如果你喜欢玩大型3D游戏,而内存(包括显存)又不够大,系统会经常提示说虚拟内存不够,系统会自动调整(虚拟内存设置为系统管理)。
如果你的硬盘空间够大,你也可以自己设置虚拟内存,具体步骤如下:右键单击“我的电脑”→属性→高级→性能设置→高级→虚拟内存更改→选择虚拟内存(页面文件)存放的分区→自定义大小→确定最大值和最小值→设置。一般来说,虚拟内存为物理内存的1.5倍,稍大一点也可以,如果你不想虚拟内存频繁改动,可以将最大值和最小值设置为一样。{另一种说法:调整时我们需要注意,不要将最大、最小页面文件设为等值。因为通常内存不会真正“塞满”,它会在内存储量到达一定程度时,自动将一部分暂时不用的数据放到硬盘中。最小页面文件越大,所占比例就低,执行的速度也就越慢。最大页面文件是极限值,有时打开很多程序,内存和最小页面文件都已“塞满”,就会自动溢出到最大页面文件。所以将两者设为等值是不合理的。一般情况下,最小页面文件设得小些,这样能在内存中尽可能存储更多数据,效率就越高。最大页面文件设得大些,以免出现“满员”的情况。
PS:①1.5倍虚拟内存设置,是网上技术文档通用说明的,个人认为可以根据常用软件的实际情况设定。推荐有经验的用户使用。
②现在有很多工具软件(例如WINDOWS优化大师、超级兔子),可以很好的更改这些设置,工具软件也会根据你的电脑的实际情况进行相应的推荐设置。
虚拟内存使用技巧
对于虚拟内存如何设置的问题,微软已经给我们提供了官方的解决办法,对于一般情况下,我们推荐采用如下的设置方法:
(1)在Windows系统所在分区设置页面文件,文件的大小由你对系统的设置决定。具体设置方法如下:打开"我的电脑"的"属性"设置窗口,切换到"高级"选项卡,在"启动和故障恢复"窗口的"写入调试信息"栏,如果你采用的是"无",则将页面文件大小设置为2MB左右,如果采用"核心内存存储"和"完全内存存储",则将页面文件值设置得大一些,跟物理内存差不多就可以了。
小提示:对于系统分区是否设置页面文件,这里有一个矛盾:如果设置,则系统有可能会频繁读取这部分页面文件,从而加大系统盘所在磁道的负荷,但如果不设置,当系统出现蓝屏死机(特别是STOP错误)的时候,无法创建转储文件(Memory.dmp),从而无法进行程序调试和错误报告了。所以折中的办法是在系统盘设置较小的页面文件,只要够用就行了。
(2)单独建立一个空白分区,在该分区设置虚拟内存,其最小值设置为物理内存的1.5倍,最大值设置为物理内存的3倍,该分区专门用来存储页面文件,不要再存放其它任何文件。之所以单独划分一个分区用来设置虚拟内存,主要是基于两点考虑:其一,由于该分区上没有其它文件,这样分区不会产生磁盘碎片,这样能保证页面文件的数据读写不受磁盘碎片的干扰;其二,按照Windows对内存的管理技术,Windows会优先使用不经常访问的分区上的页面文件,这样也减少了读取系统盘里的页面文件的机会,减轻了系统盘的压力。
(3)其它硬盘分区不设置任何页面文件。当然,如果你有多个硬盘,则可以为每个硬盘都创建一个页面文件。当信息分布在多个页面文件上时,硬盘控制器可以同时在多个硬盘上执行读取和写入操作。这样系统性能将得到提高。
虚拟内存设置注意事项
允许设置的虚拟内存最小值为2MB,最大值不能超过当前硬盘的剩余空间值,同时也不能超过32位操作系统的内存寻址范围——4GB。
1、禁用页面文件
当拥有了1G以上的内存时,页面文件的作用将不再明显,因此我们可以将其禁用。方法是:依次进入注册表编辑器“HKEY_LOCAL_MACHINESystemCurrentControlSetControlSessionMa-nagerMemoryManagement”下,在“DisablePa-gingExecutive”(禁用页面文件)选项中将其值设为“1”即可。
PS:此举可能会造成系统不稳定.某些程序无法运行或死机。请根据自己实际情况更改。
1G以上内存就比较够用了,玩游戏、使用大型软件不推荐禁用虚拟内存。当然如果内存有2G的时候,可以根据自己的实际情况选择虚拟内存的使用大小(我个人认为2G内存可以禁用虚拟内存以提升系统性能,VISTA系统内存使用比较大,可以根据实际情况设定)。
2、清空页面文件
在同一位置上有一个“ClearPageFileAtShutdown(关机时清除页面文件)”,将该值设为“1”。这里所说的“清除”页面文件并非是指从硬盘上完全删除pagefile.sys文件,而是对其进行“清洗”和整理,根据微软的说法,这是一个安全选项,与性能无关。
高级话题:使用 SweepRAM 工具。适用于 Windows 2000/XP/2003。网上可以找到 SweepRAM 程序。该程序最大的作用是把所有进程的工作集清空。所谓工作集是指进程已映射的物理内存部分(即这些内存块全在物理内存中,并且 CPU 可以直接访问),还有一部分不在工作集中的虚拟内存则可能在转换列表中(CPU 不能通过虚地址访问,需要 Windows 映射之后才能访问),还有一部分则在磁盘上的页面文件里。工作集在进程运行时会被 Windows 自动调整,频繁访问的页面(4KB 的块)会留在内存中,而不频繁访问的页面在内存紧张时会被从工作集中移出,暂时保存在内存中的“转换列表”中,或者进一步换出到页面文件中。当应用程序再次访问某一页面时,操作系统会将它重新加回工作集中。
SweepRAM 工具以一种适中的频率(大约 40 分钟一次)反复运行,可以将各进程的工作集清空,而之后各进程的工作集会慢慢恢复。这样可以保持更好的工作集平衡,从而提高系统性能。
虚拟内存运行的原理以及过程
可能大家都会知道虚拟内存就是当物理内存不足够的时候,把硬盘的一部分当作内存来使用。
这样理解其实不够准确
物理内存就是大家平时经常说的1G内存,512M内存
首先要知道:打开任何一个程序,都是要占用物理内存的 ,当关闭这个程序的时候,系统也将会从物理内存中删除这个程序的信息
接着分两方面理解虚拟内存
--------------假设计算机物理内存是512M,系统都安装在C盘--------------------------------------
(一)当物理内存足够的时候
假设,我们运行的程序占用了215M,此时物理内存绝对够用了,但是不要以为此时系统没有用虚拟内存技术,系统照样用了虚拟内存技术,当我们打开QQ的时候,系统就为QQ这个程序指定了一个虚拟空间,只是此时这个虚拟空间里面没有信息而已
(二)当物理内存不足的时候
假设计算机运行”迅雷”和”IE浏览器”这两个个软件的时候物理内存已经达到512M,我们启动QQ,如果没有虚拟内存技术,我们此时根本不能启动QQ,因为QQ不能在内存中写入相关信息,不过现在有了虚拟内存技术,此时系统将会释放一部分物理内存给QQ用,假设释放的是迅雷所占用的物理内存,那么迅雷所占用的物理内存信息将会保存到硬盘上的一个pagefile.sys的文件中
当我们想再运行迅雷的时候,此时系统会从pagefile.sys查找相应的迅雷信息,同时把这些信息重新载入到物理内存里面,并且把QQ的信息释放到pagefiles.sys里面
这样一个循环交换过程就是虚拟内存技术,为什么叫它虚拟呢,因为系统把文件释放到了硬盘上,而这个硬盘可不是内存,只是临时的保存内存信息的地方
一句话,虚拟内存就是用如硬盘u盘等不是内存的介质来存储内存的信息
Window xp系统里面的c:/windows/prefetch这个文件夹里面的文件是虚拟内存技术的扩展,这些prefetch(预读)文件可以提升程序的运行速度
当我们运行程序时候,系统会依据内存记录这个程序经常用到的文件,并且把这个程序读取信息记录下来,同时在c:/windows/prefech下创建一个后缀是.pf的文件,并且把读取的信息保存到这.pf文件夹里面,
假设我们运行已经被记录photoshop这个程序,那么你双击桌面上的photoshop的时候,系统会先从c:/windows/prefetch中查找这个photoshop的相关记录,而不是继续运行photoshop,
系统根据以前记录photoshop用到的相关文件载入到内存中,载入好后,photoshop才可以继续运行,这样运行photoshop的速度就会提升了,大家可能看着要先执行.pf文件.再执行ps程序,这样速度还会快么?其实这个处理速度是很快的,如果没有预读文件,打开photoshop的速度会很慢的
C:/windows/prefetch里面还有一个Layout.ini这个文件,这个文件的作用就是排列文件载入的次序,
如果c:/windows/prefetch里面的预读文件很多,那么你每次运行一个程序的时候,系统都要花大量的时间去搜索这个程序有没有预读文件,这样有可能导致程序启动很慢,所以预读文件很多的时候,那么就去删除这些预读文件吧
手动设置虚拟内存
①用右键点击桌面上的“我的电脑”图标,在出现的右键菜单中选“属性”选项打开“系统属性”窗口。在窗口中点击“高级”选项卡,出现高级设置的对话框
②点击“性能”区域的“设置”按钮,在出现的“性能选项”窗口中选择“高级”选项卡,打开其对话框。
③在该对话框中可看到关于虚拟内存的区域,点击“更改”按钮进入“虚拟内存”的设置窗口。选择一个有较大空闲容量的分区,勾选“自定义大小”前的复选框,将具体数值填入“初始大小”、“最大值”栏中,而后依次点击“设置→确定”按钮即可,最后重新启动计算机使虚拟内存设置生效。
您能具体给我讲一下怎么设置服务器吗?我现在六台机子想创建其中一个为主机。
建立中心文件与多少台电脑没有关系,你们是六台电脑,那应该会有一个项目组长,这个人的电脑负责建立中心文件(每台电脑必须有不一样的登录名,最好是作者本人姓名)。
由于你们人比较多可以先建立工作集(新建工作集以后文件自动变为中心文件,需要另存到到一个固定的服务器位置中,项目组外的人不得复制或者剪切)。
每个工作集的名字可以命名为“建筑子项名称 - 人名”,这个得由组长分好,比如一个大型综合体项目,A做地下、B做商业、C做餐饮等等。这样中心文件就建立好了,然后就是分配本地文件。
六个人分别打开Revit,然后按左上角那个方块——打开(必须这么操作),找到那个中心文件,对话框中会有勾选“建立本地新文件”,文件位置会自动存到默认位置(选项——文件位置第三行可设置),文件名会自动命名为“中心文件名称_电脑名”,比如一个项目叫陆家嘴龙塔,那名字为“陆家嘴龙塔中心文件_不爱炫耀521"。
以上就建立完成,然后就可以协同作图了,立即同步非常重要,而且要一个挨一个,不能同时同步。你们先试试吧。
Win7系统开机自启动项怎么设置
在平时的工作中,我们有可能需要安装很多软件,但是有些软件一安装开机之后就会自己启动,于是我们就得去设置开机启动项,那么Win7系统如何设置开机启动项呢?接下来我搜集了Win7系统开机自启动项怎么设置,仅供大家参考,希望帮助到大家。
方法一
1、点击图示位置“开始菜单”,然后呼出运行的界面(快捷键是:同时按住键盘的Win+R键)。
2、光标移到如下图所述的搜索方框中。
3、在搜索方框中输入“msconfig”,并双击图示箭头位置。
4、此时出现了“系统配置”窗口。
5、将鼠标点至“启动”,将不需要64位win7开机启动项前的“勾”去掉,然后点击确定就可以win7开机启动项设置了。
6、此时弹出提示窗口,点击“重新启动”选项即可。开机后会发现之前windows7系统开机启动项软件都没有启动。
方法二
如果你的电脑安装了杀毒软件也可以设置,以360为例。
以上就是Win7系统设置开机启动项的方法,方法总共有两种,我觉得用第二种方法比较快,我们只需要通过第三方软件进行设置即可。
拓展: WIN7系统开机黑屏是什么原因
开机黑屏问题是很多用户在使用windows系统经常遇到的状况,即使是非常稳定的win7系统也不例外,也会遇到类似的问题,系统使用久了难免会出现这样或那样的问题,在开机启动系统的时候就遇到黑屏故障,有的是开机直接黑屏,有的是开机黑屏但还能看到鼠标。
根据这几种情况,用户只要根据以下几种方法进行操作的话,相信问题能很快被解决的。
一、开机直接黑屏。
首先看看你的显示器电源是否接通,若接通,则看看你的显示器开关是否打开;
其次看看你的主机电源指示灯是否亮,不亮则考虑你的电源可能坏了,如亮则听听主机通电后的声音,如果很清脆的一声‘嘀’并且电源、cpu、显卡的.风扇都转到话,那就要考虑看你的显卡是不是出为题了,如果是连续的‘嘀嘀嘀’声,看看你的显卡和内存的金手指是否因氧化产生接触不好,擦亮他们重新装上,再开机。
如果还是黑屏,那就要看看你的CPU及他的供电模块了,看看cpu周围的电容是否爆浆,闻闻是否有焦糊的气味,如果有气味,就是硬件损坏了,拿去电脑店维修吧。
二、win7开机黑屏,但能看到鼠标。
1、同时按下键盘Ctrl+Alt+Del(当然在此步骤前,首先要保证电脑连上了键盘),在列表中选择“启动任务管理器”,这是会弹出“任务管理器”,用鼠标点击左上角菜单“文件”—“新建任务”,在弹出的“创建新任务”对话框中输入“explorer”点“确定”,这是就系统的桌面就正常显示了,这就完成了第一步,按下面步骤彻底解决。
2、点击屏幕左下角的“开始”按钮,在文本框中输入“regedit”进入,按enter键进入注册表,依次展开注册表选项:
HKEY_Local_MachineSoftwareMicrosoftWindows NTCurrentVersionWinlogon,(用鼠标点击相应的项即下拉展开其子项,在子项中找到相应的选项,依次方法找到Winlogon项)。找到winlogon项,用鼠标单击之,在屏幕右边的列表中找到”Shell”项,用鼠标右键点击之,在下拉菜单中,选择“修改“,在弹出的“编辑字符串”对话框中删除“数字数据”中”explorer.exe”后面的内容,点确定,并关闭注册表。至此,该问题应能完全解决,另外,该问题是由于中病毒导致,请对电脑进行查毒。
三、大致有以下状况的机友可以使用以下方法。
1、在没有装任何软件的情况下更新后就发生启动黑屏问题的。(为了避免个人机器病毒感染的可能)
2、开机黑屏是在出现"欢迎"字样后黑掉。而且在热起动键开启任务管理器没有任何反映的情况下。
3、在修改EXPLORER的情况下或者复制新的EXPLORER后仍然黑屏。
解决方法:
1、打开一个记事本。
2、在记事本里写入:displayswitch /extenddisplayswitch /internal
3、保存为.BAT文件类型。
4、放入:开始→所有程序→启动(英文版的用户为STARTUP)文件夹。
5、双击一次,重起机器。
这样以后的机器在没有其他病毒或者注册表混乱的情况。基本能解决启动黑屏的问题了,这只一个显示器切换的批处理文件。利用的就是WIN7在更新后对多显示器无法识别的问题。觉得这也是为什么WIN7会启动黑屏的原因。因为它的这个更新造成一个WIN7无法识别显示器的BUG。而且修改多显示器模式是无法在启动前,启动时生效的。所以通过这样一个批处理文件。让WIN7在启动前先运行显示器切换。
WINDOWS任务管理器是怎么工作的?
Windows2000/XP内含的任务管理器(Taskmgr)相信大家都熟悉吧,相比之下XP里的要比2000功能更加强大,返回的信息也更加的详细,不过您是否觉得还有很多希望获得的消息没有包含在里面吗?您是否觉得Windows的系统管理工具箱里的东西太分散了吗?下面就让我们看看它们的开发原理,并动手实现一个真正的任务管理器。现在我们是调用Win32API来实现这些功能的,但是大家都说MS隐藏了太多的细节,以后我们将讨论更多关于Windows内核的东东。
可能大家对任务管理器里最熟悉的功能要数进程管理了,常常我们在怀疑中了病毒/木马的时候都会看看任务管理器里有没有什么特别的进程在运行,所以进程查看器应该是一个非常重要的功能。我们除了需要获得进程的名称外,还有什么呢?当然包括它的进程标识符(ProcessID),用户信息(UserName),CPU使用时间(CPUTime)和存储器的使用情况(MemoryUsage),还有它的优先权(BasePriority)。
CPU和Memory信息可以帮助我们分析进程的运行情况,而优先权可以表示进程在CPU分配处理器使用时的优先情况。这些都是通用的进程信息,让我们再看看其他的信息吧。进程的父进程标识符(Parent Process ID),创建时间(Create Time),程序名称等在很多情况下也是我们关心的信息。我们再看看进程相关的性能信息。在Windows下通常有两种模式:内核模式(Kernel: Level 0)和用户模式(User: Level 3),进程往往在两种模式中来回切换,所以可以获得进程在内核模式和用户模式各自的使用时间。同时还包括进程相关的工作集(WorkingSet),分页池(PagedPool),非分页池(NonePagedPool)和页面文件(PageFile)信息。进程相关的I/O操作包括读/写/其他等动作,我们可以获得这些操作的次数和传送数据的数量。
如果您怀疑某个进程是木马,那您还想获得哪些信息呢?简单的进程名称应该是不够的吧!我们希望获得进程的实际程序的路径,这样可以帮助我们判断究竟是那个程序在运行。前段时间不是在讨论什么进程隐藏的,其中一种就是“创建远程线程”,而注体往往又是以动态链接库(DLL)的形式存在的,我们就希望看到某个具体进程所包含的所有模块(Module),常常是DLL也。“线程”是一个大家熟悉的名字,它是Windows系统中的实现体,而进程则是线程运行的环境。一个进程到底创建了多少线程了?我们同样可以枚举进程内部的所有线程信息。如果您发现一个木马进程,下面的动作就应该是分析它的运行机制(如果您对它感兴趣),不过最终您还是要将它结束吧。在Windows2k下,很多系统关键进程在TaskMgr里是不能被结束的,不过现在您不用担心了。好的,对进程的操作当然就包括结束进程。如果您用过中文的XP,您是否常常遇到任务栏“假死”的情况,虽然您的电脑没有挂掉,但却动弹不得,那好我们也同样可以将任意的进程挂起来,不管您对它做什么动作(除了结束),它都不会有任何的反应。有了挂起进程,同样我们也可以将进程从“挂起”状态激活哈。
桌面窗口是大家接触得最多的交互界面了,您是否想获得每个窗口的标题信息呢?当然我们还可以获得与窗口关联的进程,线程与窗口句柄属性。如果大家对VC比较熟悉,就应该知道其中的一个SPY++工具吧,它就可以获得桌面窗口,进程和线程的详细信息,不过现在就不用打开这个,打开那个了,通通搞定了! 系统性能是每个用户关心的话题。(友情提醒:开发者网络Windows开发专栏中还有大量技巧)它包括整个系统当前创建的句柄,进程以及线程的数目。还有物理存储器(Physical Memory)的总量和使用情况,系统高速缓存(System Cache)的大小,存储器保留与提交(Commit Charge)状况,当然还有核心分页/非分页池(Kernel Memory)的使用情况。几乎包括了Windows系统下存储器管理的大部分信息。
虽然现在硬盘的价格已经很低了,不过我还是在用6.4G的小东东,所以常常遇到“Low Disk”!我们常常要看看硬盘的使用情况,不过每次都要进入我的电脑,太麻烦了。而我们现在可以一次了解所有磁盘的容量和当前使用情况,同时还有它们的格式类型(如FAT,NTFS,CDFS等)和磁盘标签。
说到环境块,或许不是那么熟悉吧,它包含一些环境变量,而每个环境变量对应一个/多个字符串,您可以在控制面板的SYSTEM/Advanced(系统/高级)里对它们进行设置,包括添加新的环境变量,删除和编辑系统环境变量。
事件记录对我们分析系统的使用情况有很大的帮助。事件记录分为三种:应用程序,系统和安全。而对应的每种事件又可以分为几种类型,它们分别是常规信息,警告和错误。其中包括记录序号(Record Number),事件类型(Type),标识符(Event ID),来源(Source),产生时间(Time Generated),用户名(User)和相关描述信息(Description)。有时间大家可以多看看事件信息,当然每个网络管理员对它们应该是很熟悉的,不过还包括其他的事件日志信息。
Windows系统下的ipconfig /all这个命令我是常常用,因为我们使用的是DHCP,没事看看自己的IP地址变了没有。其中包括详细的网络适配器的信息,包括适配器名称,描述,硬件地址和类型,IP地址及相应的子网掩码,网关与DHCP服务器地址等。(友情提醒:开发者网络Windows开发专栏中还有大量技巧)不过您是否对网络流量也感兴趣呢?我们当然可以获得主机接受/发送了多少(非)广播数据报,出现了多少错误,一共接受/发送了多少信息,这些对每个网友都是有用的信息哟。
网络共享往往是大家注意的地方,您究竟共享了多少信息,它们的文件路径是什么,还有它们的共享类型信息。我们在不需要某些共享资料时,当然不要忘了将其删除,以免泄露自己的机密信息。
Windows的NT是一个多用户的系统,允许多种类型用户的存在。我们希望获得用户账号的使用期限(Password Expired),记住要不定时的修改用户的密码哟,以及用户标识符(User ID),组标识符(Group ID),还有用户账号的类型(Type),不同的类型有不同的权限,我们当然希望有最High的权力哟!看看系统对某个账号的磁盘空间使用情况是否有限制(Max Storage),账号登录的次数(Number Of Logon)和登录时间信息(Logon Hours)等,对我们分析用户的使用情况也有帮助的。
系统的Win32服务和设备驱动信息也是很重要的,我们希望探测每个服务/设备启动程序的具体路径,状态,类型,启动方式等等信息。我们还希望对服务进行控制,比如停止,启动和删除操作。大家可以参阅《浅析Windows2000/XP服务与后门技术》获得更多关于Win32服务的信息。
关机也不是那么的单调的,您可以注销自己的系统,如果您要离开当然就需要锁定了。最近大家都不喜欢关机,太麻烦了,所以都习惯使用冬眠,系统将会为我们保留当前信息,不过还有支持电源管理的关机和休眠。Windows2000的用户注意了,我们同样可以使用XP系统下的带有到记时与消息提示的关机和重启功能了。
系统的版本信息是比较固定的,主要包括操作系统的指纹,注册组织/用户,主机名和系统相关目录等信息。
说了这么多,我们也该谈谈如何实现了。
1.窗口信息
MS为我们提供了打开特定桌面和枚举桌面窗口的函数。
hDesk=OpenDesktop(lpszDesktop,0,FALSE,DESKTOP_ENUMERATE);
//打开我们默认的Default桌面;
EnumDesktopWindows(hDesk,(WNDENUMPROC)EnumWindowProc,0);
//枚举打开桌面上的所有窗口,由回调函数实现。
BOOL __stdcall EnumWindowProc(HWND, LPARAM);
//在回调函数中,我们可以获得窗口的标题和相关进程,线程信息;
GetWindowText(hWnd,szWindowText,dwMaxCount);
GetWindowThreadProcessId(hWnd,dwPID);
2.设备驱动器信息(服务和设备驱动器差不多,在此不做重复)
设备驱动信息有服务控制管理器(SCM)来管理的,我要打开服务控制管理器,并枚举所有的设备驱动器。
OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
//以所有权限打开服务控制管理器;
EnumServicesStatus(schManager,dwDeviceType,dwDeviceState,
EnumStatus,dwBufSize,dwBytesNeeded,
dwDevicesReturned,dwResumeHandle))
//枚举所有设备的当前状态;
CloseServiceHandle(schManager);
//记住,在结束访问后要关闭服务句柄;
OpenService(schManager,szDeviceName,SERVICE_ALL_ACCESS);
//打开特定的设备驱动器;
QueryServiceConfig(schDevice,lpDeviceConfig,
1024*8,dwBytesNeeded);
//查询驱动器的服务配置信息;
QueryServiceStatus(schDevice,DeviceStatus);
//查询设备驱动器的当前状态;(友情提醒:开发者网络Windows开发专栏中还有大量技巧)
QueryServiceConfig2(schDevice,SERVICE_CONFIG_DESCRIPTION,
(LPBYTE)lpDeviceDescription,8*1024,dwBytesNeeded)
//查询设备的描述信息;
StartService(schDevice,0,NULL);
//启动设备;
ControlService(schDevice,SERVICE_CONTROL_STOP,DeviceStatus);
//停止设备;
DeleteService(schDevice);
//删除设备;
3.磁盘信息
我们希望获得系统所有磁盘的信息,包括软盘,硬盘,光盘等等;
GetLogicalDriveStrings(dwBufferLength,lpBuffer);
//获得逻辑设备的信息;
GetVolumeInformation(lpRootPathName,lpVolumeNameBuffer,
dwVolumeNameSize,dwVolumeSerialNumber,
dwMaximumComponentLength,dwFileSystemFlags,
lpFileSystemNameBuffer,dwFileSystemNameSize);
//获得磁盘卷信息,包括卷名称和格式类型;(友情提醒:开发者网络Windows开发专栏中还有大量技巧)
GetDiskFreeSpaceEx(lpRootPathName,FreeBytesAvailable,
TotalNumberOfBytes,TotalNumberOfFreeBytes);
//探测磁盘的空间使用情况;
4.环境变量
我们可以从注册表中获得环境块的信息:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment,当然要使用注册表的函数。
RegOpenKeyEx(HKEY_LOCAL_MACHINE,RegKey,0,KEY_QUERY_VALUE,hKey);
//打开注册表的键;
RegEnumValue(hKey,dwIndex,EnvironVariable,
dwVariableLength,NULL,NULL,NULL,NULL);
//查询我们需要的信息值;
GetEnvironmentVariable(EnvironVariable,EnvironString,1024);
//获得环境变量的字符串信息;
5.事件记录信息
OpenEventLog(NULL,szLog);
//打开时间日志记录;
GetOldestEventLogRecord(hEvent,dwThisRecord);
//获得最新的日志信息,以便继续查找;
ReadEventLog(hEvent,EVENTLOG_FORWARDS_READ │ EVENTLOG_SEQUENTIAL_READ,
0,pEventLogRecord,1024*32,dwRead,dwNeeded)
//读去日志信息;
LookupAccountSid(NULL,pSid,szName,dwName,szDomain,dwDomain,SNU);
//获取账户的SID,以便获得账户的用户名称;
GetNumberOfEventLogRecords(hEvent,dwTotal);
//获得事件日志的总数;
CloseEventLog(hEvent);
//不要忘记关闭事件句柄;
6.网络共享
我们使用第二等级的网络共享搜索;
NetShareEnum(NULL,dwLevel,(PBYTE *)pBuf,MAX_PREFERRED_LENGTH,entriesread,totalentries,resume);
//列举所有的共享目录及相关信息;
NetApiBufferFree(pBuf);
//释放缓冲区;(友情提醒:开发者网络Windows开发专栏中还有大量技巧)
NetShareDel(NULL,(char *)lpShareNameW,0);
//删除网络共享目录;
7.网络适配器信息
我们要探测NIC的信息和网络流量;
GetAdaptersInfo(AdapterInfo,OutBufLen);
//获取适配器信息;
8.系统性能
获取系统的存储器使用情况;
GetPerformanceInfo(PerfInfo,sizeof(PERFORMACE_INFORMATION))
//获取系统性能信息;
9.进程/线程/模块信息
在此我们使用工具帮助函数(ToolHelp32)和系统
OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY │ TOKEN_ADJUST_PRIVILEGES,hToken);
//打开进程的令牌,提升权限;
AdjustTokenPrivileges(hToken,FALSE,TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
//将进程的权限提升到支持调试(Debug);
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
//创建进程的快照;
Process32First(hProcessSnap,ProcessEntry32);
Process32First(hProcessSnap,ProcessEntry32);
//枚举所有进程;
OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,ProcessEntry32.th32ProcessID);
//打开特定进程,以查询进程相关信息;
GetProcessTimes(hProcess,CreateTime,ExitTime,KernelTime,UserTime);
//获取进程的时间信息;
GetProcessMemoryInfo(hProcess,PMCounter,sizeof(PMCounter));
//获取进程的存储区信息;
GetPriorityClass(hProcess);
//获取进程的优先权;
GetProcessIoCounters(hProcess,IoCounters);
//获取进程的IO使用情况;
CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID);
//创建模块快照;(友情提醒:开发者网络Windows开发专栏中还有大量技巧)
Module32First(hModuleSnap, ModuleEntry32);
Module32Next(hModuleSnap, ModuleEntry32);
//枚举进程模块信息;
CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
//创建线程快照;
Thread32First(hThreadSnap, ThreadEntry32);
Thread32Next(hThreadSnap, ThreadEntry32);
//枚举线程信息;
OpenThread(THREAD_ALL_ACCESS,FALSE,ThreadEntry32.th32ThreadID);
//打开线程,须自己获得此函数地址;
TerminateProcess(hProcess,0);
//终止进程;
SuspendThread(hThread);
//悬挂线程;
ResumeThread(hThread);
//激活线程;
10.关机
AdjustTokenPrivileges(hToken,FALSE,TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
//调整进程令牌,使其支持关机;
ExitWindowsEx(EWX_LOGOFF,0);
//注销系统;
LockWorkStation();
//锁定系统;
InitiateSystemShutdown(NULL,szMessage,dwTimeout,FALSE,bSig);
//支持到记时和消息显示的关机/重启;
SetSystemPowerState(bSig,FALSE);
//系统休眠/冬眠;
11.用户信息
NetUserEnum(NULL,dwLevel,FILTER_NORMAL_ACCOUNT,(LPBYTE*)pBuf,
dwPrefMaxLen,dwEntriesRead,dwTotalEntries,dwResumeHandle);
//枚举系统用户信息;
NetUserDel(NULL,lpUserNameW);
//删除指定用户;
12.系统版本信息
GetVersionEx((LPOSVERSIONINFO)osviex);
//获取操作系统的版本信息;
我们也可以通过注册表(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion)获取相关信息:
GetTickCount();
//获取开机时间;
GetComputerName(szInfo,dwInfo);
//获取计算机名称;
GetUserName(szInfo,dwInfo);
//获取计算机用户名;
GetWindowsDirectory(szInfo,MAX_PATH+1);
//获取Windows目录;
GetSystemDirectory(szInfo,MAX_PATH+1);
//获取系统目录;
小结:
虽然我们现在已经实现了任务管理器的各项功能,甚至比Windows自带的功能还要强大,不过却没有什么兴奋的感觉。因为看看我们的代码,您就会发现那些都是直接调用的Win32API函数,但是我们清楚系统底层究竟是怎么实现的吗?不管我们是否只是为了实现一个功能,还是对操作系统感兴趣,我们都应该更多的对系统底层进行研究,而不仅仅是只会使用高层函数的程序员。虽然微软为我们隐藏了很多的内部细节,但正是这种底层的秘密激发了我们对其进行深入研究的兴趣和动力。