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.
 
 
 
 
 
 

164 lines
4.7 KiB

/*++
Copyright (c) 2000-2001 Microsoft Corporation
Module Name:
client.cpp
Abstract:
Test program to drive the VSS Writer Shim contained in VssAPI.DLL
Author:
Stefan R. Steiner [ssteiner] 01-30-2000
Revision History:
--*/
/////////////////////////////////////////////////////////////////////////////
// Defines
// C4290: C++ Exception Specification ignored
#pragma warning(disable:4290)
// warning C4511: 'CVssCOMApplication' : copy constructor could not be generated
#pragma warning(disable:4511)
// warning C4127: conditional expression is constant
#pragma warning(disable:4127)
/////////////////////////////////////////////////////////////////////////////
// Includes
#include <windows.h>
#include <wtypes.h>
#include <stddef.h>
#include <stdio.h>
#include <objbase.h>
#include <vss.h>
typedef HRESULT ( APIENTRY *PFUNC_RegisterSnapshotSubscriptions )( void );
typedef HRESULT ( APIENTRY *PFUNC_UnregisterSnapshotSubscriptions )( void );
typedef HRESULT ( APIENTRY *PFUNC_SimulateSnapshotFreeze )( PWCHAR pwszSnapshotSetId, PWCHAR pwszVolumeNamesList );
typedef HRESULT ( APIENTRY *PFUNC_SimulateSnapshotThaw )( PWCHAR pwszSnapshotSetId );
static BOOL AssertPrivilege( LPCWSTR privName );
/////////////////////////////////////////////////////////////////////////////
// WinMain
extern "C" int __cdecl wmain( int argc, WCHAR *argv[] )
{
HINSTANCE hInstLib;
PFUNC_RegisterSnapshotSubscriptions pFnRegisterSS;
PFUNC_UnregisterSnapshotSubscriptions pFnUnregisterSS;
HRESULT hr;
if ( !AssertPrivilege( SE_BACKUP_NAME ) )
{
wprintf( L"AssertPrivilege returned error, rc:%d\n", GetLastError() );
return 2;
}
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if ( FAILED( hr ) )
{
wprintf( L"CoInitialize() returned rc:%d\n", GetLastError() );
return 1;
}
// Get a handle to the DLL module
hInstLib = LoadLibrary( L"VssAPI.dll" );
if ( hInstLib != NULL )
{
pFnRegisterSS = ( PFUNC_RegisterSnapshotSubscriptions )GetProcAddress( hInstLib, "RegisterSnapshotSubscriptions" );
if ( pFnRegisterSS != NULL )
wprintf( L"pFnRegisterSS returned: 0x%08x\n", ( pFnRegisterSS )() );
else
wprintf( L"Couldn't import RegisterSnapshotSubscriptions function, rc:%d\n", GetLastError() );
wprintf( L"\nPress return to continue...\n" );
getchar();
wprintf( L"continuing...\n" );
pFnUnregisterSS = ( PFUNC_UnregisterSnapshotSubscriptions )GetProcAddress( hInstLib, "UnregisterSnapshotSubscriptions" );
if ( pFnUnregisterSS != NULL )
wprintf( L"pFnUnregisterSS returned: 0x%08x\n", ( pFnUnregisterSS )() );
else
wprintf( L"Couldn't import UnregisterSnapshotSubscriptions function, rc:%d\n", GetLastError() );
FreeLibrary( hInstLib );
}
else
printf( "LoadLibrary error, rc:%d\n", GetLastError() );
// Uninitialize COM library
CoUninitialize();
return 0;
UNREFERENCED_PARAMETER( argv );
UNREFERENCED_PARAMETER( argc );
}
static BOOL AssertPrivilege( LPCWSTR privName )
{
HANDLE tokenHandle;
BOOL stat = FALSE;
if ( OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &tokenHandle ) )
{
LUID value;
if ( LookupPrivilegeValue( NULL, privName, &value ) )
{
TOKEN_PRIVILEGES newState;
DWORD error;
newState.PrivilegeCount = 1;
newState.Privileges[0].Luid = value;
newState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
/*
* We will always call GetLastError below, so clear
* any prior error values on this thread.
*/
SetLastError( ERROR_SUCCESS );
stat = AdjustTokenPrivileges(
tokenHandle,
FALSE,
&newState,
(DWORD)0,
NULL,
NULL );
/*
* Supposedly, AdjustTokenPriveleges always returns TRUE
* (even when it fails). So, call GetLastError to be
* extra sure everything's cool.
*/
if ( (error = GetLastError()) != ERROR_SUCCESS )
{
stat = FALSE;
}
if ( !stat )
{
wprintf( L"AdjustTokenPrivileges for %s failed with %d",
privName,
error );
}
}
CloseHandle( tokenHandle );
}
return stat;
}