C/C++ でプログラムを使用して外部 USB HD で「パフォーマンスの向上」を有効にするにはどうすればよいですか。
具体的には、Microsoft Windows のコントロール パネルのデバイス プロパティ ペインについて話しています。これにより、OS レベルの書き込みキャッシュの形式が有効になります。
C/C++ でプログラムを使用して外部 USB HD で「パフォーマンスの向上」を有効にするにはどうすればよいですか。
具体的には、Microsoft Windows のコントロール パネルのデバイス プロパティ ペインについて話しています。これにより、OS レベルの書き込みキャッシュの形式が有効になります。
を使用して 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 ソース
Alex K.によって提供されたこのリンクは、私の受け入れられた答えです。IOCTL_DISK_SET_CACHE_INFORMATION DeviceIoControl()
#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などに戻されたことはありますか?私は知らない。