GetPrivateProfileSection (kernel32)
Last changed: Dan Konigsbach-32.97.110.59

.
Summary
Retrieves all the keys and values for the specified section of an initialization file.
Note
This function is provided only for compatibility with 16-bit Windows-based applications. Applications should store initialization information in the registry.

VB.Net Signature

<DllImport("kernel32.dll")> _
    Shared Function GetPrivateProfileSection( ByVal lpAppName As String, _
    ByVal lpszReturnBuffer As IntPtr, ByVal nSize As System.Int32, ByVal lpFileName As String) As System.Int32
    End Function

C# Signature:

[DllImport("kernel32.dll")]
static extern uint GetPrivateProfileSection(string lpAppName, IntPtr lpszReturnBuffer,
   uint nSize, string lpFileName);

Sample Code:

    Dim profiles As New Collections.Specialized.StringCollection
    Dim ptr As IntPtr = Marshal.StringToHGlobalAnsi(New String(vbNullChar, 1024))
    Dim len As Int32 = GetPrivateProfileSection("AppName", ptr, 1024, IniPath)
    Dim buff As String = Marshal.PtrToStringAnsi(ptr, len)
    Marshal.FreeHGlobal(ptr)
    Dim sb As New StringBuilder
     '
    '    I can't believe people write shit code like this.
    '
    For ii As Integer = 0 To len - 1
        Dim c As Char = buff.Chars(ii)
        If c = vbNullChar Then
            profiles.Add(sb.ToString)
            sb.Length = 0
        Else
            sb.Append(c)
        End If
    Next

Alternative C# Signature:

[DllImport("kernel32.dll",CharSet=CharSet.Auto)]
static extern uint GetPrivateProfileSection(string lpAppName, IntPtr lpszReturnBuffer,
   uint nSize, string lpFileName);

Alternative Sample Code:

//similar to above, but use of CharSet in DllImport allows use of Marshal.PtrToStringAuto

public string[] Section()

{

    uint MAX_BUFFER = 32767;
    IntPtr pReturnedString = Marshal.AllocCoTaskMem((int)MAX_BUFFER);
    uint bytesReturned = GetPrivateProfileSection("AppName", pReturnedString, MAX_BUFFER, m_iniFile);
    if (bytesReturned == 0)
    {
        Marshal.FreeCoTaskMem(pReturnedString);
        return null;
    }
    string local = Marshal.PtrToStringAnsi(pReturnedString, (int)bytesReturned).ToString();
    Marshal.FreeCoTaskMem(pReturnedString);
    //use of Substring below removes terminating null for split
    return local.Substring(0, local.Length - 1).Split('\0');

}

Alternative Managed API:

Do you know one? Please contribute it!

Documentation