Share via


IWMSDataContainer::Write

banner art

Previous Next

IWMSDataContainer::Write

The server calls the Write method to write data from a buffer to the data container.

Syntax

  HRESULT Write(
  BYTE*  pbBuffer,
  DWORD  dwDataSize,
  QWORD  qwWritePosition,
  IWMSDataContainerCallback*  pCallback,
  QWORD  qwContext
);

Parameters

pbBuffer

[in] Pointer to a BYTE specifying the address of the buffer containing the data to be written.

dwDataSize

[in] DWORD containing the data size in bytes.

qwWritePosition

[in] QWORD containing the position in the data container to write to. This must be WMS_DATA_CONTAINER_NONSEEKABLE if the data container does not support seeking. For example, a live source cannot be seekable, but a file can be.

pCallback

[in] Pointer to the IWMSDataContainerCallback interface. The plug-in calls IWMSDataContainerCallback::OnWrite to respond to the server.

qwContext

[in] QWORD containing a value defined by the server to identify which Write request the plug-in is responding to when it calls IWMSDataContainerCallback::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