Class: Chef::ReservedNames::Win32::Security::ACE

Inherits:
Object
  • Object
show all
Defined in:
lib/chef/win32/security/ace.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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

#structObject (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

#dupObject



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

Returns:

  • (Boolean)


71
72
73
# File 'lib/chef/win32/security/ace.rb', line 71

def explicit?
  ! inherited?
end

#flagsObject



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

Returns:

  • (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

#maskObject



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

#pointerObject



87
88
89
# File 'lib/chef/win32/security/ace.rb', line 87

def pointer
  struct.pointer
end

#sidObject



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

#sizeObject



91
92
93
# File 'lib/chef/win32/security/ace.rb', line 91

def size
  struct[:AceSize]
end

#to_sObject



101
102
103
# File 'lib/chef/win32/security/ace.rb', line 101

def to_s
  "#{sid.}/flags:#{flags.to_s(16)}/mask:#{mask.to_s(16)}"
end

#typeObject



105
106
107
# File 'lib/chef/win32/security/ace.rb', line 105

def type
  struct[:AceType]
end