As illustrated in the following example, a DLL stream handler implements function through an additional entry point. DLL stream handlers must supply an interface to communicate with the Sync/Stream Manager. This interface, called the stream handler command (SHC) interface, exports stream handler commands (SHCs) for use by the Sync/Stream Manager to set up and control data streams. These SHCs are accessible through a single entry point, SHCEntryPoint.
RC ShcRouter(pshc)
PSHC_COMMON pshcNow;
{ /* Start of ShcRouter */
RC rc = NO_ERROR; /* local return code */
switch (pshc->ulFunction)
{
case SHC_ASSOCIATE:
{
rc = ShcAssociate((PPARM_ASSOC)pshcNow);
break;
}
case SHC_CREATE:
{
rc = ShcCreate((PPARM_CREATE)pshcNow);
break;
}
case SHC_DESTROY:
{
rc = ShcDestroy((PPARM_DESTROY)pshcNow);
break;
}
case SHC_SEEK:
{
rc = ShcSeek((PPARM_SEEK)pshcNow);
break;
}
case SHC_START:
{
rc = ShcStart((PPARM_START)pshcNow);
break;
}
case SHC_STOP:
{
rc = ShcStop((PPARM_STOP)pshcNow);
break;
}
case SHC_GET_PROTOCOL:
{
rc = ShcGetProtocol((PPARM_GPROT)pshcNow);
break;
}
case SHC_INSTALL_PROTOCOL:
{
rc = ShcInstallProtocol((PPARM_INSTPROT)pshcNow);
break;
}
case SHC_ENUMERATE_PROTOCOLS:
{
rc = ShcEnumerateProtocols((PPARM_ENUMPROT)pshcNow);
break;
}
case SHC_NEGOTIATE_RESULT:
{
rc = ShcNegotiateResult((PPARM_NEGOTIATE)pshcNow);
break;
}
default:
{
rc = ERROR_INVALID_FUNCTION;
break;
}
} /* endswitch */
return(rc);
} /* End of ShcRouter */