diff options
author | Jay Mundrawala <jdmundrawala@gmail.com> | 2015-02-11 14:10:02 -0600 |
---|---|---|
committer | Bryan McLellan <btm@opscode.com> | 2015-02-17 09:24:44 -0500 |
commit | 2ce0bc1a3df3fda18465e928060abdc426c6641e (patch) | |
tree | 975a9eaf286fdf83b0278563454835e5cd75958f /lib/chef/win32 | |
parent | 31b4c42dd6bb43ceb89762ba083e45dcd73152e8 (diff) | |
download | chef-2ce0bc1a3df3fda18465e928060abdc426c6641e.tar.gz |
Added DuplicateToken
Diffstat (limited to 'lib/chef/win32')
-rw-r--r-- | lib/chef/win32/api/security.rb | 1 | ||||
-rw-r--r-- | lib/chef/win32/security/token.rb | 8 |
2 files changed, 9 insertions, 0 deletions
diff --git a/lib/chef/win32/api/security.rb b/lib/chef/win32/api/security.rb index cd6c409f17..a813c36bdd 100644 --- a/lib/chef/win32/api/security.rb +++ b/lib/chef/win32/api/security.rb @@ -357,6 +357,7 @@ class Chef safe_attach_function :ConvertSidToStringSidA, [ :pointer, :pointer ], :BOOL safe_attach_function :ConvertStringSidToSidW, [ :pointer, :pointer ], :BOOL safe_attach_function :DeleteAce, [ :pointer, :DWORD ], :BOOL + safe_attach_function :DuplicateToken, [:HANDLE, :SECURITY_IMPERSONATION_LEVEL, :PHANDLE], :BOOL safe_attach_function :EqualSid, [ :pointer, :pointer ], :BOOL safe_attach_function :FreeSid, [ :pointer ], :pointer safe_attach_function :GetAce, [ :pointer, :DWORD, :pointer ], :BOOL diff --git a/lib/chef/win32/security/token.rb b/lib/chef/win32/security/token.rb index ded4fc080e..9e494a73b9 100644 --- a/lib/chef/win32/security/token.rb +++ b/lib/chef/win32/security/token.rb @@ -58,6 +58,14 @@ class Chef Chef::ReservedNames::Win32::Security::adjust_token_privileges(self, privileges_struct) end end + + def duplicate_token(security_impersonation_level) + duplicate_token_handle = FFI::Buffer.new(:ulong) + unless Chef::ReservedNames::Win32::API::Security.DuplicateToken(handle.handle, security_impersonation_level, duplicate_token_handle) + raise Chef::ReservedNames::Win32::Error.raise! + end + Token.new(Handle.new(duplicate_token_handle.read_ulong)) + end end end end |