* UPDATE HISTORY:
* 06-07-2003 CSH Created
*/
+#define WIN32_NO_STATUS
#include <windows.h>
-#include <pseh.h>
+#define NTOS_MODE_USER
+#include <ndk/ntndk.h>
+#include <pseh/pseh.h>
#include "regtests.h"
#define NDEBUG
return 1;
}
-BOOL
-IsContextChanged(LPCONTEXT context1, LPCONTEXT context2)
-{
- return memcmp(context1, context2, sizeof(CONTEXT)) != 0;
-}
-
VOID
ControlNormalTest(HANDLE hThread,
PERFORM_TEST_ARGS *Args,
DWORD TimeOut)
{
- FILETIME time;
- FILETIME executionTime;
+ _FILETIME time;
+ _FILETIME executionTime;
DWORD status;
status = _WaitForSingleObject(hThread, TimeOut);
Args->Time = executionTime.dwLowDateTime / 10000;
}
-VOID
-ControlPerformanceTest(HANDLE hThread,
- PERFORM_TEST_ARGS *Args,
- DWORD TimeOut)
-{
- DWORD status;
- CONTEXT lastContext;
- CONTEXT currentContext;
-
- ZeroMemory(&lastContext, sizeof(CONTEXT));
- lastContext.ContextFlags = CONTEXT_FULL;
- ZeroMemory(¤tContext, sizeof(CONTEXT));
- currentContext.ContextFlags = CONTEXT_FULL;
-
- do {
- _Sleep(1);
-
- if (_SuspendThread(hThread) == -1)
- break;
-
- if (_GetThreadContext(hThread, ¤tContext) == 0)
- break;
-
- if (IsContextChanged(¤tContext, &lastContext))
- Args->Time++;
-
- if (_ResumeThread(hThread) == -1)
- break;
-
- if (Args->Time >= TimeOut)
- {
- _TerminateThread(hThread, 0);
- Args->Result = TS_TIMEDOUT;
- break;
- }
-
- status = _WaitForSingleObject(hThread, 0);
- if (status == WAIT_OBJECT_0 || status == WAIT_FAILED)
- break;
-
- lastContext = currentContext;
- } while (TRUE);
-}
-
VOID
DisplayResult(PERFORM_TEST_ARGS* Args,
LPSTR OutputBuffer)
{
- char Buffer[5000];
char Format[100];
if (Args->Result == TS_OK)
Args->Time));
}
else
- sprintf(OutputBuffer, "[%s] Failed (%s)\n", Args->TestName, Buffer);
+ sprintf(OutputBuffer, "[%s] Failed (%s)\n", Args->TestName, Args->Buffer);
if (Args->OutputRoutine != NULL)
(*Args->OutputRoutine)(OutputBuffer);
case TT_NORMAL:
ControlNormalTest(hThread, Args, TimeOut);
break;
- case TT_PERFORMANCE:
- ControlPerformanceTest(hThread, Args, TimeOut);
- break;
default:
printf("Unknown test type %ld\n", TestType);
break;