CreateSemaphoreEx API Windows平台上有以下参数:
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,和 DWORD dwDesiredAccess
我知道它们都用于控制访问,但是,我不确定它们之间的关系以及它们之间的区别。例如,如果我将 dwDesiredAccess 设置为 SYNCHRONIZE,但我创建了一个带有空 DACL 的安全属性(即根本没有访问权限),那么它们如何协同工作?如果有人可以分享有关这些参数的用途以及它们如何相互作用的信息,那就太好了。
谢谢。
最佳答案
如果对象已经存在:
lpSemaphoreAttributes.lpSecurityDescriptor 参数被忽略。
dwDesiredAccess 参数确定赋予从函数返回的新句柄的访问权限。如果这些访问权限与对象的安全权限不兼容,调用将失败并返回 ERROR_ACCESS_DENIED。
如果对象不存在:
lpSemaphoreAttributes.lpSecurityDescriptor 参数确定为新创建的对象分配哪些安全权限。如果未提供安全描述符,则使用默认权限。
dwDesiredAccess 参数确定赋予从函数返回的新句柄的访问权限。这些权限不受新创建对象的安全权限限制。从概念上讲,对象句柄在应用新权限之前打开。
因此,如果您指定一个带有空 ACL 的 DACL(因此隐式拒绝每个人的访问),那么访问该对象的唯一方法是通过使用该对象创建的句柄或该句柄的拷贝。将无法再次打开该对象,即使是从同一进程,除非您首先更改权限以允许您这样做。
请注意,创建对象时其他安全规则仍然适用。例如,您无法获得 ACCESS_SYSTEM_SECURITY 访问权限,即使是对新创建的对象,除非您拥有 SE_SECURITY_NAME 权限。
还应强调的是,当您使用现有打开的句柄访问对象时,只会检查句柄的访问权限,而不检查对象的当前安全权限。如果您在打开句柄时获得了特定的访问权限,那么此后对象的安全权限是否已更改为拒绝您的访问权限并不重要。
相反,如果未使用执行给定操作所需的访问权限打开句柄,则无法使用该句柄执行该操作,即使对象的安全权限授予您这样做的权利。
这就是为什么 dwDesiredAccess 参数如此重要的原因;如果您遗漏了特定操作所需的权限,则该操作将失败,但如果您要求的权限范围太广,则可能会被拒绝访问。幸运的是,在大多数情况下,文档都很简单,因此只需要稍微注意一下细节即可。
关于c++ - CreateSemaphoreEx 安全属性与访问掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29812423/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog
对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?