Search
Module:
Directory

   Desktop Functions:

   Smart Device Functions:


Show Recent Changes
Subscribe (RSS)
Misc. Pages
Comments
FAQ
Helpful Tools
Playground
Suggested Reading
Website TODO List
Download Visual Studio Add-In

STARTUPINFO (Structures)
 
.
Summary
Used with CreateProcess, CreateProcessAsUser, and CreateProcessWithLogonW to specify the window station, desktop, standard handles, and appearance of the main window for the new process.

C# Definition:

  // Use this version when the caller allocates the strings
  // (For example: CreateProcess)
  [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
  public struct STARTUPINFO
  {
    public uint    cb;
    public string  lpReserved;
    public string  lpDesktop;
    public string  lpTitle;
    public uint    dwX;
    public uint    dwY;
    public uint    dwXSize;
    public uint    dwYSize;
    public uint    dwXCountChars;
    public uint    dwYCountChars;
    public uint    dwFillAttribute;
    public uint    dwFlags;
    public ushort  wShowWindow;
    public ushort  cbReserved2;
    public IntPtr  lpReserved2;
    public IntPtr  hStdInput;
    public IntPtr  hStdOutput;
    public IntPtr  hStdError;
  }

  // Use this version when the API allocates the strings
  // (For example: GetStartupInfo)
  [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
  public struct STARTUPINFO
  {
    public uint    cb;
    public IntPtr  lpReserved; // Instead of string!
    public IntPtr  lpDesktop;  // Instead of string!
    public IntPtr  lpTitle;    // Instead of string!
    public uint    dwX;
    public uint    dwY;
    public uint    dwXSize;
    public uint    dwYSize;
    public uint    dwXCountChars;
    public uint    dwYCountChars;
    public uint    dwFillAttribute;
    public uint    dwFlags;
    public ushort  wShowWindow;
    public ushort  cbReserved2;
    public IntPtr  lpReserved2;
    public IntPtr  hStdInput;
    public IntPtr  hStdOutput;
    public IntPtr  hStdError;
  }

VB Definition:

' Use this version when the caller allocates the strings
' (For example: CreateProcess)
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
Structure STARTUPINFO
   Public cb As Integer
   Public lpReserved As String
   Public lpDesktop As String
   Public lpTitle As String
   Public dwX As Integer
   Public dwY As Integer
   Public dwXSize As Integer
   Public dwYSize As Integer
   Public dwXCountChars As Integer
   Public dwYCountChars As Integer
   Public dwFillAttribute As Integer
   Public dwFlags As Integer
   Public wShowWindow As Short
   Public cbReserved2 As Short
   Public lpReserved2 As Integer
   Public hStdInput As Integer
   Public hStdOutput As Integer
   Public hStdError As Integer
End Structure

' Use this version when the API allocates the strings
' (For example: GetStartupInfo)
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
Structure STARTUPINFO
   Public cb As Integer
   Public lpReserved As IntPtr ' Instead of String!
   Public lpDesktop As IntPtr  ' Instead of String!
   Public lpTitle As IntPtr    ' Instead of String!
   Public dwX As Integer
   Public dwY As Integer
   Public dwXSize As Integer
   Public dwYSize As Integer
   Public dwXCountChars As Integer
   Public dwYCountChars As Integer
   Public dwFillAttribute As Integer
   Public dwFlags As Integer
   Public wShowWindow As Short
   Public cbReserved2 As Short
   Public lpReserved2 As Integer
   Public hStdInput As Integer
   Public hStdOutput As Integer
   Public hStdError As Integer
End Structure

Notes:

Some APIs, like GetStartupInfo, allocate the memory for the three string fields and do not expect the memory to ever be freed. Defining these fields as strings will cause the interop marshaler to call CoTaskMemFree, so it's important to define them as IntPtr (a raw pointer) instead when calling such APIs, otherwise memory corruption will occur. After the call, use Marshal.PtrToStringAuto (or one of the other character sets if appropriate) to convert the IntPtr to a managed string that you can use.

Tips & Tricks:

Please add some!

Sample Code:

Please add some!

Alternative Managed API:

Do you know one? Please contribute it!

Documentation
STARTUPINFO on MSDN

Please edit this page!

Do you have...

  • helpful tips?
  • corrections to the existing content?
  • alternate definitions?
  • additional languages you want to include?

Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing any supporting types needed.

 
Access PInvoke.net directly from VS:
Terms of Use
Find References
Show Printable Version
Revisions