volumen uso reparar reducir puedo opcion lento extender duro disco como aparece winapi hard-drive

winapi - uso - ¿Disminuir el disco duro programáticamente en Windows?



reparar disco duro 100 windows 10 (5)

¿Has probado WMI? De acuerdo con la documentación de MSDN, debería poder enviar el comando spindown a HDD a través de WMI:

http://msdn.microsoft.com/en-us/library/aa393493%28v=VS.85%29.aspx

uint32 SetPowerState( [in] uint16 PowerState, [in] datetime Time );

EDITAR:

Este código enumera todas las unidades en el sistema y las unidades que admiten esta API:

strServer = "." Set objWMI = GetObject("winmgmts://" & strServer & "/root/cimv2") rem Set objInstances = objWMI.InstancesOf("CIM_DiskDrive",48) Set objInstances = objWMI.ExecQuery("Select * from CIM_DiskDrive",,48) On Error Resume Next For Each objInstance in objInstances With objInstance WScript.Echo Join(.Capabilities, ", ") WScript.Echo Join(.CapabilityDescriptions, ", ") WScript.Echo .Caption WScript.Echo .PNPDeviceID WScript.Echo "PowerManagementCapabilities: " & .PowerManagementCapabilities WScript.Echo "PowerManagement Supported: " & .PowerManagementSupported WScript.Echo .Status WScript.Echo .StatusInfo End With On Error Goto 0 Next

Simplemente guarde este código como un archivo .vbs y ejecútelo desde la línea de comandos.

¿Cómo solicita a Windows que apague un disco duro mediante programación? ¿Hay alguna función de modo usuario que pueda llamar (o función de modo kernel para llamar o IRP que enviar) para que esto suceda?

He intentado crear un programa para enviar un comando ATA STANDBY directamente al disco duro, pero el problema es que este método no informa al sistema y, por lo tanto, cada vez que el sistema necesita vaciar el caché, activará el comando. disco duro de nuevo. ¿Cómo le digo al sistema que haga esto por mí? (Si el sistema lo hace, guardará la memoria caché y "reventará" los datos cuando sea demasiado grande, en lugar de escribir en pequeños incrementos).

(El punto principal aquí es hacer esto directamente , no cambiando el tiempo de espera de reducción del sistema a un período de 1 segundo y esperando que el disco gire hacia abajo. Necesito una función a la que pueda llamar en un momento específico del tiempo) cuando estoy usando mi computadora portátil, no es algo genérico que no se adapte al 95% de las situaciones.)

Hasta dónde he llegado hasta aquí:

Tengo la sensación de que PoCallDriver e IRP_MJ_POWER podrían ser útiles para esto, pero tengo una experiencia de programación en modo kernel muy limitada (y una experiencia de controlador prácticamente cero), así que realmente no tengo idea.

Por favor lee:

Actualización :

La gente parece estar mencionando repetidamente que las soluciones que ya mencioné no funcionan. Como dije anteriormente, ya probé soluciones "piratas" que cambian el valor del tiempo de espera o que emiten directamente un comando al disco, y la razón principal por la que he hecho esta pregunta aquí es que no hicieron lo que necesitaba. Lea la pregunta completa (especialmente los párrafos 2 y 3) antes de repetir lo que ya dije en sus respuestas: esa es toda la dificultad de la pregunta.

Más información:

He encontrado que este documento sobre la Detección de la inactividad del disco es útil, pero mi respuesta no está ahí. Indica que el Administrador de energía envía un IRP al controlador del disco (por lo que sospecho que IRP_MJ_POWER es útil), pero no tengo idea de cómo usar la información.




No tengo una respuesta a la pregunta específica que Mehrdad me hizo.

Sin embargo, para ayudar a otros que encuentran esta página cuando intentan averiguar cómo hacer que su disco esté en espera cuando debería, pero no lo hace:

  1. Encontré que en un disco USB, MS PwrTest afirma que el disco está apagado, pero en realidad aún está girando. Esto ocurre incluso con tiempos de espera de disco globales realmente cortos en Windows 7. (Esto implica que incluso si el sistema piensa que ha apagado el disco, es posible que no esté apagado). En consecuencia, el objetivo original de Mehrdad podría no funcionar incluso si la forma correcta de ¿Se encuentra? Esto puede estar relacionado con cómo varios controladores de disco USB implementan el estado de energía.)

  2. También encontré que el programa HDDScan puede apagar el disco con éxito y puede establecer con éxito un valor de tiempo de espera que el disco respeta. Además, el disco gira cuando es accedido por el sistema operativo, algo bueno si necesita usarlo, pero no tanto si le preocupa que gire todo el tiempo para vaciar búferes de 1kB. (Elegí establecer el tiempo de espera de inactividad en HDDScan en 1 minuto más que el tiempo de espera del administrador de energía del sistema. Esperamos que el sistema no piense que el disco está girado cuando no lo está).

Observo que powercfg tiene una opción para evitar que el reloj inactivo se reinicie desde pequeñas escrituras de disco poco frecuentes. (Llamado "ráfaga ignora el tiempo").

Puede obtener HDDScan aquí: HDDScan.com y PwrTest aquí: Kit de controladores de Windows . Desafortunadamente, la prueba PwrTest te obliga a tener muchas otras cosas de MS instaladas primero, pero todo es gratis si puedes descubrir cómo descargarlo desde sus confusas páginas web.


Si bien no hay una forma aparente de hacer lo que está pidiendo (es decir, decirle a la administración de energía que "actúe como si el temporizador para girar el disco haya caducado"), puede haber un par de formas de simularlo:

  1. Llame a FlushFileBuffers en la unidad (debe elevarse para abrir //./C ) y luego STANDBY comando STANDBY a la unidad.

  2. Realice la llamada a la API que establece el tiempo de espera para reducir la velocidad del disco a 1 segundo, luego auméntelo de nuevo a su valor anterior después de 1 segundo. Tenga en cuenta que es posible que deba aumentar hasta el valor anterior en lugar de saltar a él inmediatamente.