1 /** 2 * This file has no copyright assigned and is placed in the Public Domain. 3 * This file is part of the mingw-w64 runtime package. 4 * No warranty is given; refer to the file DISCLAIMER.PD within this package. 5 */ 6 #ifndef _USERENV_H_ 7 #define _USERENV_H_ 8 9 #include <_mingw_unicode.h> 10 #include <wbemcli.h> 11 #include <profinfo.h> 12 13 #if !defined(_USERENV_) 14 #define USERENVAPI DECLSPEC_IMPORT 15 #else 16 #define USERENVAPI 17 #endif 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 23 #define PI_NOUI 0x00000001 24 #define PI_APPLYPOLICY 0x00000002 25 26 #define LoadUserProfile __MINGW_NAME_AW(LoadUserProfile) 27 #define GetProfilesDirectory __MINGW_NAME_AW(GetProfilesDirectory) 28 #define DeleteProfile __MINGW_NAME_AW(DeleteProfile) 29 #define GetDefaultUserProfileDirectory __MINGW_NAME_AW(GetDefaultUserProfileDirectory) 30 #define GetAllUsersProfileDirectory __MINGW_NAME_AW(GetAllUsersProfileDirectory) 31 #define GetUserProfileDirectory __MINGW_NAME_AW(GetUserProfileDirectory) 32 #define ExpandEnvironmentStringsForUser __MINGW_NAME_AW(ExpandEnvironmentStringsForUser) 33 34 USERENVAPI WINBOOL WINAPI LoadUserProfileA(HANDLE hToken,LPPROFILEINFOA lpProfileInfo); 35 USERENVAPI WINBOOL WINAPI LoadUserProfileW(HANDLE hToken,LPPROFILEINFOW lpProfileInfo); 36 USERENVAPI WINBOOL WINAPI UnloadUserProfile(HANDLE hToken,HANDLE hProfile); 37 USERENVAPI WINBOOL WINAPI GetProfilesDirectoryA(LPSTR lpProfilesDir,LPDWORD lpcchSize); 38 USERENVAPI WINBOOL WINAPI GetProfilesDirectoryW(LPWSTR lpProfilesDir,LPDWORD lpcchSize); 39 40 #define PT_TEMPORARY 0x00000001 41 #define PT_ROAMING 0x00000002 42 #define PT_MANDATORY 0x00000004 43 44 USERENVAPI WINBOOL WINAPI GetProfileType(DWORD *dwFlags); 45 USERENVAPI WINBOOL WINAPI DeleteProfileA(LPCSTR lpSidString,LPCSTR lpProfilePath,LPCSTR lpComputerName); 46 USERENVAPI WINBOOL WINAPI DeleteProfileW(LPCWSTR lpSidString,LPCWSTR lpProfilePath,LPCWSTR lpComputerName); 47 USERENVAPI WINBOOL WINAPI GetDefaultUserProfileDirectoryA(LPSTR lpProfileDir,LPDWORD lpcchSize); 48 USERENVAPI WINBOOL WINAPI GetDefaultUserProfileDirectoryW(LPWSTR lpProfileDir,LPDWORD lpcchSize); 49 USERENVAPI WINBOOL WINAPI GetAllUsersProfileDirectoryA(LPSTR lpProfileDir,LPDWORD lpcchSize); 50 USERENVAPI WINBOOL WINAPI GetAllUsersProfileDirectoryW(LPWSTR lpProfileDir,LPDWORD lpcchSize); 51 USERENVAPI WINBOOL WINAPI GetUserProfileDirectoryA(HANDLE hToken,LPSTR lpProfileDir,LPDWORD lpcchSize); 52 USERENVAPI WINBOOL WINAPI GetUserProfileDirectoryW(HANDLE hToken,LPWSTR lpProfileDir,LPDWORD lpcchSize); 53 USERENVAPI WINBOOL WINAPI CreateEnvironmentBlock(LPVOID *lpEnvironment,HANDLE hToken,WINBOOL bInherit); 54 USERENVAPI WINBOOL WINAPI DestroyEnvironmentBlock(LPVOID lpEnvironment); 55 USERENVAPI WINBOOL WINAPI ExpandEnvironmentStringsForUserA(HANDLE hToken,LPCSTR lpSrc,LPSTR lpDest,DWORD dwSize); 56 USERENVAPI WINBOOL WINAPI ExpandEnvironmentStringsForUserW(HANDLE hToken,LPCWSTR lpSrc,LPWSTR lpDest,DWORD dwSize); 57 USERENVAPI WINBOOL WINAPI RefreshPolicy(WINBOOL bMachine); 58 59 #define RP_FORCE 1 60 61 USERENVAPI WINBOOL WINAPI RefreshPolicyEx(WINBOOL bMachine,DWORD dwOptions); 62 USERENVAPI HANDLE WINAPI EnterCriticalPolicySection(WINBOOL bMachine); 63 USERENVAPI WINBOOL WINAPI LeaveCriticalPolicySection(HANDLE hSection); 64 USERENVAPI WINBOOL WINAPI RegisterGPNotification(HANDLE hEvent,WINBOOL bMachine); 65 USERENVAPI WINBOOL WINAPI UnregisterGPNotification(HANDLE hEvent); 66 67 #define GPC_BLOCK_POLICY 0x00000001 68 69 #define GPO_FLAG_DISABLE 0x00000001 70 #define GPO_FLAG_FORCE 0x00000002 71 72 typedef enum _GPO_LINK { 73 GPLinkUnknown = 0,GPLinkMachine,GPLinkSite,GPLinkDomain,GPLinkOrganizationalUnit 74 } GPO_LINK,*PGPO_LINK; 75 76 typedef struct _GROUP_POLICY_OBJECTA { 77 DWORD dwOptions; 78 DWORD dwVersion; 79 LPSTR lpDSPath; 80 LPSTR lpFileSysPath; 81 LPSTR lpDisplayName; 82 CHAR szGPOName[50]; 83 GPO_LINK GPOLink; 84 LPARAM lParam; 85 struct _GROUP_POLICY_OBJECTA *pNext; 86 struct _GROUP_POLICY_OBJECTA *pPrev; 87 LPSTR lpExtensions; 88 LPARAM lParam2; 89 LPSTR lpLink; 90 } GROUP_POLICY_OBJECTA,*PGROUP_POLICY_OBJECTA; 91 92 typedef struct _GROUP_POLICY_OBJECTW { 93 DWORD dwOptions; 94 DWORD dwVersion; 95 LPWSTR lpDSPath; 96 LPWSTR lpFileSysPath; 97 LPWSTR lpDisplayName; 98 WCHAR szGPOName[50]; 99 GPO_LINK GPOLink; 100 LPARAM lParam; 101 struct _GROUP_POLICY_OBJECTW *pNext; 102 struct _GROUP_POLICY_OBJECTW *pPrev; 103 LPWSTR lpExtensions; 104 LPARAM lParam2; 105 LPWSTR lpLink; 106 } GROUP_POLICY_OBJECTW,*PGROUP_POLICY_OBJECTW; 107 108 __MINGW_TYPEDEF_AW(GROUP_POLICY_OBJECT) 109 __MINGW_TYPEDEF_AW(PGROUP_POLICY_OBJECT) 110 111 #define GPO_LIST_FLAG_MACHINE 0x00000001 112 #define GPO_LIST_FLAG_SITEONLY 0x00000002 113 #define GPO_LIST_FLAG_NO_WMIFILTERS 0x00000004 114 115 #define GetGPOList __MINGW_NAME_AW(GetGPOList) 116 #define FreeGPOList __MINGW_NAME_AW(FreeGPOList) 117 #define GetAppliedGPOList __MINGW_NAME_AW(GetAppliedGPOList) 118 119 USERENVAPI WINBOOL WINAPI GetGPOListA(HANDLE hToken,LPCSTR lpName,LPCSTR lpHostName,LPCSTR lpComputerName,DWORD dwFlags,PGROUP_POLICY_OBJECTA *pGPOList); 120 USERENVAPI WINBOOL WINAPI GetGPOListW(HANDLE hToken,LPCWSTR lpName,LPCWSTR lpHostName,LPCWSTR lpComputerName,DWORD dwFlags,PGROUP_POLICY_OBJECTW *pGPOList); 121 USERENVAPI WINBOOL WINAPI FreeGPOListA(PGROUP_POLICY_OBJECTA pGPOList); 122 USERENVAPI WINBOOL WINAPI FreeGPOListW(PGROUP_POLICY_OBJECTW pGPOList); 123 USERENVAPI DWORD WINAPI GetAppliedGPOListA(DWORD dwFlags,LPCSTR pMachineName,PSID pSidUser,GUID *pGuidExtension,PGROUP_POLICY_OBJECTA *ppGPOList); 124 USERENVAPI DWORD WINAPI GetAppliedGPOListW(DWORD dwFlags,LPCWSTR pMachineName,PSID pSidUser,GUID *pGuidExtension,PGROUP_POLICY_OBJECTW *ppGPOList); 125 126 #define GP_DLLNAME TEXT("DllName") 127 #define GP_ENABLEASYNCHRONOUSPROCESSING TEXT("EnableAsynchronousProcessing") 128 #define GP_MAXNOGPOLISTCHANGESINTERVAL TEXT("MaxNoGPOListChangesInterval") 129 #define GP_NOBACKGROUNDPOLICY TEXT("NoBackgroundPolicy") 130 #define GP_NOGPOLISTCHANGES TEXT("NoGPOListChanges") 131 #define GP_NOMACHINEPOLICY TEXT("NoMachinePolicy") 132 #define GP_NOSLOWLINK TEXT("NoSlowLink") 133 #define GP_NOTIFYLINKTRANSITION TEXT("NotifyLinkTransition") 134 #define GP_NOUSERPOLICY TEXT("NoUserPolicy") 135 #define GP_PERUSERLOCALSETTINGS TEXT("PerUserLocalSettings") 136 #define GP_PROCESSGROUPPOLICY TEXT("ProcessGroupPolicy") 137 #define GP_REQUIRESSUCCESSFULREGISTRY TEXT("RequiresSuccessfulRegistry") 138 139 #define GPO_INFO_FLAG_MACHINE 0x00000001 140 #define GPO_INFO_FLAG_BACKGROUND 0x00000010 141 #define GPO_INFO_FLAG_SLOWLINK 0x00000020 142 #define GPO_INFO_FLAG_VERBOSE 0x00000040 143 #define GPO_INFO_FLAG_NOCHANGES 0x00000080 144 #define GPO_INFO_FLAG_LINKTRANSITION 0x00000100 145 146 #define GPO_INFO_FLAG_LOGRSOP_TRANSITION 0x00000200 147 148 #define GPO_INFO_FLAG_FORCED_REFRESH 0x00000400 149 #define GPO_INFO_FLAG_SAFEMODE_BOOT 0x00000800 150 #define GPO_INFO_FLAG_ASYNC_FOREGROUND 0x00001000 151 #define GPO_INFO_FLAG_REPORT 0x00002000 152 153 typedef UINT_PTR ASYNCCOMPLETIONHANDLE; 154 typedef DWORD (*PFNSTATUSMESSAGECALLBACK)(WINBOOL bVerbose,LPWSTR lpMessage); 155 typedef DWORD(*PFNPROCESSGROUPPOLICY)(DWORD dwFlags,HANDLE hToken,HKEY hKeyRoot,PGROUP_POLICY_OBJECT pDeletedGPOList,PGROUP_POLICY_OBJECT pChangedGPOList,ASYNCCOMPLETIONHANDLE pHandle,WINBOOL *pbAbort,PFNSTATUSMESSAGECALLBACK pStatusCallback); 156 typedef DWORD(*PFNPROCESSGROUPPOLICYEX)(DWORD dwFlags,HANDLE hToken,HKEY hKeyRoot,PGROUP_POLICY_OBJECT pDeletedGPOList,PGROUP_POLICY_OBJECT pChangedGPOList,ASYNCCOMPLETIONHANDLE pHandle,WINBOOL *pbAbort,PFNSTATUSMESSAGECALLBACK pStatusCallback,IWbemServices *pWbemServices,HRESULT *pRsopStatus); 157 typedef PVOID PRSOPTOKEN; 158 159 typedef struct _RSOP_TARGET { 160 WCHAR *pwszAccountName; 161 WCHAR *pwszNewSOM; 162 SAFEARRAY *psaSecurityGroups; 163 PRSOPTOKEN pRsopToken; 164 PGROUP_POLICY_OBJECT pGPOList; 165 IWbemServices *pWbemServices; 166 } RSOP_TARGET,*PRSOP_TARGET; 167 168 typedef DWORD(*PFNGENERATEGROUPPOLICY)(DWORD dwFlags,WINBOOL *pbAbort,WCHAR *pwszSite,PRSOP_TARGET pComputerTarget,PRSOP_TARGET pUserTarget); 169 170 #define REGISTRY_EXTENSION_GUID { 0x35378EAC,0x683F,0x11D2,0xA8,0x9A,0x00,0xC0,0x4F,0xBB,0xCF,0xA2 } 171 172 typedef GUID *REFGPEXTENSIONID; 173 174 USERENVAPI DWORD WINAPI ProcessGroupPolicyCompleted(REFGPEXTENSIONID extensionId,ASYNCCOMPLETIONHANDLE pAsyncHandle,DWORD dwStatus); 175 USERENVAPI DWORD WINAPI ProcessGroupPolicyCompletedEx(REFGPEXTENSIONID extensionId,ASYNCCOMPLETIONHANDLE pAsyncHandle,DWORD dwStatus,HRESULT RsopStatus); 176 USERENVAPI HRESULT WINAPI RsopAccessCheckByType(PSECURITY_DESCRIPTOR pSecurityDescriptor,PSID pPrincipalSelfSid,PRSOPTOKEN pRsopToken,DWORD dwDesiredAccessMask,POBJECT_TYPE_LIST pObjectTypeList,DWORD ObjectTypeListLength,PGENERIC_MAPPING pGenericMapping,PPRIVILEGE_SET pPrivilegeSet,LPDWORD pdwPrivilegeSetLength,LPDWORD pdwGrantedAccessMask,LPBOOL pbAccessStatus); 177 USERENVAPI HRESULT WINAPI RsopFileAccessCheck(LPWSTR pszFileName,PRSOPTOKEN pRsopToken,DWORD dwDesiredAccessMask,LPDWORD pdwGrantedAccessMask,LPBOOL pbAccessStatus); 178 179 typedef enum _SETTINGSTATUS { 180 RSOPUnspecified = 0,RSOPApplied,RSOPIgnored,RSOPFailed,RSOPSubsettingFailed 181 } SETTINGSTATUS; 182 183 typedef struct _POLICYSETTINGSTATUSINFO { 184 LPWSTR szKey; 185 LPWSTR szEventSource; 186 LPWSTR szEventLogName; 187 DWORD dwEventID; 188 DWORD dwErrorCode; 189 SETTINGSTATUS status; 190 SYSTEMTIME timeLogged; 191 } POLICYSETTINGSTATUSINFO,*LPPOLICYSETTINGSTATUSINFO; 192 193 USERENVAPI HRESULT WINAPI RsopSetPolicySettingStatus(DWORD dwFlags,IWbemServices *pServices,IWbemClassObject *pSettingInstance,DWORD nInfo,POLICYSETTINGSTATUSINFO *pStatus); 194 USERENVAPI HRESULT WINAPI RsopResetPolicySettingStatus(DWORD dwFlags,IWbemServices *pServices,IWbemClassObject *pSettingInstance); 195 196 #define FLAG_NO_GPO_FILTER 0x80000000 197 #define FLAG_NO_CSE_INVOKE 0x40000000 198 #define FLAG_ASSUME_SLOW_LINK 0x20000000 199 #define FLAG_LOOPBACK_MERGE 0x10000000 200 #define FLAG_LOOPBACK_REPLACE 0x08000000 201 202 #define FLAG_ASSUME_USER_WQLFILTER_TRUE 0x04000000 203 #define FLAG_ASSUME_COMP_WQLFILTER_TRUE 0x02000000 204 205 #define FLAG_PLANNING_MODE 0x01000000 206 207 #define FLAG_NO_USER 0x00000001 208 #define FLAG_NO_COMPUTER 0x00000002 209 #define FLAG_FORCE_CREATENAMESPACE 0x00000004 210 211 #define RSOP_USER_ACCESS_DENIED 0x00000001 212 213 #define RSOP_COMPUTER_ACCESS_DENIED 0x00000002 214 215 #define RSOP_TEMPNAMESPACE_EXISTS 0x00000004 216 217 #ifdef __cplusplus 218 } 219 #endif 220 221 #endif /* _USERENV_H_ */ 222