The definition of the Windows methods and data structures used in communicating with the pageant process.
From winbase.h, winnt.h
The initial revision level assigned to the security descriptor.
Contains the security descriptor, this gets passed to the function that constructs the shared memory map.
The security descriptor holds security information.
Constants needed for security attribute retrieval. Specifies the access mask corresponding to the desired access rights.
Structs for security attribute functions. Holds the retrieved user access token.
The value of TOKEN_USER from the TOKEN_INFORMATION_CLASS enum.
Get a null-terminated string given a string.
# File lib/net/ssh/authentication/pageant.rb, line 261 def self.get_cstr(str) return str + "\0000" end
# File lib/net/ssh/authentication/pageant.rb, line 210 def self.get_current_user token_handle = open_process_token(Win.GetCurrentProcess, Win::TOKEN_QUERY) token_user = get_token_information(token_handle, Win::TOKEN_USER_INFORMATION_CLASS) return token_user end
# File lib/net/ssh/authentication/pageant.rb, line 167 def self.get_ptr(data) return data.to_ptr end
# File lib/net/ssh/authentication/pageant.rb, line 188 def self.get_security_attributes_for_user user = get_current_user psd_information = malloc_ptr(Win::SECURITY_DESCRIPTOR.size) raise_error_if_zero( Win.InitializeSecurityDescriptor(psd_information, Win::REVISION)) raise_error_if_zero( Win.SetSecurityDescriptorOwner(psd_information, user.SID, 0)) raise_error_if_zero( Win.IsValidSecurityDescriptor(psd_information)) nLength = Win::SECURITY_ATTRIBUTES.size lpSecurityDescriptor = psd_information bInheritHandle = 1 sa = [nLength, lpSecurityDescriptor.to_i, bInheritHandle].pack("LLC") return sa end
# File lib/net/ssh/authentication/pageant.rb, line 229 def self.get_token_information(token_handle, token_information_class) # Hold the size of the information to be returned preturn_length = malloc_ptr(Win::SIZEOF_DWORD) # Going to throw an INSUFFICIENT_BUFFER_ERROR, but that is ok # here. This is retrieving the size of the information to be # returned. Win.GetTokenInformation(token_handle, token_information_class, Win::NULL, 0, preturn_length) ptoken_information = malloc_ptr(preturn_length.ptr.to_i) # This call is going to write the requested information to # the memory location referenced by token_information. raise_error_if_zero( Win.GetTokenInformation(token_handle, token_information_class, ptoken_information, ptoken_information.size, preturn_length)) return TOKEN_USER.new(ptoken_information) end
# File lib/net/ssh/authentication/pageant.rb, line 163 def self.malloc_ptr(size) return DL.malloc(size) end
# File lib/net/ssh/authentication/pageant.rb, line 218 def self.open_process_token(process_handle, desired_access) ptoken_handle = malloc_ptr(Win::SIZEOF_DWORD) raise_error_if_zero( Win.OpenProcessToken(process_handle, desired_access, ptoken_handle)) token_handle = ptoken_handle.ptr.to_i return token_handle end
Generated with the Darkfish Rdoc Generator 2.