mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-05 06:59:32 +03:00
use RtlGenRandom on windows to enable compilation as C++ even with dynamic override
This commit is contained in:
parent
53cbc68de3
commit
116159cd40
1 changed files with 17 additions and 8 deletions
25
src/random.c
25
src/random.c
|
@ -162,20 +162,29 @@ If we cannot get good randomness, we fall back to weak randomness based on a tim
|
||||||
-----------------------------------------------------------------------------*/
|
-----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
|
/*
|
||||||
|
// We prefer BCryptGenRandom over RtlGenRandom but it leads to a crash a when using dynamic override combined with the C++ runtime :-(
|
||||||
#pragma comment (lib,"bcrypt.lib")
|
#pragma comment (lib,"bcrypt.lib")
|
||||||
#include <bcrypt.h>
|
#include <bcrypt.h>
|
||||||
static bool os_random_buf(void* buf, size_t buf_len) {
|
static bool os_random_buf(void* buf, size_t buf_len) {
|
||||||
return (BCryptGenRandom(NULL, (PUCHAR)buf, (ULONG)buf_len, BCRYPT_USE_SYSTEM_PREFERRED_RNG) >= 0);
|
return (BCryptGenRandom(NULL, (PUCHAR)buf, (ULONG)buf_len, BCRYPT_USE_SYSTEM_PREFERRED_RNG) >= 0);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
#define SystemFunction036 NTAPI SystemFunction036
|
|
||||||
#include <NTSecAPI.h>
|
|
||||||
#undef SystemFunction036
|
|
||||||
static bool os_random_buf(void* buf, size_t buf_len) {
|
|
||||||
RtlGenRandom(buf, (ULONG)buf_len);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
*/
|
*/
|
||||||
|
#define RtlGenRandom SystemFunction036
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
BOOLEAN NTAPI RtlGenRandom(PVOID RandomBuffer, ULONG RandomBufferLength);
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
static bool os_random_buf(void* buf, size_t buf_len) {
|
||||||
|
mi_assert_internal(buf_len >= sizeof(uintptr_t));
|
||||||
|
memset(buf, 0, buf_len);
|
||||||
|
RtlGenRandom(buf, (ULONG)buf_len);
|
||||||
|
return (((uintptr_t*)buf)[0] != 0); // sanity check (but RtlGenRandom should never fail)
|
||||||
|
}
|
||||||
|
|
||||||
#elif defined(ANDROID) || defined(XP_DARWIN) || defined(__APPLE__) || defined(__DragonFly__) || \
|
#elif defined(ANDROID) || defined(XP_DARWIN) || defined(__APPLE__) || defined(__DragonFly__) || \
|
||||||
defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \
|
defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \
|
||||||
defined(__sun) || defined(__wasi__)
|
defined(__sun) || defined(__wasi__)
|
||||||
|
|
Loading…
Add table
Reference in a new issue