Don Leno писал(а):Как программно восстановить удаленный с жесткого диска файл?
Don Leno писал(а):Почему никак, много в инете прог которые могут восстанавливать
Don Leno писал(а):а в vb такой реализации нет?
Don Leno писал(а):Тогда объясните по какому принципу программы восстановления работают.
Qwertiy писал(а):"Никак" было именно про портативную, поскольку нужен прямой доступ к диску, а для него админские права.
Qwertiy писал(а):Вот какое-то описание
"В отличие от FAT, NTFS – очень удобная для восстановления данных файловая система, позволяющая полностью восстановить все занимаемые удалённым файлом секторы на диске."
iGrok писал(а):А где тут проблема или противоречие, из-за которого возникает этот "никак"?
iGrok писал(а):Потому что это чушь, либо не описаны граничные условия. FAT, как раз, удобнее. Там при удалении просто имя файла меняется, и восстановить только что удалённый файл можно "в одно движение", с потерей одного символа в имени.
затем открыл википедиюhttp://hetmanrecovery.com/ru/recovery_news/hetman_uneraser_pr3.htm писал(а):Важно отметить, что записи кластеров в FAT при удалении файла обнуляются; соответственно, при анализе записи мы можем получить информацию о физическом адресе начала файла и об его размере. При этом какая бы то ни было информация об остальных кластерах файла отсутствует.
А вот в другом месте написано, что восстановление полностью возможно:http://ru.wikipedia.org/wiki/FAT писал(а):При удалении файла первый знак имени заменяется специальным кодом E5 и цепочка кластеров файла в таблице размещения обнуляется. Поскольку информация о размере файла (которая располагается в каталоге рядом с именем файла) при этом остаётся нетронутой, в случае, если кластеры файла располагались на диске последовательно и они не были перезаписаны новой информацией, возможно восстановление удалённого файла.
Сам не знаю. И кто прав в итоге?http://www.etegro.ru/articles/secure-disk-erasing писал(а):Например, в файловых системах File Allocation Table (FAT) удаление файла означает лишь удаление первого символа в его имени и пометке что файл удалён. Утилитами, присутствующими в самой операционной системе, можно восстановить файл без потерь (кроме первого символа имени).
Qwertiy писал(а):И кто прав в итоге?
http://ru.wikipedia.org/wiki/FAT писал(а):Удаление файла — первый символ файловой записи и всех ассоциированных LFN-записей заменяется кодом 0xE5; занимаемые файлом кластеры помечаются в таблице FAT как свободные, а в области данных не затрагиваются.
Don Leno писал(а):Появился вопрос, что за такая АПИ CreateFile, ReadFile?
Don Leno писал(а):Хакер, прошу помоги!
Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
If ret = 0 Then
ret = WaitForSingleObject(Hnd, INFINITE)
Select Case ret
Case WAIT_OBJECT_0
Case WAIT_TIMEOUT
End Select
Else
Return False
End If
Don Leno писал(а):Правильно ли я объявил функцию?
Don Leno писал(а): То есть мне нужно использовать Unicode функцию, по моему - "CreateFileW". Так?
Public Const GENERIC_READ = &H80000000
Public Const GENERIC_WRITE = &H40000000
Public Const FILE_SHARE_READ = &H1
Public Const FILE_SHARE_WRITE = &H2
Public Const OPEN_EXISTING = 3
Public Const FILE_ATTRIBUTE_NORMAL = &H80
Public Const FILE_FLAG_OVERLAPPED = &H40000000
Public Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
' Infinite timeout
Public Declare Function WaitForSingleObject Lib "kernel32" Alias "WaitForSingleObject" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Public Const INFINITE = &HFFFF ' Infinite timeout
Public Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal hObject As Long) As Long
Public Declare Function ReadFile Lib "kernel32" Alias "ReadFile" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As OVERLAPPED) As Long
Dim ret As UInt32
Don Leno писал(а):только вот этого я не понял - IntPtr.Zero
Don Leno писал(а):Dim ret As UInt32
Почти Long, но с беззнаковостью придётся повозиться, возможно
If ret = 0 Then
ret = WaitForSingleObject(Hnd, INFINITE)
Select Case ret
Case WAIT_OBJECT_0
Case WAIT_TIMEOUT
End Select
Else
Return False
End If
Don Leno писал(а):Qwertiy Мож поможешь с этим делом разобраться?
Don Leno писал(а):А как лонг нельзя просто объявить.
Don Leno писал(а):Что означают - WAIT_OBJECT_0 и WAIT_TIMEOUT? Они являются константами или нет? Их надо объявлять?
Don Leno писал(а):Или эт намек свалить с форума.
Don Leno писал(а):Попроще это что?
Don Leno писал(а):Автор исходника не оставил коментов в нем и никаких объявлений.
Don Leno писал(а):Так почему нельзя объявить лонг
Don Leno писал(а):и что там за "беззнаковостью придётся повозиться"?
Don Leno писал(а):Одного не понимаю зачем автор включил туда Select Case если там нет никакого кода?
Я тоже
'Функция которая определяет является ли файловая система раздела NTFS
Public Function IsNFTSDrive(ByVal strDrive As String) As Boolean
Dim Hnd As Long 'Дескриптор
Dim nRead As Long ' Число считаных байт
Dim ret As Long ' Для определения что нам возвращает функция ReadFile
Dim Buffer(1023) As Byte 'Сюда считываем байты с тома
Hnd = CreateFile(Mid(strDrive, 1, 2), GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, _
Nothing, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL Or FILE_FLAG_OVERLAPPED,0)
If (Hnd <> INVALID_HANDLE_VALUE) Then' если дескриптор не возвращает ошибки
' Читаем
ret = ReadFile(Hnd, Buffer, 1024, nRead, New System.Threading.NativeOverlapped)
if ret<>0 then' Если считывание прошло успешно, проверяем на совпадение байтов и возвращаем True
if Buffer(3) = 78 And Buffer(4) = 84 And Buffer(5) = 70 And Buffer(6) = 83 then
IsNFTSDrive=True
else
IsNFTSDrive=False
end if
else
IsNFTSDrive=False 'Иначе возращаем фалсе
end if
Else
IsNFTSDrive=False 'Иначе возращаем фалсе в случае ошибки с дескриптором
End If
ret=CloseHandle(Hnd) ' Закрываем дескриптор
End Function
Сейчас этот форум просматривают: Google-бот и гости: 56