Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с DeviceIoControl [D7, XP]


33Rus ©   (2009-10-12 20:17:00) 

Есть код

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

const
 METHOD_BUFFERED = 0;
 FILE_ANY_ACCESS = 0;
 FILE_DEVICE_DISK = 7;

 IOCTL_DISK_GET_DRIVE_GEOMETRY = (FILE_DEVICE_DISK shl 16) or
     (FILE_ANY_ACCESS shl 14) or (0 shl 2) or METHOD_BUFFERED;

type
PDISK_GEOMETRY = ^DISK_GEOMETRY;
 DISK_GEOMETRY = packed record
   Cylinders : LARGE_INTEGER;
   MediaType : Integer;
   TracksPerCylinder : DWORD;
   SectorsPerTrack : DWORD;
   BytesPerSector : DWORD;
 end;

 TForm1 = class(TForm)
   Button1: TButton;
   ListBox1: TListBox;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }

 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function GetDrvGeometry: DISK_GEOMETRY;
var
H:THandle;
DrvName:string;
Returned:DWord;
begin
DrvName:='\\.\PhysicalDrive0';
H:=CreateFile(PChar(DrvName),GENERIC_READ,
              FILE_SHARE_WRITE or FILE_SHARE_READ, nil,
              OPEN_EXISTING, 0, 0);
if H = INVALID_HANDLE_VALUE
  then  showmessage('No handle');

  if not DeviceIoControl (H, IOCTL_DISK_GET_DRIVE_GEOMETRY, nil, 0,
 @Result, SizeOf(Result), returned ,nil)
 then exit;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
DG:DISK_GEOMETRY;
begin
 GetDrvGeometry;
 ListBox1.Items.Add(IntToStr(DG.Cylinders.QuadPart));
end;
end.


Однако в ListBox возвращается какое-то огромное значение. Подскажите пожалуйста что не так.


wq   (2009-10-13 13:57:00) [1]

Сергей М.спасибо


Сергей М.   (2009-10-12 21:28:00) [2]


> if not DeviceIoControl(..) then exit;


А следующей строчкой идет end;- тот же самый выход.
И хз при этом, то ли DeviceIoControl вернула True, то ли False..


> begin
>  GetDrvGeometry;


И куда ты записал результат, возвращенный ф-цией ?
Выкинул в мусор ?)
Что же тогда требуешь от DG ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо