CreateProfile (userenv)
Last changed: -66.192.63.2

.
Summary
Create a user profile directory structure in the profile's directory

C# Signature:

    [DllImport("userenv.dll", SetLastError = true, CharSet = CharSet.Auto)]
    static extern int CreateProfile( [MarshalAs(UnmanagedType.LPWStr)] String pszUserSid, [MarshalAs(UnmanagedType.LPWStr)] String pszUserName, [Out, MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder pszProfilePath, uint cchProfilePath);

VB Signature:

User-Defined Types:

None.

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

None.

Tips & Tricks:

pszProfilePath's capacity must not exceed 260 characters or CreateProfile will return error code 0x800706f7.

Sample Code:

    using (System.Security.Principal.WindowsIdentity i = new System.Security.Principal.WindowsIdentity(token))
    {
        System.Text.StringBuilder s= new System.Text.StringBuilder(260);
        uint c= Convert.ToUInt32(s.Capacity);
        int hResult = CreateProfile(i.Owner.Value, username, s, c);
    }

Documentation

Sample PowerShell Code:

    # Attempts to create a profile for the current logged on user.  Obviously, this will not work and it generates a return code
    # of -2147024809.
    $TypeDefinition=@"
    [DllImport("userenv.dll", SetLastError = true, CharSet = CharSet.Auto)]
            public static extern int CreateProfile([MarshalAs(UnmanagedType.LPWStr)] String pszUserSid, [MarshalAs(UnmanagedType.LPWStr)] String pszUserName, [Out, MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder pszProfilePath, uint cchProfilePath);
    "@
    $u=Add-Type -MemberDefinition $TypeDefinition -Name "UserCreateProfile" -Namespace "UserProfile" -UsingNamespace "System.Security.Principal" -PassThru

    $token=[System.Security.Principal.WindowsIdentity]::GetCurrent().Token
    [System.Security.Principal.WindowsIdentity]$identity = new-object -TypeName System.Security.Principal.WindowsIdentity($token)
    $identity.Owner.Value
    $identity.Name

    $pathProfile=""
    $intThing=0
    $u::CreateProfile($identity.Owner.Value, $identity.Name, $ProfilePath, $intSizeOfProfilePath)

    $ProfilePath
    $intSizeOfProfilePath