1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
4 /*****************************************************************************
6 ** sospriv.idl - The private interface that SOS uses to query the runtime **
7 ** for internal data. **
9 *****************************************************************************/
12 import "xclrdata.idl";
14 struct DacpSyncBlockCleanupData;
15 struct DacpThreadStoreData;
16 struct DacpAppDomainStoreData;
17 struct DacpAppDomainData;
18 struct DacpAssemblyData;
19 struct DacpThreadData;
20 struct DacpMethodDescData;
21 struct DacpCodeHeaderData;
22 struct DacpThreadpoolData;
23 struct DacpObjectData;
24 struct DacpWorkRequestData;
25 struct DacpMethodTableData;
26 struct DacpWorkRequestData;
27 struct DacpModuleData;
28 struct DacpGcHeapData;
29 struct DacpJitManagerInfo;
30 struct DacpHeapSegmentData;
31 struct DacpDomainLocalModuleData;
32 struct DacpDomainLocalModuleData;
36 struct DacpGenerationAllocData;
37 struct DacpExceptionObjectData;
39 typedef ULONG64 CLRDATA_ADDRESS;
41 typedef int T_CONTEXT;
43 typedef unsigned int size_t;
44 typedef int ModuleMapType;
45 typedef int VCSHeapType;
49 cpp_quote("typedef enum ModuleMapType { TYPEDEFTOMETHODTABLE, TYPEREFTOMETHODTABLE };")
50 cpp_quote("typedef enum VCSHeapType {IndcellHeap, LookupHeap, ResolveHeap, DispatchHeap, CacheEntryHeap};")
52 typedef void (*MODULEMAPTRAVERSE)(UINT index, CLRDATA_ADDRESS methodTable,LPVOID token);
53 typedef void (*VISITHEAP)(CLRDATA_ADDRESS blockData,size_t blockSize,BOOL blockIsCurrentBlock);
55 typedef BOOL (*VISITRCWFORCLEANUP)(CLRDATA_ADDRESS RCW,CLRDATA_ADDRESS Context,CLRDATA_ADDRESS Thread,
56 BOOL bIsFreeThreaded, LPVOID token);
57 typedef BOOL (*DUMPEHINFO)(UINT clauseIndex,UINT totalClauses, struct DACEHInfo *pEHInfo,LPVOID token);
59 cpp_quote("#ifndef _SOS_HandleData")
60 cpp_quote("#define _SOS_HandleData")
62 typedef struct _SOSHandleData
64 CLRDATA_ADDRESS AppDomain;
65 CLRDATA_ADDRESS Handle;
66 CLRDATA_ADDRESS Secondary;
70 // For RefCounted Handles
71 unsigned int RefCount;
72 unsigned int JupiterRefCount;
76 cpp_quote("#endif //HandleData")
81 uuid(286CA186-E763-4F61-9760-487D43AE4341)
83 interface ISOSEnum : IUnknown
85 HRESULT Skip([in] unsigned int count);
87 HRESULT GetCount([out] unsigned int *pCount);
94 uuid(3E269830-4A2B-4301-8EE2-D6805B29B2FA)
96 interface ISOSHandleEnum : ISOSEnum
98 HRESULT Next([in] unsigned int count,
99 [out, size_is(count), length_is(*pNeeded)] SOSHandleData handles[],
100 [out] unsigned int *pNeeded);
103 cpp_quote("#ifndef _SOS_StackReference_")
104 cpp_quote("#define _SOS_StackReference_")
106 typedef enum SOSStackSourceType
108 SOS_StackSourceIP, // Instuction pointer in managed code
109 SOS_StackSourceFrame, // clr!Frame
110 } SOSStackSourceType;
112 typedef enum SOSRefFlags
118 typedef struct _SOS_StackRefData
120 BOOL HasRegisterInformation;
123 CLRDATA_ADDRESS Address;
124 CLRDATA_ADDRESS Object;
127 SOSStackSourceType SourceType;
128 CLRDATA_ADDRESS Source;
129 CLRDATA_ADDRESS StackPointer;
132 /* Informs the user that we were unable to process the given clr!Frame or
135 typedef struct _SOS_StackRefError
137 SOSStackSourceType SourceType;
138 CLRDATA_ADDRESS Source;
139 CLRDATA_ADDRESS StackPointer;
142 cpp_quote("#endif // _SOS_StackReference_")
147 uuid(774F4E1B-FB7B-491B-976D-A8130FE355E9)
149 interface ISOSStackRefErrorEnum : ISOSEnum
151 HRESULT Next([in] unsigned int count,
152 [out, size_is(count), length_is(*pFetched)] SOSStackRefError ref[],
153 [out] unsigned int *pFetched);
159 uuid(8FA642BD-9F10-4799-9AA3-512AE78C77EE)
161 interface ISOSStackRefEnum : ISOSEnum
163 HRESULT Next([in] unsigned int count,
164 [out, size_is(count), length_is(*pFetched)] SOSStackRefData ref[],
165 [out] unsigned int *pFetched);
168 /* Reports all frames which we could not enumerate gc references for.
170 HRESULT EnumerateErrors([out] ISOSStackRefErrorEnum **ppEnum);
177 uuid(436f00f2-b42a-4b9f-870c-e73db66ae930)
179 interface ISOSDacInterface : IUnknown
182 HRESULT GetThreadStoreData(struct DacpThreadStoreData *data);
185 HRESULT GetAppDomainStoreData(struct DacpAppDomainStoreData *data);
186 HRESULT GetAppDomainList(unsigned int count, CLRDATA_ADDRESS values[], unsigned int *pNeeded);
187 HRESULT GetAppDomainData(CLRDATA_ADDRESS addr, struct DacpAppDomainData *data);
188 HRESULT GetAppDomainName(CLRDATA_ADDRESS addr, unsigned int count, WCHAR *name, unsigned int *pNeeded);
189 HRESULT GetDomainFromContext(CLRDATA_ADDRESS context, CLRDATA_ADDRESS *domain);
192 HRESULT GetAssemblyList(CLRDATA_ADDRESS appDomain, int count, CLRDATA_ADDRESS values[], int *pNeeded);
193 HRESULT GetAssemblyData(CLRDATA_ADDRESS baseDomainPtr, CLRDATA_ADDRESS assembly, struct DacpAssemblyData *data);
194 HRESULT GetAssemblyName(CLRDATA_ADDRESS assembly, unsigned int count, WCHAR *name, unsigned int *pNeeded);
197 HRESULT GetModule(CLRDATA_ADDRESS addr, IXCLRDataModule **mod);
198 HRESULT GetModuleData(CLRDATA_ADDRESS moduleAddr, struct DacpModuleData *data);
199 HRESULT TraverseModuleMap(ModuleMapType mmt, CLRDATA_ADDRESS moduleAddr, MODULEMAPTRAVERSE pCallback, LPVOID token);
200 HRESULT GetAssemblyModuleList(CLRDATA_ADDRESS assembly, unsigned int count, CLRDATA_ADDRESS modules[], unsigned int *pNeeded);
201 HRESULT GetILForModule(CLRDATA_ADDRESS moduleAddr, DWORD rva, CLRDATA_ADDRESS *il);
204 HRESULT GetThreadData(CLRDATA_ADDRESS thread, struct DacpThreadData *data);
205 HRESULT GetThreadFromThinlockID(UINT thinLockId, CLRDATA_ADDRESS *pThread);
206 HRESULT GetStackLimits(CLRDATA_ADDRESS threadPtr, CLRDATA_ADDRESS *lower, CLRDATA_ADDRESS *upper, CLRDATA_ADDRESS *fp);
209 HRESULT GetMethodDescData(CLRDATA_ADDRESS methodDesc, CLRDATA_ADDRESS ip, struct DacpMethodDescData *data, ULONG cRevertedRejitVersions, struct DacpReJitData * rgRevertedRejitData, ULONG * pcNeededRevertedRejitData);
210 HRESULT GetMethodDescPtrFromIP(CLRDATA_ADDRESS ip, CLRDATA_ADDRESS * ppMD);
211 HRESULT GetMethodDescName(CLRDATA_ADDRESS methodDesc, unsigned int count, WCHAR *name, unsigned int *pNeeded);
212 HRESULT GetMethodDescPtrFromFrame(CLRDATA_ADDRESS frameAddr, CLRDATA_ADDRESS * ppMD);
213 HRESULT GetMethodDescFromToken(CLRDATA_ADDRESS moduleAddr, mdToken token, CLRDATA_ADDRESS *methodDesc);
214 HRESULT GetMethodDescTransparencyData(CLRDATA_ADDRESS methodDesc, struct DacpMethodDescTransparencyData *data);
217 HRESULT GetCodeHeaderData(CLRDATA_ADDRESS ip, struct DacpCodeHeaderData *data);
218 HRESULT GetJitManagerList(unsigned int count, struct DacpJitManagerInfo *managers, unsigned int *pNeeded);
219 HRESULT GetJitHelperFunctionName(CLRDATA_ADDRESS ip, unsigned int count, char *name, unsigned int *pNeeded);
220 HRESULT GetJumpThunkTarget(T_CONTEXT *ctx, CLRDATA_ADDRESS *targetIP, CLRDATA_ADDRESS *targetMD);
223 HRESULT GetThreadpoolData(struct DacpThreadpoolData *data);
224 HRESULT GetWorkRequestData(CLRDATA_ADDRESS addrWorkRequest, struct DacpWorkRequestData *data);
225 HRESULT GetHillClimbingLogEntry(CLRDATA_ADDRESS addr, struct DacpHillClimbingLogEntry *data);
228 HRESULT GetObjectData(CLRDATA_ADDRESS objAddr, struct DacpObjectData *data);
229 HRESULT GetObjectStringData(CLRDATA_ADDRESS obj, unsigned int count, WCHAR *stringData, unsigned int *pNeeded);
230 HRESULT GetObjectClassName(CLRDATA_ADDRESS obj, unsigned int count, WCHAR *className, unsigned int *pNeeded);
233 HRESULT GetMethodTableName(CLRDATA_ADDRESS mt, unsigned int count, WCHAR *mtName, unsigned int *pNeeded);
234 HRESULT GetMethodTableData(CLRDATA_ADDRESS mt, struct DacpMethodTableData *data);
235 HRESULT GetMethodTableSlot(CLRDATA_ADDRESS mt, unsigned int slot, CLRDATA_ADDRESS *value);
236 HRESULT GetMethodTableFieldData(CLRDATA_ADDRESS mt, struct DacpMethodTableFieldData *data);
237 HRESULT GetMethodTableTransparencyData(CLRDATA_ADDRESS mt, struct DacpMethodTableTransparencyData *data);
240 HRESULT GetMethodTableForEEClass(CLRDATA_ADDRESS eeClass, CLRDATA_ADDRESS *value);
243 HRESULT GetFieldDescData(CLRDATA_ADDRESS fieldDesc, struct DacpFieldDescData *data);
246 HRESULT GetFrameName(CLRDATA_ADDRESS vtable, unsigned int count, WCHAR *frameName, unsigned int *pNeeded);
250 HRESULT GetPEFileBase(CLRDATA_ADDRESS addr, CLRDATA_ADDRESS *base);
251 HRESULT GetPEFileName(CLRDATA_ADDRESS addr, unsigned int count, WCHAR *fileName, unsigned int *pNeeded);
254 HRESULT GetGCHeapData(struct DacpGcHeapData *data);
255 HRESULT GetGCHeapList(unsigned int count, CLRDATA_ADDRESS heaps[], unsigned int *pNeeded); // svr only
256 HRESULT GetGCHeapDetails(CLRDATA_ADDRESS heap, struct DacpGcHeapDetails *details); // wks only
257 HRESULT GetGCHeapStaticData(struct DacpGcHeapDetails *data);
258 HRESULT GetHeapSegmentData(CLRDATA_ADDRESS seg, struct DacpHeapSegmentData *data);
259 HRESULT GetOOMData(CLRDATA_ADDRESS oomAddr, struct DacpOomData *data);
260 HRESULT GetOOMStaticData(struct DacpOomData *data);
261 HRESULT GetHeapAnalyzeData(CLRDATA_ADDRESS addr, struct DacpGcHeapAnalyzeData *data);
262 HRESULT GetHeapAnalyzeStaticData(struct DacpGcHeapAnalyzeData *data);
265 HRESULT GetDomainLocalModuleData(CLRDATA_ADDRESS addr, struct DacpDomainLocalModuleData *data);
266 HRESULT GetDomainLocalModuleDataFromAppDomain(CLRDATA_ADDRESS appDomainAddr, int moduleID, struct DacpDomainLocalModuleData *data);
267 HRESULT GetDomainLocalModuleDataFromModule(CLRDATA_ADDRESS moduleAddr, struct DacpDomainLocalModuleData *data);
270 HRESULT GetThreadLocalModuleData(CLRDATA_ADDRESS thread, unsigned int index, struct DacpThreadLocalModuleData *data);
273 HRESULT GetSyncBlockData(unsigned int number, struct DacpSyncBlockData *data);
274 HRESULT GetSyncBlockCleanupData(CLRDATA_ADDRESS addr, struct DacpSyncBlockCleanupData *data);
277 HRESULT GetHandleEnum(ISOSHandleEnum **ppHandleEnum);
278 HRESULT GetHandleEnumForTypes(unsigned int types[], unsigned int count, ISOSHandleEnum **ppHandleEnum);
279 HRESULT GetHandleEnumForGC(unsigned int gen, ISOSHandleEnum **ppHandleEnum);
282 HRESULT TraverseEHInfo(CLRDATA_ADDRESS ip, DUMPEHINFO pCallback, LPVOID token);
283 HRESULT GetNestedExceptionData(CLRDATA_ADDRESS exception, CLRDATA_ADDRESS *exceptionObject, CLRDATA_ADDRESS *nextNestedException);
286 HRESULT GetStressLogAddress(CLRDATA_ADDRESS *stressLog);
289 HRESULT TraverseLoaderHeap(CLRDATA_ADDRESS loaderHeapAddr, VISITHEAP pCallback);
290 HRESULT GetCodeHeapList(CLRDATA_ADDRESS jitManager, unsigned int count, struct DacpJitCodeHeapInfo *codeHeaps, unsigned int *pNeeded);
291 HRESULT TraverseVirtCallStubHeap(CLRDATA_ADDRESS pAppDomain, VCSHeapType heaptype, VISITHEAP pCallback);
294 HRESULT GetUsefulGlobals(struct DacpUsefulGlobalsData *data);
295 HRESULT GetClrWatsonBuckets(CLRDATA_ADDRESS thread, void *pGenericModeBlock);
296 HRESULT GetTLSIndex(ULONG *pIndex);
297 HRESULT GetDacModuleHandle(HMODULE *phModule);
300 HRESULT GetRCWData(CLRDATA_ADDRESS addr, struct DacpRCWData *data);
301 HRESULT GetRCWInterfaces(CLRDATA_ADDRESS rcw, unsigned int count, struct DacpCOMInterfacePointerData *interfaces, unsigned int *pNeeded);
302 HRESULT GetCCWData(CLRDATA_ADDRESS ccw, struct DacpCCWData *data);
303 HRESULT GetCCWInterfaces(CLRDATA_ADDRESS ccw, unsigned int count, struct DacpCOMInterfacePointerData *interfaces, unsigned int *pNeeded);
304 HRESULT TraverseRCWCleanupList(CLRDATA_ADDRESS cleanupListPtr, VISITRCWFORCLEANUP pCallback, LPVOID token);
306 // GC Reference Functions
308 /* GetStackReferences
309 * Enumerates all references on a given callstack.
311 HRESULT GetStackReferences([in] DWORD osThreadID, [out] ISOSStackRefEnum **ppEnum);
312 HRESULT GetRegisterName([in] int regName, [in] unsigned int count, [out] WCHAR *buffer, [out] unsigned int *pNeeded);
314 HRESULT GetThreadAllocData(CLRDATA_ADDRESS thread, struct DacpAllocData *data);
315 HRESULT GetHeapAllocData(unsigned int count, struct DacpGenerationAllocData *data, unsigned int *pNeeded);
317 // For BindingDisplay plugin
318 HRESULT GetFailedAssemblyList(CLRDATA_ADDRESS appDomain, int count, CLRDATA_ADDRESS values[], unsigned int *pNeeded);
319 HRESULT GetPrivateBinPaths(CLRDATA_ADDRESS appDomain, int count, WCHAR *paths, unsigned int *pNeeded);
320 HRESULT GetAssemblyLocation(CLRDATA_ADDRESS assembly, int count, WCHAR *location, unsigned int *pNeeded);
321 HRESULT GetAppDomainConfigFile(CLRDATA_ADDRESS appDomain, int count, WCHAR *configFile, unsigned int *pNeeded);
322 HRESULT GetApplicationBase(CLRDATA_ADDRESS appDomain, int count, WCHAR *base, unsigned int *pNeeded);
323 HRESULT GetFailedAssemblyData(CLRDATA_ADDRESS assembly, unsigned int *pContext, HRESULT *pResult);
324 HRESULT GetFailedAssemblyLocation(CLRDATA_ADDRESS assesmbly, unsigned int count, WCHAR *location, unsigned int *pNeeded);
325 HRESULT GetFailedAssemblyDisplayName(CLRDATA_ADDRESS assembly, unsigned int count, WCHAR *name, unsigned int *pNeeded);
331 uuid(A16026EC-96F4-40BA-87FB-5575986FB7AF)
333 interface ISOSDacInterface2 : IUnknown
335 HRESULT GetObjectExceptionData(CLRDATA_ADDRESS objAddr, struct DacpExceptionObjectData *data);
336 HRESULT IsRCWDCOMProxy(CLRDATA_ADDRESS rcwAddr, BOOL* isDCOMProxy);
342 uuid(B08C5CDC-FD8A-49C5-AB38-5FEEF35235B4)
344 interface ISOSDacInterface3 : IUnknown
346 HRESULT GetGCInterestingInfoData(CLRDATA_ADDRESS interestingInfoAddr, struct DacpGCInterestingInfoData *data);
347 HRESULT GetGCInterestingInfoStaticData(struct DacpGCInterestingInfoData *data);
348 HRESULT GetGCGlobalMechanisms(size_t* globalMechanisms);
354 uuid(74B9D34C-A612-4B07-93DD-5462178FCE11)
356 interface ISOSDacInterface4 : IUnknown
358 HRESULT GetClrNotification(CLRDATA_ADDRESS arguments[], int count, int *pNeeded);
364 uuid(127d6abe-6c86-4e48-8e7b-220781c58101)
366 interface ISOSDacInterface5 : IUnknown
368 HRESULT GetTieredVersions(CLRDATA_ADDRESS methodDesc, int rejitId, struct DacpTieredVersionData *nativeCodeAddrs, int cNativeCodeAddrs, int *pcNativeCodeAddrs);