4 out of 13 rated this helpful - Rate this topic

Environment Variables

Every process has an environment block that contains a set of environment variables and their values. There are two types of environment variables: user environment variables (set for each user) and system environment variables (set for everyone).

By default, a child process inherits the environment variables of its parent process. Programs started by the command processor inherit the command processor's environment variables. To specify a different environment for a child process, create a new environment block and pass a pointer to it as a parameter to the CreateProcess function.

The command processor provides the set command to display its environment block or to create new environment variables. You can also view or modify the environment variables by selecting System from the Control Panel, selecting Advanced system settings, and clicking Environment Variables.

Each environment block contains the environment variables in the following format:

Var1=Value1\0
Var2=Value2\0
Var3=Value3\0
...
VarN=ValueN\0\0

The name of an environment variable cannot include an equal sign (=).

The GetEnvironmentStrings function returns a pointer to the environment block of the calling process. This should be treated as a read-only block; do not modify it directly. Instead, use the SetEnvironmentVariable function to change an environment variable. When you are finished with the environment block obtained from GetEnvironmentStrings, call the FreeEnvironmentStrings function to free the block.

Calling SetEnvironmentVariable has no effect on the system environment variables. To programmatically add or modify system environment variables, add them to the HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment registry key, then broadcast a WM_SETTINGCHANGE message with lParam set to the string "Environment". This allows applications, such as the shell, to pick up your updates.

The maximum size of a user-defined environment variable is 32,767 characters. There is no technical limitation on the size of the environment block. However, there are practical limits depending on the mechanism used to access the block. For example, a batch file cannot set a variable that is longer than the maximum command line length.

Windows Server 2003 and Windows XP:  The maximum size of the environment block for the process is 32,767 characters. Starting with Windows Vista and Windows Server 2008, there is no technical limitation on the size of the environment block.

The GetEnvironmentVariable function determines whether a specified variable is defined in the environment of the calling process, and, if so, what its value is.

To retrieve a copy of the environment block for a given user, use the CreateEnvironmentBlock function.

To expand environment-variable strings, use the ExpandEnvironmentStrings function.

Related topics

Changing Environment Variables
User Environment Variables

 

 

Send comments about this topic to Microsoft

Build date: 3/7/2012

Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
Beware of length 1920 characters limit of system PATH environment variable
Found out that on Windows Server 2003, once the system PATH passes 1920 characters, the user PATH environment variable is no longer merged with it to set the process PATH environment variable, even though the full system PATH (even if larger) will be included in the process PATH variable.
What is the Limit for Environment Variable Size on Windows 2008 or 2008 R2.
I am looking for a comparison between the XP, 2003, Vista, 2008, Seven, 2008 R2 for the difference in size of Environment Variable or especially one Environment Variable "PATH". No information is found on this. Can some one help.
Total size under Win7
So what's the total size limit under Windows Vista / Server 2008 / 7 ?
PowerShell provider

PowerShell has a standard provider for environment variables named "env:".
The environment variables can be listed by

Get-ChildItem env:


The value of a given environment variable can be achieved by

$env:<variable name>

Example:

$env:TEMP


A userdefined environment variable can be created with the assignment operator "=":

$env:<variable name>=<value>

Example:

$env:myvar=42