Форум: "Начинающим";
Текущий архив: 2009.11.29;
Скачать: [xml.tar.bz2];
ВнизПроблема с DeviceIoControl Найти похожие ветки
← →
33Rus (2009-10-12 20:17) [0]Есть код
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 возвращается какое-то огромное значение. Подскажите пожалуйста что не так.
← →
Сергей М. © (2009-10-12 21:28) [1]
> if not DeviceIoControl(..) then exit;
А следующей строчкой идетend;
- тот же самый выход.
И хз при этом, то ли DeviceIoControl вернула True, то ли False..
> begin
> GetDrvGeometry;
И куда ты записал результат, возвращенный ф-цией ?
Выкинул в мусор ?)
Что же тогда требуешь от DG ?
← →
wq (2009-10-13 13:57) [2]Сергей М. спасибо
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.11.29;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c