Есть "флешка", нужно на нее записать некую последовательность байт. Как это сделать? Т.е. не нужно использовать ее Файловую систему, а просто поверх взять и написать свою информацию. При подключении, для нее определяется драйвер VolSnap.sys (как показывает Device Manager), но у меня не получается ничего с ним сделать. Наверное следует просто через CreateFile() обратиться к нужному драйверу и далее через WriteFile() записать... у меня диск M: является symlink на \Device\Harddisk3\DP(1)0-0+17, пробовал на это ссылаться, но в ответ получаю сообщение, что система не может найти путь. Какие будут идеи, может кто с этим работал?
В чём трудность ? CreateFile("\\.\M:"...); WriteFile(...); CloseHandle(...); Будет писать прямо поверх всего как один большой набор данных. Можно также перемещаться по диску. SetFilePointer(...); Так можно бацкапить весь даже HDD, только имидж слишком большой И перед началом записи считай геометрию диска для определения длины/размера диска.
ssx SteelRat HANDLE hFileR = CreateFile( "\\.\C:", GENERIC_READ, 0, NULL, OPEN_ALWAYS, 0, NULL ); hFileR = 0хffffffff <- это после CreateFile почему получается INVALID_HANDLE_VALUE??? что не так?
Для начала READ/WRITE и SHARE_READ/SHARE_WRITE, потом OPEN_EXISTING и наконец FILE_ATTRIBUTE_NORMAL. А проверять ошибку надо с помощью GetLastError. Code (Text): CreateFile(DriveLetter, GENERIC_READ + GENERIC_WRITE, FILE_SHARE_READ + FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
failed with error 123: Синтаксическая ошибка в имени файла, имени папки или метке тома. это когда "\\.\C:" failed with error 5: Отказано в доступе. это когда "C:" Так как же правильно?! На компутере я админ
Вот этот дельфинистский код работает на ура Code (Text): lstrcpy(DriveLetter, '\\.\%:'); asm push edx push eax lea eax, DriveLetter mov edx, [eax] mov eax, i mov [edx+4], byte ptr al pop eax pop edx end; hDevice := CreateFile(DriveLetter, GENERIC_READ + GENERIC_WRITE, FILE_SHARE_READ + FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); if DeviceIoControl(hDevice, IOCTL_CHECK_DISK, nil, 0, nil, 0, dwBytesReturned, nil) then lbDiskName.Items.Add(Char(i)+':'); CloseHandle(hDevice); А у тебя какие параметры ?