![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с 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 ?