From 24e4f7e73de9be8004620603e9bd97b4b2ffc0e2 Mon Sep 17 00:00:00 2001 From: Thomas Faber Date: Mon, 10 Oct 2011 00:17:02 +0000 Subject: [PATCH] [ADVAPI32] - Hackfix RtlGenRandom to be slightly less dependent on the current time, while staying very un-random. - Should fix services problems (no joke) due to non-unique RPC UUIDs See issue #6542 for more details. svn path=/trunk/; revision=54069 --- reactos/dll/win32/advapi32/misc/sysfunc.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/advapi32/misc/sysfunc.c b/reactos/dll/win32/advapi32/misc/sysfunc.c index 1512d38dc29..97d4ad24403 100644 --- a/reactos/dll/win32/advapi32/misc/sysfunc.c +++ b/reactos/dll/win32/advapi32/misc/sysfunc.c @@ -576,6 +576,8 @@ SystemFunction036(PVOID pbBuffer, ULONG dwLen) DWORD dwSeed; PBYTE pBuffer; ULONG uPseudoRandom; + LARGE_INTEGER time; + static ULONG uCounter = 17; if(!pbBuffer || !dwLen) { @@ -583,8 +585,9 @@ SystemFunction036(PVOID pbBuffer, ULONG dwLen) return TRUE; } - /* Get the first seed from the tick count */ - dwSeed = GetTickCount(); + /* Get the first seed from the performance counter */ + QueryPerformanceCounter(&time); + dwSeed = time.LowPart ^ time.HighPart ^ RtlUlongByteSwap(uCounter++); /* We will access the buffer bytewise */ pBuffer = (PBYTE)pbBuffer;