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