如何在Kernel32.dll库中使用RtlCaptureStackBackTrace()?

时间:2012-10-04 04:31:23

标签: c# interop dllimport

我知道StackTrace类,但由于所有的符号查找,我所做的事情太慢了。

我在RtlCaptureStackBackTrace听说过Kernel32.dll函数,但我似乎无法让它正常运行。我不熟悉pinvoke,因为我很少对它做任何事情,而我所做的事情在网上很好,但不是这样:(。

这是我的定义:

[DllImport("kernel32.dll")]
public static extern ushort RtlCaptureStackBackTrace(uint FramesToSkip, uint FramesToCapture, out IntPtr BackTrace, out uint BackTraceHash);

这就是我使用它的方式:

IntPtr trace = IntPtr.Zero;
uint traceHash = 0; 
int framesCaptured = 0;

framesCaptured = RtlCaptureStackBackTrace(0, 4, out trace, out traceHash);

int[] frames = new int[framesCaptured];
Marshal.Copy(trace, frames, 0, framesCaptured);

我看到的是framesCaptured是1,应该是至少4个用户调用以及我的测试应用程序的系统调用。

编辑:我应该明确表示我的问题是我在RtlCaptureStackBackTrace做错了我没有收到正确的堆栈地址信息,或者我正确使用它并且只是不知道如何传播数据?

0 个答案:

没有答案