Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Shawn McKinney
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