Вопрос даже скорее не по API, а по работе с компилятором. Он почему то не хочет видеть константы GET_LENGTH_INFORMATION и IOCTL_DISK_GET_LENGTH_INFO , которые определены в include-<winioctl.h>. Причем С++ - NET. Подскажите в чем дело? Ведь IOCTL_DISK_GET_DRIVE_GEOMETRY он видит и работает с этим прекрасно. Заранее благодарен. | Код | #include "stdafx.h" #include <windows.h> #include <winioctl.h>
#using <mscorlib.dll>
using namespace System;
BOOL GetDriveGeometry(DISK_GEOMETRY *pdg) { HANDLE hDevice; // handle to the drive to be examined BOOL bResult; // results flag DWORD junk; // discard results GET_LENGTH_INFORMATION DskSize;
hDevice = CreateFile("\\\\.\\PhysicalDrive0", // drive to open 0, // no access to the drive FILE_SHARE_READ | // share mode FILE_SHARE_WRITE, NULL, // default security attributes OPEN_EXISTING, // disposition 0, // file attributes NULL); // do not copy file attributes
if (hDevice == INVALID_HANDLE_VALUE) // cannot open the drive { return (FALSE); }
bResult = DeviceIoControl(hDevice, // device to be queried IOCTL_DISK_GET_DRIVE_GEOMETRY, // operation to perform NULL, 0, // no input buffer pdg, sizeof(*pdg), // output buffer &junk, // # bytes returned (LPOVERLAPPED) NULL); // synchronous I/O
bResult = DeviceIoControl(hDevice, // device to be queried IOCTL_DISK_GET_LENGTH_INFO, // operation to perform NULL, 0, // no input buffer DskSize, sizeof(*DskSize), // output buffer &junk, // # bytes returned (LPOVERLAPPED) NULL); // synchronous I/O printf("Размер диска %I64d\n",DskSize.Length);
CloseHandle(hDevice);
return (bResult); }
int _tmain(int argc, char *argv[]) { _int8 s; DISK_GEOMETRY pdg; // disk drive geometry structure BOOL bResult; // generic results flag ULONGLONG DiskSize; // size of the drive, in bytes bResult = GetDriveGeometry (&pdg);
if (bResult) { printf("Cylinders = %I64d\n", pdg.Cylinders); printf("Tracks per cylinder = %ld\n", (ULONG) pdg.TracksPerCylinder); printf("Sectors per track = %ld\n", (ULONG) pdg.SectorsPerTrack); printf("Bytes per sector = %ld\n", (ULONG) pdg.BytesPerSector);
DiskSize = pdg.Cylinders.QuadPart * (ULONG)pdg.TracksPerCylinder * (ULONG)pdg.SectorsPerTrack * (ULONG)pdg.BytesPerSector; printf("Disk size = %I64d (Bytes) = %I64d (Mb)\n", DiskSize, DiskSize / (1024 * 1024)); } else { printf ("GetDriveGeometry failed. Error %ld.\n", GetLastError ()); } s=getchar(); return ((int)bResult); }
|
|