windows-nt/Source/XPSP1/NT/base/ntos/wmi/kdexts/tracing/kdexts.c
2020-09-26 16:20:57 +08:00

173 lines
3 KiB
C

/*++
Copyright (c) 1993-2000 Microsoft Corporation
Module Name:
kdexts.c
Abstract:
This file contains the generic routines and initialization code
for the kernel debugger extensions dll.
These declarations and code should be moved into a header file.
The declarations should have an optional "extern" in front of them.
The code should be made __inline to avoid having multiple copies of it.
N.B.: There are currently 80 copies of this code in the tree.
Author:
Wesley Witt (wesw) 26-Aug-1993
Glenn Peterson (glennp) 22-Mar-2000: Trimmed down version from \nt\base\tools\kdexts2
Environment:
User Mode
--*/
//
// globals
//
WINDBG_EXTENSION_APIS ExtensionApis;
#define KDEXTS_EXTERN
#include "kdExts.h"
#undef KDEXTS_EXTERN
static USHORT SavedMajorVersion;
static USHORT SavedMinorVersion;
DllInit(
HANDLE hModule,
DWORD dwReason,
DWORD dwReserved
)
{
#if 0
switch (dwReason) {
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
case DLL_PROCESS_ATTACH:
break;
}
#endif
return TRUE;
}
VOID
WinDbgExtensionDllInit(
PWINDBG_EXTENSION_APIS64 lpExtensionApis,
USHORT MajorVersion,
USHORT MinorVersion
)
{
ExtensionApis = *lpExtensionApis;
SavedMajorVersion = MajorVersion;
SavedMinorVersion = MinorVersion;
return;
}
VOID
wmiTraceDllInit(
PWINDBG_EXTENSION_APIS64 lpExtensionApis,
USHORT MajorVersion,
USHORT MinorVersion
)
{
ExtensionApis = *lpExtensionApis;
SavedMajorVersion = MajorVersion;
SavedMinorVersion = MinorVersion;
return;
}
VOID
CheckVersion(
VOID
)
{
}
BOOLEAN
IsCheckedBuild(
PBOOLEAN Checked
)
{
BOOLEAN result;
result = FALSE;
if (HaveDebuggerData ()) {
result = TRUE;
*Checked = (KernelVersionPacket.MajorVersion == 0xc) ;
}
return (result);
}
LPEXT_API_VERSION
ExtensionApiVersion(
VOID
)
{
static EXT_API_VERSION ApiVersion = { (VER_PRODUCTVERSION_W >> 8),
(VER_PRODUCTVERSION_W & 0xff),
EXT_API_VERSION_NUMBER64, 0 };
return (&ApiVersion);
}
BOOL
HaveDebuggerData(
VOID
)
{
static int havedata = 0;
if (havedata == 0) {
if (!Ioctl (IG_GET_KERNEL_VERSION, &KernelVersionPacket, sizeof(KernelVersionPacket))) {
havedata = 2;
} else if (KernelVersionPacket.MajorVersion == 0) {
havedata = 2;
} else {
havedata = 1;
}
}
return ((havedata == 1) &&
((KernelVersionPacket.Flags & DBGKD_VERS_FLAG_DATA) != 0));
}
USHORT
TargetMachineType(
VOID
)
{
if (HaveDebuggerData()) {
return (KernelVersionPacket.MachineType);
} else {
dprintf("Error - Cannot get Kernel Version.\n");
}
return 0;
}