windows-nt/Source/XPSP1/NT/base/wmi/dll/tracelib.h
2020-09-26 16:20:57 +08:00

149 lines
2.6 KiB
C

/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
tracelib.h
Abstract:
Private headers for user-mode trace library
Author:
15-Aug-2000 JeePang
Revision History:
--*/
#ifndef _TRACELIB_H_
#define _TRACELIB_H_
#define WmipNtStatusToDosError(Status) ((ULONG)((Status == STATUS_SUCCESS)?ERROR_SUCCESS:RtlNtStatusToDosError(Status)))
__inline Assign64(
IN LONGLONG qwSrc,
OUT PLARGE_INTEGER pqwDest
)
{
PLARGE_INTEGER pqwSrc = (PLARGE_INTEGER) &qwSrc;
pqwDest->LowPart = pqwSrc->LowPart;
pqwDest->HighPart = pqwSrc->HighPart;
}
__inline Move64(
IN PLARGE_INTEGER pSrc,
OUT PLARGE_INTEGER pDest
)
{
pDest->LowPart = pSrc->LowPart;
pDest->HighPart = pSrc->HighPart;
}
#if defined(_IA64_)
#include <ia64reg.h>
#endif
//
// NTDLL cannot call GetSystemTimeAsFileTime
//
__inline __int64 WmipGetSystemTime()
{
LARGE_INTEGER SystemTime;
//
// Read system time from shared region.
//
do {
SystemTime.HighPart = USER_SHARED_DATA->SystemTime.High1Time;
SystemTime.LowPart = USER_SHARED_DATA->SystemTime.LowPart;
} while (SystemTime.HighPart != USER_SHARED_DATA->SystemTime.High2Time);
return SystemTime.QuadPart;
}
//
// GetCycleCounts
//
// Since we do not want to make a kernel mode transition to get the
// thread CPU Times, we settle for just getting the CPU Cycle counts.
// We use the following macros from BradW to get the CPU cycle count.
// This method may be inaccurate if the clocks are not synchronized
// between processors.
//
#if defined(_X86_)
__inline
LONGLONG
WmipGetCycleCount(
)
{
__asm{
RDTSC
}
}
#elif defined(_AMD64_)
#define WmipGetCycleCount() ReadTimeStampCounter()
#elif defined(_IA64_)
#define WmipGetCycleCount() __getReg(CV_IA64_ApITC)
#else
#error "perf: a target architecture must be defined."
#endif
__inline
ULONG
WmipSetDosError(
IN ULONG DosError
)
{
if (DosError != ERROR_SUCCESS) {
SetLastError(DosError);
}
return DosError;
}
PVOID
WmipMemReserve(
IN SIZE_T Size
);
PVOID
WmipMemCommit(
IN PVOID Buffer,
IN SIZE_T Size
);
ULONG
WmipMemFree(
IN PVOID Buffer
);
HANDLE
WmipCreateFile(
LPCWSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
DWORD dwCreationDisposition,
DWORD dwCreateFlags
);
NTSTATUS
WmipGetCpuSpeed(
OUT DWORD* CpuNum,
OUT DWORD* CpuSpeed
);
BOOL
WmipSynchReadFile(
HANDLE LogFile,
LPVOID Buffer,
DWORD NumberOfBytesToRead,
LPDWORD NumberOfBytesRead,
LPOVERLAPPED Overlapped
);
#endif // _TRACELIB_H_