1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 //! Definitions for the user environment API
7 use shared::minwindef::{BOOL, DWORD, LPDWORD, LPVOID, PHKEY};
8 use um::winnt::{
9     HANDLE, HRESULT, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PCWSTR, PSID, PSID_AND_ATTRIBUTES, PWSTR
10 };
11 use um::winreg::REGSAM;
12 extern "system" {
13     // pub fn LoadUserProfileA(
14     //     hToken: HANDLE,
15     //     lpProfileInfo: LPPROFILEINFOA,
16     // ) -> BOOL;
17     // pub fn LoadUserProfileW(
18     //     hToken: HANDLE,
19     //     lpProfileInfo: LPPROFILEINFOW,
20     // ) -> BOOL;
UnloadUserProfile( hToken: HANDLE, hProfile: HANDLE, ) -> BOOL21     pub fn UnloadUserProfile(
22         hToken: HANDLE,
23         hProfile: HANDLE,
24     ) -> BOOL;
GetProfilesDirectoryA( lpProfileDir: LPSTR, lpcchSize: LPDWORD, ) -> BOOL25     pub fn GetProfilesDirectoryA(
26         lpProfileDir: LPSTR,
27         lpcchSize: LPDWORD,
28     ) -> BOOL;
GetProfilesDirectoryW( lpProfileDir: LPWSTR, lpcchSize: LPDWORD, ) -> BOOL29     pub fn GetProfilesDirectoryW(
30         lpProfileDir: LPWSTR,
31         lpcchSize: LPDWORD,
32     ) -> BOOL;
GetProfileType( dwFlags: *mut DWORD, ) -> BOOL33     pub fn GetProfileType(
34         dwFlags: *mut DWORD,
35     ) -> BOOL;
DeleteProfileA( lpSidString: LPCSTR, lpProfilePath: LPCSTR, lpComputerName: LPCSTR, ) -> BOOL36     pub fn DeleteProfileA(
37         lpSidString: LPCSTR,
38         lpProfilePath: LPCSTR,
39         lpComputerName: LPCSTR,
40     ) -> BOOL;
DeleteProfileW( lpSidString: LPCWSTR, lpProfilePath: LPCWSTR, lpComputerName: LPCWSTR, ) -> BOOL41     pub fn DeleteProfileW(
42         lpSidString: LPCWSTR,
43         lpProfilePath: LPCWSTR,
44         lpComputerName: LPCWSTR,
45     ) -> BOOL;
CreateProfile( pszUserSid: LPCWSTR, pszUserName: LPCWSTR, pszProfilePath: LPWSTR, cchProfilePath: DWORD, ) -> HRESULT46     pub fn CreateProfile(
47         pszUserSid: LPCWSTR,
48         pszUserName: LPCWSTR,
49         pszProfilePath: LPWSTR,
50         cchProfilePath: DWORD,
51     ) -> HRESULT;
GetDefaultUserProfileDirectoryA( lpProfileDir: LPSTR, lpcchSize: LPDWORD, ) -> BOOL52     pub fn GetDefaultUserProfileDirectoryA(
53         lpProfileDir: LPSTR,
54         lpcchSize: LPDWORD,
55     ) -> BOOL;
GetDefaultUserProfileDirectoryW( lpProfileDir: LPWSTR, lpcchSize: LPDWORD, ) -> BOOL56     pub fn GetDefaultUserProfileDirectoryW(
57         lpProfileDir: LPWSTR,
58         lpcchSize: LPDWORD,
59     ) -> BOOL;
GetAllUsersProfileDirectoryA( lpProfileDir: LPSTR, lpcchSize: LPDWORD, ) -> BOOL60     pub fn GetAllUsersProfileDirectoryA(
61         lpProfileDir: LPSTR,
62         lpcchSize: LPDWORD,
63     ) -> BOOL;
GetAllUsersProfileDirectoryW( lpProfileDir: LPWSTR, lpcchSize: LPDWORD, ) -> BOOL64     pub fn GetAllUsersProfileDirectoryW(
65         lpProfileDir: LPWSTR,
66         lpcchSize: LPDWORD,
67     ) -> BOOL;
GetUserProfileDirectoryA( hToken: HANDLE, lpProfileDir: LPSTR, lpcchSize: LPDWORD, ) -> BOOL68     pub fn GetUserProfileDirectoryA(
69         hToken: HANDLE,
70         lpProfileDir: LPSTR,
71         lpcchSize: LPDWORD,
72     ) -> BOOL;
GetUserProfileDirectoryW( hToken: HANDLE, lpProfileDir: LPWSTR, lpcchSize: LPDWORD, ) -> BOOL73     pub fn GetUserProfileDirectoryW(
74         hToken: HANDLE,
75         lpProfileDir: LPWSTR,
76         lpcchSize: LPDWORD,
77     ) -> BOOL;
CreateEnvironmentBlock( lpEnvironment: *mut LPVOID, hToken: HANDLE, bInherit: BOOL, ) -> BOOL78     pub fn CreateEnvironmentBlock(
79         lpEnvironment: *mut LPVOID,
80         hToken: HANDLE,
81         bInherit: BOOL,
82     ) -> BOOL;
DestroyEnvironmentBlock( lpEnvironment: LPVOID, ) -> BOOL83     pub fn DestroyEnvironmentBlock(
84         lpEnvironment: LPVOID,
85     ) -> BOOL;
ExpandEnvironmentStringsForUserA( hToken: HANDLE, lpSrc: LPCSTR, lpDest: LPSTR, dwSize: DWORD, ) -> BOOL86     pub fn ExpandEnvironmentStringsForUserA(
87         hToken: HANDLE,
88         lpSrc: LPCSTR,
89         lpDest: LPSTR,
90         dwSize: DWORD,
91     ) -> BOOL;
ExpandEnvironmentStringsForUserW( hToken: HANDLE, lpSrc: LPCWSTR, lpDest: LPWSTR, dwSize: DWORD, ) -> BOOL92     pub fn ExpandEnvironmentStringsForUserW(
93         hToken: HANDLE,
94         lpSrc: LPCWSTR,
95         lpDest: LPWSTR,
96         dwSize: DWORD,
97     ) -> BOOL;
RefreshPolicy( bMachine: BOOL, ) -> BOOL98     pub fn RefreshPolicy(
99         bMachine: BOOL,
100     ) -> BOOL;
RefreshPolicyEx( bMachine: BOOL, dwOptions: DWORD, ) -> BOOL101     pub fn RefreshPolicyEx(
102         bMachine: BOOL,
103         dwOptions: DWORD,
104     ) -> BOOL;
EnterCriticalPolicySection( bMachine: BOOL, ) -> HANDLE105     pub fn EnterCriticalPolicySection(
106         bMachine: BOOL,
107     ) -> HANDLE;
LeaveCriticalPolicySection( hSection: HANDLE, ) -> BOOL108     pub fn LeaveCriticalPolicySection(
109         hSection: HANDLE,
110     ) -> BOOL;
RegisterGPNotification( hEvent: HANDLE, bMachine: BOOL, ) -> BOOL111     pub fn RegisterGPNotification(
112         hEvent: HANDLE,
113         bMachine: BOOL,
114     ) -> BOOL;
UnregisterGPNotification( hEvent: HANDLE, ) -> BOOL115     pub fn UnregisterGPNotification(
116         hEvent: HANDLE,
117     ) -> BOOL;
118     // pub fn GetGPOListA();
119     // pub fn GetGPOListW();
120     // pub fn FreeGPOListA();
121     // pub fn FreeGPOListW();
122     // pub fn GetAppliedGPOListA();
123     // pub fn GetAppliedGPOListW();
124     // pub fn ProcessGroupPolicyCompleted();
125     // pub fn ProcessGroupPolicyCompletedEx();
126     // pub fn RsopAccessCheckByType();
127     // pub fn RsopFileAccessCheck();
128     // pub fn RsopSetPolicySettingStatus();
129     // pub fn RsopResetPolicySettingStatus();
130     // pub fn GenerateGPNotification();
CreateAppContainerProfile( pszAppContainerName: PCWSTR, pszDisplayName: PCWSTR, pszDescription: PCWSTR, pCapabilities: PSID_AND_ATTRIBUTES, dwCapabilityCount: DWORD, ppSidAppContainerSid: *mut PSID, ) -> HRESULT131     pub fn CreateAppContainerProfile(
132         pszAppContainerName: PCWSTR,
133         pszDisplayName: PCWSTR,
134         pszDescription: PCWSTR,
135         pCapabilities: PSID_AND_ATTRIBUTES,
136         dwCapabilityCount: DWORD,
137         ppSidAppContainerSid: *mut PSID,
138     ) -> HRESULT;
DeleteAppContainerProfile( pszAppContainerName: PCWSTR, ) -> HRESULT139     pub fn DeleteAppContainerProfile(
140         pszAppContainerName: PCWSTR,
141     ) -> HRESULT;
GetAppContainerRegistryLocation( desiredAccess: REGSAM, phAppContainerKey: PHKEY, ) -> HRESULT142     pub fn GetAppContainerRegistryLocation(
143         desiredAccess: REGSAM,
144         phAppContainerKey: PHKEY,
145     ) -> HRESULT;
GetAppContainerFolderPath( pszAppContainerSid: PCWSTR, ppszPath: *mut PWSTR, ) -> HRESULT146     pub fn GetAppContainerFolderPath(
147         pszAppContainerSid: PCWSTR,
148         ppszPath: *mut PWSTR,
149     ) -> HRESULT;
DeriveAppContainerSidFromAppContainerName( pszAppContainerName: PCWSTR, ppsidAppContainerSid: *mut PSID, ) -> HRESULT150     pub fn DeriveAppContainerSidFromAppContainerName(
151         pszAppContainerName: PCWSTR,
152         ppsidAppContainerSid: *mut PSID,
153     ) -> HRESULT;
DeriveRestrictedAppContainerSidFromAppContainerSidAndRestrictedName( psidAppContainerSid: PSID, pszRestrictedAppContainerName: PCWSTR, ppsidRestrictedAppContainerSid: *mut PSID, ) -> HRESULT154     pub fn DeriveRestrictedAppContainerSidFromAppContainerSidAndRestrictedName(
155         psidAppContainerSid: PSID,
156         pszRestrictedAppContainerName: PCWSTR,
157         ppsidRestrictedAppContainerSid: *mut PSID,
158     ) -> HRESULT;
159 }
160