@BlackZeroX:
Esta funcion luce mal:
Public Function GetFileFullPath(ByVal hFile As Long) As String
Dim hHeap As Long, dwSize As Long, objName As UNICODE_STRING, pName As Long
Dim ntStatus As Long, i As Long, strDrives As String, strArray() As String
Dim dwDriversSize As Long, strDrive As String, strTmp As String, strTemp As String
On Error GoTo ErrHandle
hHeap = GetProcessHeap
pName = HeapAlloc(hHeap, HEAP_ZERO_MEMORY, &H1000)
ntStatus = NtQueryObject(hFile, ObjectNameInformation, pName, &H1000, dwSize)
If (NT_SUCCESS(ntStatus)) Then
i = 1
Do While (ntStatus = STATUS_INFO_LEN_MISMATCH)
pName = HeapReAlloc(hHeap, HEAP_ZERO_MEMORY, pName, &H1000 * i)
ntStatus = NtQueryObject(hFile, ObjectNameInformation, pName, &H1000, ByVal 0)
i = i + 1
Loop
End If
HeapFree hHeap, 0, pName
strTemp = String(512, Chr(0))
lstrcpyW strTemp, pName + Len(objName)
Se reseva memoria para obtener la informacion de el objeto para luego liberar la memoria? además podes llamar a NtQueryObject así:
NtQueryObject(hFile, ObjectNameInformation, 0, 0, &dwSize) ( C++, Pasando el puntero a dwSize )
Para obtener la cantidad de bytes necesarios y luego sí reservar esa cantidad de bytes (dwSize) y luego volver a llamar a NtQueryObject
y así evitar usar esos bucles tan inseguros.
Vendria bien repulir esas funciones, bueno simplemente diciendo, supongo que hace años que han sido escritas.