Me interesa un programa que haga desde MSDOS:
programa pepe.txt
que mueva el archivo automáticamente a la papelera.
En Windows, las papeleras tienen un nombre exclusivo del usuario con muchos números y además puede ser recycled (con D) según la versión de Windows c:\recycler\1-2-3-3433-343434-343434 por tanto hablaré de Windows XP que es el que tengo.
Para entrar en esas rutas, usar dir /a /x que muestra todos los archivos incluso ocultos y /x para que muestre nombres cortos y poder escribirlos rápido al hacer "cd".
En ese directorio hay un fichero oculto llamados INFO2 que tiene el registro de archivos borrados, otro llamado desktop.ini que tiene las propiedades de la carpeta que indican que es una papelera y una serie de ficheros llamados DXNNN.EXT que son los ficheros almacenados que se borraron. La X es la unidad donde estaba el archivo, NNN es un número correlativo y EXT es la extensión original.
He visto que hay gente que cree que en bat puede usarse la papelera para guardar archivos borrados, pero es falso. Aunque se copien archivos dentro de esas carpetas, no se actualiza el archivo INFO2 y luego al consultar la papelera desde el Explorador de Windows, no aparecen.
Sería posible vaciar la papelara desde .bat y hasta incluso seudorestaurar archivos dejando la copia en la papelera, pero nunca meterlos sin tocar el INFO2.
Opciones para construir el programa de borrado de un archivo desde MSDOS a través de la papelera:
1.- Crear una papelera alternativa en bat donde mover los archivos, que puede ser incluso c:\recycled, pero ya digo de antemano que poner un archivo ahí no actualiza INFO2 y no sale en la papelera realmente.
Hay que crear programa llamado "delp.bat" y meterlo en alguna ruta de búsqueda del PATH:
@echo off
move /y %* \recycler
El solito se encarga de buscar la unidad si es C:, D:...
2.- Usar la papelera de Windows y tras mover el archivo habría que tocar el INFO2. Para ello puede usarse el manual de la estructura del archivo INFO2 y la papelera de Windows:
http://www.bandwidthco.com/whitepapers/compforensics/windows/Forensic%20Analysis%20of%20Microsoft%20Windows%20Recycle%20Bin%20Records.pdfSigo con el punto 2.
UNICODE Recycled Name File Variable, NULL terminated Start of Record+0x11C
- Crear un programa que lea INFO2 para hacer pruebas. Ya hay uno llamado "rifiuti" pero necesito programarlo desde 0 para que sea la base de los añadidos a INFO2.
Const lonreg = &H320
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Private Declare Function FileTimeToSystemTime Lib "kernel32" _
(lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
Private Declare Function FileTimeToLocalFileTime Lib "kernel32" _
(lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
Private Sub Form_Activate()
Dim udtFileTime As FILETIME
Dim udtFileTime2 As FILETIME
Dim udtSystemTime As SYSTEMTIME
Dim a As String * lonreg
x = 1
Open "d:\recycler\S-1-5-~1\info2" For Random As 1 Len = lonreg
ultireg = Fix(LOF(1) / lonreg)
aju = lonreg - &H10
otro1:
DoEvents
If x > ultireg Then GoTo sale
Get 1, x, a
a = Right(a, aju) ' Ajuste registro por cabecera fichero
If Mid(a, 5, 1) = Chr(0) Then GoTo otro3 ' Descarta los ya borrados
n1 = Mid(a, 5, InStr(5, a, Chr(0)) - 5)
Print "Nombre: "; n1
pp = &H108: GoSub saca
Print "Identificación: "; nn
q = Asc(Mid(a, &H10D, 1)) + Asc("A")
Print "Disco: "; Chr(q)
pp = &H110: GoSub saca
udtFileTime.dwLowDateTime = nn
pp = &H114: GoSub saca
udtFileTime.dwHighDateTime = nn
FileTimeToLocalFileTime udtFileTime, udtFileTime2
FileTimeToSystemTime udtFileTime2, udtSystemTime
q = udtSystemTime.wDay & "/" & udtSystemTime.wMonth & "/" & udtSystemTime.wYear
q = q & " " & udtSystemTime.wHour & ":" & udtSystemTime.wMinute
Print "Fecha borrado: "; q
pp = &H118: GoSub saca
Print "Tamaño físico en disco: "; nn
Print
otro3:
x = x + 1
GoTo otro1
saca:
n = ""
For f = pp + 1 To pp + 4
n2 = Hex(Asc(Mid(a, f, 1)))
If Len(n2) = 1 Then n2 = "0" & n2
n = n2 & n
Next f
nn = Val("&h" & n)
If nn < 0 Then nn = nn + 65536
Return
sale:
Close
End Sub