8 #include <botan/internal/es_win32.h>
11 #define _WINSOCKAPI_ // stop windows.h including winsock.h
22 const size_t POLL_TARGET = 128;
23 const size_t EST_ENTROPY_HEAP_INFO = 4;
24 const size_t EST_ENTROPY_THREAD_INFO = 2;
38 ::GetSystemInfo(&sys_info);
41 MEMORYSTATUSEX mem_info;
42 ::GlobalMemoryStatusEx(&mem_info);
46 ::GetCursorPos(&point);
49 ::GetCaretPos(&point);
57 HANDLE snapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
60 #define TOOLHELP32_ITER(DATA_TYPE, FUNC_FIRST, FUNC_NEXT) \
61 if(collected < POLL_TARGET) \
64 info.dwSize = sizeof(DATA_TYPE); \
65 if(FUNC_FIRST(snapshot, &info)) \
69 rng.add_entropy_T(info); \
70 collected += EST_ENTROPY_THREAD_INFO; \
71 if(collected >= POLL_TARGET) \
73 } while(FUNC_NEXT(snapshot, &info)); \
81 #undef TOOLHELP32_ITER
83 if(collected < POLL_TARGET)
86 heap_list.dwSize =
sizeof(HEAPLIST32);
88 if(::Heap32ListFirst(snapshot, &heap_list))
94 HEAPENTRY32 heap_entry;
95 heap_entry.dwSize =
sizeof(HEAPENTRY32);
96 if(::Heap32First(&heap_entry,
97 heap_list.th32ProcessID,
98 heap_list.th32HeapID))
103 collected += EST_ENTROPY_HEAP_INFO;
104 if(collected >= POLL_TARGET)
106 }
while(::Heap32Next(&heap_entry));
109 if(collected >= POLL_TARGET)
112 }
while(::Heap32ListNext(snapshot, &heap_list));
116 ::CloseHandle(snapshot);
void add_entropy_T(const T &t)
size_t poll(RandomNumberGenerator &rng) override
#define TOOLHELP32_ITER(DATA_TYPE, FUNC_FIRST, FUNC_NEXT)