Форматирование flash-карты

Тема в разделе "WASM.WIN32", создана пользователем Iceberg, 21 дек 2005.

  1. Iceberg

    Iceberg New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    54
    Адрес:
    Санкт-Петербург
    Есть "флешка", нужно на нее записать некую последовательность байт. Как это сделать? Т.е. не нужно использовать ее Файловую систему, а просто поверх взять и написать свою информацию.



    При подключении, для нее определяется драйвер VolSnap.sys (как показывает Device Manager), но у меня не получается ничего с ним сделать.



    Наверное следует просто через CreateFile() обратиться к нужному драйверу и далее через WriteFile() записать...



    у меня диск M: является symlink на \Device\Harddisk3\DP(1)0-0+17, пробовал на это ссылаться, но в ответ получаю сообщение, что система не может найти путь.



    Какие будут идеи, может кто с этим работал?
     
  2. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409


    В чём трудность ? ;)

    CreateFile("\\.\M:"...);

    WriteFile(...);

    CloseHandle(...);

    Будет писать прямо поверх всего как один большой набор данных. Можно также перемещаться по диску.

    SetFilePointer(...);

    Так можно бацкапить весь даже HDD, только имидж слишком большой ;)

    И перед началом записи считай геометрию диска для определения длины/размера диска.
     
  3. Iceberg

    Iceberg New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    54
    Адрес:
    Санкт-Петербург
    SteelRat

    А таким образом бут-сектор прочитается?
     
  4. ssx

    ssx Member

    Публикаций:
    0
    Регистрация:
    19 авг 2003
    Сообщения:
    336
    да, прочитается (сам пробовал)
     
  5. YoungBastard

    YoungBastard New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2005
    Сообщения:
    231
    Адрес:
    Russia
    ssx

    SteelRat



    HANDLE hFileR = CreateFile( "\\.\C:", GENERIC_READ, 0, NULL, OPEN_ALWAYS, 0, NULL );



    hFileR = 0хffffffff <- это после CreateFile



    почему получается INVALID_HANDLE_VALUE???

    что не так?
     
  6. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Для начала READ/WRITE и SHARE_READ/SHARE_WRITE, потом OPEN_EXISTING и наконец FILE_ATTRIBUTE_NORMAL. А проверять ошибку надо с помощью GetLastError.
    Код (Text):
    1. CreateFile(DriveLetter, GENERIC_READ + GENERIC_WRITE, FILE_SHARE_READ + FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
     
  7. YoungBastard

    YoungBastard New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2005
    Сообщения:
    231
    Адрес:
    Russia
    failed with error 123: Синтаксическая ошибка в имени файла, имени папки или метке тома.



    это когда "\\.\C:"



    failed with error 5: Отказано в доступе.



    это когда "C:"



    Так как же правильно?! На компутере я админ
     
  8. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    YoungBastard



    а там со slash'ами всё в порядке?
     
  9. YoungBastard

    YoungBastard New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2005
    Сообщения:
    231
    Адрес:
    Russia
    _BC_

    'там' - это т.е. у меня на компьютере?!

    Ну, да...

    А что с ними может быть?
     
  10. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Должно быть так !

    "\\.\C:"
     
  11. YoungBastard

    YoungBastard New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2005
    Сообщения:
    231
    Адрес:
    Russia
    SteelRat

    ну, на win2k "\\.\C:" выдает 123 ошибку
     
  12. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Вот этот дельфинистский код работает на ура :)
    Код (Text):
    1.   lstrcpy(DriveLetter, '\\.\%:');
    2.   asm
    3.     push edx
    4.     push eax
    5.     lea eax, DriveLetter
    6.     mov edx, [eax]
    7.     mov eax, i
    8.     mov [edx+4], byte ptr al
    9.     pop eax
    10.     pop edx
    11.   end;
    12.   hDevice := CreateFile(DriveLetter, GENERIC_READ + GENERIC_WRITE, FILE_SHARE_READ + FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
    13.   if DeviceIoControl(hDevice, IOCTL_CHECK_DISK, nil, 0, nil, 0, dwBytesReturned, nil) then
    14.     lbDiskName.Items.Add(Char(i)+':');
    15.   CloseHandle(hDevice);


    А у тебя какие параметры ?
     
  13. krokus

    krokus New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2005
    Сообщения:
    11
    Адрес:
    Ukraine
    Может так: "\\\\.\\C:"
     
  14. YoungBastard

    YoungBastard New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2005
    Сообщения:
    231
    Адрес:
    Russia
    krokus

    да, вот так все работает