29. marts 2001 - 10:18
Der er
8 kommentarer og
1 løsning
Harddisk info.
Jeg skal bruge informationer om Harddisk på det fysiske niveau. specielt skal jeg bruge en viden om hvormange harddiske der sidder i maskiner og hvilke partioner den er indelt i ...
PS. Jeg kender selv funktionen API GetVolumeInformation()
Jens B
29. marts 2001 - 12:12
#4
Det står også i MSDOS techRef. Det er BIOS Kald de virker, det er muligt du kan slippe afsted med noget Win. men jeg tror det ikke hvis Partion Magic og den slags boot\'er jo alle i dos hvis de skal pille for alvor.
29. marts 2001 - 12:35
#5
Martin >> nu har jeg selv fundet svaret :
Man skal brugen en funktion her hedder DeviceIoControl().
Før du kan bruge den skal man først prote Winioctl.h til Delphi. (godt jeg havde gjort det for længe siden)
Hvis du så vil vide hvormange cylindere din HD har så skriver du:
procedure ReadBoot(Drive: Char);
var
BytesRead: Cardinal;
H: THandle;
_DISK_GEOMETRY : DISK_GEOMETRY;
begin
H := CreateFile(PChar(Format(\'\\\\.\\%s:\', [UpCase(Drive)])), GENERIC_READ, FILE_SHARE_WRITE or FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if H = INVALID_HANDLE_VALUE then
raise Exception.Create(SysErrorMessage(GetLastError));
try
(*
BOOL DeviceIoControl(
HANDLE hDevice, // handle to device of interest
DWORD dwIoControlCode, // control code of operation to perform
LPVOID lpInBuffer, // pointer to buffer to supply input data
DWORD nInBufferSize, // size of input buffer
LPVOID lpOutBuffer, // pointer to buffer to receive output data
DWORD nOutBufferSize, // size of output buffer
LPDWORD lpBytesReturned, // pointer to variable to receive output byte count
LPOVERLAPPED lpOverlapped // pointer to overlapped structure for asynchronous operation
);
*) DeviceIoControl(
h,
IOCTL_DISK_GET_DRIVE_GEOMETRY,
nil,
0,
@_DISK_GEOMETRY,
sizeof(_DISK_GEOMETRY),
BytesRead,
nil
);
form1.Caption := IntToStr(_DISK_GEOMETRY.Cylinders);
finally
CloseHandle(H)
end;
end;
Så er det bare at kalde den :
ReadBoot(\'c\');
Jens B