winapi_ui_automation/um/
libloaderapi.rs

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//! ApiSet Contract for api-ms-win-core-libraryloader-l1
7use ctypes::c_int;
8use shared::basetsd::LONG_PTR;
9use shared::minwindef::{
10    BOOL, DWORD, FARPROC, HGLOBAL, HINSTANCE, HMODULE, HRSRC, LPVOID, UINT, WORD
11};
12use um::winnt::{HANDLE, LANGID, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PCWSTR, PVOID};
13pub const GET_MODULE_HANDLE_EX_FLAG_PIN: DWORD = 0x00000001;
14pub const GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT: DWORD = 0x00000002;
15pub const GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS: DWORD = 0x00000004;
16pub const DONT_RESOLVE_DLL_REFERENCES: DWORD = 0x00000001;
17pub const LOAD_LIBRARY_AS_DATAFILE: DWORD = 0x00000002;
18pub const LOAD_WITH_ALTERED_SEARCH_PATH: DWORD = 0x00000008;
19pub const LOAD_IGNORE_CODE_AUTHZ_LEVEL: DWORD = 0x00000010;
20pub const LOAD_LIBRARY_AS_IMAGE_RESOURCE: DWORD = 0x00000020;
21pub const LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE: DWORD = 0x00000040;
22pub const LOAD_LIBRARY_REQUIRE_SIGNED_TARGET: DWORD = 0x00000080;
23pub const LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR: DWORD = 0x00000100;
24pub const LOAD_LIBRARY_SEARCH_APPLICATION_DIR: DWORD = 0x00000200;
25pub const LOAD_LIBRARY_SEARCH_USER_DIRS: DWORD = 0x00000400;
26pub const LOAD_LIBRARY_SEARCH_SYSTEM32: DWORD = 0x00000800;
27pub const LOAD_LIBRARY_SEARCH_DEFAULT_DIRS: DWORD = 0x00001000;
28pub const LOAD_LIBRARY_SAFE_CURRENT_DIRS: DWORD = 0x00002000;
29pub const LOAD_LIBRARY_SEARCH_SYSTEM32_NO_FORWARDER: DWORD = 0x00004000;
30pub const LOAD_LIBRARY_OS_INTEGRITY_CONTINUITY: DWORD = 0x00008000;
31FN!{stdcall ENUMRESLANGPROCA(
32    hModule: HMODULE,
33    lpType: LPCSTR,
34    lpName: LPCSTR,
35    wLanguage: WORD,
36    lParam: LONG_PTR,
37) -> BOOL}
38FN!{stdcall ENUMRESLANGPROCW(
39    hModule: HMODULE,
40    lpType: LPCWSTR,
41    lpName: LPCWSTR,
42    wLanguage: WORD,
43    lParam: LONG_PTR,
44) -> BOOL}
45FN!{stdcall ENUMRESNAMEPROCA(
46    hModule: HMODULE,
47    lpType: LPCSTR,
48    lpName: LPSTR,
49    lParam: LONG_PTR,
50) -> BOOL}
51FN!{stdcall ENUMRESNAMEPROCW(
52    hModule: HMODULE,
53    lpType: LPCWSTR,
54    lpName: LPWSTR,
55    lParam: LONG_PTR,
56) -> BOOL}
57FN!{stdcall ENUMRESTYPEPROCA(
58    hModule: HMODULE,
59    lpType: LPSTR,
60    lParam: LONG_PTR,
61) -> BOOL}
62FN!{stdcall ENUMRESTYPEPROCW(
63    hModule: HMODULE,
64    lpType: LPWSTR,
65    lParam: LONG_PTR,
66) -> BOOL}
67extern "system" {
68    pub fn DisableThreadLibraryCalls(
69        hLibModule: HMODULE,
70    ) -> BOOL;
71    pub fn FindResourceExW(
72        hModule: HMODULE,
73        lpName: LPCWSTR,
74        lpType: LPCWSTR,
75        wLanguage: WORD,
76    ) -> HRSRC;
77    pub fn FindStringOrdinal(
78        dwFindStringOrdinalFlags: DWORD,
79        lpStringSource: LPCWSTR,
80        cchSource: c_int,
81        lpStringValue: LPCWSTR,
82        cchValue: c_int,
83        bIgnoreCase: BOOL,
84    ) -> c_int;
85    pub fn FreeLibrary(
86        hLibModule: HMODULE,
87    ) -> BOOL;
88    pub fn FreeLibraryAndExitThread(
89        hLibModule: HMODULE,
90        dwExitCode: DWORD,
91    );
92    pub fn FreeResource(
93        hResData: HGLOBAL,
94    ) -> BOOL;
95    pub fn GetModuleFileNameA(
96        hModule: HMODULE,
97        lpFilename: LPSTR,
98        nSize: DWORD,
99    ) -> DWORD;
100    pub fn GetModuleFileNameW(
101        hModule: HMODULE,
102        lpFilename: LPWSTR,
103        nSize: DWORD,
104    ) -> DWORD;
105    pub fn GetModuleHandleA(
106        lpModuleName: LPCSTR,
107    ) -> HMODULE;
108    pub fn GetModuleHandleW(
109        lpModuleName: LPCWSTR,
110    ) -> HMODULE;
111    pub fn GetModuleHandleExA(
112        dwFlags: DWORD,
113        lpModuleName: LPCSTR,
114        phModule: *mut HMODULE,
115    ) -> BOOL;
116    pub fn GetModuleHandleExW(
117        dwFlags: DWORD,
118        lpModuleName: LPCWSTR,
119        phModule: *mut HMODULE,
120    ) -> BOOL;
121    pub fn GetProcAddress(
122        hModule: HMODULE,
123        lpProcName: LPCSTR,
124    ) -> FARPROC;
125    pub fn LoadLibraryExA(
126        lpLibFileName: LPCSTR,
127        hFile: HANDLE,
128        dwFlags: DWORD,
129    ) -> HMODULE;
130    pub fn LoadLibraryExW(
131        lpLibFileName: LPCWSTR,
132        hFile: HANDLE,
133        dwFlags: DWORD,
134    ) -> HMODULE;
135    pub fn LoadResource(
136        hModule: HMODULE,
137        hResInfo: HRSRC,
138    ) -> HGLOBAL;
139    pub fn LoadStringA(
140        hInstance: HINSTANCE,
141        uID: UINT,
142        lpBuffer: LPSTR,
143        cchBufferMax: c_int,
144    ) -> c_int;
145    pub fn LoadStringW(
146        hInstance: HINSTANCE,
147        uID: UINT,
148        lpBuffer: LPWSTR,
149        cchBufferMax: c_int,
150    ) -> c_int;
151    pub fn LockResource(
152        hResData: HGLOBAL,
153    ) -> LPVOID;
154    pub fn SizeofResource(
155        hModule: HMODULE,
156        hResInfo: HRSRC,
157    ) -> DWORD;
158}
159pub type DLL_DIRECTORY_COOKIE = PVOID;
160pub type PDLL_DIRECTORY_COOKIE = *mut PVOID;
161extern "system" {
162    pub fn AddDllDirectory(
163        NewDirectory: PCWSTR,
164    ) -> DLL_DIRECTORY_COOKIE;
165    pub fn RemoveDllDirectory(
166        Cookie: DLL_DIRECTORY_COOKIE,
167    ) -> BOOL;
168    pub fn SetDefaultDllDirectories(
169        DirectoryFlags: DWORD,
170    ) -> BOOL;
171    pub fn EnumResourceLanguagesExA(
172        hModule: HMODULE,
173        lpType: LPCSTR,
174        lpName: LPCSTR,
175        lpEnumFunc: ENUMRESLANGPROCA,
176        lParam: LONG_PTR,
177        dwFlags: DWORD,
178        LangId: LANGID,
179    ) -> BOOL;
180    pub fn EnumResourceLanguagesExW(
181        hModule: HMODULE,
182        lpType: LPCWSTR,
183        lpName: LPCWSTR,
184        lpEnumFunc: ENUMRESLANGPROCW,
185        lParam: LONG_PTR,
186        dwFlags: DWORD,
187        LangId: LANGID,
188    ) -> BOOL;
189    pub fn EnumResourceNamesExA(
190        hModule: HMODULE,
191        lpType: LPCSTR,
192        lpEnumFunc: ENUMRESNAMEPROCA,
193        lParam: LONG_PTR,
194        dwFlags: DWORD,
195        LangId: LANGID,
196    ) -> BOOL;
197    pub fn EnumResourceNamesExW(
198        hModule: HMODULE,
199        lpType: LPCWSTR,
200        lpEnumFunc: ENUMRESNAMEPROCW,
201        lParam: LONG_PTR,
202        dwFlags: DWORD,
203        LangId: LANGID,
204    ) -> BOOL;
205    pub fn EnumResourceTypesExA(
206        hModule: HMODULE,
207        lpEnumFunc: ENUMRESTYPEPROCA,
208        lParam: LONG_PTR,
209        dwFlags: DWORD,
210        LangId: LANGID,
211    ) -> BOOL;
212    pub fn EnumResourceTypesExW(
213        hModule: HMODULE,
214        lpEnumFunc: ENUMRESTYPEPROCW,
215        lParam: LONG_PTR,
216        dwFlags: DWORD,
217        LangId: LANGID,
218    ) -> BOOL;
219    pub fn FindResourceW(
220        hModule: HMODULE,
221        lpName: LPCWSTR,
222        lpType: LPCWSTR,
223    ) -> HRSRC;
224    pub fn LoadLibraryA(
225        lpFileName: LPCSTR,
226    ) -> HMODULE;
227    pub fn LoadLibraryW(
228        lpFileName: LPCWSTR,
229    ) -> HMODULE;
230    pub fn EnumResourceNamesW(
231        hModule: HMODULE,
232        lpType: LPCWSTR,
233        lpEnumFunc: ENUMRESNAMEPROCW,
234        lParam: LONG_PTR,
235    ) -> BOOL;
236}