1 / 3
文档名称:

Nt-2000-xp平台下的存储控制模型(Access Control Model) (二).pdf

格式:pdf   页数:3
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Nt-2000-xp平台下的存储控制模型(Access Control Model) (二).pdf

上传人:翩仙妙玉 2012/9/16 文件大小:0 KB

下载得到文件列表

Nt-2000-xp平台下的存储控制模型(Access Control Model) (二).pdf

文档介绍

文档介绍:理想流
创建超一流方法论,为培育超一流的软件公司贡献力量
Nt/2000/xp平台下的存储控制模型(Access Control Model) (二)
分类: System Programming 2003-07-21 18:36 767人阅读评论(0) 收藏举报
Nt/2000/xp平台下的存储控制模型(Access Control Model)
By 李智勇 2003-7-18 16:28
 
(二)
 
       在涉及其他之前,我们先来看一段可能会出问题的程序。
   if(ESS !=RegCreateKeyExW(HKEY_LOCAL_MACHINE,L"Softw are//007h",0,NULL,
  REG_OPTION_NON_VOLATILE,KEY_WRIT E,NULL,&hkey,NULL))
{return FALSE;}
 
  if(ESS !=RegSetValueEx(hkey,lpItem,0,RE G_SZ,(LPBYTE)”90”,2))
{
RegClos eKey(hkey); return FALSE;
}
RegCloseKey(hkey);    
(程序1)
 
  这段程序很简单,就是打开注册表,并写值。在98或者管理员权限下基本上不会出现什么问题。但存在什么样的
潜在问题呢?我们做这样的假设,这段代码运行在用户态的打印机驱动程序的某个DDI接口中,比如
DrvEnablePDEV。这样当不同用户进行打印时这段代码都需要被调用。于是问题出现了,在其他用户权限下,有可能
打开或者设置值失败。GetLastError()返回5(Access denied)。原因是当你建立相关子
键时使用了NULL做为安全权限"(Software//007h”)地参数。使用NULL意味着lp从Se父cu键ri直tyAttributes
接继承DACL,而在这个DACL中一旦不包含对你所使用的帐户赋予权限的ACE,你对注册表的相关操作必然失败。(枚
举的各个ACE的代码见后,但读懂ACE字符"串So有ft点w难ar度e”,简单来说就是Built-in users只有
对进行读的权利,所以Users组和Guest组的"S用of户t将wa无re法”写你所建立的子键”,因为用上述方式 007h”
建立的子键的DACL继承自)。为避免这种情况,建立注册表键时要"明S确of制tw定a安re全”权限。代码如下
(from msdn 有更改):
这段代码建立一个管理员可以进行任何操作,任何用户都可以读写的子键,程序和相关结构的说明将在下节进行。
 
    SECURITY_ATTRIBUTES uSecurityAttributes;
      
    PSID pEveryoneSID = NULL, pAdminSID = NULL;
    PACL pACL = NULL;
    PSECURITY_DESCRIPTOR pSD = NULL;
    ESS ea[2];
 SID_IDENTIFIER_AU THORITY SIDAuthWorld =  SECURI