def self.windows_root_group_name
administrators_group_name_result = nil
administrators_sid_result = FFI::MemoryPointer.new(:pointer)
convert_result = Win32.convert_string_sid_to_sid(BUILTIN_ADMINISTRATORS_SID, administrators_sid_result)
last_win32_error = Win32.get_last_error
if convert_result == 0
raise "ERROR: failed to to convert sid string '#{BUILTIN_ADMINISTRATORS_SID}' to a Windows SID structure because Win32 API function ConvertStringSidToSid returned #{last_win32_error}."
end
administrators_group_name_buffer = 0.chr * 260
administrators_group_name_length = [administrators_group_name_buffer.length].pack('L')
domain_name_length_buffer = [260].pack('L')
sid_use_result = 0.chr * 4
lookup_boolean_result = Win32.lookup_account_sid(
nil,
administrators_sid_result.read_pointer,
administrators_group_name_buffer,
administrators_group_name_length,
nil,
domain_name_length_buffer,
sid_use_result)
last_win32_error = Win32.get_last_error
Win32.local_free(administrators_sid_result.read_pointer)
if lookup_boolean_result == 0
raise "ERROR: failed to find root group (i.e. builtin\\administrators) for sid #{BUILTIN_ADMINISTRATORS_SID} because Win32 API function LookupAccountSid returned #{last_win32_error}."
end
administrators_group_name_buffer.strip
end