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.
211 lines
5.6 KiB
211 lines
5.6 KiB
/*++
|
|
|
|
Copyright (c) 1992-2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
extapis.cpp
|
|
|
|
Abstract:
|
|
Procedures exported by the dll which can be called by
|
|
other extension dlls and debugger
|
|
|
|
Environment:
|
|
|
|
User Mode.
|
|
|
|
Revision History:
|
|
|
|
Kshitiz K. Sharma (kksharma) 2/1/2001
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
#include <time.h>
|
|
|
|
|
|
PCHAR gTargetMode[] = {
|
|
"No Target",
|
|
"Kernel Mode",
|
|
"User Mode",
|
|
};
|
|
|
|
PCHAR gAllOsTypes[] = {
|
|
"Windows 95",
|
|
"Windows 98",
|
|
"Windows ME",
|
|
"Windows NT 4",
|
|
"Windows 2000",
|
|
"Windows XP",
|
|
};
|
|
|
|
HRESULT
|
|
GetProcessorInfo(
|
|
PCPU_INFO pCpuInfo
|
|
)
|
|
{
|
|
HRESULT Hr;
|
|
ULONG Processor;
|
|
ULONG i;
|
|
DEBUG_PROCESSOR_IDENTIFICATION_ALL ProcId;
|
|
|
|
pCpuInfo->Type = g_TargetMachine;
|
|
if (g_ExtControl->GetNumberProcessors(&pCpuInfo->NumCPUs) != S_OK) {
|
|
pCpuInfo->NumCPUs = 0;
|
|
}
|
|
|
|
PDEBUG_SYSTEM_OBJECTS DebugSystem;
|
|
ULONG64 hCurrentThread;
|
|
|
|
if ((Hr = g_ExtClient->QueryInterface(__uuidof(IDebugSystemObjects),
|
|
(void **)&DebugSystem)) != S_OK) {
|
|
return Hr;
|
|
}
|
|
DebugSystem->GetCurrentThreadHandle(&hCurrentThread);
|
|
|
|
DebugSystem->Release();
|
|
|
|
pCpuInfo->CurrentProc = (ULONG) hCurrentThread - 1;
|
|
|
|
for (i=0; i<pCpuInfo->NumCPUs; i++) {
|
|
// Get Info for all procs
|
|
if ((Hr = g_ExtData->ReadProcessorSystemData(i,
|
|
DEBUG_DATA_PROCESSOR_IDENTIFICATION,
|
|
&pCpuInfo->ProcInfo[i],
|
|
sizeof(pCpuInfo->ProcInfo[i]), NULL)) != S_OK) {
|
|
continue;
|
|
}
|
|
|
|
}
|
|
return Hr;
|
|
}
|
|
|
|
void
|
|
GetOsType(ULONG PlatForm, PTARGET_DEBUG_INFO pTargetInfo)
|
|
{
|
|
if (PlatForm == VER_PLATFORM_WIN32_NT)
|
|
// If its nt target
|
|
{
|
|
if (pTargetInfo->OsInfo.Version.Minor > 2195) {
|
|
pTargetInfo->OsInfo.Type = WIN_NT5_1;
|
|
} else if (pTargetInfo->OsInfo.Version.Minor > 1381) {
|
|
pTargetInfo->OsInfo.Type = WIN_NT5;
|
|
} else {
|
|
pTargetInfo->OsInfo.Type = WIN_NT4;
|
|
}
|
|
} else {
|
|
if (pTargetInfo->OsInfo.Version.Minor > 2222) {
|
|
pTargetInfo->OsInfo.Type = WIN_ME;
|
|
} else if (pTargetInfo->OsInfo.Version.Minor > 950) {
|
|
pTargetInfo->OsInfo.Type = WIN_98;
|
|
} else if (pTargetInfo->OsInfo.Version.Minor > 950) {
|
|
pTargetInfo->OsInfo.Type = WIN_95;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
HRESULT
|
|
FillTargetDebugInfo(
|
|
PDEBUG_CLIENT Client,
|
|
PTARGET_DEBUG_INFO pTargetInfo
|
|
)
|
|
{
|
|
HRESULT Hr;
|
|
ULONG Time;
|
|
ULONG PlatForm, Qualifier;
|
|
BOOL fUnInitialized = FALSE;
|
|
|
|
if (pTargetInfo->SizeOfStruct != sizeof(TARGET_DEBUG_INFO)) {
|
|
return E_FAIL;
|
|
}
|
|
|
|
if (!g_ExtClient)
|
|
{
|
|
fUnInitialized = TRUE;
|
|
}
|
|
ZeroMemory(pTargetInfo, sizeof(TARGET_DEBUG_INFO));
|
|
pTargetInfo->SizeOfStruct = sizeof(TARGET_DEBUG_INFO);
|
|
|
|
if (fUnInitialized)
|
|
{
|
|
// Do this to prevent multiple INIT_API calls in same extension call
|
|
INIT_API();
|
|
}
|
|
|
|
pTargetInfo->Mode = (TARGET_MODE) g_TargetClass;
|
|
Hr = GetProcessorInfo(&pTargetInfo->Cpu);
|
|
|
|
Hr = g_ExtControl->GetCurrentSystemUpTime(&Time);
|
|
if (Hr == S_OK) {
|
|
pTargetInfo->SysUpTime = Time;
|
|
}
|
|
|
|
PDEBUG_SYSTEM_OBJECTS2 DebugSystem;
|
|
ULONG64 hCurrentThread;
|
|
|
|
if ((Hr = g_ExtClient->QueryInterface(__uuidof(IDebugSystemObjects),
|
|
(void **)&DebugSystem)) == S_OK) {
|
|
Hr = DebugSystem->GetCurrentProcessUpTime(&Time);
|
|
|
|
|
|
DebugSystem->Release();
|
|
if (Hr == S_OK) {
|
|
pTargetInfo->AppUpTime = Time;
|
|
}
|
|
}
|
|
Hr = g_ExtControl->GetCurrentTimeDate(&Time);
|
|
if (Hr == S_OK) {
|
|
pTargetInfo->CrashTime = Time;
|
|
}
|
|
|
|
time_t ltime;
|
|
time( <ime );
|
|
|
|
pTargetInfo->EntryDate = (ULONG64) ltime;
|
|
|
|
Hr = g_ExtControl->GetSystemVersion(&PlatForm,
|
|
&pTargetInfo->OsInfo.Version.Major,
|
|
&pTargetInfo->OsInfo.Version.Minor,
|
|
&pTargetInfo->OsInfo.ServicePackString[0],
|
|
sizeof(pTargetInfo->OsInfo.ServicePackString),
|
|
NULL,
|
|
&pTargetInfo->OsInfo.SrvPackNumber,
|
|
&pTargetInfo->OsInfo.OsString[0],
|
|
sizeof(pTargetInfo->OsInfo.OsString),
|
|
NULL);
|
|
GetOsType(PlatForm, pTargetInfo);
|
|
pTargetInfo->Source = Debugger;
|
|
|
|
Hr = g_ExtData->ReadDebuggerData(DEBUG_DATA_ProductType,
|
|
&pTargetInfo->OsInfo.ProductType,
|
|
sizeof(pTargetInfo->OsInfo.ProductType),
|
|
NULL);
|
|
if (FAILED(Hr))
|
|
{
|
|
pTargetInfo->OsInfo.ProductType = 0;
|
|
}
|
|
Hr = g_ExtData->ReadDebuggerData(DEBUG_DATA_SuiteMask,
|
|
&pTargetInfo->OsInfo.Suite,
|
|
sizeof(pTargetInfo->OsInfo.Suite),
|
|
NULL);
|
|
if (FAILED(Hr))
|
|
{
|
|
pTargetInfo->OsInfo.Suite = 0;
|
|
}
|
|
|
|
if (fUnInitialized)
|
|
{
|
|
EXIT_API();
|
|
}
|
|
return Hr;
|
|
}
|
|
|
|
HRESULT WINAPI
|
|
_EFN_GetTargetInfo
|
|
(
|
|
PDEBUG_CLIENT Client,
|
|
PTARGET_DEBUG_INFO pTargetInfo
|
|
)
|
|
{
|
|
return FillTargetDebugInfo(Client, pTargetInfo);
|
|
}
|