mirror of https://github.com/tongzx/nt5src
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.
142 lines
4.0 KiB
142 lines
4.0 KiB
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1995
|
|
//
|
|
// File: dtreatas.cxx
|
|
//
|
|
// Contents: Ole NTSD extension routines to display a dll/class cache
|
|
//
|
|
// Functions: displayTreatAsCache
|
|
//
|
|
//
|
|
// History: 06-01-95 BruceMa Created
|
|
//
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
|
|
#include <ole2int.h>
|
|
#include <windows.h>
|
|
#include "ole.h"
|
|
#include "dtreatas.h"
|
|
|
|
|
|
extern BOOL fInScm;
|
|
|
|
|
|
void FormatCLSID(REFGUID rguid, LPSTR lpsz);
|
|
BOOL IsEqualCLSID(CLSID *pClsid1, CLSID *pClsid2);
|
|
|
|
|
|
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Function: treatAsCacheHelp
|
|
//
|
|
// Synopsis: Display a menu for the command 'ds'
|
|
//
|
|
// Arguments: -
|
|
//
|
|
// Returns: -
|
|
//
|
|
// History: 07-Mar-95 BruceMa Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
void treatAsCacheHelp(PNTSD_EXTENSION_APIS lpExtensionApis)
|
|
{
|
|
Printf("ta - Display entire TreatAs class cache:\n");
|
|
Printf("ta clsid - Display Treat As class for clsid (if any)\n");
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Function: displayTreatAsCache
|
|
//
|
|
// Synopsis: Formats and writes all or part of the TreatAs class cache
|
|
//
|
|
// Arguments: [hProcess] - Handle of this process
|
|
// [lpExtensionApis] - Table of extension functions
|
|
// [REFCLSID] - If not CLSID_NULL only for this clsid
|
|
//
|
|
// Returns: -
|
|
//
|
|
// History: 07-Mar-95 BruceMa Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
void displayTreatAsCache(HANDLE hProcess,
|
|
PNTSD_EXTENSION_APIS lpExtensionApis,
|
|
CLSID *clsid)
|
|
{
|
|
ULONG pAdr;
|
|
BOOL fRetail;
|
|
ULONG gptrtlstTreatClasses;
|
|
ULONG pTreatAs;
|
|
STreatList sTreatList;
|
|
STreatEntry *pTreatEntry;
|
|
BOOL fInit = TRUE;
|
|
char szClsid[CLSIDSTR_MAX];
|
|
|
|
// Determine if this is checked or retail ole
|
|
if (fInScm)
|
|
{
|
|
pAdr = GetExpression("scm!_CairoleInfoLevel");
|
|
}
|
|
else
|
|
{
|
|
pAdr = GetExpression("ole32!_CairoleInfoLevel");
|
|
}
|
|
fRetail = pAdr == NULL ? TRUE : FALSE;
|
|
|
|
// Read the pointer to the TreatAs class cache
|
|
gptrtlstTreatClasses = GetExpression("ole32!gptrtlstTreatClasses");
|
|
ReadMem(&pTreatAs, gptrtlstTreatClasses, sizeof(ULONG));
|
|
if (pTreatAs == NULL)
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Read the TreatAs cache header
|
|
ReadMem(&sTreatList, pTreatAs, sizeof(STreatList));
|
|
|
|
Printf(" clsid is treated as clsid\n");
|
|
Printf("-------------------------------------- --------------------------------------\n");
|
|
|
|
if (sTreatList._centries > 0)
|
|
{
|
|
// Read the array of entries
|
|
pTreatEntry = (STreatEntry *) OleAlloc(sTreatList._centries *
|
|
sizeof(STreatEntry));
|
|
ReadMem(pTreatEntry, sTreatList._array.m_pData,
|
|
sTreatList._centries * sizeof(STreatEntry));
|
|
|
|
for (DWORD i = 0; i < sTreatList._centries; i++)
|
|
{
|
|
// Display the clsid and the TreatAs clsid
|
|
if (clsid == NULL)
|
|
{
|
|
FormatCLSID(pTreatEntry[i]._clsid, szClsid);
|
|
Printf("%s ", szClsid);
|
|
FormatCLSID(pTreatEntry[i]._treatAsClsid, szClsid);
|
|
Printf("%s\n", szClsid);
|
|
}
|
|
|
|
// We are looking for a particular clsid
|
|
else if (IsEqualCLSID(clsid, &pTreatEntry[i]._clsid))
|
|
{
|
|
FormatCLSID(pTreatEntry[i]._clsid, szClsid);
|
|
Printf("%s ", szClsid);
|
|
FormatCLSID(pTreatEntry[i]._treatAsClsid, szClsid);
|
|
Printf("%s\n", szClsid);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|