![](/logo_grey.gif)
Последние записи
- Как в Python+Selenium webdriver открыть новую вкладку в уже открытом браузере?
- Lazarus, проверка существования строки таблице
- BASM и record, обращение к полям записи
- Web PHP Framework Symfony
- Относительный путь для вывода картинки на html странице
- Массовое открытие гиперссылок в браузере
- Скопировать значение строки из таблицы в textarea
- Рамки для страниц отчетов
- Вывод StdOut консоли в TMemo
- Чтение из файла большого размера (нехватка памяти)
![](http://programmersclub.ru/slurm3.jpg)
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
![](http://programmersclub.ru/katajpg.jpg)
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
8th
Ноя
Прямой доступ к физическому устройству
Posted by maloy under Delphi, Win Api, Архив
BOBAH13
Есть код уже, я уже и о драйверах думал, вообщем вот вопрос.
Существует (ну для примера у меня на ПК это \\.\M:) USB Flash Drive, виден на ПК, вообщем все ок. Хочу открыть его как физический диск, и записать например во второй сектор (у меня он 512 байт) Hello World! ну это так для разминки. Что странно, что WinHex нормально опишет, почему не ясно. У меня система Windows XP SP3.
Код:
#include <windows.h>
#include <stdio.h>
#include <string>
#define GOUT(s) { wprintf(L"%s", s); getchar(); return 0; }
int main()
{
DWORD returned;
char buf[255];
HANDLE hDevice = CreateFile(L"\\\\.\\M:", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, NULL);
if(!hDevice)
{
GOUT(L"Cannot open drive.");
}
if(!DeviceIoControl(hDevice, FSCTL_LOCK_VOLUME,NULL,NULL,NULL,NULL,&returned,NULL))
{
CloseHandle(hDevice);
GOUT(L"Cannot lock volume.");
}
if(SetFilePointer(hDevice, 512, NULL, FILE_BEGIN) != 512)
{
CloseHandle(hDevice);
GOUT(L"Cannot set file pointer.");
}
strcpy_s(buf, sizeof(buf), "Hello World!");
if(!WriteFile(hDevice, buf, strlen(buf), &returned, NULL))
{
CloseHandle(hDevice);
GOUT(L"Cannot write the data.");
}
DeviceIoControl(hDevice, FSCTL_UNLOCK_VOLUME,NULL,NULL,NULL,NULL,&returned,NULL);
CloseHandle(hDevice);
printf("The data was written\nPress any key...");
getchar();
return 0;
}
Все выполняется успешно, кроме WriteFile. Ах да, возвращает ERROR_INVALID_PARAMETER…
Проблема решена. Решение заключается в том, что писать за раз только по размеру сектора (в моем случае 512 байт за раз)
тема на форуме от 2009 года
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
![пеллетные котлы](http://programmersclub.ru/respective.jpg)
пеллетные котлы
![пеллетный котел](http://programmersclub.ru/emtas.jpg)
Пеллетный котел Emtas
![форум программистов](http://programmersclub.ru/banf336х280.gif)
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)