"DeviceIoControl" - IOCTL_DISK_GROW_PARTITION



  • hey,

    ich möchte gerne die virtuelle größe meines datenträgers erweitern - dazu habe ich folgendes probiert:

    #define _WIN32_WINNT 0x0500
    #include <Windows.h>
    #include <iostream>
    #include <conio.h>
    
    int main()
    {
    	DISK_GROW_PARTITION dgp;
    
    	dgp.BytesToGrow.HighPart = 500;
    	dgp.PartitionNumber = 0;
    
    	HANDLE handle = CreateFile("\\\\.\\H:", GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL,OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
    
    	DWORD dwBytesReturned;
    
    	DeviceIoControl(handle, IOCTL_DISK_GROW_PARTITION, &dgp, sizeof(dgp), NULL, 0, &dwBytesReturned, NULL);
    
    	printf("Handle: %d\nDeviceIoControl returned bytes:%d\nGetLastError:%d", handle, dwBytesReturned, GetLastError());
    
    	CloseHandle(handle);
    
    	getch();
    	return 0;
    }
    

    Resultat:
    Handle: 4084
    DeviceIoControl returned bytes:-858993460
    GetLastError:5

    habe ich irgendetwas bei CreateFile verbockt?

    danke & lg



  • Wo fragst Du denn hier den Rückgabewert von DeviceIoControl ab?
    Ansonsten: VS: Tools|Error Lookup



  • Jochen Kalmbach schrieb:

    Wo fragst Du denn hier den Rückgabewert von DeviceIoControl ab?
    Ansonsten: VS: Tools|Error Lookup

    hey,

    DeviceIoControl returnt 0.
    Was der error-code 5 bedeutet hatte ich schon rausgebracht --> zugriff verweigert. - deshalb bin ich auf die idee gekommen, dass ich etwas bei createfile verbockt hab.

    lg



  • Hi,
    ich denke du musst den CreateFile auf das Drive Device machen nicht auf das Volume!

    CreateFile(dHanlde, "\\.\\PhysicalDrive0", ...)... 🙂



  • Hallo

    Deine CreateFile sollte so aussehen:

    hDevice = CreateFile("\\.\\PhysicalDriveX",
    GENERIC_READ | GENERIC_WRITE,
    FILE_SHARE_READ | FILE_SHARE_WRITE,
    NULL, OPEN_EXISTING, 0, 0);

    Du kannst nicht eine Overlapped (FILE_FLAG_OVERLAPPED) in die CreateFile nehmen wenn du diese nicht in der DeviceIoControl funktion verwendest.

    Nähere Infos findest du im MSDN ! :xmas1:


Anmelden zum Antworten