2025-11-28 00:35:46 +09:00

180 lines
5.0 KiB
C++

//*****************************************************************************
//
// Microsoft Windows Media
// Copyright (C) Microsoft Corporation. All rights reserved.
//
// FileName: DRMHeader.cpp
//
// Abstract: This sample demonstrates the usage of IWMDRMEditor
// interface for retrieving various DRM properties.
//
//*****************************************************************************
#include "stdafx.h"
#include "DRMHeaderQuery.h"
//
// DRM properties to be queried
//
const WCHAR *g_DRMProperties[] = {
g_wszWMDRM_IsDRM , //= L\"IsDRM\"
g_wszWMDRM_IsDRMCached , //= L\"IsDRMCached\"
g_wszWMDRM_BaseLicenseAcqURL , //= L\"BaseLAURL\"
g_wszWMDRM_Rights , //= L\"Rights\"
g_wszWMDRM_LicenseID , //= L\"LID\"
g_wszWMDRM_ActionAllowed_Playback , //= L\"ActionAllowed.Play\"
g_wszWMDRM_ActionAllowed_CopyToCD , //= L\"ActionAllowed.Print.redbook\"
g_wszWMDRM_ActionAllowed_CopyToSDMIDevice , //= L\"ActionAllowed.Transfer.SDMI\"
g_wszWMDRM_ActionAllowed_CopyToNonSDMIDevice , //= L\"ActionAllowed.Transfer.NONSDMI\"
g_wszWMDRM_ActionAllowed_Backup , //= L\"ActionAllowed.Backup\"
g_wszWMDRM_DRMHeader , //= L\"DRMHeader.\"
g_wszWMDRM_DRMHeader_KeyID , //= L\"DRMHeader.KID\"
g_wszWMDRM_DRMHeader_LicenseAcqURL , //= L\"DRMHeader.LAINFO\"
g_wszWMDRM_DRMHeader_ContentID , //= L\"DRMHeader.CID\"
g_wszWMDRM_DRMHeader_IndividualizedVersion , //= L\"DRMHeader.SECURITYVERSION\"
g_wszWMDRM_DRMHeader_ContentDistributor , //= L\"DRMHeader.ContentDistributor\"
g_wszWMDRM_DRMHeader_SubscriptionContentID , //= L\"DRMHeader.SubscriptionContentID\"
NULL
};
#ifndef UNICODE
//------------------------------------------------------------------------------
// Name: ConvertTCHARToWCHAR
// Desc: Shows the correct way to convert a TCHAR to a WCHAR
//------------------------------------------------------------------------------
HRESULT ConvertTCHARToWCHAR( TCHAR* ptszInput, WCHAR** pwszOutput )
{
HRESULT hr = S_OK;
int nSizeCount = 0;
if ( NULL == ptszInput || NULL == pwszOutput)
{
return( E_INVALIDARG );
}
//
// Make wide char string of the file name
//
nSizeCount = MultiByteToWideChar( CP_ACP, 0, ptszInput, -1, NULL, 0 ) ;
if( 0 == nSizeCount )
{
_tprintf( _T( "Internal error %lu\n" ), GetLastError() );
return ( E_UNEXPECTED );
}
*pwszOutput= new WCHAR[ nSizeCount ];
if( NULL == *pwszOutput )
{
_tprintf( _T( "Internal Error %lu\n" ), GetLastError() ) ;
SAFE_ARRAYDELETE( *pwszOutput );
return ( E_UNEXPECTED );
}
if( 0 == MultiByteToWideChar( CP_ACP, 0, ptszInput, -1, *pwszOutput, nSizeCount ) )
{
_tprintf( _T( "Internal error %lu\n" ), GetLastError() );
SAFE_ARRAYDELETE( *pwszOutput );
return ( E_UNEXPECTED );
}
return( hr );
}
#endif
void Usage()
{
_tprintf( TEXT("Usage:\n\tDRMHeader.exe <FileName> [ PropertyName ]\n\n") );
_tprintf( TEXT("Queries the requested Property in the file.\n") );
_tprintf( TEXT("If no property name is specified, all existing properties will be displayed.\n\n") );
}
//------------------------------------------------------------------------------
// Name: PrintProperties()
// Desc: Displays all DRM properties
//------------------------------------------------------------------------------
void PrintProperties( WCHAR *pwszFileName, WCHAR *pwszPropertyName )
{
HRESULT hr;
CDRMHeaderQuery drmHQ;
hr = drmHQ.Open( pwszFileName );
if( FAILED( hr ) )
{
_tprintf( TEXT("Failed to open file, HR = 0x%X\n"),hr );
return;
}
if( NULL != pwszPropertyName)
{
hr = drmHQ.PrintProperty( pwszPropertyName );
if( FAILED( hr ) )
{
_tprintf( TEXT("Failed to query for the given property. HR = 0x%X\n"), hr );
}
}
else
{
int i=0;
while( NULL != g_DRMProperties[i] )
{
drmHQ.PrintProperty( g_DRMProperties[i] );
i++;
}
}
}
//------------------------------------------------------------------------------
// Name: _tmain()
// Desc: The entry point for this console application
//------------------------------------------------------------------------------
int __cdecl _tmain( int argc, TCHAR* argv[] )
{
HRESULT hr = S_OK;
if( argc < 2 )
{
Usage();
return -1;
}
hr = CoInitialize( NULL );
if( FAILED( hr ) )
{
_tprintf( _T( "CoInitialize failed" ) ) ;
return( 1 );
}
WCHAR *pwszFileName = NULL;
WCHAR *pwszPropertyName = NULL;
#ifndef UNICODE
ConvertTCHARToWCHAR( argv[1], &pwszFileName );
if( argc>2 )
ConvertTCHARToWCHAR( argv[2], &pwszPropertyName );
#else
pwszFileName = argv[1];
if( argc>2 )
pwszPropertyName = argv[2];
#endif
PrintProperties( pwszFileName, pwszPropertyName );
#ifndef UNICODE
SAFE_ARRAYDELETE( pwszFileName );
SAFE_ARRAYDELETE( pwszPropertyName );
#endif
CoUninitialize();
return 0;
}