我有一个VB6应用程序,其中包含以下代码,似乎试图访问Windows进程信息
我认为这可能是间歇性无限循环的原因 - REDIM-ming一个数组并扼杀所有内存。
有没有人知道下面的代码是什么,以及它们是否可以帮助捕获它循环很长时间并且bytBuf增加太多的场景(并且你能推荐一个最大数组吗?) bytBuf的大小?)
Do
ReDim bytBuf(nSize)
ntStatus = NtQuerySystemInformation(SystemHandleInformation, VarPtr(bytBuf(0)), nSize, 0&)
If (Not NT_SUCCESS(ntStatus)) Then
If (ntStatus <> STATUS_INFO_LENGTH_MISMATCH) Then
Erase bytBuf
Exit Function
End If
'If it always ends up here, it will loop endlessly! How do I stop it?!
Else
Exit Do
End If
nSize = nSize * 2
ReDim bytBuf(nSize)
Loop
非常感谢 安德鲁
答案 0 :(得分:3)
循环使缓冲区参数的大小加倍并再次调用 NtQuerySystemInformation 方法。循环取决于成功调用,并假设ntStatus STATUS_FLT_BUFFER_TOO_SMALL(0x801C0001)导致失败。退出循环有几种选择。
Microsoft建议不要使用NtQuerySystemInformation方法,因为它可能会从Windows版本更改为Windows版本。可以在NtQuerySystemInformation function
找到详细信息和替代方法