Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1570 lines
48 KiB

//=============================================================================
// userenv.h - Header file for user environment API.
// User Profiles, environment variables, and Group Policy
//
// Copyright (c) Microsoft Corporation 1995-2002
// All rights reserved
//
//=============================================================================
#ifndef _INC_USERENVP
#define _INC_USERENVP
#ifdef __cplusplus
extern "C" {
#endif
#define PI_LITELOAD 0x00000004 // Lite load of the profile (for system use only)
#define PI_HIDEPROFILE 0x00000008 // Mark the profile as super hidden
#ifndef _USERENV_NO_LINK_APIS_
//=============================================================================
//
// Internal flags for RSoP WMI providers
//
//=============================================================================
// planning mode provider flags
#define FLAG_INTERNAL_MASK 0x01FFFFFF
//=============================w================================================
//
// CreateGroup
//
// Creates a program group on the start menu
//
// lpGroupName - Name of group
// bCommonGroup - Common or personal group
//
// Returns: TRUE if successful
// FALSE if not. Call GetLastError() for more details
//
//=============================================================================
USERENVAPI
BOOL
WINAPI
CreateGroupA(
IN LPCSTR lpGroupName,
IN BOOL bCommonGroup);
USERENVAPI
BOOL
WINAPI
CreateGroupW(
IN LPCWSTR lpGroupName,
IN BOOL bCommonGroup);
#ifdef UNICODE
#define CreateGroup CreateGroupW
#else
#define CreateGroup CreateGroupA
#endif // !UNICODE
//=============================================================================
//
// CreateGroupEx
//
// Creates a program group on the start menu
//
// lpGroupName - Name of group
// bCommonGroup - Common or personal group
// lpResourceModuleName - Name of the resource module.
// uResourceID - Resource ID for the MUI display name.
//
// Returns: TRUE if successful
// FALSE if not. Call GetLastError() for more details
//
//=============================================================================
USERENVAPI
BOOL
WINAPI
CreateGroupExA(
IN LPCSTR lpGroupName,
IN BOOL bCommonGroup,
IN LPCSTR lpResourceModuleName,
IN UINT uResourceID);
USERENVAPI
BOOL
WINAPI
CreateGroupExW(
IN LPCWSTR lpGroupName,
IN BOOL bCommonGroup,
IN LPCWSTR lpResourceModuleName,
IN UINT uResourceID);
#ifdef UNICODE
#define CreateGroupEx CreateGroupExW
#else
#define CreateGroupEx CreateGroupExA
#endif // !UNICODE
//=============================================================================
//
// DeleteGroup
//
// Deletes a program group on the start menu and all of its contents
//
// lpGroupName - Name of group
// bCommonGroup - Common or personal group
//
// Returns: TRUE if successful
// FALSE if not. Call GetLastError() for more details
//
// Note: This function uses a delnode routine. Make sure you really want
// to delete the group before you call this function.
//
//=============================================================================
USERENVAPI
BOOL
WINAPI
DeleteGroupA(
IN LPCSTR lpGroupName,
IN BOOL bCommonGroup);
USERENVAPI
BOOL
WINAPI
DeleteGroupW(
IN LPCWSTR lpGroupName,
IN BOOL bCommonGroup);
#ifdef UNICODE
#define DeleteGroup DeleteGroupW
#else
#define DeleteGroup DeleteGroupA
#endif // !UNICODE
//=============================================================================
//
// AddItem
//
// Creates an item on the Programs portion of the Start Menu in the
// requested group.
//
// lpGroupName - Name of group
// bCommonGroup - Common or personal group
// lpFileName - Name of link without the .lnk extension (eg: Notepad)
// lpCommandLine - Command line of target path (eg: notepad.exe)
// lpIconPath - Optional icon path, can be NULL.
// iIconIndex - Optional icon index, default to 0.
// lpWorkingDirectory - Working directory when target is invoked, can be NULL
// wHotKey - Hot key for the link file, default to 0
// iShowCmd - Specifies how the application should be launched.
// Use a default of SW_SHOWNORMAL
//
// Returns: TRUE if successful
// FALSE if not. Call GetLastError() for more details
//
// Notes: New applications should use the CreateLinkFile() function instead
// of AddItem. This allows for friendly tooltip descriptions.
//
// The lpFileName argument should not include the .lnk extension.
// This function will add the extension.
//
// If the lpWorkingDirectory parameter is NULL, this function will
// insert the home directory environment variables
//
// If the requested group doesn't exist, it will be created.
//
// If the lpCommandLine target is located below the system root,
// the SystemRoot environment variable will be inserted into the path
//
// Here's a sample of how this function is typically called:
//
// AddItem (TEXT("Accessories"), FALSE, TEXT("Notepad"),
// TEXT("notepad.exe"), NULL, 0, NULL, 0, SW_SHOWNORMAL);
//
// This function should only be used the Windows NT team. Developers
// outside of the Windows NT team can use the IShellLink interface
// to create link files.
//
//=============================================================================
USERENVAPI
BOOL
WINAPI
AddItemA(
IN LPCSTR lpGroupName,
IN BOOL bCommonGroup,
IN LPCSTR lpFileName,
IN LPCSTR lpCommandLine,
IN LPCSTR lpIconPath,
IN INT iIconIndex,
IN LPCSTR lpWorkingDirectory,
IN WORD wHotKey,
IN INT iShowCmd);
USERENVAPI
BOOL
WINAPI
AddItemW(
IN LPCWSTR lpGroupName,
IN BOOL bCommonGroup,
IN LPCWSTR lpFileName,
IN LPCWSTR lpCommandLine,
IN LPCWSTR lpIconPath,
IN INT iIconIndex,
IN LPCWSTR lpWorkingDirectory,
IN WORD wHotKey,
IN INT iShowCmd);
#ifdef UNICODE
#define AddItem AddItemW
#else
#define AddItem AddItemA
#endif // !UNICODE
//=============================================================================
//
// DeleteItem
//
// Deletes an item on the Programs portion of the Start Menu in the
// requested group.
//
// lpGroupName - Name of group
// bCommonGroup - Common or personal group
// lpFileName - Name of link without the .lnk extension (eg: Notepad)
// bDeleteGroup - After deleting the link, delete the group if its empty.
//
// Returns: TRUE if successful
// FALSE if not. Call GetLastError() for more details
//
// Notes: New applications should use the DeleteLinkFile() function instead
// of DeleteItem.
//
// The lpFileName argument should not include the .lnk extension.
// This function will add the extension.
//
// Here's a sample of how this function is typically called:
//
// DeleteItem (TEXT("Accessories"), FALSE, TEXT("Notepad"), TRUE);
//
// This function should only be used the Windows NT team. Developers
// outside of the Windows NT team can use the IShellLink interface
// to create link files and DeleteFile to delete them.
//
//=============================================================================
USERENVAPI
BOOL
WINAPI
DeleteItemA(
IN LPCSTR lpGroupName,
IN BOOL bCommonGroup,
IN LPCSTR lpFileName,
IN BOOL bDeleteGroup);
USERENVAPI
BOOL
WINAPI
DeleteItemW(
IN LPCWSTR lpGroupName,
IN BOOL bCommonGroup,
IN LPCWSTR lpFileName,
IN BOOL bDeleteGroup);
#ifdef UNICODE
#define DeleteItem DeleteItemW
#else
#define DeleteItem DeleteItemA
#endif // !UNICODE
//=============================================================================
//
// AddDesktopItem
//
// Creates an item on desktop. This function is very similar to AddItem()
// documented above. See that function for more information.
//
// Notes: New applications should use the CreateLinkFile() function instead
// of AddItem. This allows for friendly tooltip descriptions.
//
// This function should only be used the Windows NT team. Developers
// outside of the Windows NT team can use the IShellLink interface
// to create link files.
//
//=============================================================================
USERENVAPI
BOOL
WINAPI
AddDesktopItemA(
IN BOOL bCommonItem,
IN LPCSTR lpFileName,
IN LPCSTR lpCommandLine,
IN LPCSTR lpIconPath,
IN INT iIconIndex,
IN LPCSTR lpWorkingDirectory,
IN WORD wHotKey,
IN INT iShowCmd);
USERENVAPI
BOOL
WINAPI
AddDesktopItemW(
IN BOOL bCommonItem,
IN LPCWSTR lpFileName,
IN LPCWSTR lpCommandLine,
IN LPCWSTR lpIconPath,
IN INT iIconIndex,
IN LPCWSTR lpWorkingDirectory,
IN WORD wHotKey,
IN INT iShowCmd);
#ifdef UNICODE
#define AddDesktopItem AddDesktopItemW
#else
#define AddDesktopItem AddDesktopItemA
#endif // !UNICODE
//=============================================================================
//
// DeleteDesktopItem
//
// Deletes an item from the desktop. This function is very similar to DeleteItem()
// documented above. See that function for more information.
//
// Notes: New applications should use the DeleteLinkFile() function instead
// of DeleteDesktopItem.
//
// This function should only be used the Windows NT team. Developers
// outside of the Windows NT team can use the IShellLink interface
// to create link files and DeleteFile to delete them.
//
//=============================================================================
USERENVAPI
BOOL
WINAPI
DeleteDesktopItemA(
IN BOOL bCommonItem,
IN LPCSTR lpFileName);
USERENVAPI
BOOL
WINAPI
DeleteDesktopItemW(
IN BOOL bCommonItem,
IN LPCWSTR lpFileName);
#ifdef UNICODE
#define DeleteDesktopItem DeleteDesktopItemW
#else
#define DeleteDesktopItem DeleteDesktopItemA
#endif // !UNICODE
//=============================================================================
//
// CreateLinkFile
//
// Creates a link file (aka shortcut) in the requested special folder or
// subdirectory of a special folder.
//
// csidl - CSIDL_* constant of special folder. See shlobj.h
// lpSubDirectory - Subdirectory name. See note below
// lpFileName - Name of link without the .lnk extension (eg: Notepad)
// lpCommandLine - Command line of target path (eg: notepad.exe)
// lpIconPath - Optional icon path, can be NULL.
// iIconIndex - Optional icon index, default to 0.
// lpWorkingDirectory - Working directory when target is invoked, can be NULL
// wHotKey - Hot key for the link file, default to 0
// iShowCmd - Specifies how the application should be launched.
// Use a default of SW_SHOWNORMAL
// lpDescription - Friendly description of shortcut, can be NULL.
//
// Returns: TRUE if successful
// FALSE if not. Call GetLastError() for more details
//
// Notes: New applications should use this function instead of AddItem or
// AddDesktopItem. This allows for friendly tooltip descriptions.
//
// The link file name is a combination of the first three
// parameters. If a csidl is given, that special folder is
// looked up first, and then the lpSubDirectory is appended to
// it followed by the lpFileName. If csidl is equal to 0, then
// lpSubDirectory should contain the fully qualified path to the
// directory the link file is to be placed in. This allows
// for link files to be be created outside of the scope of a
// shell special folder. The csidl constants are listed in
// shlobj.h or in the Win32 documentation for SHGetSpecialFolderPath.
// Commonly used csidl's will be:
//
// CSIDL_PROGRAMS - Personal Program folder on Start Menu
// CSIDL_COMMON_PROGRAMS - Common Program folder on Start Menu
// CSIDL_DESKTOPDIRECTORY - Personal desktop folder
// CSIDL_COMMON_DESKTOPDIRECTORY - Common desktop folder
//
// The lpFileName argument should not include the .lnk extension.
// This function will add the extension.
//
// If the lpWorkingDirectory parameter is NULL, this function will
// insert home directory environment variables.
//
// If the requested subdirectory doesn't exist, it will be created.
//
// If the lpCommandLine target is located below the system root,
// the SystemRoot environment variable will be inserted into the path
//
// Here's a sample of how this function is typically called:
//
// CreateLinkFile (CSIDL_PROGRAMS, TEXT("Accessories"), TEXT("Notepad"),
// TEXT("notepad.exe"), NULL, 0, NULL, 0, SW_SHOWNORMAL,
// TEXT("A simple word processor."));
//
// This function should only be used the Windows NT team. Developers
// outside of the Windows NT team can use the IShellLink interface
// to create link files.
//
//=============================================================================
#if(WINVER >= 0x0500)
USERENVAPI
BOOL
WINAPI
CreateLinkFileA(
IN INT csidl,
IN LPCSTR lpSubDirectory,
IN LPCSTR lpFileName,
IN LPCSTR lpCommandLine,
IN LPCSTR lpIconPath,
IN INT iIconIndex,
IN LPCSTR lpWorkingDirectory,
IN WORD wHotKey,
IN INT iShowCmd,
IN LPCSTR lpDescription);
USERENVAPI
BOOL
WINAPI
CreateLinkFileW(
IN INT csidl,
IN LPCWSTR lpSubDirectory,
IN LPCWSTR lpFileName,
IN LPCWSTR lpCommandLine,
IN LPCWSTR lpIconPath,
IN INT iIconIndex,
IN LPCWSTR lpWorkingDirectory,
IN WORD wHotKey,
IN INT iShowCmd,
IN LPCWSTR lpDescription);
#ifdef UNICODE
#define CreateLinkFile CreateLinkFileW
#else
#define CreateLinkFile CreateLinkFileA
#endif // !UNICODE
#endif /* WINVER >= 0x0500 */
//=============================================================================
//
// CreateLinkFileEx
//
// Creates a link file (aka shortcut) in the requested special folder or
// subdirectory of a special folder.
//
// csidl - CSIDL_* constant of special folder. See shlobj.h
// lpSubDirectory - Subdirectory name. See note below
// lpFileName - Name of link without the .lnk extension (eg: Notepad)
// lpCommandLine - Command line of target path (eg: notepad.exe)
// lpIconPath - Optional icon path, can be NULL.
// iIconIndex - Optional icon index, default to 0.
// lpWorkingDirectory - Working directory when target is invoked, can be NULL
// wHotKey - Hot key for the link file, default to 0
// iShowCmd - Specifies how the application should be launched.
// Use a default of SW_SHOWNORMAL
// lpDescription - Friendly description of shortcut, can be NULL.
// lpResourceModuleName - Name of the resource module. Can be NULL
// uResourceID - Resource ID for the MUI display name.
//
// Returns: TRUE if successful
// FALSE if not. Call GetLastError() for more details
//
// for additional descriptions look in the description of Createlinkfile above.
//=============================================================================
#if(WINVER >= 0x0500)
USERENVAPI
BOOL
WINAPI
CreateLinkFileExA(
IN INT csidl,
IN LPCSTR lpSubDirectory,
IN LPCSTR lpFileName,
IN LPCSTR lpCommandLine,
IN LPCSTR lpIconPath,
IN INT iIconIndex,
IN LPCSTR lpWorkingDirectory,
IN WORD wHotKey,
IN INT iShowCmd,
IN LPCSTR lpDescription,
IN LPCSTR lpResourceModuleName,
IN UINT uResourceID);
USERENVAPI
BOOL
WINAPI
CreateLinkFileExW(
IN INT csidl,
IN LPCWSTR lpSubDirectory,
IN LPCWSTR lpFileName,
IN LPCWSTR lpCommandLine,
IN LPCWSTR lpIconPath,
IN INT iIconIndex,
IN LPCWSTR lpWorkingDirectory,
IN WORD wHotKey,
IN INT iShowCmd,
IN LPCWSTR lpDescription,
IN LPCWSTR lpResourceModuleName,
IN UINT uResourceID);
#ifdef UNICODE
#define CreateLinkFileEx CreateLinkFileExW
#else
#define CreateLinkFileEx CreateLinkFileExA
#endif // !UNICODE
#endif /* WINVER >= 0x0500 */
//=============================================================================
//
// DeleteLinkFile
//
// Deletes a link file (aka shortcut) in the requested special folder or
// subdirectory of a special folder.
//
// csidl - CSIDL_* constant of special folder. See shlobj.h
// lpSubDirectory - Subdirectory name. See note below
// lpFileName - Name of link without the .lnk extension (eg: Notepad)
// bDeleteSubDirectory - After deleting the link, delete the subdirectory if its empty.
//
// Returns: TRUE if successful
// FALSE if not. Call GetLastError() for more details
//
// Notes: New applications should use this function instead DeleteItem or
// DeleteDesktopItem.
//
// The link file name is a combination of the first three
// parameters. If a csidl is given, that special folder is
// looked up first, and then the lpSubDirectory is appended to
// it followed by the lpFileName. If csidl is equal to 0, then
// lpSubDirectory should contain the fully qualified path to the
// directory the link file is to be placed in. This allows
// for link files to be be deleted outside of the scope of a
// shell special folder. The csidl constants are listed in
// shlobj.h or in the Win32 documentation for SHGetSpecialFolderPath.
// Commonly used csidl's will be:
//
// CSIDL_PROGRAMS - Personal Program folder on Start Menu
// CSIDL_COMMON_PROGRAMS - Common Program folder on Start Menu
// CSIDL_DESKTOPDIRECTORY - Personal desktop folder
// CSIDL_COMMON_DESKTOPDIRECTORY - Common desktop folder
//
// The lpFileName argument should not include the .lnk extension.
// This function will add the extension.
//
// This function should only be used the Windows NT team. Developers
// outside of the Windows NT team can use the IShellLink interface
// to create link files and DeleteFile to delete them.
//
//=============================================================================
#if(WINVER >= 0x0500)
USERENVAPI
BOOL
WINAPI
DeleteLinkFileA(
IN INT csidl,
IN LPCSTR lpSubDirectory,
IN LPCSTR lpFileName,
IN BOOL bDeleteSubDirectory);
USERENVAPI
BOOL
WINAPI
DeleteLinkFileW(
IN INT csidl,
IN LPCWSTR lpSubDirectory,
IN LPCWSTR lpFileName,
IN BOOL bDeleteSubDirectory);
#ifdef UNICODE
#define DeleteLinkFile DeleteLinkFileW
#else
#define DeleteLinkFile DeleteLinkFileA
#endif // !UNICODE
#endif /* WINVER >= 0x0500 */
#endif // _USERENV_NO_LINK_APIS_
//=============================================================================
//
// InitializeProfiles
//
// This function is used by GUI mode setup only and setup repair. It initializes
// the Default User and All User profiles and converts any common groups from
// Program Manager.
//
// bGuiModeSetup - Gui Mode setup or not.
//
//
// Returns: TRUE if successful
// FALSE if not. Call GetLastError() for more details
//
//=============================================================================
USERENVAPI
BOOL
WINAPI
InitializeProfiles(
IN BOOL bGuiModeSetup);
//*************************************************************
//
// CopySystemProfile()
//
// Purpose: Create the system profile information under
// ProfileList entry.
// In case of upgrade copy system profile from older
// location to new location and delete the old system
// profile
//
// Parameters:
//
// Return: TRUE if successful
// FALSE if an error occurs. Call GetLastError()
//
// Comments: This should only be called by GUI mode setup!
//
//*************************************************************
USERENVAPI
BOOL
WINAPI
CopySystemProfile(
IN BOOL bCleanInstall);
//=============================================================================
//
// DetermineProfilesLocation
//
// This function is used by winlogon when GUI mode setup is about to start.
// It sets the correct user profile location in the registry.
//
// bCleanInstall - True if setup is performing a clean install
//
// Returns: TRUE if successful
// FALSE if not. Call GetLastError() for more details
//
//=============================================================================
#if(WINVER >= 0x0500)
USERENVAPI
BOOL
WINAPI
DetermineProfilesLocation(
BOOL bCleanInstall);
#endif /* WINVER >= 0x0500 */
//=============================================================================
//
// CreateUserProfile(Ex)
//
// Creates a user profile for the given user. Used by the Win95 -> NT5
// migration code.
//
// pSid - SID of new user
// lpUserName - User name of new user
// lpUserHive - Registry hive to use (optional, can be NULL)
// lpProfileDir - Receives the user's profile directory (can be NULL)
// dwDirSize - Size of lpProfileDir
// bWin9xUpg - Flag to say whether it is win9x upgrade
//
// Returns: TRUE if successful
// FALSE if not.
//
//=============================================================================
#if(WINVER >= 0x0500)
USERENVAPI
BOOL
WINAPI
CreateUserProfileA(
IN PSID pSid,
IN LPCSTR lpUserName,
IN LPCSTR lpUserHive,
OUT LPSTR lpProfileDir,
IN DWORD dwDirSize);
USERENVAPI
BOOL
WINAPI
CreateUserProfileW(
IN PSID pSid,
IN LPCWSTR lpUserName,
IN LPCWSTR lpUserHive,
OUT LPWSTR lpProfileDir,
IN DWORD dwDirSize);
#ifdef UNICODE
#define CreateUserProfile CreateUserProfileW
#else
#define CreateUserProfile CreateUserProfileA
#endif // !UNICODE
USERENVAPI
BOOL
WINAPI
CreateUserProfileExA(
IN PSID pSid,
IN LPCSTR lpUserName,
IN LPCSTR lpUserHive,
OUT LPSTR lpProfileDir,
IN DWORD dwDirSize,
IN BOOL bWin9xUpg);
USERENVAPI
BOOL
WINAPI
CreateUserProfileExW(
IN PSID pSid,
IN LPCWSTR lpUserName,
IN LPCWSTR lpUserHive,
OUT LPWSTR lpProfileDir,
IN DWORD dwDirSize,
IN BOOL bWin9xUpg);
#ifdef UNICODE
#define CreateUserProfileEx CreateUserProfileExW
#else
#define CreateUserProfileEx CreateUserProfileExA
#endif // !UNICODE
#endif /* WINVER >= 0x0500 */
//=============================================================================
//
// CopyProfileDirectory(Ex)
//
// Multi-threaded user profile coping algorithm.
//
// lpSourceDir - Source directory
// lpDestinationDir - Destination directory
// dwFlags - Flags (defined below)
// ftDelRefTime - Reference time used when deleted extra files
// in a CPD_SYNCHRONIZE operation
// lpExclusionList - List of directories to exclude when copying the
// profile
//
// Returns: TRUE if successful
// FALSE if not.
//
// Notes: When CPD_SYNCHRONIZE is used to copy a profile from one
// location to another, all the files / directories are copied first
// and then extra files in the target directory are deleted. In the
// case of 2 machines using the same roaming profile, it doesn't make
// sense to delete the extra files everytime. If the CPD_USEDELREFTIME
// flag is set, then before deleting a file or directory, the
// time on that file or directory is compared with ftDelRefTime.
// If the time is newer, the file / directory is not deleted because
// it is probably a new file from a different machine. If the
// time is older, the file / directory is deleted.
//
// CopyProfileDirectoryEx can also exclude certain directories
// from the copy. If the CPD_USEEXCLUSIONLIST flag is set and
// lpExclusionList is non-null, the specified directories (and
// their children) will be excuded from the copy. The format
// of this parameter is a semi-colon separated list of directories
// relative to the root of the source profile. For example:
//
// Temporary Internet Files;Temp;Foo\Bar
//
//=============================================================================
//
// Flags for CopyProfileDirectory(Ex)
//
#define CPD_FORCECOPY 0x00000001 // Ignore time stamps and always copy the file
#define CPD_IGNORECOPYERRORS 0x00000002 // Ignore errors and keep going
#define CPD_IGNOREHIVE 0x00000004 // Don't copy registry hive
#define CPD_WIN95HIVE 0x00000008 // Looking for Win 9x registry hive instead of NT registry hive
#define CPD_COPYIFDIFFERENT 0x00000010 // If a file exists in both src and dest with different time stamps, always copy it.
#define CPD_SYNCHRONIZE 0x00000020 // Make dest directory structure indentical to src directory structure (delete extra files and directories)
#define CPD_SLOWCOPY 0x00000040 // Don't use multiple thread. Copy one file at a time.
#define CPD_SHOWSTATUS 0x00000080 // Show progress dialog
#define CPD_CREATETITLE 0x00000100 // Change progress dialog title to Creating... rather than Copying...
#define CPD_COPYHIVEONLY 0x00000200 // Only copy the hive, no other files
#define CPD_USEDELREFTIME 0x00000400 // Use ftDelRefTime parameter in CopyProfileDirectoryEx
#define CPD_USEEXCLUSIONLIST 0x00000800 // Use lpExclusionList parameter in CopyProfileDirectoryEx
#define CPD_SYSTEMFILES 0x00001000 // Only copy files and directories with the system file attribute set
#define CPD_DELDESTEXCLUSIONS 0x00002000 // If a directory that is excluded in the source already exists in the destination, delete it
#define CPD_NONENCRYPTEDONLY 0x00004000 // Copy only non encrypted files
#define CPD_IGNORESECURITY 0x00008000 // Ignore the ACLs etc. on the source files
#define CPD_NOERRORUI 0x00010000 // Do not show the UI if error occurs
#define CPD_SYSTEMDIRSONLY 0x00020000 // Only copy directories with the system file attribute set
#define CPD_IGNOREENCRYPTEDFILES 0x00040000 // Ignore Encrypted files
#define CPD_IGNORELONGFILENAMES 0x00080000 // Ignore files with long file names
#define CPD_USETMPHIVEFILE 0x00100000 // user hive is still loaded
USERENVAPI
BOOL
WINAPI
CopyProfileDirectoryA(
IN LPCSTR lpSourceDir,
IN LPCSTR lpDestinationDir,
IN DWORD dwFlags);
USERENVAPI
BOOL
WINAPI
CopyProfileDirectoryW(
IN LPCWSTR lpSourceDir,
IN LPCWSTR lpDestinationDir,
IN DWORD dwFlags);
#ifdef UNICODE
#define CopyProfileDirectory CopyProfileDirectoryW
#else
#define CopyProfileDirectory CopyProfileDirectoryA
#endif // !UNICODE
USERENVAPI
BOOL
WINAPI
CopyProfileDirectoryExA(
IN LPCSTR lpSourceDir,
IN LPCSTR lpDestinationDir,
IN DWORD dwFlags,
IN LPFILETIME ftDelRefTime,
IN LPCSTR lpExclusionList);
USERENVAPI
BOOL
WINAPI
CopyProfileDirectoryExW(
IN LPCWSTR lpSourceDir,
IN LPCWSTR lpDestinationDir,
IN DWORD dwFlags,
IN LPFILETIME ftDelRefTime,
IN LPCWSTR lpExclusionList);
#ifdef UNICODE
#define CopyProfileDirectoryEx CopyProfileDirectoryExW
#else
#define CopyProfileDirectoryEx CopyProfileDirectoryExA
#endif // !UNICODE
//=============================================================================
//
// MigrateNT4ToNT5
//
// Migrates a user's profile from NT4 to NT5. This function should
// only be called by shmgrate.exe
//
// Returns: TRUE if successful
// FALSE if not.
//
//=============================================================================
#if(WINVER >= 0x0500)
USERENVAPI
BOOL
WINAPI
MigrateNT4ToNT5();
#endif /* WINVER >= 0x0500 */
//=============================================================================
//
// ResetUserSpecialFolderPaths
//
// Sets all of the user special folder paths back to their defaults
//
// Returns: TRUE if successful
// FALSE if not.
//
//=============================================================================
#if(WINVER >= 0x0500)
USERENVAPI
BOOL
WINAPI
ResetUserSpecialFolderPaths();
#endif /* WINVER >= 0x0500 */
//=============================================================================
//
// GetSystemTempDirectory
//
// Gets the system wide temp directory in short form
//
// Returns: TRUE if successful
// FALSE if not.
//
//=============================================================================
USERENVAPI
BOOL
WINAPI
GetSystemTempDirectoryA(
OUT LPSTR lpDir,
IN OUT LPDWORD lpcchSize);
USERENVAPI
BOOL
WINAPI
GetSystemTempDirectoryW(
OUT LPWSTR lpDir,
IN OUT LPDWORD lpcchSize);
#ifdef UNICODE
#define GetSystemTempDirectory GetSystemTempDirectoryW
#else
#define GetSystemTempDirectory GetSystemTempDirectoryA
#endif // !UNICODE
//=============================================================================
//
// ApplySystemPolicy
//
//
// Entry point for Windows NT4 System Policy.
//
// dwFlags - Flags
// hToken - User's token
// hKeyCurrentUser - Registry to the root of the user's hive
// lpUserName - User's name
// lpPolicyPath - Path to the policy file (ntconfig.pol). Can be NULL.
// lpServerName - Domain controller name used for group
// membership look up. Can be NULL.
//
//
// Returns: TRUE if successful
// FALSE if not
//
//=============================================================================
#if(WINVER >= 0x0500)
#define SP_FLAG_APPLY_MACHINE_POLICY 0x00000001
#define SP_FLAG_APPLY_USER_POLICY 0x00000002
USERENVAPI
BOOL
WINAPI
ApplySystemPolicyA(
IN DWORD dwFlags,
IN HANDLE hToken,
IN HKEY hKeyCurrentUser,
IN LPCSTR lpUserName,
IN LPCSTR lpPolicyPath,
IN LPCSTR lpServerName);
USERENVAPI
BOOL
WINAPI
ApplySystemPolicyW(
IN DWORD dwFlags,
IN HANDLE hToken,
IN HKEY hKeyCurrentUser,
IN LPCWSTR lpUserName,
IN LPCWSTR lpPolicyPath,
IN LPCWSTR lpServerName);
#ifdef UNICODE
#define ApplySystemPolicy ApplySystemPolicyW
#else
#define ApplySystemPolicy ApplySystemPolicyA
#endif // !UNICODE
#endif /* WINVER >= 0x0500 */
#if(WINVER >= 0x0500)
//=============================================================================
//
// Data types and data structures for foreground policy refresh info.
//
//=============================================================================
typedef enum _tagFgPolicyRefreshReason
{
GP_ReasonUnknown = 0,
GP_ReasonFirstPolicy,
GP_ReasonCSERequiresSync,
GP_ReasonCSESyncError,
GP_ReasonSyncForced,
GP_ReasonSyncPolicy,
GP_ReasonNonCachedCredentials,
GP_ReasonSKU
} FgPolicyRefreshReason;
typedef enum _tagFgPolicyRefreshMode
{
GP_ModeUnknown = 0,
GP_ModeSyncForeground,
GP_ModeAsyncForeground,
} FgPolicyRefreshMode;
typedef struct _tagFgPolicyRefreshInfo
{
FgPolicyRefreshReason reason;
FgPolicyRefreshMode mode;
} FgPolicyRefreshInfo, *LPFgPolicyRefreshInfo;
//=============================================================================
//
// SetNextFgPolicyRefreshInfo
//
// Sets information about the next foreground policy
//
// szUserSid - user's SID for user's info, 0 for machine info
// info - FgPolicyRefreshInfo structure with the reason and mode info
//
// Returns: WIN32 error code
//
//=============================================================================
USERENVAPI
DWORD
WINAPI
SetNextFgPolicyRefreshInfo( LPWSTR szUserSid,
FgPolicyRefreshInfo info );
//=============================================================================
//
// GetPreviousFgPolicyRefreshInfo
//
// Gets information about the previous foreground policy
//
// szUserSid - user's SID for user's info, 0 for machine info
// pInfo - pointer to the FgPolicyRefreshInfo structure; returns the info
//
// Returns: WIN32 error code
//
//=============================================================================
USERENVAPI
DWORD
WINAPI
GetPreviousFgPolicyRefreshInfo( LPWSTR szUserSid,
FgPolicyRefreshInfo* pInfo );
//=============================================================================
//
// GetNextFgPolicyRefreshInfo
//
// Gets information about the previous foreground policy
//
// szUserSid - user's SID for user's info, 0 for machine info
// pInfo - pointer to the FgPolicyRefreshInfo structure; returns info
//
// Returns: WIN32 error code
//
//=============================================================================
USERENVAPI
DWORD
WINAPI
GetNextFgPolicyRefreshInfo( LPWSTR szUserSid,
FgPolicyRefreshInfo* pInfo );
//=============================================================================
//
// ForceSyncFgPolicy
//
// Forces the next foreground policy to be Synchronous
//
// szUserSid - user's SID for user's info, 0 for machine info
//
// Returns: WIN32 error code
//
//=============================================================================
USERENVAPI
DWORD
WINAPI
ForceSyncFgPolicy( LPWSTR szUserSid );
//=============================================================================
//
// WaitForUserPolicyForegroundProcessing
//
// Blocks the caller until the user foreground policy is finished
//
// Returns: WIN32 error code
//
//=============================================================================
USERENVAPI
DWORD
WINAPI
WaitForUserPolicyForegroundProcessing();
//=============================================================================
//
// WaitForMachinePolicyForegroundProcessing
//
// Blocks the caller until the machine foreground policy is finished
//
// Returns: WIN32 error code
//
//=============================================================================
USERENVAPI
DWORD
WINAPI
WaitForMachinePolicyForegroundProcessing();
//=============================================================================
//
// IsSyncForegroundPolicyRefresh
//
// Called during foreground refresh to determine whether the refresh is sync or
// async
//
// bMachine - user or machine
// hToken - User or machine token
//
// Returns: TRUE if foreground policy should be applied synchronously,
// FALSE otherwise
//
//=============================================================================
USERENVAPI
BOOL
WINAPI
IsSyncForegroundPolicyRefresh( BOOL bMachine,
HANDLE hToken );
#endif /* WINVER >= 0x0500 */
//=============================================================================
//
// ApplyGroupPolicy
//
//
// Entry point for Group Policy. Causes either machine or user
// policy to be applied.
//
// dwFlags - Flags defined below
// hToken - User or machine token
// hEvent - Handle to an event which causes the policy thread to
// terminate when signaled.
// hKeyRoot - Registry to the root of the correspond hive
// eg: HKLM or HKCU for the user that matches hToken
// pStatusCallback - Callback function for displaying status messages
//
//
// Returns: If GP_BACKGROUND_REFRESH is set, a thread handle
// the process can wait until after signaling for policy
// to stop. If GPT_BACKGROUND_REFRESH is not set, the
// return value is 1.
//
// In the case of failure, NULL will be returned.
//
//=============================================================================
#if(WINVER >= 0x0500)
//
// Flags to the ApplyGroupPolicy() function
//
#define GP_MACHINE 0x00000001 // Process for machine (vs user)
#define GP_BACKGROUND_REFRESH 0x00000002 // Use background thread
#define GP_APPLY_DS_POLICY 0x00000004 // Apply policy from the DS also
#define GP_ASYNC_FOREGROUND 0x00000008 // don't wait on network services
//
// Flags set by ApplyGroupPolicy() function (do not pass these in)
//
#define GP_BACKGROUND_THREAD 0x00010000 // Background thread processing
#define GP_REGPOLICY_CPANEL 0x00020000 // Something changed in the CP settings
#define GP_SLOW_LINK 0x00040000 // Slow network connection
#define GP_VERBOSE 0x00080000 // Verbose output to eventlog
#define GP_FORCED_REFRESH 0x00100000 // Forced Refresh
// The 2 bit values were briefly used.
#define GP_PLANMODE 0x00800000 // Planning mode flag
USERENVAPI
HANDLE
WINAPI
ApplyGroupPolicy(
IN DWORD dwFlags,
IN HANDLE hToken,
IN HANDLE hEvent,
IN HKEY hKeyRoot,
IN PFNSTATUSMESSAGECALLBACK pStatusCallback);
//=============================================================================
//
// GenerateRsopPolicy
//
// Generates planning mode Rsop policy for specified target
//
// dwFlags - Processing flags
// bstrMachName - Target computer name
// bstrNewMachSOM - New machine domain or OU
// psaMachSecGroups - New machine security groups
// bstrUserName - Target user name
// psaUserSecGroups - New user security groups
// bstrSite - Site of target computer
// pwszNameSpace - Namespace to write Rsop data
// pProgress - Progress indicator info
// pMachGpoFilter - GPO Filters that pass in machine processing
// pUserGpoFilter - GPO Filters that pass in user processing
//
// Return: True if successful, False otherwise
//
//=============================================================================
USERENVAPI
BOOL
WINAPI
GenerateRsopPolicy(
IN DWORD dwFlags,
IN BSTR bstrMachName,
IN BSTR bstrNewMachSOM,
IN SAFEARRAY *psaMachSecGroups,
IN BSTR bstrUserName,
IN BSTR bstrNewUserSOM,
IN SAFEARRAY *psaUserSecGroups,
IN BSTR bstrSite,
IN WCHAR *pwszNameSpace,
IN LPVOID pProgress,
IN LPVOID pMachGpoFilter,
IN LPVOID pUserGpoFilter);
#endif /* WINVER >= 0x0500 */
//=============================================================================
//
// ShutdownGPOProcessing()
//
// Entry point for aborting GPO processing
//
// bMachine - Shutdown machine or user processing ?
//
// Returns: void
//
//=============================================================================
#if(WINVER >= 0x0500)
USERENVAPI
void
WINAPI
ShutdownGPOProcessing(
IN BOOL bMachine);
#endif /* WINVER >= 0x0500 */
//=============================================================================
//
// PingComputer()
//
// Pings the specified computer
//
// ipaddr - IP address of the computer in unsigned long form
// ulSpeed - Data transfer rate
//
// Notes: For fast connections (eg: LAN), it isn't possible
// to get accurate transfer rates since the response
// time from the computer is less than 10ms. In
// this case, the function returns ERROR_SUCCESS
// and ulSpeed is set to 0. If the function returns
// ERROR_SUCCESS and the ulSpeed argument is non-zero
// the connections is slower
//
// Returns: ERROR_SUCCESS if successful
// Win32 error code if not
//
//=============================================================================
#if(WINVER >= 0x0500)
USERENVAPI
DWORD
WINAPI
PingComputer(
IN ULONG ipaddr,
OUT ULONG *ulSpeed);
#endif /* WINVER >= 0x0500 */
//=============================================================================
//
// InitializeUserProfile()
//
// Called by winlogon to initialize userenv.dll for loading/unloading user
// profiles.
//
// Returns: fvoid
//
//=============================================================================
#if(WINVER >= 0x0500)
USERENVAPI
void
WINAPI
InitializeUserProfile();
#endif /* WINVER >= 0x0500 */
//=============================================================================
//
// EnterUserProfileLock()
//
// Get the user profile synchronization lock for a user
//
// Returns: HRESULT
//
//=============================================================================
#if(WINVER >= 0x0500)
USERENVAPI
DWORD
WINAPI
EnterUserProfileLock(LPTSTR pSid);
#endif /* WINVER >= 0x0500 */
//=============================================================================
//
// LeaveUserProfileLock()
//
// Release the user profile synchronization lock for a user
//
// Returns: HRESULT
//
//=============================================================================
#if(WINVER >= 0x0500)
USERENVAPI
DWORD
WINAPI
LeaveUserProfileLock(LPTSTR pSid);
#endif /* WINVER >= 0x0500 */
//*************************************************************************
//
// SecureUserProfiles()
//
// Routine Description :
// This function secures user profiles during FAT->NTFS conversion.
// The function loops through all profiles registered under current
// OS and sets the security for the corresponding profile directory
// and nested subdirs. Assumption is the function will be called
// only during FAT->NTFS conversion.
//
// Arguments :
// None.
//
// Return Value :
// None.
//
// History: Date Author Comment
// 8/8/00 santanuc Created
//
//*************************************************************************
#if(WINVER >= 0x0500)
USERENVAPI
void
WINAPI
SecureUserProfiles(void);
#endif /* WINVER >= 0x0500 */
//*************************************************************************
//
// CheckAccessForPolicyGeneration()
//
// Routine Description :
// This function checks whether the given user represented by the token
// has access to generate rsop data (planning or logging)
//
// Arguments :
// hToken - Token of the user
// szContainer - Container for which access needs to be checked.
// Should be OU or domain container
// szDomain - Domaindns where the container exists
// bLogging - True if the rsop data is to be genearated for
// logging mode
// pbAccessGranted - Access Granted or not
//
//
// Return Value :
// ERROR_SUCCESS on success. Appropriate error code otherwise
//
//*************************************************************************
#if(WINVER >= 0x0500)
USERENVAPI
DWORD
WINAPI
CheckAccessForPolicyGeneration( HANDLE hToken,
LPCWSTR szContainer,
LPWSTR szDomain,
BOOL bLogging,
BOOL* pbAccessGranted);
#endif /* WINVER >= 0x0500 */
//*************************************************************************
//
// GetGroupPolicyNetworkName()
//
// Routine Description :
// This function returns the name of the network from which policy
// was applied.
//
// Arguments :
// szNetworkName - unicode string buffer representing the network name
// pdwByteCount - size in bytes of the unicode string buffer
//
// Return Value :
// ERROR_SUCCESS if successful, error code otherwise.
//
//*************************************************************************
#if(WINVER >= 0x0500)
USERENVAPI
DWORD
WINAPI
GetGroupPolicyNetworkName( LPWSTR szNetworkName, LPDWORD pdwByteCount );
#endif /* WINVER >= 0x0500 */
//*************************************************************
//
// GetUserAppDataPath()
//
// Purpose: Returns the path for user's Appdata.
//
// Parameters: hToken - User's token
// lpFolderPath - Output buffer
//
// Return: ERROR_SUCCESS if successful
// otherwise the error code
//
// Comments: If error occurs then lpFolderPath set to empty.
// Used by Crypto guys to avoid calling SHGetFolderPath.
//
//*************************************************************
#if(WINVER >= 0x0500)
USERENVAPI
DWORD
WINAPI
GetUserAppDataPathA(
IN HANDLE hToken,
IN BOOL fLocalAppData,
OUT LPSTR lpFolderPath
);
USERENVAPI
DWORD
WINAPI
GetUserAppDataPathW(
IN HANDLE hToken,
IN BOOL fLocalAppData,
OUT LPWSTR lpFolderPath
);
#ifdef UNICODE
#define GetUserAppDataPath GetUserAppDataPathW
#else
#define GetUserAppDataPath GetUserAppDataPathA
#endif // !UNICODE
#endif /* WINVER >= 0x0500 */
//=============================================================================
//
// GetUserProfileDirFromSid
//
// Returns the path to the root of the requested user's profile
//
// pSid - User's SID returned from LookupAccountName()
// lpProfileDir - Receives the path
// lpcchSize - Size of lpProfileDir
//
// Returns: TRUE if successful
// FALSE if not. Call GetLastError() for more details
//
// Note: If lpProfileDir is not large enough, the function will fail,
// and lpcchSize will contain the necessary buffer size.
//
// Example return value: C:\Documents and Settings\Joe
//
//=============================================================================
#if(WINVER >= 0x0500)
USERENVAPI
BOOL
WINAPI
GetUserProfileDirFromSidA(
IN PSID pSid,
OUT LPSTR lpProfileDir,
IN OUT LPDWORD lpcchSize);
USERENVAPI
BOOL
WINAPI
GetUserProfileDirFromSidW(
IN PSID pSid,
OUT LPWSTR lpProfileDir,
IN OUT LPDWORD lpcchSize);
#ifdef UNICODE
#define GetUserProfileDirFromSid GetUserProfileDirFromSidW
#else
#define GetUserProfileDirFromSid GetUserProfileDirFromSidA
#endif // !UNICODE
#endif /* WINVER >= 0x0500 */
//=============================================================================
//
// CheckXForestLogon()
//
// Purpose: Check if the user is logged on to a different forest, if yes, we
// should disable roaming user profile for the user because of
// protential security risks. Administrator can set a policy
// "AllowX-ForestPolicy-and-RUP" to disable this check.
//
// Parameters:
// hTokenUser - user's token
//
// Return: S_OK on not x-forest logon, S_FALSE on x-forest logon,
// else for failure
//
// Comments:
//
// History: Date Author Comment
// 05/08/2002 mingzhu Created
//
//=============================================================================
#if(WINVER >= 0x0500)
USERENVAPI
HRESULT
WINAPI
CheckXForestLogon(IN HANDLE hTokenUser);
#endif /* WINVER >= 0x0500 */
#ifdef __cplusplus
}
#endif
#endif // _INC_USERENVP