//+------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 2000. // //-------------------------------------------------------------------------- #include #pragma hdrstop #include #include "trkwks.hxx" #include "trksvr.hxx" #include "dltadmin.hxx" BOOL DltAdminBackupRead( ULONG cArgs, const TCHAR * const rgptszArgs[], ULONG *pcEaten ) { NTSTATUS status; HRESULT hr = S_OK;; HANDLE hSource = NULL; HANDLE hBackup = NULL; BYTE rgb[ 8 * 1024 ]; ULONG cbRead, cbWritten; void *pvBackup = NULL; if( 1 <= cArgs && IsHelpArgument( rgptszArgs[0] )) { printf( "\nOption BackupRead\n" " Purpose: Run the BackupRead API on a file\n" " Usage: -backupread \n" " E.g.: -backupread file.tst file.tst.bak\n" ); *pcEaten = 1; return( TRUE ); } if( 2 > cArgs ) { printf( "Invalid parameters. Use -? for usage info\n" ); *pcEaten = 0; return( FALSE ); } // Open the source file hSource = CreateFile( rgptszArgs[0], GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL ); if( INVALID_HANDLE_VALUE == hSource ) { printf( "Failed to open file (%lu)\n", GetLastError() ); return FALSE; } // Open the backup file hBackup = CreateFile( rgptszArgs[1], GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL ); if( INVALID_HANDLE_VALUE == hBackup ) { printf( "Failed to open backup file (%lu)\n", GetLastError() ); return FALSE; } while( TRUE ) { if( !BackupRead( hSource, rgb, sizeof(rgb), &cbRead, FALSE, FALSE, //TRUE, &pvBackup )) { printf( "Failed BackupRead (%lu)\n", GetLastError() ); return FALSE; } if( !WriteFile( hBackup, rgb, cbRead, &cbWritten, NULL )) { printf( "Failed WriteFile (%lu)\n", GetLastError() ); return FALSE; } if( cbRead < sizeof(rgb) ) break; } // Free resources BackupRead( hSource, rgb, sizeof(rgb), &cbRead, TRUE, TRUE, &pvBackup ); CloseHandle( hSource ); CloseHandle( hBackup ); return TRUE; } BOOL DltAdminBackupWrite( ULONG cArgs, const TCHAR * const rgptszArgs[], ULONG *pcEaten ) { NTSTATUS status; HRESULT hr = S_OK;; HANDLE hRestore = NULL; HANDLE hBackup = NULL; BYTE rgb[ 8 * 1024 ]; ULONG cbRead, cbWritten; void *pvBackup = NULL; if( 1 <= cArgs && IsHelpArgument( rgptszArgs[0] )) { printf( "\nOption BackupWrite\n" " Purpose: Run the BackupWrite API on a file\n" " Usage: -backupread \n" " E.g.: -backupread file.tst.bak file.tst\n" ); *pcEaten = 1; return( TRUE ); } if( 2 > cArgs ) { printf( "Invalid parameters. Use -? for usage info\n" ); *pcEaten = 0; return( FALSE ); } // Open the backup file hBackup = CreateFile( rgptszArgs[0], GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL ); if( INVALID_HANDLE_VALUE == hBackup ) { printf( "Failed to open backup file (%lu)\n", GetLastError() ); return FALSE; } // Open the restore file hRestore = CreateFile( rgptszArgs[1], GENERIC_READ | GENERIC_WRITE | WRITE_DAC, 0, NULL, CREATE_ALWAYS, FILE_FLAG_BACKUP_SEMANTICS, NULL ); if( INVALID_HANDLE_VALUE == hRestore ) { printf( "Failed to open restore file (%lu)\n", GetLastError() ); return FALSE; } while( TRUE ) { if( !ReadFile( hBackup, rgb, sizeof(rgb), &cbRead, NULL )) { printf( "Failed ReadFile (%lu)\n", GetLastError() ); return FALSE; } if( !BackupWrite( hRestore, rgb, cbRead, &cbWritten, FALSE, FALSE, //TRUE, &pvBackup )) { printf( "Failed BackupWrite (%lu)\n", GetLastError() ); return FALSE; } if( cbRead < sizeof(rgb) ) break; } // Free resources BackupWrite( hRestore, rgb, 0, &cbWritten, TRUE, TRUE, &pvBackup ); CloseHandle( hRestore ); CloseHandle( hBackup ); return TRUE; }