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.
 
 
 
 
 
 

317 lines
8.1 KiB

/******************************************************************************
Copyright (c) 2000 Microsoft Corporation
Module Name:
main.cpp
Abstract:
This file contains the unit test for the Security objects.
Revision History:
Davide Massarenti (Dmassare) 03/22/2000
created
******************************************************************************/
#include "StdAfx.h"
#include <initguid.h>
#include "HelpServiceTypeLib.h"
#include "HelpServiceTypeLib_i.c"
////////////////////////////////////////////////////////////////////////////////
static HRESULT OpenStreamForRead( /*[in]*/ LPCWSTR szFile ,
/*[out]*/ IStream* *pVal )
{
__HCP_FUNC_ENTRY( "OpenStreamForRead" );
HRESULT hr;
CComPtr<MPC::FileStream> stream;
MPC::wstring szFileFull;
__MPC_PARAMCHECK_BEGIN(hr)
__MPC_PARAMCHECK_STRING_NOT_EMPTY(szFile);
__MPC_PARAMCHECK_POINTER_AND_SET(pVal,NULL);
__MPC_PARAMCHECK_END();
MPC::SubstituteEnvVariables( szFileFull = szFile );
//
// Create a stream for a file.
//
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CreateInstance( &stream ));
__MPC_EXIT_IF_METHOD_FAILS(hr, stream->InitForRead( szFileFull.c_str() ));
//
// Return the stream to the caller.
//
*pVal = stream.Detach();
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr);
}
static HRESULT OpenStreamForWrite( /*[in]*/ LPCWSTR szFile ,
/*[out]*/ IStream* *pVal )
{
__HCP_FUNC_ENTRY( "OpenStreamForWrite" );
HRESULT hr;
CComPtr<MPC::FileStream> stream;
MPC::wstring szFileFull;
__MPC_PARAMCHECK_BEGIN(hr)
__MPC_PARAMCHECK_STRING_NOT_EMPTY(szFile);
__MPC_PARAMCHECK_POINTER_AND_SET(pVal,NULL);
__MPC_PARAMCHECK_END();
MPC::SubstituteEnvVariables( szFileFull = szFile );
//
// Create a stream for a file.
//
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CreateInstance( &stream ));
__MPC_EXIT_IF_METHOD_FAILS(hr, stream->InitForWrite( szFileFull.c_str() ));
//
// Return the stream to the caller.
//
*pVal = stream.Detach();
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr);
}
////////////////////////////////////////////////////////////////////////////////
static HRESULT Creation1()
{
__HCP_FUNC_ENTRY( "Creation1" );
HRESULT hr;
CComPtr<CPCHSecurityDescriptor> pNew;
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CreateInstance( &pNew ));
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr)
}
static HRESULT Creation2()
{
__HCP_FUNC_ENTRY( "Creation2" );
HRESULT hr;
CComPtr<CPCHAccessControlList> pNew;
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CreateInstance( &pNew ));
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr)
}
static HRESULT Creation3()
{
__HCP_FUNC_ENTRY( "Creation3" );
HRESULT hr;
CComPtr<CPCHAccessControlEntry> pNew;
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CreateInstance( &pNew ));
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr)
}
////////////////////////////////////////////////////////////////////////////////
static HRESULT LoadAndSave()
{
__HCP_FUNC_ENTRY( "LoadAndSave" );
HRESULT hr;
CComPtr<CPCHSecurityDescriptor> pNew;
CComPtr<IStream> pStream;
CComBSTR bstrVal;
__MPC_EXIT_IF_METHOD_FAILS(hr, OpenStreamForRead( L"%TEMP%\\test1.xml", &pStream ));
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CreateInstance( &pNew ));
__MPC_EXIT_IF_METHOD_FAILS(hr, pNew->LoadXMLAsStream( pStream ));
__MPC_EXIT_IF_METHOD_FAILS(hr, pNew->SaveXMLAsString( &bstrVal ));
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr)
}
////////////////////////////////////////////////////////////////////////////////
static HRESULT FileToCOM()
{
__HCP_FUNC_ENTRY( "FileToCOM" );
HRESULT hr;
CPCHSecurityDescriptorDirect sd;
CComPtr<CPCHSecurityDescriptor> pNew;
MPC::wstring szFileFull( L"%TEMP%\\sdtest.xml" ); MPC::SubstituteEnvVariables( szFileFull );
HANDLE hFile = INVALID_HANDLE_VALUE;
CComPtr<IStream> pStreamIn;
CComPtr<IStream> pStreamOut;
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CreateInstance( &pNew ));
__MPC_EXIT_IF_INVALID_HANDLE(hr, hFile, ::CreateFileW( szFileFull.c_str(), GENERIC_ALL, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ));
__MPC_EXIT_IF_METHOD_FAILS(hr, sd.AttachObject( hFile ));
__MPC_EXIT_IF_METHOD_FAILS(hr, sd.ConvertSDToCOM( pNew ));
__MPC_EXIT_IF_METHOD_FAILS(hr, pNew->SaveXMLAsStream( (IUnknown**)&pStreamIn ));
__MPC_EXIT_IF_METHOD_FAILS(hr, OpenStreamForWrite ( L"%TEMP%\\sddump.xml", &pStreamOut ));
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::BaseStream::TransferData( pStreamIn, pStreamOut ));
hr = S_OK;
__HCP_FUNC_CLEANUP;
if(hFile != INVALID_HANDLE_VALUE) ::CloseHandle( hFile );
__HCP_FUNC_EXIT(hr)
}
////////////////////////////////////////////////////////////////////////////////
static HRESULT COMToFile()
{
__HCP_FUNC_ENTRY( "COMToFile" );
HRESULT hr;
CPCHSecurityDescriptorDirect sd;
MPC::wstring szFileFull( L"%TEMP%\\sdtest2.xml" ); MPC::SubstituteEnvVariables( szFileFull );
HANDLE hFile = INVALID_HANDLE_VALUE;
{
CComPtr<CPCHSecurityDescriptor> pNew;
CComPtr<IStream> pStream;
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CreateInstance( &pNew ));
__MPC_EXIT_IF_METHOD_FAILS(hr, OpenStreamForRead ( L"%TEMP%\\sddump_pre.xml", &pStream ));
__MPC_EXIT_IF_METHOD_FAILS(hr, pNew->LoadXMLAsStream( (IUnknown*) pStream ));
__MPC_EXIT_IF_METHOD_FAILS(hr, sd.ConvertSDFromCOM( pNew ));
__MPC_EXIT_IF_INVALID_HANDLE(hr, hFile, ::CreateFileW( szFileFull.c_str(), GENERIC_ALL, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ));
}
{
CComPtr<CPCHSecurityDescriptor> pNew;
CComPtr<IStream> pStreamIn;
CComPtr<IStream> pStreamOut;
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CreateInstance( &pNew ));
__MPC_EXIT_IF_METHOD_FAILS(hr, sd.ConvertSDToCOM( pNew ));
__MPC_EXIT_IF_METHOD_FAILS(hr, pNew->SaveXMLAsStream( (IUnknown**)&pStreamIn ));
__MPC_EXIT_IF_METHOD_FAILS(hr, OpenStreamForWrite ( L"%TEMP%\\sddump_post.xml", &pStreamOut ));
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::BaseStream::TransferData( pStreamIn, pStreamOut ));
}
__MPC_EXIT_IF_CALL_RETURNS_FALSE(hr, ::SetKernelObjectSecurity( hFile, OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION, sd.GetSD() ));
hr = S_OK;
__HCP_FUNC_CLEANUP;
if(hFile != INVALID_HANDLE_VALUE) ::CloseHandle( hFile );
__HCP_FUNC_EXIT(hr)
}
////////////////////////////////////////////////////////////////////////////////
static HRESULT RunTests( int argc, WCHAR **argv )
{
__HCP_FUNC_ENTRY( "RunTests" );
HRESULT hr;
__MPC_EXIT_IF_METHOD_FAILS(hr, Creation1());
__MPC_EXIT_IF_METHOD_FAILS(hr, Creation2());
__MPC_EXIT_IF_METHOD_FAILS(hr, Creation3());
__MPC_EXIT_IF_METHOD_FAILS(hr, LoadAndSave());
__MPC_EXIT_IF_METHOD_FAILS(hr, FileToCOM());
__MPC_EXIT_IF_METHOD_FAILS(hr, COMToFile());
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr);
}
int __cdecl wmain( int argc, WCHAR **argv, WCHAR **envp)
{
HRESULT hr;
if(SUCCEEDED(hr = ::CoInitializeEx( NULL, COINIT_MULTITHREADED )))
{
hr = RunTests( argc, argv );
::CoUninitialize();
}
return FAILED(hr) ? 10 : 0;
}