📄 dia2.idl
字号:
// dia2.idl - Debug Information Access (DIA) interface description
//-----------------------------------------------------------------
// Microsoft Confidential
// Copyright 1999-2000 Microsoft Corporation. All Rights Reserved.
//
//---------------------------------------------------------------
import "objidl.idl";
import "oaidl.idl";
import "cvconst.h";
enum NameSearchOptions
{
nsNone = 0,
nsfCaseSensitive = 0x1, // apply a case sensitive match
nsfCaseInsensitive = 0x2, // apply a case insensitive match
nsfFNameExt = 0x4, // treat names as paths and apply a filename.ext match
nsfRegularExpression = 0x8, // regular expression
nsfUndecoratedName = 0x10, // applies only to symbols that have both undecorated and decorated names
// predefined names for backward source compatibility
nsCaseSensitive = nsfCaseSensitive, // apply a case sensitive match
nsCaseInsensitive = nsfCaseInsensitive, // apply a case insensitive match
nsFNameExt = nsfCaseInsensitive | nsfFNameExt, // treat names as paths and apply a filename.ext match
nsRegularExpression = nsfRegularExpression | nsfCaseSensitive, // regular expression (using only '*' and '?')
nsCaseInRegularExpression = nsfRegularExpression | nsfCaseInsensitive, // case insensitive regular expression
};
// the following are error HRESULTS returned by an IDiaDataSource they
// are based on the FACILITY_VISUALCPP (0x6d) defined in delayimp.h
enum
{
E_PDB_OK=((HRESULT) (((unsigned long)(1)<<31) | ((unsigned long)(((LONG)0x6d))<<16) | ((unsigned long)(1))) ),
E_PDB_USAGE ,
E_PDB_OUT_OF_MEMORY , // not used, use E_OUTOFMEMORY
E_PDB_FILE_SYSTEM ,
E_PDB_NOT_FOUND ,
E_PDB_INVALID_SIG ,
E_PDB_INVALID_AGE ,
E_PDB_PRECOMP_REQUIRED ,
E_PDB_OUT_OF_TI ,
E_PDB_NOT_IMPLEMENTED , // use E_NOTIMPL
E_PDB_V1_PDB ,
E_PDB_FORMAT ,
E_PDB_LIMIT ,
E_PDB_CORRUPT ,
E_PDB_TI16 ,
E_PDB_ACCESS_DENIED , // use E_ACCESSDENIED
E_PDB_ILLEGAL_TYPE_EDIT ,
E_PDB_INVALID_EXECUTABLE ,
E_PDB_DBG_NOT_FOUND ,
E_PDB_NO_DEBUG_INFO ,
E_PDB_INVALID_EXE_TIMESTAMP ,
E_PDB_RESERVED ,
E_PDB_DEBUG_INFO_NOT_IN_PDB ,
E_PDB_MAX
};
//
// Errors in finding dynamically loaded dlls or functions.
//
enum
{
DIA_E_MODNOTFOUND = E_PDB_MAX+1,
DIA_E_PROCNOTFOUND,
};
#define PROPERTY_RW(type, name, prid, help) \
[propget, helpstring(help), id(prid)] \
HRESULT name([out, retval] type * pRetVal); \
\
[propput, helpstring(help), id(prid)] \
HRESULT name([in] type NewVal)
#define PROPERTY_ARRAY_RW(type, itype, name, prid, help) \
[propget, helpstring(help), id(prid)] \
HRESULT name([in] itype index, [out, retval] type * pRetVal); \
\
[propput, helpstring(help), id(prid)] \
HRESULT name([in] itype index, [in] type NewVal)
#define PROPERTY_RO(type, name, prid, help) \
[propget, helpstring(help), id(prid)] \
HRESULT name([out, retval] type * pRetVal)
// type of callback arg to IDiaDataSource::loadDataForExe
typedef void (__cdecl *PfnPDBDebugDirV)(BOOL, /*const struct _IMAGE_DEBUG_DIRECTORY * */ void*);
interface IDiaSession;
interface IDiaEnumTables;
interface IDiaSymbol;
interface IDiaSourceFile;
interface IDiaLineNumber;
interface IDiaInjectedSource;
interface IDiaSegment;
interface IDiaSectionContrib;
interface IDiaFrameData;
[
object,
uuid(C32ADB82-73F4-421b-95D5-A4706EDF5DBE),
local,
helpstring("IDiaLoadCallback interface."),
pointer_default(unique)
]
interface IDiaLoadCallback: IUnknown
{
HRESULT NotifyDebugDir(
[in] BOOL fExecutable,
[in] DWORD cbData,
[in, size_is(cbData)] BYTE data[]); // really a const struct _IMAGE_DEBUG_DIRECTORY *
HRESULT NotifyOpenDBG(
[in] LPCOLESTR dbgPath,
[in] HRESULT resultCode);
HRESULT NotifyOpenPDB(
[in] LPCOLESTR pdbPath,
[in] HRESULT resultCode);
HRESULT RestrictRegistryAccess(); // return hr != S_OK to prevent querying the registry for symbol search paths
HRESULT RestrictSymbolServerAccess(); // return hr != S_OK to prevent accessing a symbol server
}
[
object,
uuid(587A461C-B80B-4f54-9194-5032589A6319),
local,
helpstring("IDiaReadExeAtOffsetCallback interface."),
pointer_default(unique)
]
interface IDiaReadExeAtOffsetCallback: IUnknown
{
HRESULT ReadExecutableAt(
[in] DWORDLONG fileOffset,
[in] DWORD cbData,
[out] DWORD *pcbData,
[out, size_is(cbData),
length_is(*pcbData)] BYTE data[]);
}
[
object,
uuid(8E3F80CA-7517-432a-BA07-285134AAEA8E),
local,
helpstring("IDiaReadExeAtRVACallback interface."),
pointer_default(unique)
]
interface IDiaReadExeAtRVACallback: IUnknown
{
HRESULT ReadExecutableAtRVA(
[in] DWORD relativeVirtualAddress,
[in] DWORD cbData,
[out] DWORD *pcbData,
[out, size_is(cbData),
length_is(*pcbData)] BYTE data[]);
}
[
object,
uuid(79F1BB5F-B66E-48e5-B6A9-1545C323CA3D),
local,
helpstring("IDiaDataSource Interface"),
pointer_default(unique)
]
interface IDiaDataSource: IUnknown
{
PROPERTY_RO( BSTR, lastError, 1, "Text for last load error." );
//
// loadDataFromPdb
//
HRESULT loadDataFromPdb(
[in] LPCOLESTR pdbPath );
//
// loadAndValidateDataFromPdb
//
HRESULT loadAndValidateDataFromPdb(
[in] LPCOLESTR pdbPath,
[in] GUID* pcsig70,
[in] DWORD sig,
[in] DWORD age );
//
// loadDataForExe
//
HRESULT loadDataForExe(
[in] LPCOLESTR executable,
[in] LPCOLESTR searchPath,
[in] IUnknown* pCallback );
//
// loadDataFromIStream
//
HRESULT loadDataFromIStream(
[in] IStream *pIStream );
HRESULT openSession(
[out] IDiaSession** ppSession
);
}
[
object,
uuid(CAB72C48-443B-48f5-9B0B-42F0820AB29A),
local,
helpstring("IDiaEnumSymbols Interface"),
pointer_default(unique)
]
interface IDiaEnumSymbols: IUnknown
{
PROPERTY_RO( IUnknown*, _NewEnum, DISPID_NEWENUM, "IEnumVARIANT version of IDiaEnumSymbols." );
PROPERTY_RO( LONG, Count, 1, "Number of symbols." );
[id(0), helpstring("Return the symbol for the given index.")]
HRESULT Item([in] DWORD index, [out, retval]IDiaSymbol **symbol);
HRESULT Next(
[in] ULONG celt,
[out] IDiaSymbol ** rgelt,
[out] ULONG * pceltFetched
);
HRESULT Skip(
[in] ULONG celt);
HRESULT Reset();
HRESULT Clone(
[out] IDiaEnumSymbols **ppenum);
}
[
object,
uuid(624B7D9C-24EA-4421-9D06-3B577471C1FA),
local,
helpstring("IDiaEnumSymbolsByAddr Interface"),
pointer_default(unique)
]
interface IDiaEnumSymbolsByAddr: IUnknown
{
//
// Item(ByXxx) re-positions the enumerator to the item found
//
[helpstring("Return the symbol for the given address.")]
HRESULT symbolByAddr(
[in] DWORD isect,
[in] DWORD offset,
[out, retval]IDiaSymbol** ppSymbol);
[helpstring("Return the symbol for the given relative virtual address.")]
HRESULT symbolByRVA(
[in] DWORD relativeVirtualAddress,
[out, retval]IDiaSymbol** ppSymbol);
[helpstring("Return the symbol for the given virtual address.")]
HRESULT symbolByVA(
[in] ULONGLONG virtualAddress,
[out, retval]IDiaSymbol** ppSymbol);
HRESULT Next(
[in] ULONG celt,
[out] IDiaSymbol ** rgelt,
[out] ULONG * pceltFetched
);
HRESULT Prev(
[in] ULONG celt,
[out] IDiaSymbol ** rgelt,
[out] ULONG * pceltFetched
);
HRESULT Clone(
[out] IDiaEnumSymbolsByAddr **ppenum);
}
[
object,
uuid(10F3DBD9-664F-4469-B808-9471C7A50538),
local,
helpstring("IDiaEnumSourceFiles Interface"),
pointer_default(unique)
]
interface IDiaEnumSourceFiles: IUnknown
{
PROPERTY_RO( IUnknown*, _NewEnum, DISPID_NEWENUM, "IEnumVARIANT version of IDiaEnumSourceFiles." );
PROPERTY_RO( LONG, Count, 1, "Number of source files." );
[id(0), helpstring("Return the source file for the given index.")]
HRESULT Item([in] DWORD index, [out, retval]IDiaSourceFile **sourceFile);
HRESULT Next(
[in] ULONG celt,
[out] IDiaSourceFile ** rgelt,
[out] ULONG * pceltFetched
);
HRESULT Skip(
[in] ULONG celt);
HRESULT Reset();
HRESULT Clone(
[out] IDiaEnumSourceFiles **ppenum);
}
[
object,
uuid(FE30E878-54AC-44f1-81BA-39DE940F6052),
local,
helpstring("IDiaEnumLineNumbers Interface"),
pointer_default(unique)
]
interface IDiaEnumLineNumbers: IUnknown
{
PROPERTY_RO( IUnknown*, _NewEnum, DISPID_NEWENUM, "IEnumVARIANT version of IDiaEnumLineNumbers." );
PROPERTY_RO( LONG, Count, 1, "Number of line numbers." );
[id(0), helpstring("Return the line number for the given index.")]
HRESULT Item([in] DWORD index, [out, retval]IDiaLineNumber **lineNumber);
HRESULT Next(
[in] ULONG celt,
[out] IDiaLineNumber ** rgelt,
[out] ULONG * pceltFetched
);
HRESULT Skip(
[in] ULONG celt);
HRESULT Reset();
HRESULT Clone(
[out] IDiaEnumLineNumbers **ppenum);
}
[
object,
uuid(D5612573-6925-4468-8883-98CDEC8C384A),
local,
helpstring("IDiaEnumInjectedSources Interface"),
pointer_default(unique)
]
interface IDiaEnumInjectedSources: IUnknown
{
PROPERTY_RO( IUnknown*, _NewEnum, DISPID_NEWENUM, "IEnumVARIANT version of IDiaEnumInjectedSources." );
PROPERTY_RO( LONG, Count, 1, "Number of injected source files." );
[id(0), helpstring("Return the injected source for the given index.")]
HRESULT Item([in] DWORD index, [out, retval]IDiaInjectedSource **injectedSource);
HRESULT Next(
[in] ULONG celt,
[out] IDiaInjectedSource ** rgelt,
[out] ULONG * pceltFetched
);
HRESULT Skip(
[in] ULONG celt);
HRESULT Reset();
HRESULT Clone(
[out] IDiaEnumInjectedSources **ppenum);
}
[
object,
uuid(E8368CA9-01D1-419d-AC0C-E31235DBDA9F),
local,
helpstring("IDiaEnumSegments Interface"),
pointer_default(unique)
]
interface IDiaEnumSegments: IUnknown
{
PROPERTY_RO( IUnknown*, _NewEnum, DISPID_NEWENUM, "IEnumVARIANT version of IDiaEnumSegments." );
PROPERTY_RO( LONG, Count, 1, "Number of segments." );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -