NetUserAdd (netapi32)
Last changed: -204.104.55.241

.
Summary
Adds a user account.

C# Signature:

[DllImport("netapi32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
private static extern int NetUserAdd(
     [MarshalAs(UnmanagedType.LPWStr)] string servername,
     UInt32 level,
     IntPtr userInfo,
     out UInt32 parm_err);

VB Signature:

Private Declare Function NetUserAdd Lib "Netapi32.dll" ( _
    <MarshalAs(UnmanagedType.LPWStr)> ByVal servername As String, _
    ByVal level As Integer, _
    ByRef buf As USER_INFO_1, _
    ByRef param_error As Integer) As Integer

User-Defined Types:

USER_INFO_1

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

If the method will only be used with a single user info level, then the userInfo parameter can be simplified to be ref USER_INFO_# userInfo where # is the level you intend to pass.

Tips & Tricks:

Please add some!

Sample Code:

  <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
       Private Structure USER_INFO_1
    Dim Username As String
    Dim Password As String
    Dim Password_age As Integer
    Dim Priv As Integer
    Dim HomeDir As String
    Dim Comments As String
    Dim Flag As Integer
    Dim Script_Path As String
    End Structure

    Private Declare Function NetUserAdd Lib "Netapi32.dll" ( _
    <MarshalAs(UnmanagedType.LPWStr)> ByVal servername As String, _
    ByVal level As Integer, _
    ByRef buf As USER_INFO_1, _
    ByRef param_error As Integer) As Integer

   Public Shared Function AddUser(ByVal UserName As String, Optional ByVal Server As String = "") As String

    Dim NewUser As New USER_INFO_1
    Dim bufPtr As IntPtr
    Dim Out As Integer

    With NewUser
        .Comments = "New user account setup by LocalUser.dll"
        .Password = "P@ssword"
        .HomeDir = ""
        .Script_Path = ""
        .Username = UserName.Trim
        .Priv = 1
    End With

    Dim RetVal As Integer = NetUserAdd(Server, 1, NewUser, Out)

    If RetVal <> 0 Then
        Return New System.ComponentModel.Win32Exception(RetVal).Message
    Else
        Return "Success"
    End If

    End Function

Documentation
NetUserAdd on MSDN