GetWindowsDirectory (kernel32)
Last changed: -91.235.58.128

.
Summary

C# Signature:

[DllImport("kernel32.dll", SetLastError=true, CharSet=CharSet.Auto)]
static extern uint GetWindowsDirectory(StringBuilder lpBuffer,
   uint uSize);

VB.NET Signature

<DllImport("kernel32.dll", SetLastError:=true, EntryPoint:="GetWindowsDirectoryW", CharSet:=CharSet.Unicode)> _
Public Function GetWindowsDirectory(<MarshalAs(UnmanagedType.LPTSTR)>lpBuffer As System.Text.StringBuilder, _
                   uSize As UInteger ) As UInteger
End function

VB Signature

Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" _
   (ByVal Buffer As String, ByVal Size As Integer) As Integer

User-Defined Types:

None.

Notes:

Q. For the above VB DllImport declaration, Visual Studio's Code Analysis throws error 'CA2101: Specify marshaling for P/Invoke string arguments'.

Should the marshalling not be: <MarshalAs(UnmanagedType.LPWStr)> Otherwise lpBuffer will be converted to Ansi and then passed to a Unicode API method.

Tips & Tricks:

Please add some!

Here are two ways to get the Windows path

   Private Sub test()
      Dim sSystemPath As String = System.Environment.GetFolderPath(Environment.SpecialFolder.System)
      MessageBox.Show(sSystemPath.Substring(0, sSystemPath.LastIndexOf("\")))
      MessageBox.Show(System.Environment.GetEnvironmentVariable("windir"))
   End Sub

VB Sample Code:

   As SDim WinDir tring = Space(255)
   Dim Res As Integer = GetWindowsDirectory(WinDir, WinDir.Length)
   WinDir = WinDir.Substring(0, Res)

VB.NET Sample Code:

Shared Function wins() As String
     Dim sb As StringBuilder =new StringBuilder(100)
     Dim f as UInteger = 100
     GetWindowsDirectory(sb,i)
     return sb.ToString()  
End Function

C# Sample Code:

   const int MaxPathLength = 255;
   StringBuilder sb = new StringBuilder(MaxPathLength);
   int len = (int)GetWindowsDirectory(sb, MaxPathLength);
   _windowsDirectory = sb.ToString(0, len);

C# Sample Code (Alternative):

static string wins()
{
     StringBuilder sb =new StringBuilder(100);
     int i = 100; uint f;
     GetWindowsDirectory(sb,ref  i);
     return sb.ToString()  ;
}

Alternative Managed API:

Environment.GetEnvironmentVariable("windir");

Documentation