2

C/C++ でプログラムを使用して外部 USB HD で「パフォーマンスの向上」を有効にするにはどうすればよいですか。

具体的には、Microsoft Windows のコントロール パネルのデバイス プロパティ ペインについて話しています。これにより、OS レベルの書き込みキャッシュの形式が有効になります。

より良いパフォーマンス ポリシー

4

2 に答える 2

3

を使用して IOCTL_DISK_SET_CACHE_INFORMATION 制御コードをDeviceIoControl送信する必要があります。


Dskcache.exe ツールを使用して、"Power Protected" 書き込みキャッシュ オプションを構成することをお勧めします。

W2K SP3 では、MS は「書き込みキャッシュ」オプションに加えて「電源保護」書き込みキャッシュ オプションを導入しました。基本的に、FS ドライバーが Flush/Write-Through コマンドを発行できるようにするには、"Write Caching" オプションを Enabled に設定し、"Power Protected" オプションを Disabled に設定する必要があります (詳細については、http://support.microsoft. com/?kbid=332023 )。1

.

1 ソース

于 2011-09-13T11:28:50.687 に答える
2

Alex K.によって提供されたこのリンクは、私の受け入れられた答えです。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

#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);
}

古い情報
Windows 2Kには「電源保護」書き込みキャッシュオプションが含まれていましたが、WindowsXPに引き継がれることはありませんでした。Dskcache.exeこれは、無効な使用についてのコメントになります。「パワープロテクトモード」がWindowsVistaなどに戻されたことはありますか?私は知らない。

于 2011-09-13T16:41:38.307 に答える