203 lines
5.3 KiB
C++
203 lines
5.3 KiB
C++
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 2000.
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
|
||
|
#include <pch.cxx>
|
||
|
#pragma hdrstop
|
||
|
|
||
|
#include <ole2.h>
|
||
|
#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 <file to be read> <read data>\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 <backup file> <restored file>\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;
|
||
|
|
||
|
}
|