Headers diff for userenv.dll between 6.0.6002.18005-Windows 6.0 and 6.1.7601.17514-Windows 7.0 versions



 userenv.h (6.0.6002.18005-Windows 6.0)   userenv.h (6.1.7601.17514-Windows 7.0) 
skipping to change at line 15 skipping to change at line 15
// //
// Copyright (c) Microsoft Corporation 1995-2002 // Copyright (c) Microsoft Corporation 1995-2002
// All rights reserved // All rights reserved
// //
//============================================================================= //=============================================================================
#ifndef _INC_USERENV #ifndef _INC_USERENV
#define _INC_USERENV #define _INC_USERENV
#include <wbemcli.h> #include <wbemcli.h>
#include <profinfo.h>
// //
// Define API decoration for direct importing of DLL references. // Define API decoration for direct importing of DLL references.
// //
#if !defined(_USERENV_) #if !defined(_USERENV_)
#define USERENVAPI DECLSPEC_IMPORT #define USERENVAPI DECLSPEC_IMPORT
#else #else
#define USERENVAPI #define USERENVAPI
#endif #endif
skipping to change at line 59 skipping to change at line 58
// Upon successful return, the hProfile member of the PROFILEINFO // Upon successful return, the hProfile member of the PROFILEINFO
// structure is a registry key handle opened to the root // structure is a registry key handle opened to the root
// of the user's hive. It has been opened with full access. If // of the user's hive. It has been opened with full access. If
// you need to read or write to the user's registry file, use // you need to read or write to the user's registry file, use
// this key instead of HKEY_CURRENT_USER. Do not close this // this key instead of HKEY_CURRENT_USER. Do not close this
// handle. Instead pass it to UnloadUserProfile to close // handle. Instead pass it to UnloadUserProfile to close
// the handle. // the handle.
// //
//============================================================================= //=============================================================================
// #include <profinfo.h>
// Flags that can be set in the dwFlags field
//
#define PI_NOUI 0x00000001 // Prevents displaying of messages #define PI_NOUI 0x00000001 // Prevents displaying of messages
#define PI_APPLYPOLICY 0x00000002 // Apply NT4 style policy #define PI_APPLYPOLICY 0x00000002 // Apply NT4 style policy
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
LoadUserProfileA( LoadUserProfileA(
IN HANDLE hToken, __in HANDLE hToken,
IN OUT LPPROFILEINFOA lpProfileInfo); __inout LPPROFILEINFOA lpProfileInfo);
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
LoadUserProfileW( LoadUserProfileW(
IN HANDLE hToken, __in HANDLE hToken,
IN OUT LPPROFILEINFOW lpProfileInfo); __inout LPPROFILEINFOW lpProfileInfo);
#ifdef UNICODE #ifdef UNICODE
#define LoadUserProfile LoadUserProfileW #define LoadUserProfile LoadUserProfileW
#else #else
#define LoadUserProfile LoadUserProfileA #define LoadUserProfile LoadUserProfileA
#endif // !UNICODE #endif // !UNICODE
//============================================================================= //=============================================================================
// //
// UnloadUserProfile // UnloadUserProfile
// //
skipping to change at line 104 skipping to change at line 101
// FALSE if not. Call GetLastError() for more details // FALSE if not. Call GetLastError() for more details
// //
// Note: The caller of this function must have admin privileges on the machi ne. // Note: The caller of this function must have admin privileges on the machi ne.
// //
//============================================================================= //=============================================================================
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
UnloadUserProfile( UnloadUserProfile(
IN HANDLE hToken, __in HANDLE hToken,
IN HANDLE hProfile); __in HANDLE hProfile);
//============================================================================= //=============================================================================
// //
// GetProfilesDirectory // GetProfilesDirectory
// //
// Returns the path to the root of where all user profiles are stored. // Returns the path to the root of where all user profiles are stored.
// //
// lpProfilesDir - Receives the path // lpProfilesDir - Receives the path
// lpcchSize - Size of lpProfilesDir // lpcchSize - Size of lpProfilesDir
// //
// Returns: TRUE if successful // Returns: TRUE if successful
// FALSE if not. Call GetLastError() for more details // FALSE if not. Call GetLastError() for more details
// //
// Note: If lpProfilesDir is not large enough, the function will fail, // Note: If lpProfilesDir is not large enough or NULL, the function will fai l,
// and lpcchSize will contain the necessary buffer size. // and lpcchSize will contain the necessary buffer size.
// //
// Example return value: C:\Documents and Settings // Example return value: C:\Users
// //
//============================================================================= //=============================================================================
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
GetProfilesDirectoryA( GetProfilesDirectoryA(
OUT LPSTR lpProfilesDir, __out_ecount_opt(*lpcchSize) LPSTR lpProfileDir,
IN OUT LPDWORD lpcchSize); __inout LPDWORD lpcchSize);
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
GetProfilesDirectoryW( GetProfilesDirectoryW(
OUT LPWSTR lpProfilesDir, __out_ecount_opt(*lpcchSize) LPWSTR lpProfileDir,
IN OUT LPDWORD lpcchSize); __inout LPDWORD lpcchSize);
#ifdef UNICODE #ifdef UNICODE
#define GetProfilesDirectory GetProfilesDirectoryW #define GetProfilesDirectory GetProfilesDirectoryW
#else #else
#define GetProfilesDirectory GetProfilesDirectoryA #define GetProfilesDirectory GetProfilesDirectoryA
#endif // !UNICODE #endif // !UNICODE
//============================================================================= //=============================================================================
// //
// GetProfileType() // GetProfileType()
// //
skipping to change at line 175 skipping to change at line 172
// //
#define PT_TEMPORARY 0x00000001 // A profile has been allocated tha t will be deleted at logoff. #define PT_TEMPORARY 0x00000001 // A profile has been allocated tha t will be deleted at logoff.
#define PT_ROAMING 0x00000002 // The loaded profile is a roaming profile. #define PT_ROAMING 0x00000002 // The loaded profile is a roaming profile.
#define PT_MANDATORY 0x00000004 // The loaded profile is mandatory. #define PT_MANDATORY 0x00000004 // The loaded profile is mandatory.
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
GetProfileType( GetProfileType(
OUT DWORD *dwFlags); __out DWORD *dwFlags);
#endif /* WINVER >= 0x0500 */ #endif /* WINVER >= 0x0500 */
//============================================================================= //=============================================================================
// //
// DeleteProfile() // DeleteProfile()
// //
// Deletes the profile and all other user related settings from the machine // Deletes the profile and all other user related settings from the machine
// //
// lpSidString - String form of the user sid. // lpSidString - String form of the user sid.
skipping to change at line 201 skipping to change at line 198
// //
// Comments: Deletes the profile directory, registry and appmgmt stuff // Comments: Deletes the profile directory, registry and appmgmt stuff
//============================================================================= //=============================================================================
#if(WINVER >= 0x0500) #if(WINVER >= 0x0500)
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
DeleteProfileA ( DeleteProfileA (
IN LPCSTR lpSidString, __in LPCSTR lpSidString,
IN LPCSTR lpProfilePath, __in_opt LPCSTR lpProfilePath,
IN LPCSTR lpComputerName); __in_opt LPCSTR lpComputerName);
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
DeleteProfileW ( DeleteProfileW (
IN LPCWSTR lpSidString, __in LPCWSTR lpSidString,
IN LPCWSTR lpProfilePath, __in_opt LPCWSTR lpProfilePath,
IN LPCWSTR lpComputerName); __in_opt LPCWSTR lpComputerName);
#ifdef UNICODE #ifdef UNICODE
#define DeleteProfile DeleteProfileW #define DeleteProfile DeleteProfileW
#else #else
#define DeleteProfile DeleteProfileA #define DeleteProfile DeleteProfileA
#endif // !UNICODE #endif // !UNICODE
#endif /* WINVER >= 0x0500 */ #endif /* WINVER >= 0x0500 */
//============================================================================= //=============================================================================
// //
skipping to change at line 247 skipping to change at line 244
// Others : Standard HRESULT error codes. // Others : Standard HRESULT error codes.
// //
// Comments: // Comments:
//============================================================================= //=============================================================================
#if(WINVER >= 0x0600) #if(WINVER >= 0x0600)
USERENVAPI USERENVAPI
HRESULT HRESULT
WINAPI WINAPI
CreateProfile(LPCWSTR pszUserSid, CreateProfile(
LPCWSTR pszUserName, __in LPCWSTR pszUserSid,
__out_ecount(cchProfilePath) LPWSTR pszProfilePath, __in LPCWSTR pszUserName,
DWORD cchProfilePath); __out_ecount(cchProfilePath) LPWSTR pszProfilePath,
__in DWORD cchProfilePath);
#endif /* WINVER >= 0x0600 */ #endif /* WINVER >= 0x0600 */
//============================================================================= //=============================================================================
// //
// GetDefaultUserProfilesDirectory // GetDefaultUserProfilesDirectory
// //
// Returns the path to the root of the default user profile // Returns the path to the root of the default user profile
// //
// lpProfileDir - Receives the path // lpProfileDir - Receives the path
// lpcchSize - Size of lpProfileDir // lpcchSize - Size of lpProfileDir
// //
// Returns: TRUE if successful // Returns: TRUE if successful
// FALSE if not. Call GetLastError() for more details // FALSE if not. Call GetLastError() for more details
// //
// Note: If lpProfileDir is not large enough, the function will fail, // Note: If lpProfileDir is not large enough or NULL, the function will fail ,
// and lpcchSize will contain the necessary buffer size. // and lpcchSize will contain the necessary buffer size.
// //
// Example return value: C:\Documents and Settings\Default User // Example return value: C:\Users\Default
// //
//============================================================================= //=============================================================================
#if(WINVER >= 0x0500) #if(WINVER >= 0x0500)
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
GetDefaultUserProfileDirectoryA( GetDefaultUserProfileDirectoryA(
OUT LPSTR lpProfileDir, __out_ecount_opt(*lpcchSize) LPSTR lpProfileDir,
IN OUT LPDWORD lpcchSize); __inout LPDWORD lpcchSize);
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
GetDefaultUserProfileDirectoryW( GetDefaultUserProfileDirectoryW(
OUT LPWSTR lpProfileDir, __out_ecount_opt(*lpcchSize) LPWSTR lpProfileDir,
IN OUT LPDWORD lpcchSize); __inout LPDWORD lpcchSize);
#ifdef UNICODE #ifdef UNICODE
#define GetDefaultUserProfileDirectory GetDefaultUserProfileDirectoryW #define GetDefaultUserProfileDirectory GetDefaultUserProfileDirectoryW
#else #else
#define GetDefaultUserProfileDirectory GetDefaultUserProfileDirectoryA #define GetDefaultUserProfileDirectory GetDefaultUserProfileDirectoryA
#endif // !UNICODE #endif // !UNICODE
#endif /* WINVER >= 0x0500 */ #endif /* WINVER >= 0x0500 */
//============================================================================= //=============================================================================
// //
// GetAllUsersProfilesDirectory // GetAllUsersProfilesDirectory
// //
// Returns the path to the root of the All Users profile // Returns the path to the root of the All Users profile
// //
// lpProfileDir - Receives the path // lpProfileDir - Receives the path
// lpcchSize - Size of lpProfileDir // lpcchSize - Size of lpProfileDir
// //
// Returns: TRUE if successful // Returns: TRUE if successful
// FALSE if not. Call GetLastError() for more details // FALSE if not. Call GetLastError() for more details
// //
// Note: If lpProfileDir is not large enough, the function will fail, // Note: If lpProfileDir is not large enough or NULL, the function will fail ,
// and lpcchSize will contain the necessary buffer size. // and lpcchSize will contain the necessary buffer size.
// //
// Example return value: C:\Documents and Settings\All Users // Example return value: C:\Program Data
// //
//============================================================================= //=============================================================================
#if(WINVER >= 0x0500) #if(WINVER >= 0x0500)
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
GetAllUsersProfileDirectoryA( GetAllUsersProfileDirectoryA(
OUT LPSTR lpProfileDir, __out_ecount_opt(*lpcchSize) LPSTR lpProfileDir,
IN OUT LPDWORD lpcchSize); __inout LPDWORD lpcchSize);
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
GetAllUsersProfileDirectoryW( GetAllUsersProfileDirectoryW(
OUT LPWSTR lpProfileDir, __out_ecount_opt(*lpcchSize) LPWSTR lpProfileDir,
IN OUT LPDWORD lpcchSize); __inout LPDWORD lpcchSize);
#ifdef UNICODE #ifdef UNICODE
#define GetAllUsersProfileDirectory GetAllUsersProfileDirectoryW #define GetAllUsersProfileDirectory GetAllUsersProfileDirectoryW
#else #else
#define GetAllUsersProfileDirectory GetAllUsersProfileDirectoryA #define GetAllUsersProfileDirectory GetAllUsersProfileDirectoryA
#endif // !UNICODE #endif // !UNICODE
#endif /* WINVER >= 0x0500 */ #endif /* WINVER >= 0x0500 */
//============================================================================= //=============================================================================
// //
skipping to change at line 349 skipping to change at line 347
// //
// Returns the path to the root of the requested user's profile // Returns the path to the root of the requested user's profile
// //
// hToken - User's token returned from LogonUser() // hToken - User's token returned from LogonUser()
// lpProfileDir - Receives the path // lpProfileDir - Receives the path
// lpcchSize - Size of lpProfileDir // lpcchSize - Size of lpProfileDir
// //
// Returns: TRUE if successful // Returns: TRUE if successful
// FALSE if not. Call GetLastError() for more details // FALSE if not. Call GetLastError() for more details
// //
// Note: If lpProfileDir is not large enough, the function will fail, // Note: If lpProfileDir is not large enough or NULL, the function will fail ,
// and lpcchSize will contain the necessary buffer size. // and lpcchSize will contain the necessary buffer size.
// //
// Example return value: C:\Documents and Settings\Joe // Example return value: C:\Users\Joe
// //
//============================================================================= //=============================================================================
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
GetUserProfileDirectoryA( GetUserProfileDirectoryA(
IN HANDLE hToken, __in HANDLE hToken,
OUT LPSTR lpProfileDir, __out_ecount_opt(*lpcchSize) LPSTR lpProfileDir,
IN OUT LPDWORD lpcchSize); __inout LPDWORD lpcchSize);
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
GetUserProfileDirectoryW( GetUserProfileDirectoryW(
IN HANDLE hToken, __in HANDLE hToken,
OUT LPWSTR lpProfileDir, __out_ecount_opt(*lpcchSize) LPWSTR lpProfileDir,
IN OUT LPDWORD lpcchSize); __inout LPDWORD lpcchSize);
#ifdef UNICODE #ifdef UNICODE
#define GetUserProfileDirectory GetUserProfileDirectoryW #define GetUserProfileDirectory GetUserProfileDirectoryW
#else #else
#define GetUserProfileDirectory GetUserProfileDirectoryA #define GetUserProfileDirectory GetUserProfileDirectoryA
#endif // !UNICODE #endif // !UNICODE
//============================================================================= //=============================================================================
// //
// CreateEnvironmentBlock // CreateEnvironmentBlock
// //
skipping to change at line 401 skipping to change at line 399
// Note: If hToken is NULL, the returned environment block will contain // Note: If hToken is NULL, the returned environment block will contain
// system variables only. // system variables only.
// //
// Call DestroyEnvironmentBlock to free the buffer when finished. // Call DestroyEnvironmentBlock to free the buffer when finished.
// //
// If this block is passed to CreateProcessAsUser, the // If this block is passed to CreateProcessAsUser, the
// CREATE_UNICODE_ENVIRONMENT flag must also be set. // CREATE_UNICODE_ENVIRONMENT flag must also be set.
// //
//============================================================================= //=============================================================================
USERENVAPI
BOOL BOOL
WINAPI WINAPI
CreateEnvironmentBlock( CreateEnvironmentBlock(
OUT LPVOID *lpEnvironment, __out LPVOID *lpEnvironment,
IN HANDLE hToken, __in_opt HANDLE hToken,
IN BOOL bInherit); __in BOOL bInherit);
//============================================================================= //=============================================================================
// //
// DestroyEnvironmentBlock // DestroyEnvironmentBlock
// //
// Frees environment variables created by CreateEnvironmentBlock // Frees environment variables created by CreateEnvironmentBlock
// //
// lpEnvironment - A pointer to the environment block // lpEnvironment - A pointer to the environment block
// //
// Returns: TRUE if successful // Returns: TRUE if successful
// FALSE if not. Call GetLastError() for more details // FALSE if not. Call GetLastError() for more details
// //
//============================================================================= //=============================================================================
USERENVAPI
BOOL BOOL
WINAPI WINAPI
DestroyEnvironmentBlock( DestroyEnvironmentBlock(
IN LPVOID lpEnvironment); __in LPVOID lpEnvironment);
//============================================================================= //=============================================================================
// //
// ExpandEnvironmentStringsForUser // ExpandEnvironmentStringsForUser
// //
// Expands the source string using the environment block for the // Expands the source string using the environment block for the
// specified user. If hToken is null, the system environment block // specified user. If hToken is null, the system environment block
// will be used (no user environment variables). // will be used (no user environment variables).
// //
// hToken - User's token returned from LogonUser() (optional, can be NU LL) // hToken - User's token returned from LogonUser() (optional, can be NU LL)
skipping to change at line 454 skipping to change at line 450
// Note: If the user profile for hToken is not loaded, this api will fail. // Note: If the user profile for hToken is not loaded, this api will fail.
// //
//============================================================================= //=============================================================================
#if(WINVER >= 0x0500) #if(WINVER >= 0x0500)
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
ExpandEnvironmentStringsForUserA( ExpandEnvironmentStringsForUserA(
IN HANDLE hToken, __in_opt HANDLE hToken,
IN LPCSTR lpSrc, __in LPCSTR lpSrc,
OUT LPSTR lpDest, __out_ecount(dwSize) LPSTR lpDest,
IN DWORD dwSize); __in DWORD dwSize);
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
ExpandEnvironmentStringsForUserW( ExpandEnvironmentStringsForUserW(
IN HANDLE hToken, __in_opt HANDLE hToken,
IN LPCWSTR lpSrc, __in LPCWSTR lpSrc,
OUT LPWSTR lpDest, __out_ecount(dwSize) LPWSTR lpDest,
IN DWORD dwSize); __in DWORD dwSize);
#ifdef UNICODE #ifdef UNICODE
#define ExpandEnvironmentStringsForUser ExpandEnvironmentStringsForUserW #define ExpandEnvironmentStringsForUser ExpandEnvironmentStringsForUserW
#else #else
#define ExpandEnvironmentStringsForUser ExpandEnvironmentStringsForUserA #define ExpandEnvironmentStringsForUser ExpandEnvironmentStringsForUserA
#endif // !UNICODE #endif // !UNICODE
#endif /* WINVER >= 0x0500 */ #endif /* WINVER >= 0x0500 */
//============================================================================= //=============================================================================
// //
skipping to change at line 493 skipping to change at line 489
// FALSE if not. Call GetLastError() for more details // FALSE if not. Call GetLastError() for more details
// //
//============================================================================= //=============================================================================
#if(WINVER >= 0x0500) #if(WINVER >= 0x0500)
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
RefreshPolicy( RefreshPolicy(
IN BOOL bMachine); __in BOOL bMachine);
#endif /* WINVER >= 0x0500 */ #endif /* WINVER >= 0x0500 */
//============================================================================= //=============================================================================
// //
// RefreshPolicyEx() // RefreshPolicyEx()
// //
// Causes group policy to be applied immediately on the client machine. // Causes group policy to be applied immediately on the client machine.
// //
// bMachine - Refresh machine or user policy // bMachine - Refresh machine or user policy
skipping to change at line 520 skipping to change at line 516
#if(WINVER >= 0x0500) #if(WINVER >= 0x0500)
#define RP_FORCE 1 // Refresh policies without any optimisations . #define RP_FORCE 1 // Refresh policies without any optimisations .
#define RP_SYNC 2 // Refresh Policy sync; the call does not ret urn till the time policy processing is completed #define RP_SYNC 2 // Refresh Policy sync; the call does not ret urn till the time policy processing is completed
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
RefreshPolicyEx( RefreshPolicyEx(
IN BOOL bMachine, IN DWORD dwOptions); __in BOOL bMachine,
__in DWORD dwOptions);
#endif /* WINVER >= 0x0500 */ #endif /* WINVER >= 0x0500 */
//============================================================================= //=============================================================================
// //
// EnterCriticalPolicySection // EnterCriticalPolicySection
// //
// Pauses the background application of group policy to allow safe // Pauses the background application of group policy to allow safe
// reading of the registry. Applications that need to read multiple // reading of the registry. Applications that need to read multiple
// policy entries and ensure that the values are not changed while reading // policy entries and ensure that the values are not changed while reading
skipping to change at line 557 skipping to change at line 554
// then acquire machine critical section. // then acquire machine critical section.
// //
//============================================================================= //=============================================================================
#if(WINVER >= 0x0500) #if(WINVER >= 0x0500)
USERENVAPI USERENVAPI
HANDLE HANDLE
WINAPI WINAPI
EnterCriticalPolicySection( EnterCriticalPolicySection(
IN BOOL bMachine); __in BOOL bMachine);
#endif /* WINVER >= 0x0500 */ #endif /* WINVER >= 0x0500 */
//============================================================================= //=============================================================================
// //
// LeaveCriticalPolicySection // LeaveCriticalPolicySection
// //
// Resumes the background application of group policy. See // Resumes the background application of group policy. See
// EnterCriticalPolicySection for more details. // EnterCriticalPolicySection for more details.
// //
skipping to change at line 583 skipping to change at line 580
// Note: This function will close the handle. // Note: This function will close the handle.
// //
//============================================================================= //=============================================================================
#if(WINVER >= 0x0500) #if(WINVER >= 0x0500)
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
LeaveCriticalPolicySection( LeaveCriticalPolicySection(
IN HANDLE hSection); __in HANDLE hSection);
#endif /* WINVER >= 0x0500 */ #endif /* WINVER >= 0x0500 */
//============================================================================= //=============================================================================
// //
// RegisterGPNotification // RegisterGPNotification
// //
// Entry point for registering for Group Policy change notification. // Entry point for registering for Group Policy change notification.
// //
// Parameters: hEvent - Event to be notified, by calling SetEvent(hEvent) // Parameters: hEvent - Event to be notified, by calling SetEvent(hEvent)
skipping to change at line 618 skipping to change at line 615
// lParam - Points to the string "Policy" // lParam - Points to the string "Policy"
// //
//============================================================================= //=============================================================================
#if(WINVER >= 0x0500) #if(WINVER >= 0x0500)
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
RegisterGPNotification( RegisterGPNotification(
IN HANDLE hEvent, __in HANDLE hEvent,
IN BOOL bMachine ); __in BOOL bMachine);
#endif /* WINVER >= 0x0500 */ #endif /* WINVER >= 0x0500 */
//============================================================================= //=============================================================================
// //
// UnregisterGPNotification // UnregisterGPNotification
// //
// Removes registration for a Group Policy change notification. // Removes registration for a Group Policy change notification.
// //
// Parameters: hEvent - Event to be removed // Parameters: hEvent - Event to be removed
skipping to change at line 642 skipping to change at line 639
// False if error occurs // False if error occurs
// //
//============================================================================= //=============================================================================
#if(WINVER >= 0x0500) #if(WINVER >= 0x0500)
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
UnregisterGPNotification( UnregisterGPNotification(
IN HANDLE hEvent ); __in HANDLE hEvent);
#endif /* WINVER >= 0x0500 */ #endif /* WINVER >= 0x0500 */
//============================================================================= //=============================================================================
// //
// GPOptions flags // GPOptions flags
// //
// These are the flags found in the GPOptions property of a DS object // These are the flags found in the GPOptions property of a DS object
// //
// For a given DS object (Site, Domain, OU), the GPOptions property // For a given DS object (Site, Domain, OU), the GPOptions property
skipping to change at line 829 skipping to change at line 826
#define GPO_LIST_FLAG_MACHINE 0x00000001 // Return machine policy inform ation #define GPO_LIST_FLAG_MACHINE 0x00000001 // Return machine policy inform ation
#define GPO_LIST_FLAG_SITEONLY 0x00000002 // Return site policy informati on only #define GPO_LIST_FLAG_SITEONLY 0x00000002 // Return site policy informati on only
#define GPO_LIST_FLAG_NO_WMIFILTERS 0x00000004 // Ignore WMI filters when filt ering GPO's #define GPO_LIST_FLAG_NO_WMIFILTERS 0x00000004 // Ignore WMI filters when filt ering GPO's
#define GPO_LIST_FLAG_NO_SECURITYFILTERS 0x00000008 // Ignore security filters #define GPO_LIST_FLAG_NO_SECURITYFILTERS 0x00000008 // Ignore security filters
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
GetGPOListA ( GetGPOListA (
IN HANDLE hToken, __in_opt HANDLE hToken,
IN LPCSTR lpName, __in_opt LPCSTR lpName,
IN LPCSTR lpHostName, __in_opt LPCSTR lpHostName,
IN LPCSTR lpComputerName, __in_opt LPCSTR lpComputerName,
IN DWORD dwFlags, __in DWORD dwFlags,
OUT PGROUP_POLICY_OBJECTA *pGPOList); __deref_out PGROUP_POLICY_OBJECTA * pGPOList);
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
GetGPOListW ( GetGPOListW (
IN HANDLE hToken, __in_opt HANDLE hToken,
IN LPCWSTR lpName, __in_opt LPCWSTR lpName,
IN LPCWSTR lpHostName, __in_opt LPCWSTR lpHostName,
IN LPCWSTR lpComputerName, __in_opt LPCWSTR lpComputerName,
IN DWORD dwFlags, __in DWORD dwFlags,
OUT PGROUP_POLICY_OBJECTW *pGPOList); __deref_out PGROUP_POLICY_OBJECTW * pGPOList);
#ifdef UNICODE #ifdef UNICODE
#define GetGPOList GetGPOListW #define GetGPOList GetGPOListW
#else #else
#define GetGPOList GetGPOListA #define GetGPOList GetGPOListA
#endif // !UNICODE #endif // !UNICODE
#endif /* WINVER >= 0x0500 */ #endif /* WINVER >= 0x0500 */
//============================================================================= //=============================================================================
// //
skipping to change at line 874 skipping to change at line 871
// FALSE if not // FALSE if not
// //
//============================================================================= //=============================================================================
#if(WINVER >= 0x0500) #if(WINVER >= 0x0500)
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
FreeGPOListA ( FreeGPOListA (
IN PGROUP_POLICY_OBJECTA pGPOList); __in PGROUP_POLICY_OBJECTA pGPOList);
USERENVAPI USERENVAPI
BOOL BOOL
WINAPI WINAPI
FreeGPOListW ( FreeGPOListW (
IN PGROUP_POLICY_OBJECTW pGPOList); __in PGROUP_POLICY_OBJECTW pGPOList);
#ifdef UNICODE #ifdef UNICODE
#define FreeGPOList FreeGPOListW #define FreeGPOList FreeGPOListW
#else #else
#define FreeGPOList FreeGPOListA #define FreeGPOList FreeGPOListA
#endif // !UNICODE #endif // !UNICODE
#endif /* WINVER >= 0x0500 */ #endif /* WINVER >= 0x0500 */
//============================================================================= //=============================================================================
// //
skipping to change at line 920 skipping to change at line 917
// function completed successfully. Otherwise it indicates that the function fai led. // function completed successfully. Otherwise it indicates that the function fai led.
// //
//============================================================================= //=============================================================================
#if(WINVER >= 0x0500) #if(WINVER >= 0x0500)
USERENVAPI USERENVAPI
DWORD DWORD
WINAPI WINAPI
GetAppliedGPOListA ( GetAppliedGPOListA (
IN DWORD dwFlags, __in DWORD dwFlags,
IN LPCSTR pMachineName, __in_opt LPCSTR pMachineName,
IN PSID pSidUser, __in_opt PSID pSidUser,
IN GUID *pGuidExtension, __in GUID *pGuidExtension,
OUT PGROUP_POLICY_OBJECTA *ppGPOList); __deref_out PGROUP_POLICY_OBJECTA *ppGPOList);
USERENVAPI USERENVAPI
DWORD DWORD
WINAPI WINAPI
GetAppliedGPOListW ( GetAppliedGPOListW (
IN DWORD dwFlags, __in DWORD dwFlags,
IN LPCWSTR pMachineName, __in_opt LPCWSTR pMachineName,
IN PSID pSidUser, __in_opt PSID pSidUser,
IN GUID *pGuidExtension, __in GUID *pGuidExtension,
OUT PGROUP_POLICY_OBJECTW *ppGPOList); __deref_out PGROUP_POLICY_OBJECTW *ppGPOList);
#ifdef UNICODE #ifdef UNICODE
#define GetAppliedGPOList GetAppliedGPOListW #define GetAppliedGPOList GetAppliedGPOListW
#else #else
#define GetAppliedGPOList GetAppliedGPOListA #define GetAppliedGPOList GetAppliedGPOListA
#endif // !UNICODE #endif // !UNICODE
#endif /* WINVER >= 0x0500 */ #endif /* WINVER >= 0x0500 */
//============================================================================= //=============================================================================
// //
skipping to change at line 1017 skipping to change at line 1014
#define GPO_INFO_FLAG_NOCHANGES 0x00000080 // No changes were detect ed to the Group Policy Objects #define GPO_INFO_FLAG_NOCHANGES 0x00000080 // No changes were detect ed to the Group Policy Objects
#define GPO_INFO_FLAG_LINKTRANSITION 0x00000100 // A change in link speed was detected between previous policy #define GPO_INFO_FLAG_LINKTRANSITION 0x00000100 // A change in link speed was detected between previous policy
// application and curren t policy application // application and curren t policy application
#define GPO_INFO_FLAG_LOGRSOP_TRANSITION 0x00000200 // A Change in Rsop Loggi ng was detected between previous policy #define GPO_INFO_FLAG_LOGRSOP_TRANSITION 0x00000200 // A Change in Rsop Loggi ng was detected between previous policy
// application and curren t policy application, (new intf only) // application and curren t policy application, (new intf only)
#define GPO_INFO_FLAG_FORCED_REFRESH 0x00000400 // Forced Refresh is bein g applied. redo policies. #define GPO_INFO_FLAG_FORCED_REFRESH 0x00000400 // Forced Refresh is bein g applied. redo policies.
#define GPO_INFO_FLAG_SAFEMODE_BOOT 0x00000800 // windows safe mode boot flag #define GPO_INFO_FLAG_SAFEMODE_BOOT 0x00000800 // windows safe mode boot flag
#define GPO_INFO_FLAG_ASYNC_FOREGROUND 0x00001000 // Asynchronous foregroun d refresh of policy #define GPO_INFO_FLAG_ASYNC_FOREGROUND 0x00001000 // Asynchronous foregroun d refresh of policy
typedef UINT_PTR ASYNCCOMPLETIONHANDLE; typedef UINT_PTR ASYNCCOMPLETIONHANDLE;
typedef DWORD (*PFNSTATUSMESSAGECALLBACK)(BOOL bVerbose, LPWSTR lpMessage); typedef DWORD (*PFNSTATUSMESSAGECALLBACK)(__in BOOL bVerbose, __in LPWSTR lpMess age);
typedef DWORD(*PFNPROCESSGROUPPOLICY)( typedef DWORD(*PFNPROCESSGROUPPOLICY)(
IN DWORD dwFlags, // GPO_INFO_FLAGS __in DWORD dwFlags, // GPO_INFO_FLAGS
IN HANDLE hToken, // User or machine token __in HANDLE hToken, // User or machine token
IN HKEY hKeyRoot, // Root of registry __in HKEY hKeyRoot, // Root of registry
IN PGROUP_POLICY_OBJECT pDeletedGPOList, // Linked list of deleted GPO __in PGROUP_POLICY_OBJECT pDeletedGPOList, // Linked list of deleted G
s POs
IN PGROUP_POLICY_OBJECT pChangedGPOList, // Linked list of changed GPO __in PGROUP_POLICY_OBJECT pChangedGPOList, // Linked list of changed G
s POs
IN ASYNCCOMPLETIONHANDLE pHandle, // For asynchronous completio __in ASYNCCOMPLETIONHANDLE pHandle, // For asynchronous complet
n ion
IN BOOL *pbAbort, // If true, then abort GPO pr __inout BOOL *pbAbort, // If true, then abort GPO
ocessing processing
IN PFNSTATUSMESSAGECALLBACK pStatusCallback); // Callback function for disp __in_opt PFNSTATUSMESSAGECALLBACK pStatusCallback); // Callback function fo
laying status messages r displaying status messages
// Note, this can be NULL // Note, this can be NULL
typedef DWORD(*PFNPROCESSGROUPPOLICYEX)( typedef DWORD(*PFNPROCESSGROUPPOLICYEX)(
IN DWORD dwFlags, // GPO_INFO_FLAGS __in DWORD dwFlags, // GPO_INFO_FLAGS
IN HANDLE hToken, // User or machine token __in HANDLE hToken, // User or machine token
IN HKEY hKeyRoot, // Root of registry __in HKEY hKeyRoot, // Root of registry
IN PGROUP_POLICY_OBJECT pDeletedGPOList, // Linked list of deleted GPO __in PGROUP_POLICY_OBJECT pDeletedGPOList, // Linked list of deleted G
s POs
IN PGROUP_POLICY_OBJECT pChangedGPOList, // Linked list of changed GPO __in PGROUP_POLICY_OBJECT pChangedGPOList, // Linked list of changed G
s POs
IN ASYNCCOMPLETIONHANDLE pHandle, // For asynchronous completio __in ASYNCCOMPLETIONHANDLE pHandle, // For asynchronous complet
n ion
IN BOOL *pbAbort, // If true, then abort GPO pr __inout BOOL *pbAbort, // If true, then abort GPO
ocessing processing
IN PFNSTATUSMESSAGECALLBACK pStatusCallback, // Callback function for disp __in_opt PFNSTATUSMESSAGECALLBACK pStatusCallback, // Callback function fo
laying status messages r displaying status messages
// Note, this can be NULL // Note, this can be NULL
IN IWbemServices *pWbemServices, // Pointer to namespace to lo __in_opt IWbemServices *pWbemServices, // Pointer to namespace to
g diagnostic mode data log diagnostic mode data
// Note, this will be NULL wh // Note, this will be NULL
en Rsop logging is disabled when Rsop logging is disabled
OUT HRESULT *pRsopStatus); // RSOP Logging succeeded or __out HRESULT *pRsopStatus); // RSOP Logging succeeded o
not. r not.
typedef PVOID PRSOPTOKEN; typedef PVOID PRSOPTOKEN;
typedef struct _RSOP_TARGET { typedef struct _RSOP_TARGET {
WCHAR * pwszAccountName; // Account name WCHAR * pwszAccountName; // Account name
WCHAR * pwszNewSOM; // New domain or OU location for account WCHAR * pwszNewSOM; // New domain or OU location for account
SAFEARRAY * psaSecurityGroups; // New security groups SAFEARRAY * psaSecurityGroups; // New security groups
PRSOPTOKEN pRsopToken; // Rsop token for use with Rs op security Api's PRSOPTOKEN pRsopToken; // Rsop token for use with Rs op security Api's
PGROUP_POLICY_OBJECT pGPOList; // Linked list of GPOs PGROUP_POLICY_OBJECT pGPOList; // Linked list of GPOs
IWbemServices * pWbemServices; // Pointer to namespace to lo g planning mode data IWbemServices * pWbemServices; // Pointer to namespace to lo g planning mode data
} RSOP_TARGET, *PRSOP_TARGET; } RSOP_TARGET, *PRSOP_TARGET;
typedef DWORD(*PFNGENERATEGROUPPOLICY)( typedef DWORD(*PFNGENERATEGROUPPOLICY)(
IN DWORD dwFlags, // GPO_INFO_FLAGS __in DWORD dwFlags, // GPO_INFO_FLAGS
IN BOOL *pbAbort, // If true, then abort GPO pr __inout BOOL *pbAbort, // If true, then abort GPO pr
ocessing ocessing
IN WCHAR *pwszSite, // Site the target computer i __in_opt WCHAR *pwszSite, // Site the target computer i
s in s in
IN PRSOP_TARGET pComputerTarget, // Computer target info, can __in_opt PRSOP_TARGET pComputerTarget, // Computer target info, can
be null be null
IN PRSOP_TARGET pUserTarget ); // User target info, can be n __in_opt PRSOP_TARGET pUserTarget ); // User target info, can be n
ull ull
// //
// GUID that identifies the registry extension // GUID that identifies the registry extension
// //
#define REGISTRY_EXTENSION_GUID { 0x35378EAC, 0x683F, 0x11D2, 0xA8, 0x9A, 0x00, 0xC0, 0x4F, 0xBB, 0xCF, 0xA2 } #define REGISTRY_EXTENSION_GUID { 0x35378EAC, 0x683F, 0x11D2, 0xA8, 0x9A, 0x00, 0xC0, 0x4F, 0xBB, 0xCF, 0xA2 }
//
// UBPM trigger provider and event GUIDs
//
#define GROUP_POLICY_TRIGGER_EVENT_PROVIDER_GUID { 0xBD2F4252, 0x5E1E, 0x49FC,
0x9A, 0x30, 0xF3, 0x97, 0x8A, 0xD8, 0x9E, 0xE2 }
#define MACHINE_POLICY_PRESENT_TRIGGER_GUID { 0x659FCAE6, 0x5BDB, 0x4DA9, 0xB1,
0xFF, 0xCA, 0x2A, 0x17, 0x8D, 0x46, 0xE0 }
#define USER_POLICY_PRESENT_TRIGGER_GUID { 0x54FB46C8, 0xF089, 0x464C, 0xB1, 0x
FD, 0x59, 0xD1, 0xB6, 0x2C, 0x3B, 0x50 }
#endif /* WINVER >= 0x0500 */ #endif /* WINVER >= 0x0500 */
//============================================================================= //=============================================================================
// //
// Group Policy Object client side asynchronous extension processing // Group Policy Object client side asynchronous extension processing
// //
// extensionId - Unique guid identifying the extension // extensionId - Unique guid identifying the extension
// pAsyncHandle - Asynchronous completion handle that was passed to extension in // pAsyncHandle - Asynchronous completion handle that was passed to extension in
// ProcessGroupPolicy call // ProcessGroupPolicy call
// dwStatus - Completion status of asynchronous processing // dwStatus - Completion status of asynchronous processing
skipping to change at line 1092 skipping to change at line 1096
//============================================================================= //=============================================================================
#if(WINVER >= 0x0500) #if(WINVER >= 0x0500)
typedef GUID *REFGPEXTENSIONID; typedef GUID *REFGPEXTENSIONID;
USERENVAPI USERENVAPI
DWORD DWORD
WINAPI WINAPI
ProcessGroupPolicyCompleted( ProcessGroupPolicyCompleted(
IN REFGPEXTENSIONID extensionId, __in REFGPEXTENSIONID extensionId,
IN ASYNCCOMPLETIONHANDLE pAsyncHandle, __in ASYNCCOMPLETIONHANDLE pAsyncHandle,
IN DWORD dwStatus); __in DWORD dwStatus);
#endif /* WINVER >= 0x0500 */ #endif /* WINVER >= 0x0500 */
//============================================================================= //=============================================================================
// //
// Group Policy Object client side asynchronous extension processing // Group Policy Object client side asynchronous extension processing
// //
// extensionId - Unique guid identifying the extension // extensionId - Unique guid identifying the extension
// pAsyncHandle - Asynchronous completion handle that was passed to extension in // pAsyncHandle - Asynchronous completion handle that was passed to extension in
// ProcessGroupPolicy call // ProcessGroupPolicy call
skipping to change at line 1119 skipping to change at line 1123
// function completed successfully. Otherwise it indicates that the function fai led. // function completed successfully. Otherwise it indicates that the function fai led.
// //
//============================================================================= //=============================================================================
#if(WINVER >= 0x0500) #if(WINVER >= 0x0500)
USERENVAPI USERENVAPI
DWORD DWORD
WINAPI WINAPI
ProcessGroupPolicyCompletedEx( ProcessGroupPolicyCompletedEx(
IN REFGPEXTENSIONID extensionId, __in REFGPEXTENSIONID extensionId,
IN ASYNCCOMPLETIONHANDLE pAsyncHandle, __in ASYNCCOMPLETIONHANDLE pAsyncHandle,
IN DWORD dwStatus, __in DWORD dwStatus,
IN HRESULT RsopStatus); __in HRESULT RsopStatus);
#endif /* WINVER >= 0x0500 */ #endif /* WINVER >= 0x0500 */
//============================================================================= //=============================================================================
// //
// Function: RsopAccessCheckByType // Function: RsopAccessCheckByType
// //
// Description: Determines whether the security descriptor pointed to by pSecuri tyDescriptor // Description: Determines whether the security descriptor pointed to by pSecuri tyDescriptor
// grants the set of access rights specified in dwD esiredAccessMask // grants the set of access rights specified in dwD esiredAccessMask
// to the client identified by the RSOPTOKEN pointe d to by pRsopToken. // to the client identified by the RSOPTOKEN pointe d to by pRsopToken.
skipping to change at line 1161 skipping to change at line 1165
// Returns S_OK on success or appropriate error code. // Returns S_OK on success or appropriate error code.
// For additional details, look at the documentation of AccessCheckByType // For additional details, look at the documentation of AccessCheckByType
//============================================================================= //=============================================================================
#if(WINVER >= 0x0500) #if(WINVER >= 0x0500)
USERENVAPI USERENVAPI
HRESULT HRESULT
WINAPI WINAPI
RsopAccessCheckByType( RsopAccessCheckByType(
IN PSECURITY_DESCRIPTOR pSecurityDescriptor, __in PSECURITY_DESCRIPTOR pSecurityDescriptor,
IN PSID pPrincipalSelfSid, __in_opt PSID pPrincipalSelfSid,
IN PRSOPTOKEN pRsopToken, __in PRSOPTOKEN pRsopToken,
IN DWORD dwDesiredAccessMask, __in DWORD dwDesiredAccessMask,
IN POBJECT_TYPE_LIST pObjectTypeList, __in_ecount_opt(ObjectTypeListLength) POBJECT_TYPE_LIST pObjectTypeList,
IN DWORD ObjectTypeListLength, __in DWORD ObjectTypeListLength,
IN PGENERIC_MAPPING pGenericMapping, __in PGENERIC_MAPPING pGenericMapping,
IN PPRIVILEGE_SET pPrivilegeSet, __in_bcount_opt(*pdwPrivilegeSetLength) PPRIVILEGE_SET pPrivilegeSet,
IN LPDWORD pdwPrivilegeSetLength, __in_opt LPDWORD pdwPrivilegeSetLength,
OUT LPDWORD pdwGrantedAccessMask, __out LPDWORD pdwGrantedAccessMask,
OUT LPBOOL pbAccessStatus); __out LPBOOL pbAccessStatus);
#endif /* WINVER >= 0x0500 */ #endif /* WINVER >= 0x0500 */
//============================================================================= //=============================================================================
// //
// Function: RsopFileAccessCheck // Function: RsopFileAccessCheck
// //
// Description: Determines whether the security descriptor on the file grants th e set of file access // Description: Determines whether the security descriptor on the file grants th e set of file access
// rights specified in dwDesiredAccessMask // rights specified in dwDesiredAccessMask
// to the client identified by the RSOPTOKEN pointe d to by pRsopToken. // to the client identified by the RSOPTOKEN pointe d to by pRsopToken.
skipping to change at line 1203 skipping to change at line 1207
// //
// Returns S_OK on success or appropriate error code // Returns S_OK on success or appropriate error code
//============================================================================= //=============================================================================
#if(WINVER >= 0x0500) #if(WINVER >= 0x0500)
USERENVAPI USERENVAPI
HRESULT HRESULT
WINAPI WINAPI
RsopFileAccessCheck( RsopFileAccessCheck(
IN LPWSTR pszFileName, __in LPWSTR pszFileName,
IN PRSOPTOKEN pRsopToken, __in PRSOPTOKEN pRsopToken,
IN DWORD dwDesiredAccessMask, __in DWORD dwDesiredAccessMask,
OUT LPDWORD pdwGrantedAccessMask, __out LPDWORD pdwGrantedAccessMask,
OUT LPBOOL pbAccessStatus); __out LPBOOL pbAccessStatus);
#endif /* WINVER >= 0x0500 */ #endif /* WINVER >= 0x0500 */
typedef enum _SETTINGSTATUS typedef enum _SETTINGSTATUS
{ {
RSOPUnspecified = 0, RSOPUnspecified = 0,
RSOPApplied, RSOPApplied,
RSOPIgnored, RSOPIgnored,
RSOPFailed, RSOPFailed,
RSOPSubsettingFailed RSOPSubsettingFailed
skipping to change at line 1266 skipping to change at line 1270
// nInfo - number of PolicySettingStatusInfo // nInfo - number of PolicySettingStatusInfo
// pStatus - array of PolicySettingStatusInfo // pStatus - array of PolicySettingStatusInfo
// //
// Return: S_OK if successful, HRESULT otherwise // Return: S_OK if successful, HRESULT otherwise
// //
//============================================================================= //=============================================================================
USERENVAPI USERENVAPI
HRESULT HRESULT
WINAPI WINAPI
RsopSetPolicySettingStatus( DWORD dwFlags, RsopSetPolicySettingStatus( __in DWORD dwFlags,
IWbemServices* pServices, __in IWbemServices* pServices,
IWbemClassObject* pSettingInstance, __in IWbemClassObject* pSettingInstance,
DWORD nInfo, __in DWORD nInfo,
POLICYSETTINGSTATUSINFO* pStatus ); __in_ecount(nInfo) POLICYSETTINGSTATUSINFO* pStat
us );
//============================================================================= //=============================================================================
// //
// RsopResetPolicySettingStatus // RsopResetPolicySettingStatus
// //
// Unlinks RSOP_PolicySettingStatus from RSOP_PolicySetting, // Unlinks RSOP_PolicySettingStatus from RSOP_PolicySetting,
// deletes the instance of RSOP_PolicySettingStatus and RSOP_PolicySettingLink // deletes the instance of RSOP_PolicySettingStatus and RSOP_PolicySettingLink
// and optionally deletes the instance of RSOP_PolicySetting // and optionally deletes the instance of RSOP_PolicySetting
// //
// dwFlags - flags // dwFlags - flags
// pServices - RSOP namespace // pServices - RSOP namespace
// pSettingInstance - instance of RSOP_PolicySetting or its children // pSettingInstance - instance of RSOP_PolicySetting or its children
// //
// Return: S_OK if successful, HRESULT otherwise // Return: S_OK if successful, HRESULT otherwise
// //
//============================================================================= //=============================================================================
USERENVAPI USERENVAPI
HRESULT HRESULT
WINAPI WINAPI
RsopResetPolicySettingStatus( DWORD dwFlags, RsopResetPolicySettingStatus( __in DWORD dwFlags,
IWbemServices* pServices, __in IWbemServices* pServices,
IWbemClassObject* pSettingInstance ); __in IWbemClassObject* pSettingInstance );
//============================================================================= //=============================================================================
// //
// Flags for RSoP WMI providers // Flags for RSoP WMI providers
// //
//============================================================================= //=============================================================================
// planning mode provider flags // planning mode provider flags
#define FLAG_NO_GPO_FILTER 0x80000000 // GPOs are not filtered, implies FL AG_NO_CSE_INVOKE #define FLAG_NO_GPO_FILTER 0x80000000 // GPOs are not filtered, implies FL AG_NO_CSE_INVOKE
#define FLAG_NO_CSE_INVOKE 0x40000000 // only GP processing done for plann ing mode #define FLAG_NO_CSE_INVOKE 0x40000000 // only GP processing done for plann ing mode
 End of changes. 54 change blocks. 
167 lines changed or deleted 175 lines changed or added

This html diff was produced by rfcdiff 1.41.