Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |
Про Win95/98/Me и NT/W2K/XP/NET _вся_ информация есть в PlatformSDK 09.05.02 17:53 Число просмотров: 1023
Автор: leo <Леонид Юрьев> Статус: Elderman
|
Поиши следуюшие строчки:
"Device Input and Output Control Codes"
"DeviceIoControl"
"CreateFile"
"Exclusive Use Lock"
Разница между Win95/98 и NT колосальная.
В NT как в Unix можно просто открыть "файл", который на самом деле диск и делать что угодно. В Win95 масса мышиной возьни...
|
|
<programming>
|
[C++] Запись на винт-С++, biosdisk 07.05.02 21:02
Автор: Moderator Статус: Незарегистрированный пользователь
|
Хочу, чтобы записала нули в нулевуой сектор пишу через функцию biosdisk:
char buffer[512];
biosdisk(3,0x80,0,0,0,20,buffer); Но информация не пишется! Может я не так координаты задаю? Если нет, то в чем косяк?
|
 |
Про Win95/98/Me и NT/W2K/XP/NET _вся_ информация есть в PlatformSDK 09.05.02 17:53
Автор: leo <Леонид Юрьев> Статус: Elderman
|
Поиши следуюшие строчки:
"Device Input and Output Control Codes"
"DeviceIoControl"
"CreateFile"
"Exclusive Use Lock"
Разница между Win95/98 и NT колосальная.
В NT как в Unix можно просто открыть "файл", который на самом деле диск и делать что угодно. В Win95 масса мышиной возьни...
|
 |
[C++] Запись на винт-С++, biosdisk 07.05.02 21:10
Автор: leo <Леонид Юрьев> Статус: Elderman
|
> > Хочу, чтобы записала нули в нулевуой сектор пишу через > функцию biosdisk: > char buffer[512]; > biosdisk(3,0x80,0,0,0,20,buffer); Но информация не > пишется! Может я не так координаты задаю? Если нет, то в > чем косяк?
Я сейчас уже не помню формат аргументов biosdisk(), но на всякий случай:
- сектора нумеруются начиная с 1 (не с нуля);
- последние верси DOS (Win95/98/Me) блокируют низкоуровневый доступ к диску, посмотри help по команде lock.
- NT не даст записать в принципе, нужно использовать Ioctl()
Удачи!
|
 |  |
[C++] Запись на винт-С++, biosdisk 08.05.02 08:22
Автор: Moderator Статус: Незарегистрированный пользователь
|
> > Я сейчас уже не помню формат аргументов biosdisk(), но на > всякий случай: > - сектора нумеруются начиная с 1 (не с нуля); > - последние верси DOS (Win95/98/Me) блокируют > низкоуровневый доступ к диску, посмотри help по команде > lock. > - NT не даст записать в принципе, нужно использовать > Ioctl() > > Удачи! За удачу спасибо! 8)Если решать эту проблему через то ioctl() то какой адрес задавать, чтобы инфа записалась в начала диска?
|
 |  |  |
[C++] Запись на винт-С++, biosdisk 08.05.02 17:28
Автор: Chingachguk <Chingachguk> Статус: Member
|
|
Через IOCtl может быть такая шняга: винда дает писать только в сектора активного раздела, а начало диска(mbr ты хочешь?) к нему не принадлежат ;)
|
 |  |  |  |
[C++] Запись на винт-С++, biosdisk 08.05.02 18:08
Автор: Moderator Статус: Незарегистрированный пользователь
|
> Через IOCtl может быть такая шняга: винда дает писать > только в сектора активного раздела, а начало диска(mbr ты > хочешь?) к нему не принадлежат ;) Дык разлочить надо! Ток вот как... 8)
|
 |  |  |  |  |
[C++] Запись на винт-С++, biosdisk 08.05.02 18:33
Автор: Chingachguk <Chingachguk> Статус: Member Отредактировано 08.05.02 18:39 Количество правок: 1
|
> > Через IOCtl может быть такая шняга: винда дает писать > > только в сектора активного раздела, а начало диска(mbr > > ты хочешь?) к нему не принадлежат ;) > Дык разлочить надо! Ток вот как... 8)
В 98-х можно попробовать написать динамик VxD, который позовет сервис другого VxD, например:
Values for Int13 (VxD ID 0020h) service number:
00h get version
01h device registered
02h translate VM interrupt
03h hooking BIOS interrupt
04h unhooking BIOS interrupt
Вообще-то, когда зовешь, к примеру, ReadFile, вызов проходит через кучу VxD-шек, а окончательно сектора читает IOS (IOS_Send_Command & IOS_Send_Next_Command). В смысле, конечно, не сам читает(у меня читает VxD ESDI через команды in/out), но с точки зрения сервиса чтения секторов - именно он.
Также можно попробовать писать через команды in/out из того же динамик VxD.
|
 |  |  |  |  |  |
[C++] Запись на винт-С++, biosdisk 09.05.02 19:18
Автор: Moderator Статус: Незарегистрированный пользователь
|
> > > Через IOCtl может быть такая шняга: винда дает > писать > > > только в сектора активного раздела, а начало > диска(mbr > > > ты хочешь?) к нему не принадлежат ;) > > Дык разлочить надо! Ток вот как... 8) > > В 98-х можно попробовать написать динамик VxD, который > позовет сервис другого VxD, например: > > Values for Int13 (VxD ID 0020h) service number: > 00h get version > 01h device registered > 02h translate VM interrupt > 03h hooking BIOS interrupt > 04h unhooking BIOS interrupt > > Вообще-то, когда зовешь, к примеру, ReadFile, вызов > проходит через кучу VxD-шек, а окончательно сектора читает > IOS (IOS_Send_Command & IOS_Send_Next_Command). В смысле, > конечно, не сам читает(у меня читает VxD ESDI через команды > in/out), но с точки зрения сервиса чтения секторов - именно > он. > Также можно попробовать писать через команды in/out из > того же динамик VxD. ВА не проще ли вызвать команду "lock" из command.com? :0) Например так(поправьте если неправильно):
execl("command.com", "command.com",
"lock", "y", NULL) ;
|
|
|