powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / mbr win7 не читается.
25 сообщений из 32, страница 1 из 2
mbr win7 не читается.
    #39482883
olegbank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для чтения mbr пользуюсь этой функцией ,она работает в winxp, но в win 7 (и видимо более поздних) возникает invalid pointer operation. Подскажите,плиз ,в чем проблема ,и желательно процедуру чтения для вин 7 и поздних

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
  function WriteSectors(DriveNumber: Byte; StartingSector, SectorCount: DWORD;
    Buffer: Pointer; BytesPerSector: DWORD = 512): DWORD;
  var
    hFile: THandle;
    bw,TmpLo,TmpHi: DWORD;
  begin
    Result := 0;
    hFile := CreateFile(PChar('\\.\PhysicalDrive'+IntToStr(DriveNumber)),
      GENERIC_WRITE,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
    if hFile = INVALID_HANDLE_VALUE then Exit;
    TmpLo := __Mul(StartingSector,BytesPerSector,TmpHi);
    if SetFilePointer(hFile,TmpLo,@TmpHi,FILE_BEGIN) = TmpLo then
    begin
      SectorCount := SectorCount*BytesPerSector;
      if WriteFile(hFile,Buffer^,SectorCount,bw,nil) then Result := bw;
    end;
    CloseHandle(hFile);
  end;
  Procedure ReadMBR(x: Integer; //????? ??????????
                  OutName: String; //????, ???? ?????????? ???????????
                  SecCount: Integer // ???-?? ????????
                 );
const
 FILE_DEVICE_DISK = 7;
 METHOD_BUFFERED = 0;
 FILE_ANY_ACCESS = 0;
 
type
 _MEDIA_TYPE = DWORD;
 
 _DISKG_GEOMETRY = packed record
   Cylinders: LARGE_INTEGER;
   MediaType: _MEDIA_TYPE;
   TracksPerCylinder: DWORD;
   SectorsPerTrack: DWORD;
   BytesPerSector: DWORD;
 end;
 
var
 DiskString: String;
 H,HOut: THandle;
 IOCTL_DISK_GET_DRIVE_GEOMETRY: Cardinal;
 DiskGeometry: _DISKG_GEOMETRY;
 BytesReturned: Cardinal;
 Res: BOOL;
 Posit: Int64;
 
 Buff: PChar;
 BuffSize, BytesRead, BytesWritten: Cardinal;
 
function GetCtlCode (_DeviceType, _Function, _Method, _Access: WORD): Cardinal;
begin
 Result := (_DeviceType shl 16) or (_Access shl 14)
   or (_Function shl 2) or _Method;
end;
 
begin
 DiskString := Format ('\\.\PHYSICALDRIVE%s',[IntToStr(x)]); // x -- ????? ???????
 // DiskString := Format ('\\.\%s',[DrCh+':']);// DrCh -- ????? ??????????? ?????... ???? ????? ?????? ?? ???????? ???????
 
 // ??????? "????" - ??????
 H := CreateFile(
     PChar(DiskString),
     GENERIC_READ,
     FILE_SHARE_WRITE,
     nil,
     OPEN_EXISTING,
     FILE_ATTRIBUTE_NORMAL,
     0
   );
 
 if H <> 0 then
  begin
    // ?????????? ????????? ?????
    IOCTL_DISK_GET_DRIVE_GEOMETRY :=
      GetCtlCode(FILE_DEVICE_DISK,0,METHOD_BUFFERED,FILE_ANY_ACCESS);
 
    Res := DeviceIoControl(
      H,
      IOCTL_DISK_GET_DRIVE_GEOMETRY,
      nil,
      0,
      @DiskGeometry,
      SizeOf(DiskGeometry),
      BytesReturned,
      nil
    );
 
   // ???? ??????????...
   if Res then
    begin
      // ???????? ????? ??? ?????? ?????? ???????
      BuffSize := SecCount * DiskGeometry.BytesPerSector;
      Buff := AllocMem(BuffSize);
 
      //???????????? ? ????? ???????//!!!!!!!!!!!!!!??? ?? ????? ??? ????!!!!!!!!!!!
      //posit:=GetTotalDiskSpace('C:\');
      // FileSeek(H,Posit-200,0);
       
      // ?????? ??????? ??????
      ReadFile (H, Buff^, BuffSize, BytesRead, nil);
 
      // ??????? ???? ??? ??????
      HOut := CreateFile(
         PChar(OutName),
         GENERIC_WRITE,
         FILE_SHARE_READ,
         nil,
         CREATE_ALWAYS,
         FILE_ATTRIBUTE_ARCHIVE,
         0
      );
      // ???? ???? ????????
      if HOut <> 0 then
       begin
        // ?????????? ? ???? ??? ?????
        WriteFile (HOut, Buff^, SecCount * DiskGeometry.BytesPerSector, BytesWritten, nil);
        //????????? ???? ??? ??????
        CloseHandle (HOut);
       end;
   end;
   // ???????????? ?????
   FreeMem(Buff);
   // ????????? ????, ???????? ??? ?????? ("??????")
   CloseHandle(H);
 end;
end;



Модератор: Как мне оформить свое сообщение?
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39482884
olegbank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скорее всего грабля тут ,но как исправить? -- IOCTL_DISK_GET_DRIVE_GEOMETRY
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39482885
olegbank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько я понял ,начиная с windows 7 используется диск gpt, и видимо ,Петя в этом случае тоже портит gpt. Один вопрос - win 7 и более поздние используют только gpt, или в зависимости от модификации может использоваться mbr?
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39482886
olegbank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в win 10 удалось прочитать gpt в файл ,хотя данных как-то там немного ,но слово gpt и еще байт 30 есть
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39482891
olegbank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в вин7 ни как gpt ни как mbr не читается
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39482910
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegbankнасколько я понял ,начиная с windows 7 используется диск gpt, и видимо ,Петя в этом случае тоже портит gpt. Один вопрос - win 7 и более поздние используют только gpt, или в зависимости от модификации может использоваться mbr?

Win7 и на mbr и на gpt садится.
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39482989
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegbankДля чтения mbr пользуюсь этой функцией ,она работает в winxp, но в win 7 (и видимо более поздних) возникает

Сдается мне по коду, ты не только читаешь, но и пишешь. Это нехорошо, тем более, с таким уровнем знания системы. Я бы твой код рассматривал как вредоносный.
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39483010
olegbank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну да ,пишу.мне же надо восстановить покоцанный вирусом mbr из бакапа.пока что после моих тестовых записей инициалов система грузится
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39483054
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы бы, для начала, показали на какой строке ошибка возникает...
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39483104
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegbankну да ,пишу.мне же надо восстановить покоцанный вирусом mbr из бакапа.пока что после моих тестовых записей инициалов система грузится

Сказки прокурору будешь рассказывать, он жалистные истории страсть как любит.
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39483169
linux dd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
olegbank, Херней какой-то ты занимаешься. Залей линух на флеху, грузанись с неё и dd if=/dev/sda bs=/dev/sdb/mbr/%инв№%.mbr bs=512
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39483171
linux dd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сори, dd if=/dev/sda of=/dev/sdb/mbr/%инв№%.mbr bs=512
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39483324
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GetLastError - наше все
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39483363
olegbank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
странное дело ,сделал так


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
const
 FILE_DEVICE_DISK = 7;
 METHOD_BUFFERED = 0;
 FILE_ANY_ACCESS = 0;
 
type
 _MEDIA_TYPE = DWORD;
 
 _DISKG_GEOMETRY = packed record
   Cylinders: LARGE_INTEGER;
   MediaType: _MEDIA_TYPE;
   TracksPerCylinder: DWORD;
   SectorsPerTrack: DWORD;
   BytesPerSector: DWORD;
 end;
 
var
 DiskString: String;
 H,HOut: THandle;
 IOCTL_DISK_GET_DRIVE_GEOMETRY: Cardinal;
 DiskGeometry: _DISKG_GEOMETRY;
 BytesReturned: Cardinal;
 Res: BOOL;
 Posit: Int64;
 
 Buff: PChar;
 BuffSize, BytesRead, BytesWritten: Cardinal;
 
function GetCtlCode (_DeviceType, _Function, _Method, _Access: WORD): Cardinal;
begin
 Result := (_DeviceType shl 16) or (_Access shl 14)
   or (_Function shl 2) or _Method;
end;
 
begin
form1.Memo1.Lines.Add('lev1');
 DiskString := Format ('\\.\PHYSICALDRIVE%s',[IntToStr(x)]); // x -- ????? ???????
 // DiskString := Format ('\\.\%s',[DrCh+':']);// DrCh -- ????? ??????????? ?????... ???? ????? ?????? ?? ???????? ???????

 // ??????? "????" - ??????
 try
 H := CreateFile(
     PChar(DiskString),
     GENERIC_READ,
     FILE_SHARE_WRITE,
     nil,
     OPEN_EXISTING,
     FILE_ATTRIBUTE_NORMAL,
     0
   );

   except
   On E : Exception do  showmessage('level 1 error ' +e.Message);
   end;
form1.Memo1.Lines.Add('lev2a'+' '+IntToStr(getlasterror));


Exception вообще не перехватывается, но пишет lev2a 5. И как пофиксить ?
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39483366
olegbank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это в win 7, в xp вообще нормально работает
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39483367
olegbank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I ran across a problem illustrated by the following line of code:
Hide Copy Code
HANDLE hfile = CreateFile("c:\\windows\\test.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

I am testing on Windows 7.

With my old code (last compiled in 2004 using VC6) my SETUP.EXE essentially creates the file without any problem. (I don't know if Microsoft built any sort of backwards compatibility in for my installer or not, I suppose that is possible since it was widely distributed, but who knows.)

I created a new test program using VC6 under WinXP, and it also successfully creates the file, however a minor issue in that it will not appear unless you click the "Compatibility Files" button in Win7 explorer.

I also created a new test program using VC10 under Win7, and it absolutely fails with Error #5 "Access Denied".
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39483373
olegbank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там человеку посоветовали пустить от админа ,я так сделал. Действительно, в createfile ошибка исчезла. Но появилась на следующем шаге и та же самая (5)

try
IOCTL_DISK_GET_DRIVE_GEOMETRY :=
GetCtlCode(FILE_DEVICE_DISK,0,METHOD_BUFFERED,FILE_ANY_ACCESS);
except
On E : Exception do showmessage('level 2 error ' +e.Message);
end;
form1.Memo1.Lines.Add('lev2'+' '+IntToStr(getlasterror));
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39483375
olegbank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все,поборол.за идею с getlasterror thanks
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39483405
olegbank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
linux dd, да я -то сам умею mbr с флехи восстановить. суть затеи была -помочь сотне тысяч ламеров с битой mbr
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39483411
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegbankсуть затеи была -помочь сотне тысяч ламеров с битой mbrНу починят они mbr, а дальше что?
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39483419
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegbankстранное дело ,сделал так


[src delphi]
try
H := CreateFile(
PChar(DiskString),
GENERIC_READ,
FILE_SHARE_WRITE,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0
);

except
On E : Exception do showmessage('level 1 error ' +e.Message);
end;


Я же говорю - поставь антивирус, не твое это. Системные вызовы Windows не вызывают исключений, за исключение одного достаточно редкого случая.
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39483487
linux dd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
olegbank, Расскажи как ты видишь картину в целом. Вот слетел у меня mbr, ПК не загружается. Мои действия? Мои действия с твоим ПО?
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39483512
olegbank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
картина такая ,ставишь мое по.оно делает копию mbr целой. приходит Петя ,портит mbr и требует перегрузиться, иначе он не может портить файлы. по обнаруживает порчу mbr и возвращает целую mbr, закрыв ему порты (при это выключить шеринг папок и принтеров) ,чтоб не вернулся, и выставив флаг заражения,если его еще нет.Правда ,антивирусом еще неплохо бы почистить вирус ,но это можно сделать ,воткнув диск с чистой системой и антивирусом .Я понимаю ,лучше сразу антивирус поставить ,как я ,но обычно об этом думают после прихода Пети.и еще ,я не только с петей борюсь ,так что восстановление mbr полезно ,если придет неизвестный Вася.
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39483514
olegbank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот если юзер перегрузился, тогда картина хуже.придется с другого винта с системой восстанавливать mbr (проще с cd, как я делал).ну и файлы вряд ли все шифруются. для восстановления убитых придется автобакап делать в облако, это реально. я хоть узнал теперь ,что системные вызовы try except не перехватываются.
...
Рейтинг: 0 / 0
mbr win7 не читается.
    #39483515
olegbank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вызовы из dll часто тоже ,я видел ,как dll выдает сообщение о ошибке, но try except не убирает его. То ли там в коде вызывается кастомный error dialog, похожий на системный, то ли системный вызов (хотя это была библа доступа к Оракл для Делфи,написанная на С++)
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / mbr win7 не читается.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]