2025-04-27 07:49:33 -04:00

95 lines
2.4 KiB
C

/**************************************************************************
**
** THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
** KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
** IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
** PURPOSE.
**
** Copyright (c) 2000-2001 Microsoft Corporation. All Rights Reserved.
**
**************************************************************************/
enum GFXPinIds
{
GFX_SINK_PIN = 0,
GFX_SOURCE_PIN
};
typedef class CGFXPin
{
public:
BOOL rejectDataFormatChange;
BOOL pinQueueValid;
FAST_MUTEX pinQueueSync;
public:
CGFXPin() {pinQueueValid = FALSE;};
~CGFXPin() {};
//
// The functions here are static so that we can add them to the
// dispatch function table. Some also might be called when the
// object itself is not yet created.
//
static NTSTATUS Create
(
IN PKSPIN pin,
IN PIRP Irp
);
static NTSTATUS Close
(
IN PKSPIN pin,
IN PIRP Irp
);
static NTSTATUS SetDataFormat
(
IN PKSPIN pin,
IN PKSDATAFORMAT oldFormat,
IN PKSMULTIPLE_ITEM oldAttributeList,
IN const KSDATARANGE *DataRange,
IN const KSATTRIBUTE_LIST *AttributeRange
);
static NTSTATUS SetDeviceState
(
IN PKSPIN pin,
IN KSSTATE ToState,
IN KSSTATE FromState
);
static NTSTATUS DataRangeIntersection
(
IN PVOID Filter,
IN PIRP Irp,
IN PKSP_PIN PinInstance,
IN PKSDATARANGE CallerDataRange,
IN PKSDATARANGE OurDataRange,
IN ULONG BufferSize,
OUT PVOID Data OPTIONAL,
OUT PULONG DataSize
);
private:
//
// These functions are static because they need to be called
// even if the object doesn't exist.
//
static NTSTATUS ValidateDataFormat
(
IN PKSDATAFORMAT DataFormat,
IN PKSDATARANGE DataRange
);
static NTSTATUS IntersectDataRanges
(
IN PKSDATARANGE clientDataRange,
IN PKSDATARANGE myDataRange,
OUT PVOID ResultantFormat,
OUT PULONG ReturnedBytes
);
} GFXPIN, *PGFXPIN;