

英语原文共 18 页,剩余内容已隐藏,支付完成后下载完整资料
1 C 语言的常见问题
1.1什么是C ?
C 是一种编程语言。它的字面意思是“c语言的进阶版”,反映了它的性质,作为一个进化的语言。
1.2有必要学习C 之前已经知道另一种编程语言?
不一定。C 是在表达一个简单明了的语言。这是真的,一个用C 编写的代码,可以通过增加类似于({ } [ ] * amp;!|hellip;)的特殊字符来表达的更多,这对初学者来说是很陌生的,但是一旦知道它们的含义,这样的字符表示方法,就可以比那些用英语单词表示的语言表示更多的含义。
同时,相对于在C语言中的,c 简化了输入/输出接口标准模板库合并,使得用C 编写的程序传输和处理数据与其他语言一样简单,从而不失去被使用的动力。
1.3我如何学习C 呢?
有很多方法。根据你的时间和你的喜好。语言是在世界各地的许多类型的学术形式,也可以由自己学习的教程和书籍的帮助。本网站的文档部分包含一个在线教程,以帮助您实现这门语言的学习目的。
1.4面向对象(OOP):面向对象的程序是什么?
这是一个编程模型,将编程从一个角度看,每个组件被认为是一个对象,其自身的属性和方法,更换或补充结构化编程范式,重点是在程序和参数。
1.5 C 是一个专有的语言吗?
没有人拥有C 语言。任何人都可以使用该语言免费使用。
1.6什么是C ?
C 的名字是由国际的C 语言ANSI / ISO标准是已知的。但这个标准发布之前,C 已经被广泛使用,因此有大量的代码在那里写在预标准C 。参照ANSI-C 明确地区别于前的标准C 代码,这是在某些方面不兼容。
1.7我怎么能知道我的编译器是否支持C ?
该标准于1998年出版,随后修订在2003年比标准年长一些编译器已经实现它的一些功能,许多新的编译器没有实现所有ANSI-C 功能。如果你对你的编译器是否能够编译ANSI-C 代码的疑惑,你可以尝试编译一段代码的一些主要介绍了标准公布后的新功能。例如,下面的代码片段使用bool类型,并使用命名空间和模板。
|
1 |
#include lt;iostreamgt; using namespace std; template lt;class Tgt; bool ansisupported (T x) { return true; } int main() { if (ansisupported(0)) cout lt;lt; 'ANSI OK'; return 0; } |
ANSI OK |
如果你的编译器能够编译这个程序,你将能够编译现有的C 代码。
1.8我如何能让窗口运行程序吗?
你需要一个C 编译器和链接器,可以为你的窗口环境生成代码(Windows,MacOS X窗口,,hellip;)。窗口程序一般不使用控制台与用户沟通。它们使用一组函数或类来操作窗口,而不是每个环境中的特定的窗口。不管怎样,同样的原则适用于对控制台窗口的程序,除了与用户的沟通。
1.9什么是Visual C ?“可视化编程”是什么意思?
Visual C 是一个来自微软的集成环境下的C 编译器的名称。它包括专门的工具,简化了开发的大型应用程序,以及特定的库,提高生产率。使用这些工具通常被称为可视化编程。其他制造商也开发这些类型的工具和库,如Borland关于C 的Visual Age等等模板。
2 如何使用视窗授权
本文的目的是给自由访问控制列表(DACL)和访问控制项(ACE)做一个过度性的讲解。读者应该对C 有基本的认识,并对微软的Windows平台和WinAPI有一些经验,确保c 代码能够在Windows上运行。如果想测试那些代码,从而获得一些经验,请参见在附件的源代码(main.cpp)。注意此代码不能在任何POSIX平台上工作。
自主访问控制列表DACLs是权限列表下的一个属性页,即选项卡中“安全”的文件或文件夹名的列表。它们被用来管理一个用户或用户组,对特定文件或目录的访问权限。没有DACL的文件将允许每个人都完全访问它,请注意,在微软的Windows平台每个人都是一个安全组,就是要包容所有用户,组和服务。如果存在DACL只会让已经具体列出用户或组的访问。那么列出的那些被拒绝访问的用户或组没有权限访问,这意味着一个空白的DACL文件与没有DACL的文件不同的。空白的 DACL文件将拒绝所有用户和组的任何访问。
下面的代码创建一个文件,该可执行文件运行当前的工作目录(名为“New.txt”),它们共享相同的名称和扩展当前存在此目录中的所有文件都会被删除。当第一次创建该文件时,将拥有该系统授予的默认安全权限和从父目录继承的任何权限。在111行给出的暂停期间,我们鼓励读者自行研究,这些权限是什么、列出哪些是作为从108行链接到相应的MSDN项、给出在使用的大多数功能和结构的代码注释输出。这个项目应该将AdvApi32.lib和USER32.LIB链接设为MSVS用户或libadvapi32.a和libuser32.a(MinGW版本)用户。
我们的代码做的第一项的实际工作,就是在第27行这个结构声明了一个指针,分配使用新操作的内存空间,并使用“InitializeSecurityDescriptor()”函数初始化SECURITY_DESCRIPTOR结构。该功能将所有成员,除了安全修订级别的SECURITY_DESCRIPTOR结构外,设为空白。这时SECUIRTY_DESCRIPTOR_REVISION是此功能dwRevision“唯一有效的值。
做完了这一点,接下来的事情就是计算出操作的,基于当前可执行文件的工作目录的文件名称。这些可通过在“GetCurrentDirectory()”函数中,添加 “ New.txt”,并以“sprinf_s()函数”结束,来获取当前目录的名称,这样做可让我想运行该代码时可以少做一步。
其次是我们的EXPLICIT_ACCESS结构的数组的声明和初始化。在这里第一次,这部分是写在一个冗长方式中的注意事项,以保证读者知道我们的每一步做的是什么。如果你贪图方便,而没有添加太多的声明和注释,可能那是你喜欢的,因为这样很省事,但对其它的作者而言,阅读这些代码是非常不方便的。这些是你能想到的,实际的ACE在可使用的形式之前,它们要由系统被加工成所谓的“自相关格式”。为了使这些由系统编译的代码可以使用,在编译时拒绝任何用户访问引入内容的接口之前,必须将其列入并授予访问权限。这是因为我们所使用的,有系统自动调用完成的“SetEntriesInAcl()”的新条目只有现有的功能。这不是一个“每个用户”的基础上,而是所有权限的总体排序,所以分配办法为:当用户A的权限被拒绝,给用户A授予权限,但此时用户B的权限被拒绝,那么再对其授予权限将是无效的。我们的第一个条目(ExplicitAccess [0])被置零,然后将 “BuildExplicitAccessWithName()”函数初始化。在我们用其他两个项目的方法结构的情况下,此初始化的功能是可以一样有效的,这样的目的是,不会有过多或过少的限制。我们在函数的开始处声明EXPLICIT_ACCESS结构,为了在内存中告知计算机,此结构被存储在这个函数之中,这是通过引用ExplicitAccess使之作为第一个参数[0]进行的。然后,我们告诉它我们要设置这个输入的功能目的,我选择了“客人”这个帐户,因为它是一个内置的,可以作用于Windows操作系统的所有版本的帐户。甚至如果它被禁用(在Windows XP是默认启动的),这将仍然有效。第三个参数是列表的权限需要的地址,我们希望解决的权限列表中,每一项都是在为一些参数编号,所以我们可以将它们组合成关键字或操作符,将它传递给函数前一个参数。第四个参数告诉ACE这个设定什么样的功能,我们选择deny_access因为那是我们想要做,记住所有的项目进入第一次时,必须拒绝访问。最后一个参数有一些关于这个函数的文档中列出的可能性,我选择NO_PROPAGATE_INHERIT_ACE通过简单地改变文件名和换出以后的“CreateFile()”用“CreateDirectory()”,应用这些相同的方法来设置的文件夹权限。
在我们的ExplicitAccess阵列的另外两个项,是由用户手动定义; 当我们做这一步时必须记住,WinAPI的为C写的,所以没有为之构造设置默认值,故而这些与没有输入任何值来初始化的成员,在技术上是未定义的。该ExplicitAccess [1]允许所有的获取(GENERIC_ALL)群组“身份验证的用户”,这是内置在Windows的群组帐户,默认情况下,应该在系统上运行。这里唯一值得注意的是,托管的成员pMultipleTrustee,MultipleTrusteeOperation和TrusteeType,在我写这篇文章时,列出的前两个还是不支持这样的,并且必须设置为我之前讲过的值。三是如果你还没有意识到托管成员pstrName,是你希望做得到一个准入的用户或群组的名称。可以将之设置为TRUSTEE_IS_GROUP,告诉系统你是在此项目设置的帐户权限为是群组而不是一个用户或系统。 ExplicitAccess [2]是设置为,与另一个“来宾”帐户有关的准入名。我这样做的原因有两个,首先要表明,这两种方法定义的一个EXPLICIT_ACCESS结构是可以互换的,并表明占数据的输入可以按任何顺序进行,只要其拒绝允许任何帐户的第一次输入。
现在,我们进入我们的try catch块,这是用来确保正确的代码,及在发生错误的情况下代码正确的清除。在80行的“deletefile()”命令,是当你选择运行这个过程多次,并且不希望保留(删除)它创建的每个时刻的文件时调用的。我注意到,即使在CREATE_ALWAYS中设置作为标志的CreateFile()中的ACE的区域被覆盖,但是为了看到正在发生的变化,目标文件必须每次删除。如果该文件不存在,那么“DeleteFile()”将返回FALSE,但在我们的项目中该值将继续被忽略。
首先,我们称之为CreateFile()的函数,实际上创建了我们将要处理的文件。这里唯一要注意的就是我们的参数lpSecurityAttributes是NULL。我们这样做,这样该系统将创建文件时,会为您的系统默认的安全权限设置为只运行该程序的用户,可以从任何安全权限可能的父目录继承文件。如果成功,这个函数创建了我们的文件,并返回一个句柄,就是我们在这里用在解决文件本身的东西;否则将引发错误,并获取在我们程序代码运行中的报出的一个错误事件,你可以看看这里:http://msdn.microsoft.com/en-us/library/windows/desktop/ms681381(v=vs.85).aspx
接下来,在91行我们称之为“GetNamedSecurityInfo()”功能,你可能已经猜到了,允许您可以从您命名对象获取安全信息。在这种情况下,我们使用我们刚创建的文件,因为我们当创建它,所以你将拥有所需的访问权限,要做到这一点设置lpSecurityAttributes标志为NULL,这将不会是一个问题的名称。对于任何其他参数lpSecuirytAttributes或已经存在的文件,一些额外的工作可能这点之前,该功能成功是必要的。此功能“GetNamedSecurityInfo()”,实际上将返回任意数量的属性的对象,假设它们的存在,通过结合位或操作符的第三个参数的值;但今天我们只专注于这个文件“New.txt”的DACL。作为第一个参数,我们通过这个功能我们的文件名。然后第二个,我们告诉它,我们的对象是一个SE_FILE_OBJECT类型。第三是表示我们正在寻找的,在这种情况下,我们希望我们的第一个参数命名的对象是DACL的SECURITY_INFORMATION标志(DWORD)。接下来的两个参数,ppsidGroup和ppsidOwner,可能是这将包含指向该SID的对象或初级组的所有者的指针,再假设他们存在,但我们现在不是在寻找那些的,所以我们将其设置为空值。
现在,讲第六个参数,我们注意下ppDacl这是,我们通过获得一个指向当前自主访问控制列表的对象的参数。正是至关重要的部分,请注意,定义此参数为这个指针函数的指针,所以你不能传递在ACL或访问控制列表中的引用的实参。此参数必须是一个指针,使用符号运算符(&)传递到引用的ACL。下一个变量,ppSacl,可能是一个指向该对象的正在被查询的SACL指针,但此ACL可能不会在本文的例子中存在的,不是本文的重点,所以我们传递NULL来代替。最后是指针的指针是我们将保存的命名对象的DACL。为此我们使用它27行定义为一个SECURITY_DESCRIPTOR数据类型的指针,提供了引用变量pSecurityDescriptor。该参数将接受这个函数被请求的实际安全描述符,或安全描述符的集合。
由“GetNamedSecurityInfo()”返回的安全描述符,将对你意味着不是一个格式,而是为了真正能够收集任何意义,从中我们处理字符串的使用函数。例
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[154182],资料为PDF文档或Word文档,PDF文档可免费转换为Word
您可能感兴趣的文章
- 饮用水微生物群:一个全面的时空研究,以监测巴黎供水系统的水质外文翻译资料
- 步进电机控制和摩擦模型对复杂机械系统精确定位的影响外文翻译资料
- 具有温湿度控制的开式阴极PEM燃料电池性能的提升外文翻译资料
- 警报定时系统对驾驶员行为的影响:调查驾驶员信任的差异以及根据警报定时对警报的响应外文翻译资料
- 门禁系统的零知识认证解决方案外文翻译资料
- 车辆废气及室外环境中悬浮微粒中有机磷的含量—-个案研究外文翻译资料
- ZigBee协议对城市风力涡轮机的无线监控: 支持应用软件和传感器模块外文翻译资料
- ZigBee系统在医疗保健中提供位置信息和传感器数据传输的方案外文翻译资料
- 基于PLC的模糊控制器在污水处理系统中的应用外文翻译资料
- 光伏并联最大功率点跟踪系统独立应用程序外文翻译资料
