Mail Archives: cygwin/2003/04/17/14:18:21
The following piece of code is trimmed down but shows the basic
functionality of getting the geometry of a disk. When I build this code in
VC I can get correct values for Removeable Media (SmartMedia, CompactFlash),
but when I build it under Cygwin the DISK_GEOMETRY structure is only
partially correct. I understand that this might be a problem for a mingw
mailing list, but I don't know where such a list might be so I'm starting
here first. I've only tested this code on Windows XP and Windows .Net
Server 2003 RC2.
The code outputs:
VC: 15680 1 1 512
Cygwin: 15680 0 1 1
"\\\\.\\F:" in this case is an 8M CompactFlash card in a PCMCIA adapter, in
a PCI Ricoh CardBus adapter.
#include "windows.h"
#include "winioctl.h"
int main(void) {
HANDLE hnd;
DISK_GEOMETRY geo;
DWORD rbc=0;
hnd = CreateFile("\\\\.\\f:", GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (hnd == INVALID_HANDLE_VALUE) {
return 1;
}
memset(&geo, 0, sizeof(DISK_GEOMETRY));
if(!DeviceIoControl(hnd, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, &geo,
sizeof(geo)+20, &rbc, NULL)) {
return GetLastError();
}
printf("%d %d %d %d\n", geo.Cylinders, geo.TracksPerCylinder,
geo.SectorsPerTrack, geo.BytesPerSector);
CloseHandle(hnd);
return 0;
}
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
- Raw text -