Class: Chef::ReservedNames::Win32::Security::ACE
- Inherits:
-
Object
- Object
- Chef::ReservedNames::Win32::Security::ACE
- Defined in:
- lib/chef/win32/security/ace.rb
Instance Attribute Summary collapse
-
#struct ⇒ Object
readonly
Returns the value of attribute struct.
Class Method Summary collapse
- .access_allowed(sid, mask, flags = 0) ⇒ Object
- .access_denied(sid, mask, flags = 0) ⇒ Object
- .create_ace_with_mask_and_sid(type, flags, mask, sid) ⇒ Object
- .size_with_sid(sid) ⇒ Object
Instance Method Summary collapse
- #==(other) ⇒ Object
- #dup ⇒ Object
- #explicit? ⇒ Boolean
- #flags ⇒ Object
- #flags=(val) ⇒ Object
- #inherited? ⇒ Boolean
-
#initialize(pointer, owner = nil) ⇒ ACE
constructor
A new instance of ACE.
- #mask ⇒ Object
- #mask=(val) ⇒ Object
- #pointer ⇒ Object
- #sid ⇒ Object
- #size ⇒ Object
- #to_s ⇒ Object
- #type ⇒ Object
Constructor Details
#initialize(pointer, owner = nil) ⇒ ACE
Returns a new instance of ACE.
30 31 32 33 34 35 36 37 38 39 |
# File 'lib/chef/win32/security/ace.rb', line 30 def initialize(pointer, owner = nil) if Chef::ReservedNames::Win32::API::Security::ACE_WITH_MASK_AND_SID.supports?(pointer.read_uchar) @struct = Chef::ReservedNames::Win32::API::Security::ACE_WITH_MASK_AND_SID.new pointer else # TODO Support ALL the things @struct = Chef::ReservedNames::Win32::API::Security::ACE_HEADER.new pointer end # Keep a reference to the actual owner of this memory so we don't get freed @owner = owner end |
Instance Attribute Details
#struct ⇒ Object (readonly)
Returns the value of attribute struct.
53 54 55 |
# File 'lib/chef/win32/security/ace.rb', line 53 def struct @struct end |
Class Method Details
.access_allowed(sid, mask, flags = 0) ⇒ Object
45 46 47 |
# File 'lib/chef/win32/security/ace.rb', line 45 def self.access_allowed(sid, mask, flags = 0) create_ace_with_mask_and_sid(Chef::ReservedNames::Win32::API::Security::ACCESS_ALLOWED_ACE_TYPE, flags, mask, sid) end |
.access_denied(sid, mask, flags = 0) ⇒ Object
49 50 51 |
# File 'lib/chef/win32/security/ace.rb', line 49 def self.access_denied(sid, mask, flags = 0) create_ace_with_mask_and_sid(Chef::ReservedNames::Win32::API::Security::ACCESS_DENIED_ACE_TYPE, flags, mask, sid) end |
.create_ace_with_mask_and_sid(type, flags, mask, sid) ⇒ Object
109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/chef/win32/security/ace.rb', line 109 def self.create_ace_with_mask_and_sid(type, flags, mask, sid) size_needed = size_with_sid(sid) pointer = FFI::MemoryPointer.new size_needed struct = Chef::ReservedNames::Win32::API::Security::ACE_WITH_MASK_AND_SID.new pointer struct[:AceType] = type struct[:AceFlags] = flags struct[:AceSize] = size_needed struct[:Mask] = mask Chef::ReservedNames::Win32::Memory.memcpy(struct.pointer + struct.offset_of(:SidStart), sid.pointer, sid.size) ACE.new(struct.pointer) end |
.size_with_sid(sid) ⇒ Object
41 42 43 |
# File 'lib/chef/win32/security/ace.rb', line 41 def self.size_with_sid(sid) Chef::ReservedNames::Win32::API::Security::ACE_WITH_MASK_AND_SID.offset_of(:SidStart) + sid.size end |
Instance Method Details
#==(other) ⇒ Object
55 56 57 |
# File 'lib/chef/win32/security/ace.rb', line 55 def ==(other) type == other.type && flags == other.flags && mask == other.mask && sid == other.sid end |
#dup ⇒ Object
59 60 61 |
# File 'lib/chef/win32/security/ace.rb', line 59 def dup ACE.create_ace_with_mask_and_sid(type, flags, mask, sid) end |
#explicit? ⇒ Boolean
71 72 73 |
# File 'lib/chef/win32/security/ace.rb', line 71 def explicit? ! inherited? end |
#flags ⇒ Object
63 64 65 |
# File 'lib/chef/win32/security/ace.rb', line 63 def flags struct[:AceFlags] end |
#flags=(val) ⇒ Object
67 68 69 |
# File 'lib/chef/win32/security/ace.rb', line 67 def flags=(val) struct[:AceFlags] = val end |
#inherited? ⇒ Boolean
75 76 77 |
# File 'lib/chef/win32/security/ace.rb', line 75 def inherited? (struct[:AceFlags] & Chef::ReservedNames::Win32::API::Security::INHERITED_ACE) != 0 end |
#mask ⇒ Object
79 80 81 |
# File 'lib/chef/win32/security/ace.rb', line 79 def mask struct[:Mask] end |
#mask=(val) ⇒ Object
83 84 85 |
# File 'lib/chef/win32/security/ace.rb', line 83 def mask=(val) struct[:Mask] = val end |
#pointer ⇒ Object
87 88 89 |
# File 'lib/chef/win32/security/ace.rb', line 87 def pointer struct.pointer end |
#sid ⇒ Object
95 96 97 98 99 |
# File 'lib/chef/win32/security/ace.rb', line 95 def sid # The SID runs off the end of the structure, starting at :SidStart. # Use pointer arithmetic to get a pointer to that location. Chef::ReservedNames::Win32::Security::SID.new(struct.pointer + struct.offset_of(:SidStart)) end |
#size ⇒ Object
91 92 93 |
# File 'lib/chef/win32/security/ace.rb', line 91 def size struct[:AceSize] end |
#to_s ⇒ Object
101 102 103 |
# File 'lib/chef/win32/security/ace.rb', line 101 def to_s "#{sid.account_name}/flags:#{flags.to_s(16)}/mask:#{mask.to_s(16)}" end |
#type ⇒ Object
105 106 107 |
# File 'lib/chef/win32/security/ace.rb', line 105 def type struct[:AceType] end |