0

IOCTL_DISK_GET_LENGTH_INFO を使用した DeviceIoContro() の呼び出しは、マウントされていないドライブで 1 分以上 Windows で保持されます。オンラインドライブの長さを調査して印刷しようとしています。この保留動作は、ユーザー インターフェイスでは受け入れられません。誰かがこれを回避する良い方法を持っていますか?

「\\.\PhysicalDrive0」のように、Windows で物理ディスク名の呼び出しを使用しています。停止しているドライブは DVD ドライブ、つまりリムーバブルです。十分な時間があれば、Windowsがドライブをスピンアップできるかどうかは気にしません。そのままでは、ドライブにディスクがなく、Windows はドライブをオンラインにしようと長い間待機しているようです。ドライブがスピンアップしていない場合、すぐに失敗するようにします。

前もって感謝します。

スコット・ムーア

このコードは次のとおりです。

int testsize( /** 設定するドライブ番号/ int drive, / * ディスクのサイズを返す */ long long *size )

{

GET_LENGTH_INFORMATION li;
BOOL r;
DWORD rsize;

HANDLE driveh;

//open the physical disk
driveh = CreateFile(phystr[drive],
                 GENERIC_READ | GENERIC_WRITE,
                 FILE_SHARE_DELETE |
                 FILE_SHARE_READ |
                 FILE_SHARE_WRITE,
                 NULL,
                 OPEN_EXISTING,
                 0,
                 NULL);

if (driveh == INVALID_HANDLE_VALUE) return 1;

// get size of disk
r = DeviceIoControl(driveh, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, &li, sizeof(li), 
                    &rsize, NULL);
if (r == 0) {

    return 1; // just return error

}

// place to caller
*size = li.Length.QuadPart;

//close the disk
CloseHandle(driveh);

return 0;

}

4

0 に答える 0