IWMSDataContainerCallback::OnWrite

banner art

Previous Next

IWMSDataContainerCallback::OnWrite

The OnWrite method returns the results of the IWMSDataContainer::Write method call.

Syntax

  HRESULT OnWrite(
  HRESULT  hr,
  DWORD  dwActualBytesTransferred,
  QWORD  qwContext
);

Parameters

hr

[in] HRESULT containing the result of the call to IWMSDataContainer::Write.

dwActualBytesTransferred

[in] DWORD containing the actual amount, in bytes, of data transferred.

qwContext

[in] QWORD containing a value defined by the server to identify which IWMSDataContainer::Write request the plug-in is responding to when it calls OnWrite. The plug-in must pass this value back unaltered.

Return Values

If the method succeeds, the plug-in must return S_OK. To report an error, the plug-in can return any HRESULT other than S_OK. If the plug-in uses the IWMSEventLog interface to log error information directly to the Windows Event Viewer, it is recommended that it return NS_E_PLUGIN_ERROR_REPORTED. Typically, the server attempts to make plug-in error information available to the server object model, the Windows Event Viewer, and the troubleshooting list in the details pane of the Windows Media Services MMC. However, if the plug-in uses the IWMSEventLog interface to send custom error information to the Windows Event Viewer, returning NS_E_PLUGIN_ERROR_REPORTED stops the server from also logging to the event viewer. For more information about retrieving plug-in error information, see Identifying Plug-in Errors.

Example Code

HRESULT STDMETHODCALLTYPE CDataContainer::Write( 
                        BYTE *pbBuffer,
                        DWORD dwDataSize,
                        QWORD qwWritePosition,
                        IWMSDataContainerCallback *pCallback,
                        QWORD qwContext)
{
    
    HRESULT hr = S_OK;
    BOOL fSuccess = TRUE;
    DWORD dwOffsetLow = 0, dwOffsetHigh = 0;
    DWORD dwError = NO_ERROR;
    DWORD dwBytesTransferred = 0;

    dwOffsetLow = LODWORD( qwWritePosition );
    dwOffsetHigh = HIDWORD( qwWritePosition );

    dwOffsetLow = SetFilePointer( m_hFile, dwOffsetLow, (long*)&dwOffsetHigh, FILE_BEGIN );

    if( ( dwOffsetLow == 0xFFFFFFFF ) && ( ( dwError = GetLastError() ) != NO_ERROR ) )
    {
        hr = HRESULT_FROM_WIN32( dwError );
        goto EXIT;
    }

    fSuccess = WriteFile( 
                    m_hFile, 
                    pbBuffer, 
                    dwDataSize, 
                    &dwBytesTransferred,
                    NULL);
    if ( !fSuccess )
    {
        dwError = GetLastError();
        hr = HRESULT_FROM_WIN32( GetLastError() );
        goto EXIT;
    }

    pCallback->OnWrite( hr,
                        dwBytesTransferred,
                        qwContext );

EXIT:
    return( hr );
}

Requirements

Header: datacontainer.h.

Library: WMSServerTypeLib.dll.

Platform: Windows Server 2003, Enterprise Edition; Windows Server 2003, Datacenter Edition; Windows Server 2008.

See Also

Previous Next