#include #include #include #include void __cdecl main( int argc, char** argv ) { TCHAR dosDriveName[10]; HANDLE h; BOOL b; PARTITION_INFORMATION partInfo; DWORD bytes; DISK_GEOMETRY geometry; LONGLONG newSectors; if (argc != 2) { printf("usage: %s drive:\n", argv[0]); return; } if (argv[1][1] != ':' || argv[1][2] != 0) { printf("usage: %s drive:\n", argv[0]); return; } wsprintf(dosDriveName, TEXT("\\\\.\\%c:"), argv[1][0]); h = CreateFile(dosDriveName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, INVALID_HANDLE_VALUE); if (h == INVALID_HANDLE_VALUE) { printf("Can't open, failed with %d\n", GetLastError()); return; } b = DeviceIoControl(h, IOCTL_DISK_GET_PARTITION_INFO, NULL, 0, &partInfo, sizeof(partInfo), &bytes, NULL); if (!b) { printf("Can't read partition info, failed with %d\n", GetLastError()); return; } b = DeviceIoControl(h, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, &geometry, sizeof(geometry), &bytes, NULL); if (!b) { printf("Can't read geometry info, failed with %d\n", GetLastError()); return; } newSectors = partInfo.PartitionLength.QuadPart/geometry.BytesPerSector; b = DeviceIoControl(h, FSCTL_EXTEND_VOLUME, &newSectors, sizeof(newSectors), NULL, 0, &bytes, NULL); if (b) { printf("File system extended successfully.\n"); } else { printf("File system extension failed.\n"); } }