当前位置:小强知识网 > 数码科技 >

怎么创造一个软件(有什么作用)

如果我们要自己创造一个“软件沙箱”,困难度极高!!如果跃升网络就更为复杂,本章只是介绍利用基础知识来创造一个具有基础功能的“软件沙箱”而已!!下面,我们先来参考一下他人的作品,来看看我们应该如何创造一个

如何自己创造一个软件沙箱

怎么创造一个软件(有什么作用)怎么创造一个软件(有什么作用)

首先要设计好好用户界面:为了简单,我们用一个对话框来作为“软件沙箱”的用户接口,再加上几个静态文本、Edit编辑框、Button按钮、ListBox就完成了用户界面。

至于图标,对话框对图标的设置可以调用SetClassLong,这不是重点,具体见最后的源代码。

现在,我们来实现真正的功能!!首先,创建一个作业内核对象:HANDLEhJob=CreateJobObject(NULL,NULL);

接着,我们根据用户的选项(Edit编辑框和Check的值来初始化两个结构)这里,我初始化了两个结构,其实还有一个另一个结构可以用于进行 安全限制 的,但由于这些功能需要用户有一定的基础知识而不常用,所以这里没有提供这个接口。以下是源代码(耐得住寂寞才会成功):VOID OnSetInformation(HWND hWnd){/*基本限制*/JOBOBJECT_BASIC_LIMIT_INFORMATION jbli={0};LARGE_INTEGER li={0};li.LowPart=GetDlgItemInt(hWnd,IDC_PerProcessUserTimeLimit,NULL,FALSE);jbli.PerProcessUserTimeLimit=li;li.LowPart=GetDlgItemText(hWnd,IDC_PerJobUserTimeLimit,NULL,FALSE);jbli.PerJobUserTimeLimit=li;jbli.ActiveProcessLimit=GetDlgItemInt(hWnd,IDC_ActiveProcessLimit,NULL,FALSE);jbli.MinimumWorkingSetSize=GetDlgItemInt(hWnd,IDC_MinimumWorkingSetSize,NULL,FALSE);jbli.MaximumWorkingSetSize=GetDlgItemInt(hWnd,IDC_MaximumWorkingSetSize,NULL,FALSE);jbli.SchedulingClass=GetDlgItemInt(hWnd,IDC_SchedulingClasss,NULL,FALSE);TCHAR szPriorityClass[10];GetWindowText(GetDlgItem(hWnd,IDC_PriorityClass),szPriorityClass,_countof(szPriorityClass));//进程优先级if(lstrcmp(szPriorityClass,_T(“高”)))jbli.PriorityClass=THREAD_PRIORITY_HIGHEST;else if(lstrcmp(szPriorityClass,_T(“高于正常”)))jbli.PriorityClass=THREAD_PRIORITY_ABOVE_NORMAL;else if(lstrcmp(szPriorityClass,_T(“正常”)))jbli.PriorityClass=THREAD_PRIORITY_NORMAL;else if(lstrcmp(szPriorityClass,_T(“低于正常”)))jbli.PriorityClass=THREAD_PRIORITY_BELOW_NORMAL;else if(lstrcmp(szPriorityClass,_T(“低”)))jbli.PriorityClass=THREAD_PRIORITY_LOWEST;else if(lstrcmp(szPriorityClass,_T(“空闲”)))jbli.PriorityClass=THREAD_PRIORITY_IDLE;jbli.LimitFlags=JOB_OBJECT_LIMIT_PROCESS_TIME | JOB_OBJECT_LIMIT_JOB_TIME |JOB_OBJECT_LIMIT_WORKINGSET | JOB_OBJECT_LIMIT_ACTIVE_PROCESS |JOB_OBJECT_LIMIT_AFFINITY | JOB_OBJECT_LIMIT_SCHEDULING_CLASS;SetInformationJobObject(hJob,JobObjectBasicLimitInformation,&jbli,sizeof(jbli));/*UI限制*/JOBOBJECT_BASIC_UI_RESTRICTIONS jbur={0};if(SendMessage(GetDlgItem(hWnd,IDC_UILIMITEXITWINDOWS),BM_GETCHECK,0,0))jbur.UIRestrictionsClass|=JOB_OBJECT_UILIMIT_EXITWINDOWS;if(SendMessage(GetDlgItem(hWnd,IDC_UILIMITREADCLIPBOARD),BM_GETCHECK,0,0))jbur.UIRestrictionsClass|=JOB_OBJECT_UILIMIT_READCLIPBOARD;if(SendMessage(GetDlgItem(hWnd,IDC_UILIMITWRITECLIPBOARD),BM_GETCHECK,0,0))jbur.UIRestrictionsClass|=JOB_OBJECT_UILIMIT_WRITECLIPBOARD;if(SendMessage(GetDlgItem(hWnd,IDC_UILIMITDESKTOP),BM_GETCHECK,0,0))jbur.UIRestrictionsClass|=JOB_OBJECT_UILIMIT_DESKTOP;if(SendMessage(GetDlgItem(hWnd,IDC_UILIMITSYSTEMPARAMETERS),BM_GETCHECK,0,0))jbur.UIRestrictionsClass|=JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS;if(SendMessage(GetDlgItem(hWnd,IDC_UILIMITDISPLAYSETTINGS),BM_GETCHECK,0,0))jbur.UIRestrictionsClass|=JOB_OBJECT_UILIMIT_DISPLAYSETTINGS;if(SendMessage(GetDlgItem(hWnd,IDC_UILIMITGLOBALATOMS),BM_GETCHECK,0,0))jbur.UIRestrictionsClass|=JOB_OBJECT_UILIMIT_GLOBALATOMS;if(SendMessage(GetDlgItem(hWnd,IDC_UILIMIT_HANDLES),BM_GETCHECK,0,0))jbur.UIRestrictionsClass|=JOB_OBJECT_UILIMIT_HANDLES;SetInformationJobObject(hJob,JobObjectBasicUIRestrictions,&jbur,sizeof(jbur));AddText(GetDlgItem(hWnd,IDC_JOBMSG),_T(“设置限制完成!”));}

以上就是所有的操作了!看懂了源代码你就已经成功了!!如果你没看懂,没关系,这里是一些解释:贯穿代码中的两个结构:JOBOBJECT_BASIC_LIMIT_INFORMATION jbli={0} //基本限制JOBOBJECT_BASIC_UI_RESTRICTIONS jbur={0} //UI限制贯穿代码中的两次函数调用:SetInformationJobObject(hJob,JobObjectBasicLimitInformation,&jbli,sizeof(jbli));SetInformationJobObject(hJob,JobObjectBasicUIRestrictions,&jbur,sizeof(jbur));没错,你所看到的所有冗长的操作都是根据用户的操作调整这两个数据结构而已!!而关于这两个数据结构和SetInformationJobObject,MSDN上的解释非常好(再加上我想偷懒),这里就不再解释了。

不过,听说MSDN是英文版的~~2012是这样~~为了帮助大家更容易理解,这里我引用一篇文档,链接见最后的注意事项1(正文不能有链接~~)当然,也可以参考:《Windows核心编程5 Via C/C++》第五张

电脑怎样在创造一个账户

怎么创造一个软件(有什么作用)怎么创造一个软件(有什么作用)

电脑一台

打开桌面左下角的(开始菜单),然后选择打开右侧的(控制面板)。

然后在(控制面板)的界面中,选择打开(添加或删除用户账户)。

在接下来进入到的(管理账户)界面中,选择(创建一个新账户)。

在输入框中为新账户添加一个用户名,然后选择(标准用户),最后点击(创建账户),新的账户即可创建成功。

此时在(管理账户)界面出现了我们刚才创建的新账户。

点击进入到我们刚创建的新账户中,可以对新账户进行设置。

当我们需要进行切换用户的时候,打开(开始菜单),用鼠标光标点开关机选项右边的小箭头,在弹出的窗口中选择(切换用户)即可完成切换。

少玩电脑保护眼睛

如何创造一个温馨的好家庭01

怎么创造一个软件(有什么作用)怎么创造一个软件(有什么作用)

婚姻个体当家人

首先一定要有房子,没有房子就没有家,房子使我们爱的居住的场所,所以无论如何都要有房子,迟早的事情。

其次一定要有衣服,人靠衣装马靠鞍,在外形象衣服也是很重要的一个方面,一定要准备好春夏秋冬内部的和外部的衣服,做到热不找冻不着,是对每个家人的负责。

再次就是吃的喝的,基本的吃饱吃好是一定要确保的,如果家里人连吃都吃不好吃不饱,很难说这个家庭是能够温馨的。

再次一定要有车子,车子越是高级越好,出门在外要的是面子和方便,刮风下雨,风雨雷电,有车子就是好,真风挡雨,避寒去热啊。

最后一定要有保险心里才踏实,这是最最基本的保障,天有旦夕祸福,人有苦难悲伤,而保险让我们能减少损失,增加每个人员的安全感。

温馨的家要有温馨的保障措施。

怎么创造一个良好的学习氛围

怎么创造一个软件(有什么作用)怎么创造一个软件(有什么作用)

去图书馆毕竟图使馆是学校学习氛围最好的地方

教室图书馆挤不下或者感觉图书馆氛围太压抑,可以选择去教室

戴耳机随便你听不听歌,但是可以隔音

远离电子产品尽量不要碰手机,如果要碰的话,尽量不联网

和学霸一起学习学霸的动力会带着你一起飞

尽量不要在宿舍宿舍有床,宿舍有零食,你懂得

当然最重要是自己的动力,自己不想学,什么样的氛围都于事无补

图片来源于网络

仅供参考

如何自己创造一个软件沙箱

怎么创造一个软件(有什么作用)怎么创造一个软件(有什么作用)

C++语言基础

Windows编程基础

Visual Studio 2012或以上

如果我们要自己创造一个“软件沙箱”,困难度极高!!如果跃升网络就更为复杂,本章只是介绍利用基础知识来创造一个具有基础功能的“软件沙箱”而已!!下面,我们先来参考一下他人的作品,来看看我们应该如何创造一个自己的沙箱。

为了实现自己的“沙箱”我们可以:1.我们可以利用一个虚拟环境来运行程序!!2.但是,如果需要我们自己创造一个虚拟环境,困难度也是极高的!!好消息是:Windows作业内核对象能完成类似的“沙箱”功能!!

首先要设计好好用户界面:为了简单,我们用一个对话框来作为“软件沙箱”的用户接口,再加上几个静态文本、Edit编辑框、Button按钮、ListBox就完成了用户界面。

至于图标,对话框对图标的设置可以调用SetClassLong,这不是重点,具体见最后的源代码。

现在,我们来实现真正的功能!!首先,创建一个作业内核对象:HANDLEhJob=CreateJobObject(NULL,NULL);

接着,我们根据用户的选项(Edit编辑框和Check的值来初始化两个结构)这里,我初始化了两个结构,其实还有一个另一个结构可以用于进行 安全限制 的,但由于这些功能需要用户有一定的基础知识而不常用,所以这里没有提供这个接口。以下是源代码(耐得住寂寞才会成功):VOID OnSetInformation(HWND hWnd){/*基本限制*/JOBOBJECT_BASIC_LIMIT_INFORMATION jbli={0};LARGE_INTEGER li={0};li.LowPart=GetDlgItemInt(hWnd,IDC_PerProcessUserTimeLimit,NULL,FALSE);jbli.PerProcessUserTimeLimit=li;li.LowPart=GetDlgItemText(hWnd,IDC_PerJobUserTimeLimit,NULL,FALSE);jbli.PerJobUserTimeLimit=li;jbli.ActiveProcessLimit=GetDlgItemInt(hWnd,IDC_ActiveProcessLimit,NULL,FALSE);jbli.MinimumWorkingSetSize=GetDlgItemInt(hWnd,IDC_MinimumWorkingSetSize,NULL,FALSE);jbli.MaximumWorkingSetSize=GetDlgItemInt(hWnd,IDC_MaximumWorkingSetSize,NULL,FALSE);jbli.SchedulingClass=GetDlgItemInt(hWnd,IDC_SchedulingClasss,NULL,FALSE);TCHAR szPriorityClass[10];GetWindowText(GetDlgItem(hWnd,IDC_PriorityClass),szPriorityClass,_countof(szPriorityClass));//进程优先级if(lstrcmp(szPriorityClass,_T(“高”)))jbli.PriorityClass=THREAD_PRIORITY_HIGHEST;else if(lstrcmp(szPriorityClass,_T(“高于正常”)))jbli.PriorityClass=THREAD_PRIORITY_ABOVE_NORMAL;else if(lstrcmp(szPriorityClass,_T(“正常”)))jbli.PriorityClass=THREAD_PRIORITY_NORMAL;else if(lstrcmp(szPriorityClass,_T(“低于正常”)))jbli.PriorityClass=THREAD_PRIORITY_BELOW_NORMAL;else if(lstrcmp(szPriorityClass,_T(“低”)))jbli.PriorityClass=THREAD_PRIORITY_LOWEST;else if(lstrcmp(szPriorityClass,_T(“空闲”)))jbli.PriorityClass=THREAD_PRIORITY_IDLE;jbli.LimitFlags=JOB_OBJECT_LIMIT_PROCESS_TIME | JOB_OBJECT_LIMIT_JOB_TIME |JOB_OBJECT_LIMIT_WORKINGSET | JOB_OBJECT_LIMIT_ACTIVE_PROCESS |JOB_OBJECT_LIMIT_AFFINITY | JOB_OBJECT_LIMIT_SCHEDULING_CLASS;SetInformationJobObject(hJob,JobObjectBasicLimitInformation,&jbli,sizeof(jbli));/*UI限制*/JOBOBJECT_BASIC_UI_RESTRICTIONS jbur={0};if(SendMessage(GetDlgItem(hWnd,IDC_UILIMITEXITWINDOWS),BM_GETCHECK,0,0))jbur.UIRestrictionsClass|=JOB_OBJECT_UILIMIT_EXITWINDOWS;if(SendMessage(GetDlgItem(hWnd,IDC_UILIMITREADCLIPBOARD),BM_GETCHECK,0,0))jbur.UIRestrictionsClass|=JOB_OBJECT_UILIMIT_READCLIPBOARD;if(SendMessage(GetDlgItem(hWnd,IDC_UILIMITWRITECLIPBOARD),BM_GETCHECK,0,0))jbur.UIRestrictionsClass|=JOB_OBJECT_UILIMIT_WRITECLIPBOARD;if(SendMessage(GetDlgItem(hWnd,IDC_UILIMITDESKTOP),BM_GETCHECK,0,0))jbur.UIRestrictionsClass|=JOB_OBJECT_UILIMIT_DESKTOP;if(SendMessage(GetDlgItem(hWnd,IDC_UILIMITSYSTEMPARAMETERS),BM_GETCHECK,0,0))jbur.UIRestrictionsClass|=JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS;if(SendMessage(GetDlgItem(hWnd,IDC_UILIMITDISPLAYSETTINGS),BM_GETCHECK,0,0))jbur.UIRestrictionsClass|=JOB_OBJECT_UILIMIT_DISPLAYSETTINGS;if(SendMessage(GetDlgItem(hWnd,IDC_UILIMITGLOBALATOMS),BM_GETCHECK,0,0))jbur.UIRestrictionsClass|=JOB_OBJECT_UILIMIT_GLOBALATOMS;if(SendMessage(GetDlgItem(hWnd,IDC_UILIMIT_HANDLES),BM_GETCHECK,0,0))jbur.UIRestrictionsClass|=JOB_OBJECT_UILIMIT_HANDLES;SetInformationJobObject(hJob,JobObjectBasicUIRestrictions,&jbur,sizeof(jbur));AddText(GetDlgItem(hWnd,IDC_JOBMSG),_T(“设置限制完成!”));}

以上就是所有的操作了!看懂了源代码你就已经成功了!!如果你没看懂,没关系,这里是一些解释:贯穿代码中的两个结构:JOBOBJECT_BASIC_LIMIT_INFORMATION jbli={0} //基本限制JOBOBJECT_BASIC_UI_RESTRICTIONS jbur={0} //UI限制贯穿代码中的两次函数调用:SetInformationJobObject(hJob,JobObjectBasicLimitInformation,&jbli,sizeof(jbli));SetInformationJobObject(hJob,JobObjectBasicUIRestrictions,&jbur,sizeof(jbur));没错,你所看到的所有冗长的操作都是根据用户的操作调整这两个数据结构而已!!而关于这两个数据结构和SetInformationJobObject,MSDN上的解释非常好(再加上我想偷懒),这里就不再解释了。

不过,听说MSDN是英文版的~~2012是这样~~为了帮助大家更容易理解,这里我引用一篇文档,链接见最后的注意事项1(正文不能有链接~~)当然,也可以参考:《Windows核心编程5 Via C/C++》第五张

成功编写,不代表你的软件毫无差错!!调试是很重要的。我们来做个实验。

打开软件沙箱。并勾选“禁止注销…”并单击“设置限制”。

运行一个 “定时关机”程序(该程序通过ExitWindowsEx来关机)(当然,是我自己写的)。

嘀嘀嘀,等待1分钟。哎呀,时间到了,然而这并没什么卵用,呵~我的系统安然无恙!!

再来一个,前段时间我的一位同学编了一个小程序来捉弄我~~这个程序会打开100个cmd窗口~~然而,我的“软件沙箱”帮我渡过了难关!!来,有图有真相!!妈妈吖,我差点挂了(这CPU占用率是很高的!),殊不知我一关掉“软件沙箱”(这时软件沙箱会终止作业中的所有进程【通过调用TerminateJobObject】【详见源代码】),全部cmd窗口都没了~~

我们再来玩玩Microsoft的spy++(这家伙挺厉害的)spy++的启动需要管理员权限,所以也需要用管理员权限来启动“软件沙箱”勾选“禁止使用进程外部用户对象”并启动spy++看,spy++中啥都没有

最后,我们拿Excle开刀!懒得解释,看图吧Word和PowerPoint就弹出启动框后直接退出了~~一点提示都没有。Acess就什么事也没有。

http://wenku.baidu.com/view/b0a7226648d7c1c708a145c1.html?from=search【我严重认为这个家伙是复制《Windows核心编程》的,内容与原著一模一样!!】

软件沙箱示例程序链接:https://pan.baidu.com/s/1c14cKik【软件沙箱】文件夹内其中分为一个安装包(给只想使用的用户)和一个源代码压缩文件(给求知欲强的用户)

更多网友回答:

以上就是关于怎么创造一个软件(有什么作用)的优质答案了,希望能够对广大用户有所帮助,若是大家还想了解更多相关知识及其他内容的话,那么就请关注或收藏本站!!!

猜你喜欢

阅读排行