WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Чтение секторов из-под Win.

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Чтение секторов из-под Win.
AAY опубликован 11-03-2001 20:17 MSK   Click Here to See the Profile for AAY   Click Here to Email AAY  
Подскажите пожалуйста каким образом можно считать определённый сектор с жёсткого диска из win32 приложения. Не обижусь если будут примеры :-). Заранее спасибо.
al опубликован 12-03-2001 10:47 MSK     Click Here to See the Profile for al  Click Here to Email al     
Под NT/2000 мжно открыть физический диск для чтения/записи
при помощи функции CreateFile("\\.\PHYSICALDRIVE2",....);
Прдробности в MSDN.
ssergey опубликован 01-12-2001 05:06 MSK     Click Here to See the Profile for ssergey  Click Here to Email ssergey     
Функция простая
а с чем ее едят сам понять не могу
Предположим мне надо считать сектор с гибкого диска
нашел пример на С++ (MFC) - но на этом языке писать
не умею. Только читать и то со словарем :)
Попробовал перевести на VB, но появилась проблема:

насколько я понял сначала получаем хендл соответствующего драйвера
HANDLE hVxD=CreateFile("\\\\.\\vwin32",0,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);


потом передаем его ф-ии DeviceIoControl, которая заставляет его
считать необходимые данные в буфер, также передаваемый функции по
ссылке

fResult = DeviceIoControl(hDev, VWIN32_DIOC_DOS_DRIVEINFO,
®, sizeof(reg),
®, sizeof(reg), &cb, 0);

буфер reg это структура:
typedef struct _DIOC_REGISTERS
{DWORD reg_EBX;
DWORD reg_EDX;
DWORD reg_ECX;
DWORD reg_EAX;
DWORD reg_EDI;
DWORD reg_ESI;
DWORD reg_Flags;
} DIOC_REGISTERS, *PDIOC_REGISTERS;

которая предварительно заполняется:
reg.reg_EAX = 0x7305;
reg.reg_EBX = (DWORD)&dio;
reg.reg_ECX = -1;
reg.reg_EDX = bDrive;
reg.reg_ESI = 0x6001;

********************************************************
* *
* наиболее интересен здесь второй параметр: *
* reg.reg_EBX = (DWORD)&dio; *
* параметр "reg.reg_EBX" хранит адрес структуры "dio" *
* *
********************************************************

dio это тоже структура:
typedef struct _DISKIO {
DWORD dwStartSector; // starting logical sector number
WORD wSectors; // number of sectors
DWORD dwBuffer; // address of read/write buffer
} DISKIO, * PDISKIO;

в целом пример исходника со всеми проверками и
декларациями есть на форуме по С++ здесь же.

В общем когда я попытался перевести на VB уперся в строчку
reg.reg_EBX = (DWORD)&dio;
выдал ошибку и встал, точнее лег - спать.

Не исключено, что если эту проблему побороть появятся новые...
Я ведь не супер программист - так для себя...

ssergey опубликован 01-12-2001 05:08 MSK     Click Here to See the Profile for ssergey  Click Here to Email ssergey     
З.Ы. Я не виноват но форум автоматически заменяет ф-ию взятия адреса
(амперсанд)reg
на символ ®
kuss опубликован 01-12-2001 13:16 MSK     Click Here to See the Profile for kuss  Click Here to Email kuss     
а как отформатировать дорожку кто-нибудь знает?
ssergey опубликован 01-12-2001 16:12 MSK     Click Here to See the Profile for ssergey  Click Here to Email ssergey     
прошу прощения
не туда послал
я - новичок
Organic опубликован 01-12-2001 22:52 MSK     Click Here to See the Profile for Organic  Click Here to Email Organic     
все это _жопа_
чуваки в виндоусе с железом работать нежелательно! на то она и клепалась как API ось.

я так понял ко всему этому причастны вирусы (опс! я этого не говорил :) )
так берем любой подходящий исходник виря и смотрим там!

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.