INIファイルを読み書きする
正直にテキスト入出力処理を記述するよりは、WIN32APIを使ってしまいましょう。ここでは標準モジュールに記述していますが INIファイルアクセスクラスにしてみても良いですね。
日本語文字列を正しく処理するために、アンマネージドコードのマーシャリングをします。

'名前空間のインポート
Imports System.Text
Imports System.Runtime.InteropServices

Module InifileIO

    '------------------------------------------------------------
    ' WIN32APIの宣言
    '------------------------------------------------------------
    Private Declare Function GetPrivateProfileInt Lib "kernel32" _
     Alias "GetPrivateProfileIntA" ( _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpSection As String, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpKeyName As String, _
     ByVal nDefault As Int32, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpFileName As String _
     ) As Int32

    Private Declare Function GetPrivateProfileString Lib "kernel32" _
     Alias "GetPrivateProfileStringA" ( _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpSecName As String, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpKeyName As String, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpDefault As String, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpReturnedString As StringBuilder, _
     ByVal nSize As UInt32, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpFileName As String _
     ) As Int32

    Private Declare Function WritePrivateProfileString Lib "kernel32" _
     Alias "WritePrivateProfileStringA" ( _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpSecName As String, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpKeyName As String, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpSzvalue As String, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpFileName As String _
     ) As <MarshalAs(UnmanagedType.Bool)> Boolean

    '------------------------------------------------------------
    ' INIファイル読み込み Integerタイプ
    '------------------------------------------------------------
    Public Function vbGetProfileInt( _
     ByVal section As String, _
     ByVal keyname As String, _
     ByVal defval As Integer, _
     ByVal profile As String) As Integer

        Return (GetPrivateProfileInt(section, keyname, defval, profile))

    End Function

    '------------------------------------------------------------
    ' INIファイル読み込み Stringタイプ
    '------------------------------------------------------------
    Public Function vbGetProfileString( _
     ByVal section As String, _
     ByVal keyname As String, _
     ByVal defval As String, _
     ByVal profile As String) As String

        '受け取る文字列の最大長を512バイトにする、必要があればもっと大きく。
        Dim sb As New StringBuilder(512)
        Dim intLen As UInt32 = Convert.ToUInt32(sb.Capacity)
        GetPrivateProfileString(section, keyname, defval, sb, intLen, profile)
        Return (sb.ToString())

    End Function

    '------------------------------------------------------------
    ' INIファイル保存 Stringタイプ
    '------------------------------------------------------------
    Public Sub vbWriteProfile( _
     ByVal section As String, _
     ByVal keyname As String, _
     ByVal setval As String, _
     ByVal profile As String)

        WritePrivateProfileString(section, keyname, setval, profile)

    End Sub

End Module