diff --git a/build_win_debug_experimental.bat b/build_win_debug_experimental.bat
index 0a49f7b..4f39796 100644
--- a/build_win_debug_experimental.bat
+++ b/build_win_debug_experimental.bat
@@ -1,12 +1,10 @@
call build_set_protobuf_directories.bat
%PROTOBUF_X86_DIRECTORY%%PROTOC_DIRECTORY% -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto
call build_env_x86.bat
-cl dll/rtlgenrandom.c dll/rtlgenrandom.def
-cl /LD /I%PROTOBUF_X86_DIRECTORY%\include\ /DEMU_EXPERIMENTAL_BUILD dll/*.cpp dll/*.cc detours/*.cpp %PROTOBUF_X86_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib /EHsc /MP12 /link /OUT:steam_api.dll
+cl /LD /I%PROTOBUF_X86_DIRECTORY%\include\ /DEMU_EXPERIMENTAL_BUILD dll/*.cpp dll/*.cc detours/*.cpp %PROTOBUF_X86_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib Shell32.lib /EHsc /MP12 /link /OUT:steam_api.dll
cl /LD steamclient.cpp /EHsc /MP12 /link /OUT:steamclient.dll
cl /LD steamnetworkingsockets.cpp /EHsc /MP12 /link /OUT:steamnetworkingsockets.dll
call build_env_x64.bat
-cl dll/rtlgenrandom.c dll/rtlgenrandom.def
-cl /LD /I%PROTOBUF_X64_DIRECTORY%\include\ /DEMU_EXPERIMENTAL_BUILD dll/*.cpp dll/*.cc detours/*.cpp %PROTOBUF_X64_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib /EHsc /MP12 /link /OUT:steam_api64.dll
+cl /LD /I%PROTOBUF_X64_DIRECTORY%\include\ /DEMU_EXPERIMENTAL_BUILD dll/*.cpp dll/*.cc detours/*.cpp %PROTOBUF_X64_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib Shell32.lib /EHsc /MP12 /link /OUT:steam_api64.dll
cl /LD steamclient.cpp /EHsc /MP12 /link /OUT:steamclient64.dll
cl /LD steamnetworkingsockets.cpp /EHsc /MP12 /link /OUT:steamnetworkingsockets64.dll
diff --git a/build_win_lobby_connect.bat b/build_win_lobby_connect.bat
index a2fbd18..bd2b29e 100644
--- a/build_win_lobby_connect.bat
+++ b/build_win_lobby_connect.bat
@@ -3,8 +3,7 @@ del /Q release\lobby_connect\*
call build_set_protobuf_directories.bat
%PROTOBUF_X86_DIRECTORY%%PROTOC_DIRECTORY% -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto
call build_env_x86.bat
-cl dll/rtlgenrandom.c dll/rtlgenrandom.def
-cl /DNO_DISK_WRITES /DLOBBY_CONNECT /DEMU_RELEASE_BUILD /DNDEBUG /I%PROTOBUF_X86_DIRECTORY%\include\ lobby_connect.cpp dll/*.cpp dll/*.cc %PROTOBUF_X86_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib Comdlg32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\lobby_connect\lobby_connect.exe
+cl /DNO_DISK_WRITES /DLOBBY_CONNECT /DEMU_RELEASE_BUILD /DNDEBUG /I%PROTOBUF_X86_DIRECTORY%\include\ lobby_connect.cpp dll/*.cpp dll/*.cc %PROTOBUF_X86_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib Shell32.lib Comdlg32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\lobby_connect\lobby_connect.exe
del /Q /S release\lobby_connect\*.lib
del /Q /S release\lobby_connect\*.exp
copy Readme_lobby_connect.txt release\lobby_connect\Readme.txt
diff --git a/build_win_release.bat b/build_win_release.bat
index 329012d..2a531ea 100644
--- a/build_win_release.bat
+++ b/build_win_release.bat
@@ -6,12 +6,10 @@ mkdir release
call build_set_protobuf_directories.bat
%PROTOBUF_X86_DIRECTORY%%PROTOC_DIRECTORY% -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto
call build_env_x86.bat
-cl dll/rtlgenrandom.c dll/rtlgenrandom.def
-cl /LD /DEMU_RELEASE_BUILD /DNDEBUG /I%PROTOBUF_X86_DIRECTORY%\include\ dll/*.cpp dll/*.cc %PROTOBUF_X86_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\steam_api.dll
+cl /LD /DEMU_RELEASE_BUILD /DNDEBUG /I%PROTOBUF_X86_DIRECTORY%\include\ dll/*.cpp dll/*.cc %PROTOBUF_X86_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib Shell32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\steam_api.dll
%PROTOBUF_X64_DIRECTORY%%PROTOC_DIRECTORY% -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto
call build_env_x64.bat
-cl dll/rtlgenrandom.c dll/rtlgenrandom.def
-cl /LD /DEMU_RELEASE_BUILD /DNDEBUG /I%PROTOBUF_X64_DIRECTORY%\include\ dll/*.cpp dll/*.cc %PROTOBUF_X64_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\steam_api64.dll
+cl /LD /DEMU_RELEASE_BUILD /DNDEBUG /I%PROTOBUF_X64_DIRECTORY%\include\ dll/*.cpp dll/*.cc %PROTOBUF_X64_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib Shell32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\steam_api64.dll
copy Readme_release.txt release\Readme.txt
xcopy /s files_example\* release\
call build_win_release_experimental.bat
diff --git a/build_win_release_experimental.bat b/build_win_release_experimental.bat
index d4acf0c..59e2785 100644
--- a/build_win_release_experimental.bat
+++ b/build_win_release_experimental.bat
@@ -3,12 +3,10 @@ del /Q release\experimental\*
call build_set_protobuf_directories.bat
%PROTOBUF_X86_DIRECTORY%%PROTOC_DIRECTORY% -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto
call build_env_x86.bat
-cl dll/rtlgenrandom.c dll/rtlgenrandom.def
-cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DNDEBUG /I%PROTOBUF_X86_DIRECTORY%\include\ dll/*.cpp dll/*.cc detours/*.cpp %PROTOBUF_X86_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\experimental\steam_api.dll
+cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DNDEBUG /I%PROTOBUF_X86_DIRECTORY%\include\ dll/*.cpp dll/*.cc detours/*.cpp %PROTOBUF_X86_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib Shell32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\experimental\steam_api.dll
cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DNDEBUG steamclient.cpp /EHsc /MP12 /Ox /link /OUT:release\experimental\steamclient.dll
%PROTOBUF_X64_DIRECTORY%%PROTOC_DIRECTORY% -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto
call build_env_x64.bat
-cl dll/rtlgenrandom.c dll/rtlgenrandom.def
-cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DNDEBUG /I%PROTOBUF_X64_DIRECTORY%\include\ dll/*.cpp dll/*.cc detours/*.cpp %PROTOBUF_X64_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\experimental\steam_api64.dll
+cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DNDEBUG /I%PROTOBUF_X64_DIRECTORY%\include\ dll/*.cpp dll/*.cc detours/*.cpp %PROTOBUF_X64_DIRECTORY%%PROTOBUF_LIBRARY% Iphlpapi.lib Ws2_32.lib Shell32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\experimental\steam_api64.dll
cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DNDEBUG steamclient.cpp /EHsc /MP12 /Ox /link /OUT:release\experimental\steamclient64.dll
copy Readme_experimental.txt release\experimental\Readme.txt
diff --git a/dll/base.cpp b/dll/base.cpp
index 7a69f0a..7a2dcf8 100644
--- a/dll/base.cpp
+++ b/dll/base.cpp
@@ -16,32 +16,62 @@
. */
#include "base.h"
+#include
+
+// Random device generator
+static std::random_device rd;
+static std::mt19937 gen(rd());
+
+static void randombytes(char* buf, size_t len)
+{
+ // uniform integer distribution
+ std::uniform_int_distribution<> dis(std::numeric_limits::min(), std::numeric_limits::max());
+
+ // Make sure we can hold our buffer size as int32_t
+ size_t rand_buf_len = len / 4 + 1;
+ int32_t* rand_buf = new int32_t[rand_buf_len];
+ // Generator some (pseudo) random numbers
+ for (int i = 0; i < rand_buf_len; ++i)
+ rand_buf[i] = dis(gen);
+
+ // Copy the random bytes to buffer
+ memcpy(buf, rand_buf, len);
+
+ // Don't forget to free it
+ delete[]rand_buf;
+}
#ifdef STEAM_WIN32
#include
#include
-#define SystemFunction036 NTAPI SystemFunction036
-#include
-#undef SystemFunction036
-
-static void
-randombytes(char * const buf, const size_t size)
-{
-
- RtlGenRandom((PVOID) buf, (ULONG) size);
-}
-
std::string get_env_variable(std::string name)
{
- char env_variable[1024];
- DWORD ret = GetEnvironmentVariableA(name.c_str(), env_variable, sizeof(env_variable));
- if (ret <= 0) {
- return std::string();
- }
+ // base env buffer size
+ constexpr size_t base_size = 1024;
+ DWORD size = base_size;
+ std::string res(base_size, '\0');
+ size = GetEnvironmentVariableA(name.c_str(), const_cast(res.c_str()), size);
+ if (size <= 0) {
+ return std::string();
+ }
+ // If GetEnvironmentVariable return is greater than the buffer size,
+ // then the return parameter is the env var size
+ if (size > base_size)
+ {
+ // So allocate that much buffer to hold it all
+ res.resize(size);
+ size = GetEnvironmentVariableA(name.c_str(), const_cast(res.c_str()), size);
+ if (size <= 0)
+ {
+ return std::string();
+ }
+ }
+ // Then resize to what we need (without the null char,
+ // cause c_str() assures that it has a null char)
+ res.resize(size);
- env_variable[ret] = 0;
- return std::string(env_variable);
+ return res;
}
#else
@@ -51,34 +81,6 @@ std::string get_env_variable(std::string name)
#include
#include
-static int fd = -1;
-
-static void randombytes(char *buf, size_t size)
-{
- int i;
-
- if (fd == -1) {
- for (;;) {
- fd = open("/dev/urandom",O_RDONLY);
- if (fd != -1) break;
- sleep(1);
- }
- }
-
- while (size > 0) {
- if (size < 1048576) i = size; else i = 1048576;
-
- i = read(fd,buf,i);
- if (i < 1) {
- sleep(1);
- continue;
- }
-
- buf += i;
- size -= i;
- }
-}
-
std::string get_env_variable(std::string name)
{
char *env = getenv(name.c_str());
diff --git a/dll/rtlgenrandom.c b/dll/rtlgenrandom.c
deleted file mode 100644
index e160da4..0000000
--- a/dll/rtlgenrandom.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include
-#define RtlGenRandom SystemFunction036
-#define DLLEXPORT __declspec(dllexport)
-DLLEXPORT BOOLEAN WINAPI RtlGenRandom(PVOID in, ULONG len) {}
\ No newline at end of file
diff --git a/dll/rtlgenrandom.def b/dll/rtlgenrandom.def
deleted file mode 100644
index 3f23d20..0000000
--- a/dll/rtlgenrandom.def
+++ /dev/null
@@ -1,3 +0,0 @@
-LIBRARY advapi32.dll
-EXPORTS
-SystemFunction036
\ No newline at end of file