unsigned int osip_build_random_number() { HCRYPTPROV crypto; BOOL err; unsigned int num; if (!random_seed_set) { unsigned int ticks; LARGE_INTEGER lCount; QueryPerformanceCounter(&lCount); ticks = lCount.LowPart + lCount.HighPart; srand(ticks); random_seed_set = 1; } err = CryptAcquireContext(&crypto, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT); if (err) { err = CryptGenRandom(crypto, sizeof(num), (BYTE *) & num); CryptReleaseContext(crypto, 0); } if (!err) { num = osip_fallback_random_number(); } return num; }
unsigned int osip_build_random_number () { HCRYPTPROV crypto; BOOL err; unsigned int num; err = CryptAcquireContext (&crypto, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT); if (err) { err = CryptGenRandom (crypto, sizeof (num), (BYTE *) & num); CryptReleaseContext (crypto, 0); } if (!err) { num = osip_fallback_random_number (); } return num; }