100 lines
1.4 KiB
C
100 lines
1.4 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 2000 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
vfrandom.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This module implements support for random number generation needed by the
|
||
|
verifier.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Adrian J. Oney (adriao) 28-Jun-2000
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
Kernel mode
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "vfdef.h"
|
||
|
|
||
|
#ifdef ALLOC_PRAGMA
|
||
|
#pragma alloc_text(INIT, VfRandomInit)
|
||
|
#pragma alloc_text(PAGEVRFY, VfRandomGetNumber)
|
||
|
#endif // ALLOC_PRAGMA
|
||
|
|
||
|
|
||
|
VOID
|
||
|
VfRandomInit(
|
||
|
VOID
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine initializes the random number generator, seeing it based on
|
||
|
the startup time of the machine.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
ULONG
|
||
|
FASTCALL
|
||
|
VfRandomGetNumber(
|
||
|
IN ULONG Minimum,
|
||
|
IN ULONG Maximum
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine returns a random number in the range [Minimum, Maximum].
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
Minimum - Minimum value returnable
|
||
|
|
||
|
Maximum - Maximum value returnable
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
A random number between Minimum and Maximum
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
LARGE_INTEGER performanceCounter;
|
||
|
|
||
|
//
|
||
|
// This should be replaced with the algorithm from rtl\random.c
|
||
|
//
|
||
|
KeQueryPerformanceCounter(&performanceCounter);
|
||
|
|
||
|
if (Maximum + 1 == Minimum) {
|
||
|
|
||
|
return performanceCounter.LowPart;
|
||
|
|
||
|
} else {
|
||
|
|
||
|
return (performanceCounter.LowPart % (Maximum - Minimum + 1)) + Minimum;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|