список файлов из заблокированного (FSCTL_LOCK_VOLUME) внешнего хранилища - PullRequest
0 голосов
/ 17 сентября 2018

Я хотел бы написать простое программное обеспечение для резервного копирования (на основе синхронизации) для себя.

План:

  1. Запуск программного обеспечения
  2. Подключение внешнего накопителя
  3. Приложение обнаруживает новый диск (через WMI) и сразу же ЗАБЛОКИРУЕТ это с помощью параметра (FSCTL_LOCK_VOLUME).(Предотвращение любой другой программы, которая должна иметь возможность изменять любые файлы на диске, например, вирус ..)
  4. Сравните размеры и даты файлов с исходными файлами.(FileRead, FileWrite), Копирование файла, если необходимо.
  5. Отключите внешний диск.

Я застрял в пункте 4. Не могу записать файл, пока диск заблокирован.

Мой код:

Dim hVol As IntPtr
Dim status As UInteger
hVol = CreateFile("\\.\H:", GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
DeviceIoControl(hVol, FSCTL_LOCK_VOLUME, IntPtr.Zero, 0, Nothing, 0, status, Nothing)
DeviceIoControl(hVol, FSCTL_DISMOUNT_VOLUME, IntPtr.Zero, 0, Nothing, 0, status, Nothing)

Dim buff(4096) As Byte
Const iBufSize As Integer = 4096
Dim dwBytesRead = 0
Dim dwBytesWritten = 0
Do
    If ReadFile(hVol, buff, iBufSize, dwBytesRead, IntPtr.Zero) = -1 Then Exit Do
    If dwBytesRead = 0 Then Exit Do
    Debug.WriteLine(Text.Encoding.UTF8.GetString(buff))
Loop While True

Это бесконечный цикл.Как можно разделить байты в файл с именем файла, расширением ...?

Я использую VisualBasic с .NET2.0 в Windows 7.

...