mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
258 lines
4.3 KiB
258 lines
4.3 KiB
#include <nt.h>
|
|
#include <ntrtl.h>
|
|
#include <nturtl.h>
|
|
#include <windows.h>
|
|
#include "null.h"
|
|
|
|
#define NULL1_ITERATIONS 25000
|
|
ULONG Longs[32];
|
|
|
|
//
|
|
// Define local types.
|
|
//
|
|
|
|
typedef struct _PERFINFO {
|
|
DWORD StartTime;
|
|
DWORD StopTime;
|
|
PCHAR Title;
|
|
ULONG Iterations;
|
|
} PERFINFO, *PPERFINFO;
|
|
|
|
VOID
|
|
StartBenchMark (
|
|
IN PCHAR Title,
|
|
IN ULONG Iterations,
|
|
IN PPERFINFO PerfInfo
|
|
);
|
|
VOID
|
|
FinishBenchMark (
|
|
IN PPERFINFO PerfInfo
|
|
);
|
|
|
|
VOID
|
|
Null1Test (
|
|
VOID
|
|
)
|
|
|
|
{
|
|
|
|
ULONG Index;
|
|
PERFINFO PerfInfo;
|
|
|
|
//
|
|
// Announce start of benchmark and capture performance parmeters.
|
|
//
|
|
|
|
StartBenchMark("Null1 Benchmark",
|
|
NULL1_ITERATIONS, &PerfInfo);
|
|
|
|
//
|
|
// Repeatedly call a short system service.
|
|
//
|
|
|
|
for (Index = 0; Index < NULL1_ITERATIONS; Index += 1) {
|
|
Null1(Longs[32]);
|
|
}
|
|
|
|
//
|
|
// Print out performance statistics.
|
|
//
|
|
|
|
FinishBenchMark(&PerfInfo);
|
|
return;
|
|
}
|
|
VOID
|
|
Null4Test (
|
|
VOID
|
|
)
|
|
|
|
{
|
|
|
|
ULONG Index;
|
|
PERFINFO PerfInfo;
|
|
|
|
//
|
|
// Announce start of benchmark and capture performance parmeters.
|
|
//
|
|
|
|
StartBenchMark("Null4 Benchmark",
|
|
NULL1_ITERATIONS, &PerfInfo);
|
|
|
|
//
|
|
// Repeatedly call a short system service.
|
|
//
|
|
|
|
for (Index = 0; Index < NULL1_ITERATIONS; Index += 1) {
|
|
Null4(&Longs[0]);
|
|
}
|
|
|
|
//
|
|
// Print out performance statistics.
|
|
//
|
|
|
|
FinishBenchMark(&PerfInfo);
|
|
return;
|
|
}
|
|
VOID
|
|
Null8Test (
|
|
VOID
|
|
)
|
|
|
|
{
|
|
|
|
ULONG Index;
|
|
PERFINFO PerfInfo;
|
|
|
|
//
|
|
// Announce start of benchmark and capture performance parmeters.
|
|
//
|
|
|
|
StartBenchMark("Null8 Benchmark",
|
|
NULL1_ITERATIONS, &PerfInfo);
|
|
|
|
//
|
|
// Repeatedly call a short system service.
|
|
//
|
|
|
|
for (Index = 0; Index < NULL1_ITERATIONS; Index += 1) {
|
|
Null8(&Longs[0]);
|
|
}
|
|
|
|
//
|
|
// Print out performance statistics.
|
|
//
|
|
|
|
FinishBenchMark(&PerfInfo);
|
|
return;
|
|
}
|
|
VOID
|
|
Null16Test (
|
|
VOID
|
|
)
|
|
|
|
{
|
|
|
|
ULONG Index;
|
|
PERFINFO PerfInfo;
|
|
|
|
//
|
|
// Announce start of benchmark and capture performance parmeters.
|
|
//
|
|
|
|
StartBenchMark("Null16 Benchmark",
|
|
NULL1_ITERATIONS, &PerfInfo);
|
|
|
|
//
|
|
// Repeatedly call a short system service.
|
|
//
|
|
|
|
for (Index = 0; Index < NULL1_ITERATIONS; Index += 1) {
|
|
Null16(&Longs[0]);
|
|
}
|
|
|
|
//
|
|
// Print out performance statistics.
|
|
//
|
|
|
|
FinishBenchMark(&PerfInfo);
|
|
return;
|
|
}
|
|
|
|
|
|
void
|
|
main(
|
|
int argc,
|
|
char *argv[],
|
|
char *envp[],
|
|
ULONG DebugParameter OPTIONAL
|
|
)
|
|
{
|
|
NTSTATUS st;
|
|
ULONG i;
|
|
|
|
for(i=0;i<32;i++){
|
|
Longs[i] = i;
|
|
}
|
|
|
|
st = NullConnect();
|
|
if ( !NT_SUCCESS(st) ) {
|
|
printf("NullConnect Failed %x\n",st);
|
|
ExitProcess(1);
|
|
}
|
|
|
|
st = Null1(Longs[32]);
|
|
if ( !NT_SUCCESS(st) ) {
|
|
printf("Null1 Failed %x\n",st);
|
|
ExitProcess(1);
|
|
}
|
|
|
|
st = Null4(&Longs[0]);
|
|
if ( !NT_SUCCESS(st) ) {
|
|
printf("Null4 Failed %x\n",st);
|
|
ExitProcess(1);
|
|
}
|
|
|
|
st = Null8(&Longs[0]);
|
|
if ( !NT_SUCCESS(st) ) {
|
|
printf("Null8 Failed %x\n",st);
|
|
ExitProcess(1);
|
|
}
|
|
|
|
st = Null16(&Longs[0]);
|
|
if ( !NT_SUCCESS(st) ) {
|
|
printf("Null16 Failed %x\n",st);
|
|
ExitProcess(1);
|
|
}
|
|
|
|
Null1Test();
|
|
Null4Test();
|
|
Null8Test();
|
|
Null16Test();
|
|
|
|
ExitProcess(st);
|
|
}
|
|
|
|
VOID
|
|
FinishBenchMark (
|
|
IN PPERFINFO PerfInfo
|
|
)
|
|
|
|
{
|
|
|
|
DWORD Duration;
|
|
ULONG Length;
|
|
ULONG Performance;
|
|
|
|
//
|
|
// Print results and announce end of test.
|
|
//
|
|
|
|
PerfInfo->StopTime = GetTickCount();
|
|
Duration = PerfInfo->StopTime - PerfInfo->StartTime;
|
|
printf(" Test time in milliseconds %d\n", Duration);
|
|
printf(" Number of iterations %d\n", PerfInfo->Iterations);
|
|
Performance = PerfInfo->Iterations * 1000 / Duration;
|
|
printf(" Iterations per second %d\n", Performance);
|
|
printf("*** End of Test ***\n\n");
|
|
return;
|
|
}
|
|
|
|
VOID
|
|
StartBenchMark (
|
|
IN PCHAR Title,
|
|
IN ULONG Iterations,
|
|
IN PPERFINFO PerfInfo
|
|
)
|
|
|
|
{
|
|
|
|
//
|
|
// Announce start of test and the number of iterations.
|
|
//
|
|
|
|
printf("*** Start of test ***\n %s\n", Title);
|
|
PerfInfo->Title = Title;
|
|
PerfInfo->Iterations = Iterations;
|
|
PerfInfo->StartTime = GetTickCount();
|
|
return;
|
|
}
|