1 // Copyright © 2015-2017 winapi-rs developers
2 // Licensed under the Apache License, Version 2.0
3 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
4 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
5 // All files in the project carrying such notice may not be copied, modified, or distributed
6 // except according to those terms.
7 //! Definitions for the user environment API
8 use shared::minwindef::{BOOL, DWORD, LPDWORD, LPVOID, PHKEY};
9 use um::winnt::{
10     HANDLE, HRESULT, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PCWSTR, PSID, PSID_AND_ATTRIBUTES, PWSTR
11 };
12 use um::winreg::REGSAM;
13 extern "system" {
14     // pub fn LoadUserProfileA(
15     //     hToken: HANDLE,
16     //     lpProfileInfo: LPPROFILEINFOA,
17     // ) -> BOOL;
18     // pub fn LoadUserProfileW(
19     //     hToken: HANDLE,
20     //     lpProfileInfo: LPPROFILEINFOW,
21     // ) -> BOOL;
UnloadUserProfile( hToken: HANDLE, hProfile: HANDLE, ) -> BOOL22     pub fn UnloadUserProfile(
23         hToken: HANDLE,
24         hProfile: HANDLE,
25     ) -> BOOL;
GetProfilesDirectoryA( lpProfileDir: LPSTR, lpcchSize: LPDWORD, ) -> BOOL26     pub fn GetProfilesDirectoryA(
27         lpProfileDir: LPSTR,
28         lpcchSize: LPDWORD,
29     ) -> BOOL;
GetProfilesDirectoryW( lpProfileDir: LPWSTR, lpcchSize: LPDWORD, ) -> BOOL30     pub fn GetProfilesDirectoryW(
31         lpProfileDir: LPWSTR,
32         lpcchSize: LPDWORD,
33     ) -> BOOL;
GetProfileType( dwFlags: *mut DWORD, ) -> BOOL34     pub fn GetProfileType(
35         dwFlags: *mut DWORD,
36     ) -> BOOL;
DeleteProfileA( lpSidString: LPCSTR, lpProfilePath: LPCSTR, lpComputerName: LPCSTR, ) -> BOOL37     pub fn DeleteProfileA(
38         lpSidString: LPCSTR,
39         lpProfilePath: LPCSTR,
40         lpComputerName: LPCSTR,
41     ) -> BOOL;
DeleteProfileW( lpSidString: LPCWSTR, lpProfilePath: LPCWSTR, lpComputerName: LPCWSTR, ) -> BOOL42     pub fn DeleteProfileW(
43         lpSidString: LPCWSTR,
44         lpProfilePath: LPCWSTR,
45         lpComputerName: LPCWSTR,
46     ) -> BOOL;
CreateProfile( pszUserSid: LPCWSTR, pszUserName: LPCWSTR, pszProfilePath: LPWSTR, cchProfilePath: DWORD, ) -> HRESULT47     pub fn CreateProfile(
48         pszUserSid: LPCWSTR,
49         pszUserName: LPCWSTR,
50         pszProfilePath: LPWSTR,
51         cchProfilePath: DWORD,
52     ) -> HRESULT;
GetDefaultUserProfileDirectoryA( lpProfileDir: LPSTR, lpcchSize: LPDWORD, ) -> BOOL53     pub fn GetDefaultUserProfileDirectoryA(
54         lpProfileDir: LPSTR,
55         lpcchSize: LPDWORD,
56     ) -> BOOL;
GetDefaultUserProfileDirectoryW( lpProfileDir: LPWSTR, lpcchSize: LPDWORD, ) -> BOOL57     pub fn GetDefaultUserProfileDirectoryW(
58         lpProfileDir: LPWSTR,
59         lpcchSize: LPDWORD,
60     ) -> BOOL;
GetAllUsersProfileDirectoryA( lpProfileDir: LPSTR, lpcchSize: LPDWORD, ) -> BOOL61     pub fn GetAllUsersProfileDirectoryA(
62         lpProfileDir: LPSTR,
63         lpcchSize: LPDWORD,
64     ) -> BOOL;
GetAllUsersProfileDirectoryW( lpProfileDir: LPWSTR, lpcchSize: LPDWORD, ) -> BOOL65     pub fn GetAllUsersProfileDirectoryW(
66         lpProfileDir: LPWSTR,
67         lpcchSize: LPDWORD,
68     ) -> BOOL;
GetUserProfileDirectoryA( hToken: HANDLE, lpProfileDir: LPSTR, lpcchSize: LPDWORD, ) -> BOOL69     pub fn GetUserProfileDirectoryA(
70         hToken: HANDLE,
71         lpProfileDir: LPSTR,
72         lpcchSize: LPDWORD,
73     ) -> BOOL;
GetUserProfileDirectoryW( hToken: HANDLE, lpProfileDir: LPWSTR, lpcchSize: LPDWORD, ) -> BOOL74     pub fn GetUserProfileDirectoryW(
75         hToken: HANDLE,
76         lpProfileDir: LPWSTR,
77         lpcchSize: LPDWORD,
78     ) -> BOOL;
CreateEnvironmentBlock( lpEnvironment: *mut LPVOID, hToken: HANDLE, bInherit: BOOL, ) -> BOOL79     pub fn CreateEnvironmentBlock(
80         lpEnvironment: *mut LPVOID,
81         hToken: HANDLE,
82         bInherit: BOOL,
83     ) -> BOOL;
DestroyEnvironmentBlock( lpEnvironment: LPVOID, ) -> BOOL84     pub fn DestroyEnvironmentBlock(
85         lpEnvironment: LPVOID,
86     ) -> BOOL;
ExpandEnvironmentStringsForUserA( hToken: HANDLE, lpSrc: LPCSTR, lpDest: LPSTR, dwSize: DWORD, ) -> BOOL87     pub fn ExpandEnvironmentStringsForUserA(
88         hToken: HANDLE,
89         lpSrc: LPCSTR,
90         lpDest: LPSTR,
91         dwSize: DWORD,
92     ) -> BOOL;
ExpandEnvironmentStringsForUserW( hToken: HANDLE, lpSrc: LPCWSTR, lpDest: LPWSTR, dwSize: DWORD, ) -> BOOL93     pub fn ExpandEnvironmentStringsForUserW(
94         hToken: HANDLE,
95         lpSrc: LPCWSTR,
96         lpDest: LPWSTR,
97         dwSize: DWORD,
98     ) -> BOOL;
RefreshPolicy( bMachine: BOOL, ) -> BOOL99     pub fn RefreshPolicy(
100         bMachine: BOOL,
101     ) -> BOOL;
RefreshPolicyEx( bMachine: BOOL, dwOptions: DWORD, ) -> BOOL102     pub fn RefreshPolicyEx(
103         bMachine: BOOL,
104         dwOptions: DWORD,
105     ) -> BOOL;
EnterCriticalPolicySection( bMachine: BOOL, ) -> HANDLE106     pub fn EnterCriticalPolicySection(
107         bMachine: BOOL,
108     ) -> HANDLE;
LeaveCriticalPolicySection( hSection: HANDLE, ) -> BOOL109     pub fn LeaveCriticalPolicySection(
110         hSection: HANDLE,
111     ) -> BOOL;
RegisterGPNotification( hEvent: HANDLE, bMachine: BOOL, ) -> BOOL112     pub fn RegisterGPNotification(
113         hEvent: HANDLE,
114         bMachine: BOOL,
115     ) -> BOOL;
UnregisterGPNotification( hEvent: HANDLE, ) -> BOOL116     pub fn UnregisterGPNotification(
117         hEvent: HANDLE,
118     ) -> BOOL;
119     // pub fn GetGPOListA();
120     // pub fn GetGPOListW();
121     // pub fn FreeGPOListA();
122     // pub fn FreeGPOListW();
123     // pub fn GetAppliedGPOListA();
124     // pub fn GetAppliedGPOListW();
125     // pub fn ProcessGroupPolicyCompleted();
126     // pub fn ProcessGroupPolicyCompletedEx();
127     // pub fn RsopAccessCheckByType();
128     // pub fn RsopFileAccessCheck();
129     // pub fn RsopSetPolicySettingStatus();
130     // pub fn RsopResetPolicySettingStatus();
131     // pub fn GenerateGPNotification();
CreateAppContainerProfile( pszAppContainerName: PCWSTR, pszDisplayName: PCWSTR, pszDescription: PCWSTR, pCapabilities: PSID_AND_ATTRIBUTES, dwCapabilityCount: DWORD, ppSidAppContainerSid: *mut PSID ) -> HRESULT132     pub fn CreateAppContainerProfile(
133         pszAppContainerName: PCWSTR,
134         pszDisplayName: PCWSTR,
135         pszDescription: PCWSTR,
136         pCapabilities: PSID_AND_ATTRIBUTES,
137         dwCapabilityCount: DWORD,
138         ppSidAppContainerSid: *mut PSID
139     ) -> HRESULT;
DeleteAppContainerProfile( pszAppContainerName: PCWSTR ) -> HRESULT140     pub fn DeleteAppContainerProfile(
141         pszAppContainerName: PCWSTR
142     ) -> HRESULT;
GetAppContainerRegistryLocation( desiredAccess: REGSAM, phAppContainerKey: PHKEY ) -> HRESULT143     pub fn GetAppContainerRegistryLocation(
144         desiredAccess: REGSAM,
145         phAppContainerKey: PHKEY
146     ) -> HRESULT;
GetAppContainerFolderPath( pszAppContainerSid: PCWSTR, ppszPath: *mut PWSTR ) -> HRESULT147     pub fn GetAppContainerFolderPath(
148         pszAppContainerSid: PCWSTR,
149         ppszPath: *mut PWSTR
150     ) -> HRESULT;
DeriveAppContainerSidFromAppContainerName( pszAppContainerName: PCWSTR, ppsidAppContainerSid: *mut PSID ) -> HRESULT151     pub fn DeriveAppContainerSidFromAppContainerName(
152         pszAppContainerName: PCWSTR,
153         ppsidAppContainerSid: *mut PSID
154     ) -> HRESULT;
DeriveRestrictedAppContainerSidFromAppContainerSidAndRestrictedName( psidAppContainerSid: PSID, pszRestrictedAppContainerName: PCWSTR, ppsidRestrictedAppContainerSid: *mut PSID ) -> HRESULT155     pub fn DeriveRestrictedAppContainerSidFromAppContainerSidAndRestrictedName(
156         psidAppContainerSid: PSID,
157         pszRestrictedAppContainerName: PCWSTR,
158         ppsidRestrictedAppContainerSid: *mut PSID
159     ) -> HRESULT;
160 }
161