Obtener versiones anteriores del archivo, desde WINAPI

En Windows 7, existe la posibilidad de obtener versiones anteriores del archivo como en la siguiente imagen:

¿Hay alguna manera de recuperar la versión anterior del archivo por código? Porque no pude encontrar ninguna API.

introduzca la descripción de la imagen aquí

Gracias avanzado! =]

Hay varias tags enumeradas con esta pregunta. Por lo tanto, no está claro si se desea un enfoque estrictamente c / c ++, o si funcionarán las secuencias de comandos, etc. En todo caso…

Aquí hay algunos enlaces que con suerte apuntarán en la dirección correcta:

  • En el sitio de MSDN, hay documentación y código de ejemplo que se refiere a la API de instantáneas .
  • Aquí hay un enlace al concepto de servicio de instantáneas.
  • Aquí hay una descripción de cómo puede usar la línea de comandos o el script del progtwig para recuperar archivos de la instantánea.
  • El uso del enlace de API anterior con las estructuras que se encuentran aquí le proporcionará una forma de obtener información sobre un archivo, volumen, etc. en particular.
  • Finalmente, aquí hay un enlace que habla sobre la utilidad Volrest de las herramientas del Kit de recursos de Windows Server 2003 , que incluye información sobre cómo puede “ver una lista de versiones anteriores disponibles de la carpeta [a]”.

Así que después de algunas búsquedas, y gracias a las instrucciones @ryyker y @Ben pude encontrar la respuesta:

Por ejemplo, para el archivo: C: \ SomeFolder \ SomeFile.exe

Desde cmd (ejecutar como administrador):

vssadmin list shadows for=C:\ 

Para solución programática puedes ejecutarlo con:

 CreateProcessW(NULL,L"cmd.exe /c \"vssadmin list shadows for=C:\\ > C:\\someTmpFile.txt\"",...); 

Lee y analiza el archivo creado.

introduzca la descripción de la imagen aquí

Aquí arriba se obtiene una lista de instantáneas (tipo de contenedores de “versiones anteriores”).

Consulte la fila correspondiente del “Volumen de instantáneas” (la versión que desea) y agregue la ruta de archivo restante después del nombre del volumen:

 \\ Previous version path = \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\SomeFolder\SomeFile.exe" wchar_t* prevPath = L"\\\\?\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy3\\SomeFolder\\SomeFile.exe"; 

Ahora puede leer el archivo con las conocidas funciones WIN32API CreateFile y ReadFile. (Ejemplo de crear y leer un archivo de MSDN: EJEMPLO )

Asegúrese de usar las versiones de UNICODE de esas funciones ya que la versión ASCII puede carecer de soporte para las rutas “\? \”.

¡Buena suerte! =]