Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Nadezhda Ivanova
OpenLDAP
Commits
bdfb1671
Commit
bdfb1671
authored
Feb 18, 2018
by
Howard Chu
Browse files
ITS
#8324
More for Win32 NTDLL junk
Use GetProcAddress at runtime, avoid buildtime NTDLL link issues
parent
ec3e4ed9
Changes
2
Hide whitespace changes
Inline
Side-by-side
libraries/liblmdb/Makefile
View file @
bdfb1671
...
...
@@ -24,8 +24,8 @@ W = -W -Wall -Wno-unused-parameter -Wbad-function-cast -Wuninitialized
THREADS
=
-pthread
OPT
=
-O2
-g
CFLAGS
=
$(THREADS)
$(OPT)
$(W)
$(XCFLAGS)
LDLIBS
=
# -lntdll # Windows needs ntdll
SOLIBS
=
# -lntdll
LDLIBS
=
SOLIBS
=
SOEXT
=
.so
prefix
=
/usr/local
exec_prefix
=
$(prefix)
...
...
libraries/liblmdb/mdb.c
View file @
bdfb1671
...
...
@@ -48,29 +48,35 @@
* the full size. These APIs are defined in <wdm.h> and <ntifs.h>
* but those headers are meant for driver-level development and
* conflict with the regular user-level headers, so we explicitly
* declare them here. Using these APIs also means we must link to
* ntdll.dll, which is not linked by default in user code.
* declare them here. We get pointers to these functions from
* NTDLL.DLL at runtime, to avoid buildtime dependencies on any
* NTDLL import libraries.
*/
NTSTATUS WINAPI
NtCreateSection
(OUT PHANDLE sh, IN ACCESS_MASK acc,
typedef
NTSTATUS WINAPI
(NtCreateSectionFunc)
(OUT PHANDLE sh, IN ACCESS_MASK acc,
IN void * oa OPTIONAL,
IN PLARGE_INTEGER ms OPTIONAL,
IN ULONG pp, IN ULONG aa, IN HANDLE fh OPTIONAL);
static NtCreateSectionFunc *NtCreateSection;
typedef enum _SECTION_INHERIT {
ViewShare = 1,
ViewUnmap = 2
} SECTION_INHERIT;
NTSTATUS WINAPI
NtMapViewOfSection
(IN PHANDLE sh, IN HANDLE ph,
typedef
NTSTATUS WINAPI
(NtMapViewOfSectionFunc)
(IN PHANDLE sh, IN HANDLE ph,
IN OUT PVOID *addr, IN ULONG_PTR zbits,
IN SIZE_T cs, IN OUT PLARGE_INTEGER off OPTIONAL,
IN OUT PSIZE_T vs, IN SECTION_INHERIT ih,
IN ULONG at, IN ULONG pp);
NTSTATUS WINAPI
NtClose(HANDLE h);
static NtMapViewOfSectionFunc *NtMapViewOfSection;
typedef NTSTATUS WINAPI (NtCloseFunc)(HANDLE h);
static NtCloseFunc *NtClose;
/** getpid() returns int; MinGW defines pid_t but MinGW64 typedefs it
* as int64 which is wrong. MSVC doesn't define it at all, so just
...
...
@@ -5014,6 +5020,21 @@ mdb_env_open2(MDB_env *env, int prev)
env->me_pidquery = MDB_PROCESS_QUERY_LIMITED_INFORMATION;
else
env->me_pidquery = PROCESS_QUERY_INFORMATION;
/* Grab functions we need from NTDLL */
if (!NtCreateSection) {
HMODULE h = GetModuleHandle("NTDLL.DLL");
if (!h)
return MDB_PROBLEM;
NtClose = (NtCloseFunc *)GetProcAddress(h, "NtClose");
if (!NtClose)
return MDB_PROBLEM;
NtMapViewOfSection = (NtMapViewOfSectionFunc *)GetProcAddress(h, "NtMapViewOfSection");
if (!NtMapViewOfSection)
return MDB_PROBLEM;
NtCreateSection = (NtCreateSectionFunc *)GetProcAddress(h, "NtCreateSection");
if (!NtCreateSection)
return MDB_PROBLEM;
}
#endif /* _WIN32 */
#ifdef BROKEN_FDATASYNC
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment