* generator.
*/
-#include <windows.h>
#include <stdio.h>
#include "putty.h"
#include "storage.h"
/*
- * GetSystemPowerStatus function.
- */
-typedef BOOL (WINAPI *gsps_t)(LPSYSTEM_POWER_STATUS);
-static gsps_t gsps;
-
-/*
* This function is called once, at PuTTY startup, and will do some
* seriously silly things like listing directories and getting disk
* free space and a process snapshot.
*/
-void noise_get_heavy(void (*func) (void *, int)) {
+void noise_get_heavy(void (*func) (void *, int))
+{
HANDLE srch;
WIN32_FIND_DATA finddata;
- char winpath[MAX_PATH+3];
- HMODULE mod;
+ char winpath[MAX_PATH + 3];
GetWindowsDirectory(winpath, sizeof(winpath));
strcat(winpath, "\\*");
}
read_random_seed(func);
-
- gsps = NULL;
- mod = GetModuleHandle("KERNEL32");
- if (mod) {
- gsps = (gsps_t)GetProcAddress(mod, "GetSystemPowerStatus");
- }
+ /* Update the seed immediately, in case another instance uses it. */
+ random_save_seed();
}
-void random_save_seed(void) {
+void random_save_seed(void)
+{
int len;
void *data;
- random_get_savedata(&data, &len);
- write_random_seed(data, len);
+ if (random_active) {
+ random_get_savedata(&data, &len);
+ write_random_seed(data, len);
+ sfree(data);
+ }
}
/*
* stirring, and will acquire the system time in all available
* forms and the battery status.
*/
-void noise_get_light(void (*func) (void *, int)) {
+void noise_get_light(void (*func) (void *, int))
+{
SYSTEMTIME systime;
DWORD adjust[2];
BOOL rubbish;
- SYSTEM_POWER_STATUS pwrstat;
GetSystemTime(&systime);
func(&systime, sizeof(systime));
GetSystemTimeAdjustment(&adjust[0], &adjust[1], &rubbish);
func(&adjust, sizeof(adjust));
-
- /*
- * Call GetSystemPowerStatus if present.
- */
- if (gsps) {
- if (gsps(&pwrstat))
- func(&pwrstat, sizeof(pwrstat));
- }
}
/*
* virtual memory, the state of the process's message queue, which
* window is in the foreground, which owns the clipboard, etc.
*/
-void noise_regular(void) {
+void noise_regular(void)
+{
HWND w;
DWORD z;
POINT pt;
MEMORYSTATUS memstat;
FILETIME times[4];
- w = GetForegroundWindow(); random_add_noise(&w, sizeof(w));
- w = GetCapture(); random_add_noise(&w, sizeof(w));
- w = GetClipboardOwner(); random_add_noise(&w, sizeof(w));
- z = GetQueueStatus(QS_ALLEVENTS); random_add_noise(&z, sizeof(z));
+ w = GetForegroundWindow();
+ random_add_noise(&w, sizeof(w));
+ w = GetCapture();
+ random_add_noise(&w, sizeof(w));
+ w = GetClipboardOwner();
+ random_add_noise(&w, sizeof(w));
+ z = GetQueueStatus(QS_ALLEVENTS);
+ random_add_noise(&z, sizeof(z));
- GetCursorPos(&pt); random_add_noise(&pt, sizeof(pt));
+ GetCursorPos(&pt);
+ random_add_noise(&pt, sizeof(pt));
- GlobalMemoryStatus(&memstat); random_add_noise(&memstat, sizeof(memstat));
+ GlobalMemoryStatus(&memstat);
+ random_add_noise(&memstat, sizeof(memstat));
- GetThreadTimes(GetCurrentThread(), times, times+1, times+2, times+3);
+ GetThreadTimes(GetCurrentThread(), times, times + 1, times + 2,
+ times + 3);
random_add_noise(×, sizeof(times));
- GetProcessTimes(GetCurrentProcess(), times, times+1, times+2, times+3);
+ GetProcessTimes(GetCurrentProcess(), times, times + 1, times + 2,
+ times + 3);
random_add_noise(×, sizeof(times));
}
* counter to the noise pool. It gets the scan code or mouse
* position passed in.
*/
-void noise_ultralight(DWORD data) {
+void noise_ultralight(unsigned long data)
+{
DWORD wintime;
LARGE_INTEGER perftime;