2011-04-28 13 views
5

No soy realmente bueno en VC++, pero ¿alguien tiene un código de muestra para obtener la velocidad de rotación del disco en una computadora? He estado trabajando en la detección de unidades SSD y una solución de investigar todo el día fue obtener la velocidad de rotación y, dado que SSD tiene 0 rpm, esta podría ser la única forma de detectar unidades SSD.Obtenga la velocidad de rotación del disco Código de muestra

+4

Creo que esto es muy específica del SO, por lo que debe especificar un sistema operativo que le interesa. – Kos

+0

Mi sistema operativo de destino es Windows 7. – patlimosnero

Respuesta

7

De google wmi ssd detect

Hay un administrador de caché NV interface used for ReadyDrive que es nuevo para Vista. Creo que está probando los valores NVReadSpeed ​​y NVWrtSpeed ​​de NV_FEATURE_PARAMETER.

Windows 7 detecta SSD utilizando ATA8-ACS identifica la palabra 217: Velocidad nominal de rotación de medios, con valor 0001h como medios no giratorios, como dispositivos de estado sólido. Pero no todos los SSD se adhieren a la sección de especificaciones ATA8-ACS1 7.16.7.77, algunos pueden necesitar actualizaciones de firmware.

Si desea obtener más información sobre el envío de comandos ATA en Windows, le sugiero que explore un foro de Storage Platform ATA. Este foro se está archivando así que actúa rápidamente.


también muy esclarecedor:

http://blogs.msdn.com/b/e7/archive/2009/05/05/support-and-q-a-for-solid-state-drives-and.aspx

desfragmentación de disco será desactivado por defecto en los SSD?

Sí. La programación automática de la desfragmentación excluirá las particiones en los dispositivos que se declaran a sí mismos como SSD. Además, si el disco del sistema tiene características de rendimiento de lectura aleatoria por encima del umbral de 8 MB/seg, también se excluirá. El umbral fue determinado por análisis interno.

1

Es mejor que busque el comando TRIM.

BOOL IsDriveSSD(){ 

    DWORD dwBytesReturned; 

    HANDLE volhand = INVALID_HANDLE_VALUE; 
    try{ 
     volhand = CreateFile("\\\\.\\PHYSICALDRIVE0", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); 
    } 
    catch(...){ 
     volhand = INVALID_HANDLE_VALUE; 
    } 

    if (volhand == INVALID_HANDLE_VALUE) return FALSE; 


    // Test 1: See if we have a TRIM command, if so, we're SSD. 
    STORAGE_PROPERTY_QUERY spq; 
    DEVICE_TRIM_DESCRIPTOR dtr; 
    memset(&dtr,0,sizeof(DEVICE_TRIM_DESCRIPTOR)); 
    memset(&spq,0,sizeof(STORAGE_PROPERTY_QUERY)); 
    spq.PropertyId=StorageDeviceTrimProperty; 
    spq.QueryType=PropertyStandardQuery; 

    BOOL ret = DeviceIoControl(volhand, IOCTL_STORAGE_QUERY_PROPERTY, 
     &spq,sizeof(spq), 
     &dtr,sizeof(dtr), 
     &dwBytesReturned,FALSE); 

    if(ret){ 
     ret = dtr.TrimEnabled; 
    } 

    CloseHandle(volhand); 

    return ret; 
}
Cuestiones relacionadas