- Make ks.h and drmk.h msvc compatible

svn path=/trunk/; revision=41468
This commit is contained in:
Johannes Anderwald 2009-06-19 12:07:17 +00:00
parent f791b1fa91
commit 10e71311b1
2 changed files with 515 additions and 82 deletions

View file

@ -35,40 +35,47 @@ extern "C"
{ {
#endif #endif
NTAPI NTSTATUS NTSTATUS
NTAPI
DrmAddContentHandlers( DrmAddContentHandlers(
IN ULONG ContentId, IN ULONG ContentId,
IN PVOID *paHandlers, IN PVOID *paHandlers,
IN ULONG NumHandlers); IN ULONG NumHandlers);
NTAPI NTSTATUS NTSTATUS
NTAPI
DrmCreateContentMixed( DrmCreateContentMixed(
IN PULONG paContentId, IN PULONG paContentId,
IN ULONG cContentId, IN ULONG cContentId,
OUT PULONG pMixedContentId); OUT PULONG pMixedContentId);
NTAPI NTSTATUS NTSTATUS
NTAPI
DrmDestroyContent( DrmDestroyContent(
IN ULONG ContentId); IN ULONG ContentId);
NTAPI NTSTATUS NTSTATUS
NTAPI
DrmForwardContentToDeviceObject( DrmForwardContentToDeviceObject(
IN ULONG ContentId, IN ULONG ContentId,
IN PVOID Reserved, IN PVOID Reserved,
IN PCDRMFORWARD DrmForward); IN PCDRMFORWARD DrmForward);
NTAPI NTSTATUS NTSTATUS
NTAPI
DrmForwardContentToFileObject( DrmForwardContentToFileObject(
IN ULONG ContentId, IN ULONG ContentId,
IN PFILE_OBJECT FileObject); IN PFILE_OBJECT FileObject);
NTAPI NTSTATUS NTSTATUS
NTAPI
DrmForwardContentToInterface( DrmForwardContentToInterface(
IN ULONG ContentId, IN ULONG ContentId,
IN PUNKNOWN pUnknown, IN PUNKNOWN pUnknown,
IN ULONG NumMethods); IN ULONG NumMethods);
NTAPI NTSTATUS NTSTATUS
NTAPI
DrmGetContentRights( DrmGetContentRights(
IN ULONG ContentId, IN ULONG ContentId,
OUT PDRMRIGHTS DrmRights); OUT PDRMRIGHTS DrmRights);

View file

@ -249,8 +249,18 @@ typedef KSIDENTIFIER KSDEGRADE, *PKSDEGRADE;
typedef KSIDENTIFIER KSPIN_INTERFACE, *PKSPIN_INTERFACE; typedef KSIDENTIFIER KSPIN_INTERFACE, *PKSPIN_INTERFACE;
typedef KSIDENTIFIER KSPIN_MEDIUM, *PKSPIN_MEDIUM; typedef KSIDENTIFIER KSPIN_MEDIUM, *PKSPIN_MEDIUM;
typedef union #if !defined( _MSC_VER )
{ typedef struct {
ULONG FormatSize;
ULONG Flags;
ULONG SampleSize;
ULONG Reserved;
GUID MajorFormat;
GUID SubFormat;
GUID Specifier;
} KSDATAFORMAT, *PKSDATAFORMAT, KSDATARANGE, *PKSDATARANGE;
#else
typedef union {
struct { struct {
ULONG FormatSize; ULONG FormatSize;
ULONG Flags; ULONG Flags;
@ -262,9 +272,13 @@ typedef union
}; };
LONGLONG Alignment; LONGLONG Alignment;
} KSDATAFORMAT, *PKSDATAFORMAT, KSDATARANGE, *PKSDATARANGE; } KSDATAFORMAT, *PKSDATAFORMAT, KSDATARANGE, *PKSDATARANGE;
#endif
typedef struct typedef struct
{ {
ULONG Size;
ULONG Flags;
GUID Attribute;
} KSATTRIBUTE, *PKSATTRIBUTE; } KSATTRIBUTE, *PKSATTRIBUTE;
@ -1171,20 +1185,37 @@ enum VARENUM {
typedef struct typedef struct
{ {
} KS_FRAMING_ITEM, *PKS_FRAMING_ITEM; ULONG MinFrameSize;
ULONG MaxFrameSize;
typedef struct ULONG Stepping;
{
} KS_FRAMING_RANGE, *PKS_FRAMING_RANGE; } KS_FRAMING_RANGE, *PKS_FRAMING_RANGE;
typedef struct typedef struct
{ {
/* Obsolete */ KS_FRAMING_RANGE Range;
ULONG InPlaceWeight;
ULONG NotInPlaceWeight;
} KS_FRAMING_RANGE_WEIGHTED, *PKS_FRAMING_RANGE_WEIGHTED; } KS_FRAMING_RANGE_WEIGHTED, *PKS_FRAMING_RANGE_WEIGHTED;
/* ??? */
typedef struct typedef struct
{ {
GUID MemoryType;
GUID BusType;
ULONG MemoryFlags;
ULONG BusFlags;
ULONG Flags;
ULONG Frames;
ULONG FileAlignment;
ULONG MemoryTypeWeight;
KS_FRAMING_RANGE PhysicalRange;
KS_FRAMING_RANGE_WEIGHTED FramingRange;
} KS_FRAMING_ITEM, *PKS_FRAMING_ITEM;
typedef struct
{
ULONG RatioNumerator;
ULONG RatioDenominator;
ULONG RatioConstantMargin;
} KS_COMPRESSION, *PKS_COMPRESSION; } KS_COMPRESSION, *PKS_COMPRESSION;
@ -1236,12 +1267,48 @@ typedef struct
#define KSPROPERTY_ITEM_IRP_STORAGE(Irp) (*(const KSPROPERTY_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3]) #define KSPROPERTY_ITEM_IRP_STORAGE(Irp) (*(const KSPROPERTY_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
#define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) (*(PKSATTRIBUTE_LIST*)&(Irp)->Tail.Overlay.DriverContext[2]) #define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) (*(PKSATTRIBUTE_LIST*)&(Irp)->Tail.Overlay.DriverContext[2])
#endif typedef
VOID
(*PFNREFERENCEDEVICEOBJECT)(
IN PVOID Context
);
typedef
VOID
(*PFNDEREFERENCEDEVICEOBJECT)(
IN PVOID Context
);
typedef
NTSTATUS
(*PFNQUERYREFERENCESTRING)(
IN PVOID Context,
IN OUT PWCHAR *String
);
typedef struct typedef struct
{ {
INTERFACE Interface;
PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject;
PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject;
PFNQUERYREFERENCESTRING QueryReferenceString;
} BUS_INTERFACE_REFERENCE, *PBUS_INTERFACE_REFERENCE; } BUS_INTERFACE_REFERENCE, *PBUS_INTERFACE_REFERENCE;
typedef struct
{
KDPC Dpc;
ULONG ReferenceCount;
KSPIN_LOCK AccessLock;
} KSDPC_ITEM, *PKSDPC_ITEM;
typedef struct
{
KSDPC_ITEM DpcItem;
LIST_ENTRY BufferList;
} KSBUFFER_ITEM, *PKSBUFFER_ITEM;
#endif
typedef struct typedef struct
{ {
GUID Manufacturer; GUID Manufacturer;
@ -1252,10 +1319,6 @@ typedef struct
ULONG Revision; ULONG Revision;
} KSCOMPONENTID, *PKSCOMPONENTID; } KSCOMPONENTID, *PKSCOMPONENTID;
typedef struct
{
} KSBUFFER_ITEM, *PKSBUFFER_ITEM;
/* =============================================================== /* ===============================================================
Properties Properties
*/ */
@ -1265,40 +1328,85 @@ typedef struct
#define KSPROPERTY_MEMBER_VALUES 0x00000003 #define KSPROPERTY_MEMBER_VALUES 0x00000003
#define KSPROPERTY_MEMBER_FLAG_DEFAULT KSPROPERTY_MEMBER_RANGES #define KSPROPERTY_MEMBER_FLAG_DEFAULT KSPROPERTY_MEMBER_RANGES
typedef enum {
KS_SEEKING_NoPositioning,
KS_SEEKING_AbsolutePositioning,
KS_SEEKING_RelativePositioning,
KS_SEEKING_IncrementalPositioning,
KS_SEEKING_PositioningBitsMask = 0x3,
KS_SEEKING_SeekToKeyFrame,
KS_SEEKING_ReturnTime = 0x8
} KS_SEEKING_FLAGS;
typedef struct typedef struct
{ {
LONGLONG Current;
LONGLONG Stop;
KS_SEEKING_FLAGS CurrentFlags;
KS_SEEKING_FLAGS StopFlags;
} KSPROPERTY_POSITIONS, *PKSPROPERTY_POSITIONS; } KSPROPERTY_POSITIONS, *PKSPROPERTY_POSITIONS;
typedef struct typedef struct
{ {
} KSPROPERTY_SERIAL, *PKSPROPERTY_SERIAL; GUID PropertySet;
ULONG Count;
typedef struct
{
} KSPROPERTY_SERIALHDR, *PKSPROPERTY_SERIALHDR; } KSPROPERTY_SERIALHDR, *PKSPROPERTY_SERIALHDR;
typedef struct typedef struct
{ {
#if defined( _KS_NO_ANONYMOUS_STRUCTURES_ ) KSIDENTIFIER PropTypeSet;
struct _SIGNED { ULONG Id;
#else ULONG PropertyLength;
} KSPROPERTY_SERIAL, *PKSPROPERTY_SERIAL;
typedef union
{
struct { struct {
#endif
LONG SignedMinimum; LONG SignedMinimum;
LONG SignedMaximum; LONG SignedMaximum;
};
#if defined( _KS_NO_ANONYMOUS_STRUCTURES_ ) #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
struct _UNSIGNED { }_SIGNED;
#else #else
struct { };
#endif #endif
struct {
ULONG UnsignedMinimum; ULONG UnsignedMinimum;
ULONG UnsignedMaximum; ULONG UnsignedMaximum;
}; #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
}_UNSIGNED;
#else
};
#endif
} KSPROPERTY_BOUNDS_LONG, *PKSPROPERTY_BOUNDS_LONG; } KSPROPERTY_BOUNDS_LONG, *PKSPROPERTY_BOUNDS_LONG;
typedef struct typedef union
{ {
struct {
LONGLONG SignedMinimum;
LONGLONG SignedMaximum;
#if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
}_SIGNED64;
#else
};
#endif
struct {
#if defined(_NTDDK_)
ULONGLONG UnsignedMinimum;
ULONGLONG UnsignedMaximum;
#else
DWORDLONG UnsignedMinimum;
DWORDLONG UnsignedMaximum;
#endif
#if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
}_UNSIGNED64;
#else
};
#endif
} KSPROPERTY_BOUNDS_LONGLONG, *PKSPROPERTY_BOUNDS_LONGLONG; } KSPROPERTY_BOUNDS_LONGLONG, *PKSPROPERTY_BOUNDS_LONGLONG;
typedef struct typedef struct
@ -1312,6 +1420,8 @@ typedef struct
typedef struct typedef struct
{ {
LONGLONG Earliest;
LONGLONG Latest;
} KSPROPERTY_MEDIAAVAILABLE, *PKSPROPERTY_MEDIAAVAILABLE; } KSPROPERTY_MEDIAAVAILABLE, *PKSPROPERTY_MEDIAAVAILABLE;
@ -1406,11 +1516,14 @@ typedef struct
typedef struct typedef struct
{ {
#if defined(_NTDDK_)
ULONGLONG SteppingDelta;
#else
DWORDLONG SteppingDelta;
#endif
KSPROPERTY_BOUNDS_LONGLONG Bounds;
} KSPROPERTY_STEPPING_LONGLONG, *PKSPROPERTY_STEPPING_LONGLONG; } KSPROPERTY_STEPPING_LONGLONG, *PKSPROPERTY_STEPPING_LONGLONG;
/* =============================================================== /* ===============================================================
Allocator Framing Allocator Framing
*/ */
@ -1434,6 +1547,11 @@ typedef struct
typedef struct typedef struct
{ {
ULONG CountItems; // count of FramingItem-s below.
ULONG PinFlags;
KS_COMPRESSION OutputCompression;
ULONG PinWeight; // this pin framing's Weight graph-wide
KS_FRAMING_ITEM FramingItem[1];
} KSALLOCATOR_FRAMING_EX, *PKSALLOCATOR_FRAMING_EX; } KSALLOCATOR_FRAMING_EX, *PKSALLOCATOR_FRAMING_EX;
@ -1443,6 +1561,9 @@ typedef struct
typedef struct typedef struct
{ {
PVOID Context;
ULONG Proportion;
LONGLONG DeltaTime;
} KSQUALITY, *PKSQUALITY; } KSQUALITY, *PKSQUALITY;
typedef struct typedef struct
@ -1453,10 +1574,17 @@ typedef struct
typedef struct typedef struct
{ {
LONGLONG PresentationStart;
LONGLONG Duration;
KSPIN_INTERFACE Interface;
LONG Rate;
ULONG Flags;
} KSRATE, *PKSRATE; } KSRATE, *PKSRATE;
typedef struct typedef struct
{ {
KSPROPERTY Property;
KSRATE Rate;
} KSRATE_CAPABILITY, *PKSRATE_CAPABILITY; } KSRATE_CAPABILITY, *PKSRATE_CAPABILITY;
typedef struct typedef struct
@ -1467,6 +1595,62 @@ typedef struct
typedef struct typedef struct
{ {
ULONG NotificationType;
union {
struct {
HANDLE Event;
ULONG_PTR Reserved[2];
} EventHandle;
struct {
HANDLE Semaphore;
ULONG Reserved;
LONG Adjustment;
} SemaphoreHandle;
#if defined(_NTDDK_)
struct {
PVOID Event;
KPRIORITY Increment;
ULONG_PTR Reserved;
} EventObject;
struct {
PVOID Semaphore;
KPRIORITY Increment;
LONG Adjustment;
} SemaphoreObject;
struct {
PKDPC Dpc;
ULONG ReferenceCount;
ULONG_PTR Reserved;
} Dpc;
struct {
PWORK_QUEUE_ITEM WorkQueueItem;
WORK_QUEUE_TYPE WorkQueueType;
ULONG_PTR Reserved;
} WorkItem;
struct {
PWORK_QUEUE_ITEM WorkQueueItem;
PKSWORKER KsWorkerObject;
ULONG_PTR Reserved;
} KsWorkItem;
#endif
struct {
PVOID Unused;
LONG_PTR Alignment[2];
} Alignment;
};
} KSEVENTDATA, *PKSEVENTDATA;
typedef struct
{
ULONG Size;
ULONG Flags;
union {
HANDLE ObjectHandle;
PVOID ObjectPointer;
};
PVOID Reserved;
KSEVENT Event;
KSEVENTDATA EventData;
} KSRELATIVEEVENT, *PKSRELATIVEEVENT; } KSRELATIVEEVENT, *PKSRELATIVEEVENT;
@ -1483,6 +1667,8 @@ typedef struct
typedef struct typedef struct
{ {
LONGLONG Time;
LONGLONG SystemTime;
} KSCORRELATED_TIME, *PKSCORRELATED_TIME; } KSCORRELATED_TIME, *PKSCORRELATED_TIME;
typedef struct typedef struct
@ -1495,10 +1681,15 @@ typedef struct
typedef struct typedef struct
{ {
LONGLONG TimeBase;
LONGLONG Interval;
} KSINTERVAL, *PKSINTERVAL; } KSINTERVAL, *PKSINTERVAL;
typedef struct typedef struct
{ {
LONGLONG Duration;
ULONG FrameFlags;
ULONG Reserved;
} KSFRAMETIME, *PKSFRAMETIME; } KSFRAMETIME, *PKSFRAMETIME;
@ -1506,23 +1697,39 @@ typedef struct
Clocks Clocks
*/ */
typedef struct typedef PVOID PKSDEFAULTCLOCK;
{
} KSCLOCK, *PKSCLOCK, *PKSDEFAULTCLOCK; /* OK ? */
typedef struct typedef struct
{ {
ULONG CreateFlags;
} KSCLOCK_CREATE, *PKSCLOCK_CREATE; } KSCLOCK_CREATE, *PKSCLOCK_CREATE;
#if defined(_NTDDK_)
typedef
LONGLONG
(FASTCALL *PFNKSCLOCK_GETTIME)(
IN PFILE_OBJECT FileObject
);
typedef
LONGLONG
(FASTCALL *PFNKSCLOCK_CORRELATEDTIME)(
IN PFILE_OBJECT FileObject,
OUT PLONGLONG SystemTime);
typedef struct typedef struct
{ {
PFNKSCLOCK_GETTIME GetTime;
PFNKSCLOCK_GETTIME GetPhysicalTime;
PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime;
PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime;
} KSCLOCK_FUNCTIONTABLE, *PKSCLOCK_FUNCTIONTABLE; } KSCLOCK_FUNCTIONTABLE, *PKSCLOCK_FUNCTIONTABLE;
/* =============================================================== /* ===============================================================
Objects ??? SORT ME! Objects ??? SORT ME!
*/ */
#if defined(_NTDDK_)
typedef struct typedef struct
{ {
PDRIVER_DISPATCH Create; PDRIVER_DISPATCH Create;
@ -1551,34 +1758,55 @@ typedef struct
typedef struct typedef struct
{ {
KSEVENT Event;
PKSEVENTDATA EventData;
PVOID Reserved;
} KSQUERYBUFFER, *PKSQUERYBUFFER; } KSQUERYBUFFER, *PKSQUERYBUFFER;
typedef struct typedef struct
{ {
PVOID Context;
ULONG Status;
} KSERROR, *PKSERROR; } KSERROR, *PKSERROR;
typedef struct
{
} KSDPC_ITEM, *PKSDPC_ITEM;
/* =============================================================== /* ===============================================================
Methods Methods
*/ */
#if defined(_NTDDK_)
typedef struct typedef struct
{ {
} KSMETHOD_SET, *PKSMETHOD_SET; ULONG MethodId;
union {
typedef struct PFNKSHANDLER MethodHandler;
{ BOOLEAN MethodSupported;
};
ULONG MinMethod;
ULONG MinData;
PFNKSHANDLER SupportHandler;
ULONG Flags;
} KSMETHOD_ITEM, *PKSMETHOD_ITEM; } KSMETHOD_ITEM, *PKSMETHOD_ITEM;
typedef struct typedef struct
{ {
ULONG MethodId;
union {
PFNKSFASTHANDLER MethodHandler;
BOOLEAN MethodSupported;
};
} KSFASTMETHOD_ITEM, *PKSFASTMETHOD_ITEM; } KSFASTMETHOD_ITEM, *PKSFASTMETHOD_ITEM;
typedef struct
{
const GUID* Set;
ULONG MethodsCount;
const KSMETHOD_ITEM* MethodItem;
ULONG FastIoCount;
const KSFASTMETHOD_ITEM*FastIoTable;
} KSMETHOD_SET, *PKSMETHOD_SET;
#endif
/* =============================================================== /* ===============================================================
Nodes Nodes
*/ */
@ -1599,51 +1827,222 @@ typedef struct
typedef struct typedef struct
{ {
KSEVENT Event;
ULONG NodeId;
ULONG Reserved;
} KSE_NODE, *PKSE_NODE; } KSE_NODE, *PKSE_NODE;
typedef struct typedef struct {
{ ULONG CreateFlags;
ULONG Node;
} KSNODE_CREATE, *PKSNODE_CREATE; } KSNODE_CREATE, *PKSNODE_CREATE;
/* =============================================================== /* ===============================================================
Events Events
*/ */
typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY, *PKSEVENT_ENTRY;
#if defined(_NTDDK_)
typedef struct typedef struct
{ {
KSEVENTDATA EventData;
LONGLONG MarkTime;
} KSEVENT_TIME_MARK, *PKSEVENT_TIME_MARK; } KSEVENT_TIME_MARK, *PKSEVENT_TIME_MARK;
typedef struct typedef struct
{ {
KSEVENTDATA EventData;
LONGLONG TimeBase;
LONGLONG Interval;
} KSEVENT_TIME_INTERVAL, *PKSEVENT_TIME_INTERVAL; } KSEVENT_TIME_INTERVAL, *PKSEVENT_TIME_INTERVAL;
typedef struct typedef NTSTATUS (*PFNKSADDEVENT)(
{ IN PIRP Irp,
} KSEVENT_SET, *PKSEVENT_SET; IN PKSEVENTDATA EventData,
IN struct _KSEVENT_ENTRY* EventEntry);
typedef
VOID
(*PFNKSREMOVEEVENT)(
IN PFILE_OBJECT FileObject,
IN struct _KSEVENT_ENTRY* EventEntry
);
typedef struct typedef struct
{ {
ULONG EventId;
ULONG DataInput;
ULONG ExtraEntryData;
PFNKSADDEVENT AddHandler;
PFNKSREMOVEEVENT RemoveHandler;
PFNKSHANDLER SupportHandler;
} KSEVENT_ITEM, *PKSEVENT_ITEM; } KSEVENT_ITEM, *PKSEVENT_ITEM;
typedef struct _KSEVENT_ENTRY
{
} KSEVENT_ENTRY, *PKSEVENT_ENTRY;
typedef struct typedef struct
{ {
} KSEVENTDATA, *PKSEVENTDATA; const GUID* Set;
ULONG EventsCount;
const KSEVENT_ITEM* EventItem;
} KSEVENT_SET, *PKSEVENT_SET;
struct _KSEVENT_ENTRY
{
LIST_ENTRY ListEntry;
PVOID Object;
union {
PKSDPC_ITEM DpcItem;
PKSBUFFER_ITEM BufferItem;
};
PKSEVENTDATA EventData;
ULONG NotificationType;
const KSEVENT_SET* EventSet;
const KSEVENT_ITEM* EventItem;
PFILE_OBJECT FileObject;
ULONG SemaphoreAdjustment;
ULONG Reserved;
ULONG Flags;
};
#endif
/* =============================================================== /* ===============================================================
Pins Pins
*/ */
#if defined(_NTDDK_)
typedef struct _KSPIN KSPIN, *PKSPIN;
typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER, *PKSSTREAM_POINTER;
typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET, *PKSSTREAM_POINTER_OFFSET;
typedef struct _KSMAPPING KSMAPPING, *PKSMAPPING;
typedef struct _KSPROCESSPIN KSPROCESSPIN, *PKSPROCESSPIN;
typedef
NTSTATUS
(*PFNKSPINIRP)(
IN PKSPIN Pin,
IN PIRP Irp
);
typedef
NTSTATUS
(*PFNKSPIN)(
IN PKSPIN Pin
);
typedef
void
(*PFNKSPINVOID)(
IN PKSPIN Pin
);
typedef
void
(*PFNKSSTREAMPOINTER)(
IN PKSSTREAM_POINTER StreamPointer
);
typedef struct {
ULONG Count;
PKSATTRIBUTE* Attributes;
} KSATTRIBUTE_LIST, *PKSATTRIBUTE_LIST;
typedef
NTSTATUS
(*PFNKSPINSETDATAFORMAT)(
IN PKSPIN Pin,
IN PKSDATAFORMAT OldFormat OPTIONAL,
IN PKSMULTIPLE_ITEM OldAttributeList OPTIONAL,
IN const KSDATARANGE* DataRange,
IN const KSATTRIBUTE_LIST* AttributeRange OPTIONAL
);
typedef
NTSTATUS
(*PFNKSPINSETDEVICESTATE)(
IN PKSPIN Pin,
IN KSSTATE ToState,
IN KSSTATE FromState
);
typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH, *PKSCLOCK_DISPATCH;
typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH, *PKSALLOCATOR_DISPATCH;
typedef struct typedef struct
{ {
PFNKSPINIRP Create;
PFNKSPINIRP Close;
PFNKSPIN Process;
PFNKSPINVOID Reset;
PFNKSPINSETDATAFORMAT SetDataFormat;
PFNKSPINSETDEVICESTATE SetDeviceState;
PFNKSPIN Connect;
PFNKSPINVOID Disconnect;
const KSCLOCK_DISPATCH* Clock;
const KSALLOCATOR_DISPATCH* Allocator;
} KSPIN_DISPATCH, *PKSPIN_DISPATCH; } KSPIN_DISPATCH, *PKSPIN_DISPATCH;
#if defined(_NTDDK_) typedef
BOOLEAN
(*PFNKSPINSETTIMER)(
IN PKSPIN Pin,
IN PKTIMER Timer,
IN LARGE_INTEGER DueTime,
IN PKDPC Dpc
);
typedef
BOOLEAN
(*PFNKSPINCANCELTIMER)(
IN PKSPIN Pin,
IN PKTIMER Timer
);
typedef
LONGLONG
(FASTCALL *PFNKSPINCORRELATEDTIME)(
IN PKSPIN Pin,
OUT PLONGLONG SystemTime
);
typedef
void
(*PFNKSPINRESOLUTION)(
IN PKSPIN Pin,
OUT PKSRESOLUTION Resolution
);
struct _KSCLOCK_DISPATCH {
PFNKSPINSETTIMER SetTimer;
PFNKSPINCANCELTIMER CancelTimer;
PFNKSPINCORRELATEDTIME CorrelatedTime;
PFNKSPINRESOLUTION Resolution;
};
typedef
NTSTATUS
(*PFNKSPININITIALIZEALLOCATOR)(
IN PKSPIN Pin,
IN PKSALLOCATOR_FRAMING AllocatorFraming,
OUT PVOID* Context
);
typedef PVOID (*PFNKSDELETEALLOCATOR)(
IN PVOID Context);
typedef PVOID (*PFNKSDEFAULTALLOCATE)(
IN PVOID Context);
typedef PVOID (*PFNKSDEFAULTFREE)(
IN PVOID Context,
IN PVOID Buffer);
struct _KSALLOCATOR_DISPATCH {
PFNKSPININITIALIZEALLOCATOR InitializeAllocator;
PFNKSDELETEALLOCATOR DeleteAllocator;
PFNKSDEFAULTALLOCATE Allocate;
PFNKSDEFAULTFREE Free;
};
typedef struct typedef struct
{ {
@ -1741,7 +2140,7 @@ typedef struct
#define KSPIN_FLAG_DENY_USERMODE_ACCESS #define KSPIN_FLAG_DENY_USERMODE_ACCESS
#define KSPIN_FLAG_IMPLEMENT_CLOCK #define KSPIN_FLAG_IMPLEMENT_CLOCK
typedef struct struct _KSPIN
{ {
const KSPIN_DESCRIPTOR_EX* Descriptor; const KSPIN_DESCRIPTOR_EX* Descriptor;
KSOBJECT_BAG Bag; KSOBJECT_BAG Bag;
@ -1759,7 +2158,7 @@ typedef struct
KSSTATE DeviceState; KSSTATE DeviceState;
KSRESET ResetState; KSRESET ResetState;
KSSTATE ClientState; KSSTATE ClientState;
} KSPIN, *PKSPIN; };
#define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)\ #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)\
DEFINE_KSPROPERTY_ITEM(\ DEFINE_KSPROPERTY_ITEM(\
@ -2008,32 +2407,17 @@ DEFINE_KSPROPERTY_TABLE(TopologySet) {\
/* TODO */ /* TODO */
typedef void* UNKNOWN; typedef void* UNKNOWN;
typedef PVOID (*PFNKSDEFAULTALLOCATE)(
IN PVOID Context);
typedef PVOID (*PFNKSDEFAULTFREE)(
IN PVOID Context,
IN PVOID Buffer);
typedef PVOID (*PFNKSINITIALIZEALLOCATOR)( typedef PVOID (*PFNKSINITIALIZEALLOCATOR)(
IN PVOID InitialContext, IN PVOID InitialContext,
IN PKSALLOCATOR_FRAMING AllocatorFraming, IN PKSALLOCATOR_FRAMING AllocatorFraming,
OUT PVOID* Context); OUT PVOID* Context);
typedef PVOID (*PFNKSDELETEALLOCATOR)(
IN PVOID Context);
#if defined(_NTDDK_) #if defined(_NTDDK_)
typedef NTSTATUS (*PFNKSALLOCATOR)( typedef NTSTATUS (*PFNKSALLOCATOR)(
IN PIRP Irp, IN PIRP Irp,
IN ULONG BufferSize, IN ULONG BufferSize,
IN BOOLEAN InputOperation); IN BOOLEAN InputOperation);
typedef NTSTATUS (*PFNKSADDEVENT)(
IN PIRP Irp,
IN PKSEVENTDATA EventData,
IN struct _KSEVENT_ENTRY* EventEntry);
typedef NTSTATUS (*PFNKINTERSECTHANDLEREX)( typedef NTSTATUS (*PFNKINTERSECTHANDLEREX)(
IN PVOID Context, IN PVOID Context,
IN PIRP Irp, IN PIRP Irp,
@ -2088,17 +2472,59 @@ typedef struct
XP / DX8 XP / DX8
*/ */
typedef struct struct _KSMAPPING {
PHYSICAL_ADDRESS PhysicalAddress;
ULONG ByteCount;
ULONG Alignment;
};
struct _KSSTREAM_POINTER_OFFSET
{ {
/* TODO */ #if defined(_NTDDK_)
} KSPROCESSPIN, *PKSPROCESSPIN; union {
PUCHAR Data;
PKSMAPPING Mappings;
};
#else
PUCHAR Data;
#endif
#if !defined(_WIN64)
PVOID Alignment;
#endif
ULONG Count;
ULONG Remaining;
};
#if defined(_NTDDK_)
struct _KSSTREAM_POINTER
{
PVOID Context;
PKSPIN Pin;
PKSSTREAM_HEADER StreamHeader;
PKSSTREAM_POINTER_OFFSET Offset;
KSSTREAM_POINTER_OFFSET OffsetIn;
KSSTREAM_POINTER_OFFSET OffsetOut;
};
struct _KSPROCESSPIN
{
PKSPIN Pin;
PKSSTREAM_POINTER StreamPointer;
PKSPROCESSPIN InPlaceCounterpart;
PKSPROCESSPIN DelegateBranch;
PKSPROCESSPIN CopySource;
PVOID Data;
ULONG BytesAvailable;
ULONG BytesUsed;
ULONG Flags;
BOOLEAN Terminate;
};
typedef struct typedef struct
{ {
PKSPROCESSPIN* Pins; PKSPROCESSPIN* Pins;
ULONG Count; ULONG Count;
} KSPROCESSPIN_INDEXENTRY, *PKSPROCESSPIN_INDEXENTRY; } KSPROCESSPIN_INDEXENTRY, *PKSPROCESSPIN_INDEXENTRY;
#endif
/* =============================================================== /* ===============================================================
Device Dispatch Device Dispatch