В ходе написания некоторой программы выяснилось, что имеет место утечка памяти при использовании следующего кода:
- Код: Выделить всё
Public Function GetInfoPtr&(ByVal tp&)
Dim mSize&, mPtr&, st&, mRS&
mSize = 4096
mPtr = VirtualAlloc(0, mSize, &H1000, 4)
ZwQuerySystemInformation tp, mPtr, mSize, mRS
VirtualFree mPtr, 0, &H4000
mSize = mRS
mPtr = VirtualAlloc(0, mSize, &H1000, 4)
ZwQuerySystemInformation tp, mPtr, mSize, mRS
GetInfoPtr = mPtr
End Function
Private Sub GetPIDs()
Dim ChPrc() As Long, Arr&, mPtr&, mPtr2&, hCnt&, j&, isin As Boolean
mPtr = GetInfoPtr(16)
mPtr2 = mPtr
RtlMoveMemory ByVal VarPtr(hCnt), ByVal mPtr, 4 'кол-во структур SYSTEM_HANDLE
mPtr = mPtr + 4
ReDim ChPrc(0)
For i = 1 To hCnt
RtlMoveMemory ByVal VarPtr(Arr), ByVal mPtr, 4
isin = False
For j = 0 To UBound(ChPrc)
If Arr = ChPrc(j) Then isin = True: Exit For ' проверяем, есть ли такой PID уже в массиве
Next
If Not isin Then
ReDim Preserve ChPrc(UBound(ChPrc) + 1)
ChPrc(UBound(ChPrc)) = Arr ' если нет - добавляем в массив новый элемент и присваиваем ему значение PID
End If
mPtr = mPtr + 16
Next
VirtualFree mPtr2, 0, &H4000
End Sub
эта процедура заполняет динамический массив ChPrc значениями PID, получаемыми из списка хендлов.
Надеюсь на Вашу помощь. Заранее спасибо!