Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

357 lines
12 KiB

/*++
Copyright (c) 1999 Microsoft Corporation
Abstract:
@doc
@module commandverifier.cpp | definition for the command verifier
@end
Author:
Reuven Lax [reuvenl] 11/20/2001
Revision History:
Name Date Comments
reuvenl 11/20/2001 Created
--*/
#include "vssadmin.h"
#include "commandverifier.h"
////////////////////////////////////////////////////////////////////////
// Standard foo for file name aliasing. This code block must be after
// all includes of VSS header files.
//
#ifdef VSS_FILE_ALIAS
#undef VSS_FILE_ALIAS
#endif
#define VSS_FILE_ALIAS "ADMVERFR"
//
////////////////////////////////////////////////////////////////////////
#define VSSADM_ONE_MB ( 1024 * 1024 )
#define VSSADM_HUNDRED_MB (100 * VSSADM_ONE_MB)
////////////////////////////////////////////////////////////////////////
// Implementation of the CInternalVerifier class
void CInternalVerifier::CreateSnapshot (long type, LPCWSTR forVolume, VSS_ID idProvider, ULONGLONG autoRetry,
CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(type);
UNREFERENCED_PARAMETER(idProvider);
UNREFERENCED_PARAMETER(autoRetry);
UNREFERENCED_PARAMETER(ft);
UNREFERENCED_PARAMETER(forVolume);
BS_ASSERT (forVolume != NULL);
}
void CInternalVerifier::ListProviders (CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(ft);
}
void CInternalVerifier::ListSnapshots (long type, VSS_ID idProvider, LPCWSTR forVolume, VSS_ID idShadow, VSS_ID idSet,
CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(type);
UNREFERENCED_PARAMETER(idProvider);
if (!::IsEqualGUID (idShadow, GUID_NULL) && !::IsEqualGUID (idSet, GUID_NULL)) {
ft.Throw( VSSDBG_VSSADMIN, VSSADM_E_INVALID_SET_OF_OPTIONS,
L"CVssAdminCLI::ListSnapshots: Cannot specify both /Set and /Shadow options at the same time" );
}
if (forVolume != NULL && wcslen(forVolume) > x_nLengthOfVolMgmtVolumeName) {
ft.Throw(VSSDBG_VSSADMIN, VSSADM_E_INVALID_OPTION_VALUE,
L"CVssAdminCLI::ListSnapshots: Must specify a valid volume name for list snapshots");
}
}
void CInternalVerifier::ListWriters (CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(ft);
}
void CInternalVerifier::AddDiffArea (VSS_ID idProvider, LPCWSTR forVolume, LPCWSTR onVolume, ULONGLONG maxSize,
CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(idProvider);
UNREFERENCED_PARAMETER(forVolume);
UNREFERENCED_PARAMETER(onVolume);
BS_ASSERT (forVolume != NULL);
BS_ASSERT (onVolume != NULL);
if (maxSize < VSSADM_ONE_MB) {
ft.Throw( VSSDBG_VSSADMIN, VSSADM_E_INVALID_NUMBER,
L"CVssAdminCLI::AddDiffarea: A maxsize of less than 1 MB specified, invalid");
}
}
void CInternalVerifier::ResizeDiffArea (VSS_ID idProvider, LPCWSTR forVolume, LPCWSTR onVolume, ULONGLONG maxSize,
CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(idProvider);
UNREFERENCED_PARAMETER(forVolume);
UNREFERENCED_PARAMETER(onVolume);
BS_ASSERT (forVolume != NULL);
BS_ASSERT (onVolume != NULL);
if (maxSize < VSSADM_ONE_MB) {
ft.Throw( VSSDBG_VSSADMIN, VSSADM_E_INVALID_NUMBER,
L"CVssAdminCLI::ResizeDiffarea: maxsize of less than 1 MB specified, invalid");
}
}
void CInternalVerifier::DeleteDiffAreas (VSS_ID idProvider, LPCWSTR forVolume, LPCWSTR onVolume, bool quiet,
CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(idProvider);
UNREFERENCED_PARAMETER(onVolume);
UNREFERENCED_PARAMETER(forVolume);
UNREFERENCED_PARAMETER(quiet);
UNREFERENCED_PARAMETER(ft);
BS_ASSERT (forVolume != NULL);
}
void CInternalVerifier::ListDiffAreas (VSS_ID idProvider, LPCWSTR forVolume, LPCWSTR onVolume,
CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(idProvider);
if ((forVolume != NULL) && (onVolume != NULL)) {
ft.Throw( VSSDBG_VSSADMIN, VSSADM_E_INVALID_SET_OF_OPTIONS,
L"CVssAdminCLI::ListDiffAreas: Can't specify both ON and FOR volume options" );
}
}
void CInternalVerifier::DeleteSnapshots (long type, LPCWSTR forVolume, bool all, bool oldest, VSS_ID idShadow, bool quiet,
CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(quiet);
if (!::IsEqualGUID (idShadow, GUID_NULL)) {
if (forVolume != NULL || type != VSS_CTX_ALL || oldest || all) {
ft.Throw( VSSDBG_VSSADMIN, VSSADM_E_INVALID_SET_OF_OPTIONS,
L"CVssAdminCLI::DeleteSnapshots: Invalid set of options" );
}
} else {
if ((forVolume == NULL && type == VSS_CTX_ALL && !all && !oldest) ||
(type != VSS_CTX_ALL && forVolume == NULL) ||
(oldest && forVolume == NULL)) {
ft.Throw( VSSDBG_VSSADMIN, VSSADM_E_REQUIRED_OPTION_MISSING,
L"CVssAdminCLI::DeleteSnapshots: Required option missing" );
}
if ((type != VSS_CTX_ALL && all) ||
(all && oldest)) {
ft.Throw (VSSDBG_VSSADMIN, VSSADM_E_INVALID_SET_OF_OPTIONS,
L"CVssAdminCLI::DeleteSnapshots: Invalid set of options:");
}
}
if (forVolume != NULL && wcslen(forVolume) > x_nLengthOfVolMgmtVolumeName) {
ft.Throw(VSSDBG_VSSADMIN, VSSADM_E_INVALID_OPTION_VALUE,
L"CVssAdminCLI::DeleteSnapshots: invalid volume name");
}
}
void CInternalVerifier::ExposeSnapshot (VSS_ID idShadow, LPCWSTR exposeUsing, LPCWSTR sharePath, bool locally,
CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(idShadow);
UNREFERENCED_PARAMETER(exposeUsing);
BS_ASSERT (!locally || (::wcslen(exposeUsing) >= 2 && exposeUsing[1] == L':' ));
if (locally && sharePath != NULL) {
ft.Throw( VSSDBG_VSSADMIN, VSSADM_E_INVALID_SET_OF_OPTIONS,
L"CVssAdminCLI::ExposeSnapshot: Specified a ShareUsing option with an expose locally command" );
}
if (sharePath != NULL && sharePath[0] != L'\\') {
ft.Throw( VSSDBG_VSSADMIN, VSSADM_E_INVALID_OPTION_VALUE,
L"CVssAdminCLI::ExposeSnapshot: Specified SharePath doesn't start with '\\'" );
}
}
void CInternalVerifier::ListVolumes (VSS_ID idProvider, long type, CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(idProvider);
UNREFERENCED_PARAMETER(type);
UNREFERENCED_PARAMETER(ft);
}
////////////////////////////////////////////////////////////////////////
// Implementation of the CExternalVerifier class
void CExternalVerifier::CreateSnapshot (long type, LPCWSTR forVolume, VSS_ID idProvider, ULONGLONG autoRetry,
CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(type);
UNREFERENCED_PARAMETER(forVolume);
UNREFERENCED_PARAMETER(idProvider);
UNREFERENCED_PARAMETER(autoRetry);
UNREFERENCED_PARAMETER(ft);
BS_ASSERT (forVolume != NULL);
BS_ASSERT (type == VSS_CTX_CLIENT_ACCESSIBLE);
BS_ASSERT (::IsEqualGUID (idProvider, VSS_SWPRV_ProviderId));
}
void CExternalVerifier::ListProviders (CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(ft);
}
void CExternalVerifier::ListSnapshots (long type, VSS_ID idProvider, LPCWSTR forVolume, VSS_ID idShadow, VSS_ID idSet,
CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(type);
UNREFERENCED_PARAMETER(idProvider);
BS_ASSERT (type == VSS_CTX_ALL);
BS_ASSERT (::IsEqualGUID (idProvider, VSS_SWPRV_ProviderId));
if (!::IsEqualGUID (idShadow, GUID_NULL) && !::IsEqualGUID (idSet, GUID_NULL)) {
ft.Throw( VSSDBG_VSSADMIN, VSSADM_E_INVALID_SET_OF_OPTIONS,
L"CVssAdminCLI::ListSnapshots: Cannot specify both /Set and /Shadow options at the same time" );
}
if (forVolume != NULL && wcslen(forVolume) > x_nLengthOfVolMgmtVolumeName) {
ft.Throw(VSSDBG_VSSADMIN, VSSADM_E_INVALID_OPTION_VALUE,
L"CVssAdminCLI::ListSnapshots: Must specify a valid volume name for list snapshots");
}
}
void CExternalVerifier::ListWriters (CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(ft);
}
void CExternalVerifier::AddDiffArea (VSS_ID idProvider, LPCWSTR forVolume, LPCWSTR onVolume, ULONGLONG maxSize,
CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(idProvider);
UNREFERENCED_PARAMETER(forVolume);
UNREFERENCED_PARAMETER(onVolume);
BS_ASSERT (::IsEqualGUID (idProvider, VSS_SWPRV_ProviderId));
BS_ASSERT (forVolume != NULL);
BS_ASSERT (onVolume != NULL);
if (maxSize < VSSADM_HUNDRED_MB) {
ft.Throw( VSSDBG_VSSADMIN, VSSADM_E_INVALID_NUMBER,
L"CVssAdminCLI::AddDiffarea: A maxsize of less than 100 MB specified, invalid");
}
}
void CExternalVerifier::ResizeDiffArea (VSS_ID idProvider, LPCWSTR forVolume, LPCWSTR onVolume, ULONGLONG maxSize,
CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(idProvider);
UNREFERENCED_PARAMETER(forVolume);
UNREFERENCED_PARAMETER(onVolume);
BS_ASSERT (::IsEqualGUID (idProvider, VSS_SWPRV_ProviderId));
BS_ASSERT (forVolume != NULL);
BS_ASSERT (onVolume != NULL);
if (maxSize < VSSADM_HUNDRED_MB) {
ft.Throw( VSSDBG_VSSADMIN, VSSADM_E_INVALID_NUMBER,
L"CVssAdminCLI::ResizeDiffarea: maxsize of less than 100 MB specified, invalid");
}
}
void CExternalVerifier::DeleteDiffAreas (VSS_ID idProvider, LPCWSTR forVolume, LPCWSTR onVolume, bool quiet,
CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(idProvider);
UNREFERENCED_PARAMETER(forVolume);
UNREFERENCED_PARAMETER(onVolume);
UNREFERENCED_PARAMETER(quiet);
UNREFERENCED_PARAMETER(ft);
BS_ASSERT (::IsEqualGUID (idProvider, VSS_SWPRV_ProviderId));
BS_ASSERT (forVolume != NULL);
}
void CExternalVerifier::ListDiffAreas (VSS_ID idProvider, LPCWSTR forVolume, LPCWSTR onVolume,
CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(idProvider);
BS_ASSERT (::IsEqualGUID (idProvider, VSS_SWPRV_ProviderId));
if ((forVolume != NULL) && (onVolume != NULL)) {
ft.Throw( VSSDBG_VSSADMIN, VSSADM_E_INVALID_SET_OF_OPTIONS,
L"CVssAdminCLI::ListDiffAreas: Can't specify both ON and FOR volume options" );
}
}
void CExternalVerifier::DeleteSnapshots (long type, LPCWSTR forVolume, bool all, bool oldest, VSS_ID idShadow, bool quiet,
CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(type);
UNREFERENCED_PARAMETER(quiet);
BS_ASSERT (type == VSS_CTX_CLIENT_ACCESSIBLE);
if (!::IsEqualGUID (idShadow, GUID_NULL)) {
if (forVolume != NULL || all || oldest) {
ft.Throw( VSSDBG_VSSADMIN, VSSADM_E_INVALID_SET_OF_OPTIONS,
L"CVssAdminCLI::DeleteSnapshots: Invalid set of options" );
}
} else {
if ( (forVolume == NULL && !all && !oldest) ||
(oldest && forVolume == NULL)) {
ft.Throw( VSSDBG_VSSADMIN, VSSADM_E_REQUIRED_OPTION_MISSING,
L"CVssAdminCLI::DeleteSnapshots: Required option missing" );
}
if (all && oldest) {
ft.Throw(VSSDBG_VSSADMIN, VSSADM_E_INVALID_SET_OF_OPTIONS,
L"CVssAdminCLI::DeleteSnapshots: Invalid set of options");
}
}
if (forVolume != NULL && wcslen(forVolume) > x_nLengthOfVolMgmtVolumeName) {
ft.Throw(VSSDBG_VSSADMIN, VSSADM_E_INVALID_OPTION_VALUE,
L"CVssAdminCLI::DeleteSnapshots: invalid volume name");
}
}
void CExternalVerifier::ExposeSnapshot (VSS_ID idShadow, LPCWSTR exposeUsing, LPCWSTR sharePath,
bool locally, CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(idShadow);
UNREFERENCED_PARAMETER(exposeUsing);
UNREFERENCED_PARAMETER(sharePath);
UNREFERENCED_PARAMETER(locally);
UNREFERENCED_PARAMETER(ft);
BS_ASSERT (false);
}
void CExternalVerifier::ListVolumes (VSS_ID idProvider, long type, CVssFunctionTracer& ft)
{
UNREFERENCED_PARAMETER(idProvider);
UNREFERENCED_PARAMETER(type);
UNREFERENCED_PARAMETER(ft);
BS_ASSERT (::IsEqualGUID (idProvider, VSS_SWPRV_ProviderId));
BS_ASSERT (type == VSS_CTX_CLIENT_ACCESSIBLE);
}