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.
114 lines
3.0 KiB
114 lines
3.0 KiB
/*****************************************************************************
|
|
* porttbl.c - WDM port class driver port table
|
|
*****************************************************************************
|
|
* Copyright (c) 1996-2000 Microsoft Corporation. All rights reserved.
|
|
*
|
|
* 11/19/96 Dale Sather
|
|
*
|
|
*/
|
|
|
|
#define PUT_GUIDS_HERE
|
|
#include "private.h"
|
|
|
|
|
|
|
|
extern NTSTATUS CreateMiniportMidiUart(PUNKNOWN *Unknown, REFCLSID ClassID,
|
|
PUNKNOWN UnknownOuter OPTIONAL, POOL_TYPE PoolType);
|
|
|
|
extern NTSTATUS CreateMiniportDMusUART(PUNKNOWN *Unknown, REFCLSID ClassID,
|
|
PUNKNOWN UnknownOuter OPTIONAL, POOL_TYPE PoolType);
|
|
|
|
extern NTSTATUS CreateMiniportMidiFM( PUNKNOWN *Unknown, REFCLSID ClassID,
|
|
PUNKNOWN UnknownOuter OPTIONAL, POOL_TYPE PoolType);
|
|
|
|
// ==============================================================================
|
|
// MiniportDrivers
|
|
// Structures which map the miniport class ID to the create functions.
|
|
// ==============================================================================
|
|
PORT_DRIVER
|
|
MiniportDriverUart =
|
|
{
|
|
&CLSID_MiniportDriverUart,
|
|
CreateMiniportMidiUart
|
|
};
|
|
PORT_DRIVER
|
|
MiniportDriverDMusUART =
|
|
{
|
|
&CLSID_MiniportDriverDMusUART,
|
|
CreateMiniportDMusUART
|
|
};
|
|
PORT_DRIVER
|
|
MiniportDriverFmSynth =
|
|
{
|
|
&CLSID_MiniportDriverFmSynth,
|
|
CreateMiniportMidiFM
|
|
};
|
|
PORT_DRIVER
|
|
MiniportDriverFmSynthWithVol =
|
|
// Same as above, but for miniport that also features volume node.
|
|
// Sausage McMuffin With Egg.
|
|
{
|
|
&CLSID_MiniportDriverFmSynthWithVol,
|
|
CreateMiniportMidiFM
|
|
};
|
|
|
|
|
|
extern PORT_DRIVER PortDriverWaveCyclic;
|
|
extern PORT_DRIVER PortDriverWavePci;
|
|
extern PORT_DRIVER PortDriverTopology;
|
|
extern PORT_DRIVER PortDriverMidi;
|
|
extern PORT_DRIVER PortDriverDMus;
|
|
|
|
|
|
PPORT_DRIVER PortDriverTable[] =
|
|
{
|
|
&PortDriverWaveCyclic,
|
|
&PortDriverWavePci,
|
|
&PortDriverTopology,
|
|
&PortDriverMidi,
|
|
&PortDriverDMus,
|
|
&MiniportDriverUart,
|
|
&MiniportDriverFmSynth,
|
|
&MiniportDriverFmSynthWithVol,
|
|
&MiniportDriverDMusUART
|
|
};
|
|
|
|
#pragma code_seg("PAGE")
|
|
|
|
/*****************************************************************************
|
|
* GetClassInfo()
|
|
*****************************************************************************
|
|
* Get information regarding a class.
|
|
* TODO: Eliminate this in favor of object servers.
|
|
*/
|
|
NTSTATUS
|
|
GetClassInfo
|
|
(
|
|
IN REFCLSID ClassId,
|
|
OUT PFNCREATEINSTANCE * Create
|
|
)
|
|
{
|
|
PAGED_CODE();
|
|
|
|
ASSERT(Create);
|
|
|
|
PPORT_DRIVER * portDriver = PortDriverTable;
|
|
|
|
for
|
|
(
|
|
ULONG count = SIZEOF_ARRAY(PortDriverTable);
|
|
count--;
|
|
portDriver++
|
|
)
|
|
{
|
|
if (IsEqualGUIDAligned(ClassId,*(*portDriver)->ClassId))
|
|
{
|
|
*Create = (*portDriver)->Create;
|
|
return STATUS_SUCCESS;
|
|
}
|
|
}
|
|
|
|
return STATUS_NOT_FOUND;
|
|
}
|
|
|
|
#pragma code_seg()
|