windows - Sådan aktiveres 'Bedre ydelse' på en ekstern USB HD programmeret i C/C ++

Indlæg af Hanne Mølgaard Plasc

Problem



Hvordan aktiverer jeg 'Bedre ydeevne' på en ekstern USB HD programatisk i C/C ++.


Specielt taler jeg om enhedens egenskabsrude i kontrolpanelet i Microsoft Windows. Det muliggør en form for OS-niveau skrive caching.


Bedre præstationspolitik

Bedste reference


Du skal sende IOCTL\_DISK\_SET\_CACHE\_INFORMATION kontrolkode ved hjælp af DeviceIoControl. [5]





Jeg foreslår at du bruger værktøjet Dskcache.exe til at konfigurere 'Power Protected' Write Cache-indstillingen. [6]


Med W2K SP3 introducerede MS den 'Power Protected' Write Cache Option i tillæg til 'Write Caching' optionen.
 I grund og grund for at få FS-driveren til at udstede Flush/Write-Through-kommandoer skal du indstille 'Write Caching' til Aktiveret og
 den 'Power Protected' mulighed for at deaktiveres (se mere info her: http://support.microsoft.com/?kbid=332023).1[7]


.



1 kilde [8]

Andre referencer 1


Dette link Forudsat af Alex K. er mit accepterede svar: Det handler om IOCTL\_DISK\_SET\_CACHE\_INFORMATION DeviceIoControl()


http://blogs.msdn.com/b/dhawan/archive/2009/10/05/enable-or-disable-enable-write-caching-on-disk-behavior-on-disk.aspx[9]


#define \_WIN32\_WINNT 0x0503

#include <windows.h>

DISK\_CACHE\_INFORMATION info;
DISK\_CACHE\_INFORMATION rinfo;


void main(void)
{
    DWORD rr;
    HANDLE hDevice;
    DWORD err;
    DWORD returned;

    hDevice = CreateFile("\\.\C:", // drive to open
                GENERIC\_READ | GENERIC\_WRITE,
                FILE\_SHARE\_WRITE | FILE\_SHARE\_READ, 
                // share mode
                NULL, // default security attributes
                OPEN\_EXISTING, // disposition
                FILE\_ATTRIBUTE\_SYSTEM, // file attributes
                NULL); // do not copy file attributes
    if(hDevice==INVALID\_HANDLE\_VALUE)
    {
        return;
    }

    rr = DeviceIoControl(hDevice,IOCTL\_DISK\_GET\_CACHE\_INFORMATION,NULL,
                        0,(LPVOID)&info,(DWORD)sizeof(info),(LPDWORD)&returned,    (LPOVERLAPPED)NULL);
    if (!rr)
    {
        err = GetLastError();
        return;
    }

    info.WriteCacheEnabled = true;
    info.ReadCacheEnabled = false;
    info.DisablePrefetchTransferLength = 1;

    rr = DeviceIoControl(hDevice,IOCTL\_DISK\_SET\_CACHE\_INFORMATION,(LPVOID)&info,(DWORD)sizeof(info),
                        NULL,0,(LPDWORD)&returned,(LPOVERLAPPED)NULL);
    if (!rr)
    {
        err = GetLastError();
        return;
    }

    rr = DeviceIoControl(hDevice,IOCTL\_DISK\_GET\_CACHE\_INFORMATION,NULL,0,
                        (LPVOID)&rinfo,(DWORD)sizeof(rinfo),(LPDWORD)&returned,(LPOVERLAPPED)NULL);
    if (!rr)
    {
        err = GetLastError();
        return;
    }

    CloseHandle(hDevice);
}





Gamle oplysninger :

Windows 2K indeholdt en 'Power Protected' Write Cache Option, men den blev aldrig overført til Windows XP. Hvilket gør en kommentar om at bruge Dskcache.exe ugyldig. Var 'Power Protected Mode' nogensinde sat tilbage i f.eks. Windows Vista? Jeg ved ikke.