Leaked source code of windows server 2003
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.
 
 
 
 
 
 

224 lines
5.6 KiB

/*++
Copyright (c) 1998-2000 Microsoft Corporation. All rights reserved.
Module Name:
ksshellp.h
Abstract:
Internal header file for KSShell for PortCls
--*/
#if !defined( _KSSHELLP_ )
#define _KSSHELLP_
#ifdef __cplusplus
extern "C" {
#endif
#include "ks.h"
#undef INTERFACE
#ifndef KsShellStandardConnect
#define KsShellStandardConnect KspShellStandardConnect
#endif // !KsShellStandardConnect
#ifndef KsShellTransferKsIrp
#define KsShellTransferKsIrp KspShellTransferKsIrp
#endif // !KsShellTransferKsIrp
typedef interface IKsShellTransport *PIKSSHELLTRANSPORT;
typedef struct {
LIST_ENTRY ListEntry;
KSPIN_LOCK SpinLock;
} INTERLOCKEDLIST_HEAD, *PINTERLOCKEDLIST_HEAD;
#define InitializeInterlockedListHead(h) \
InitializeListHead(&(h)->ListEntry); \
KeInitializeSpinLock(&(h)->SpinLock)
#define KsInitializeWorkSinkItem(WorkItem,Object)\
ExInitializeWorkItem(\
WorkItem,\
KsWorkSinkItemWorker,\
static_cast<PIKSWORKSINK>(Object));
#undef INTERFACE
#define INTERFACE IKsShellTransport
DECLARE_INTERFACE_(IKsShellTransport,IUnknown)
{
DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
STDMETHOD_(NTSTATUS,TransferKsIrp)(THIS_
IN PIRP Irp,
OUT PIKSSHELLTRANSPORT* NextTransport
) PURE;
STDMETHOD_(void,Connect)(THIS_
IN PIKSSHELLTRANSPORT NewTransport OPTIONAL,
OUT PIKSSHELLTRANSPORT *OldTransport OPTIONAL,
IN KSPIN_DATAFLOW DataFlow
) PURE;
STDMETHOD_(NTSTATUS,SetDeviceState)(THIS_
IN KSSTATE NewState,
IN KSSTATE OldState,
OUT PIKSSHELLTRANSPORT* NextTransport
) PURE;
STDMETHOD_(void,SetResetState)(THIS_
IN KSRESET ksReset,
OUT PIKSSHELLTRANSPORT* NextTransport
) PURE;
#if DBG
STDMETHOD_(void,DbgRollCall)(THIS_
IN ULONG NameMaxSize,
OUT PCHAR Name,
OUT PIKSSHELLTRANSPORT* NextTransport,
OUT PIKSSHELLTRANSPORT* PrevTransport
) PURE;
#endif
};
#undef INTERFACE
#if DBG
#define IMP_IKsShellTransport\
STDMETHODIMP_(NTSTATUS)\
TransferKsIrp(\
IN PIRP pIrp,\
OUT PIKSSHELLTRANSPORT* NextTransport\
);\
STDMETHODIMP_(void)\
Connect(\
IN PIKSSHELLTRANSPORT NewTransport OPTIONAL,\
OUT PIKSSHELLTRANSPORT *OldTransport OPTIONAL,\
IN KSPIN_DATAFLOW DataFlow\
);\
STDMETHODIMP_(NTSTATUS)\
SetDeviceState(\
IN KSSTATE NewState,\
IN KSSTATE OldState,\
OUT PIKSSHELLTRANSPORT* NextTransport\
);\
STDMETHODIMP_(void)\
SetResetState(\
IN KSRESET ksReset,\
OUT PIKSSHELLTRANSPORT* NextTransport\
);\
STDMETHODIMP_(void)\
DbgRollCall(\
IN ULONG NameMaxSize,\
OUT PCHAR Name,\
OUT PIKSSHELLTRANSPORT* NextTransport,\
OUT PIKSSHELLTRANSPORT* PrevTransport\
)
#else
#define IMP_IKsShellTransport\
STDMETHODIMP_(NTSTATUS)\
TransferKsIrp(\
IN PIRP pIrp,\
OUT PIKSSHELLTRANSPORT* NextTransport\
);\
STDMETHODIMP_(void)\
Connect(\
IN PIKSSHELLTRANSPORT NewTransport OPTIONAL,\
OUT PIKSSHELLTRANSPORT *OldTransport OPTIONAL,\
IN KSPIN_DATAFLOW DataFlow\
);\
STDMETHODIMP_(NTSTATUS)\
SetDeviceState(\
IN KSSTATE NewState,\
IN KSSTATE OldState,\
OUT PIKSSHELLTRANSPORT* NextTransport\
);\
STDMETHODIMP_(void)\
SetResetState(\
IN KSRESET ksReset,\
OUT PIKSSHELLTRANSPORT* NextTransport\
)
#endif
#undef INTERFACE
#define INTERFACE IKsWorkSink
DECLARE_INTERFACE_(IKsWorkSink,IUnknown)
{
DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
STDMETHOD_(void,Work)(THIS
) PURE;
};
#undef INTERFACE
typedef IKsWorkSink *PIKSWORKSINK;
#define IMP_IKsWorkSink\
STDMETHODIMP_(void)\
Work(\
void\
)
DEFINE_GUID(IID_IKsShellTransport,
0x3ef6ee40, 0xd41, 0x11d2, 0xbe, 0xda, 0x0, 0xc0, 0x4f, 0x8e, 0xf4, 0x57);
#if defined(__cplusplus) && _MSC_VER >= 1100
struct __declspec(uuid("3EF6EE40-0D41-11d2-BEDA-00C04F8EF457")) IKsShellTransport;
#endif
DEFINE_GUID(IID_IKsWorkSink,
0x3ef6ee4f, 0xd41, 0x11d2, 0xbe, 0xda, 0x0, 0xc0, 0x4f, 0x8e, 0xf4, 0x57);
#if defined(__cplusplus) && _MSC_VER >= 1100
struct __declspec(uuid("3EF6EE4F-0D41-11d2-BEDA-00C04F8EF457")) IKsWorkSink;
#endif
#define KSPSHELL_BACKCONNECT KSPIN_DATAFLOW(0x80)
#define KSPSHELL_BACKCONNECT_IN KSPIN_DATAFLOW(KSPIN_DATAFLOW_IN | KSPSHELL_BACKCONNECT)
#define KSPSHELL_BACKCONNECT_OUT KSPIN_DATAFLOW(KSPIN_DATAFLOW_OUT | KSPSHELL_BACKCONNECT)
NTSTATUS
KspShellCreateRequestor(
OUT PIKSSHELLTRANSPORT* TransportInterface,
IN ULONG ProbeFlags,
IN ULONG StreamHeaderSize OPTIONAL,
IN ULONG FrameSize,
IN ULONG FrameCount,
IN PDEVICE_OBJECT NextDeviceObject,
IN PFILE_OBJECT AllocatorFileObject OPTIONAL
);
#if DBG
void
DbgPrintCircuit(
IN PIKSSHELLTRANSPORT Transport
);
#endif
void
KspShellStandardConnect(
IN PIKSSHELLTRANSPORT NewTransport OPTIONAL,
IN PIKSSHELLTRANSPORT *OldTransport OPTIONAL,
IN KSPIN_DATAFLOW DataFlow,
IN PIKSSHELLTRANSPORT ThisTransport,
IN PIKSSHELLTRANSPORT* SourceTransport,
IN PIKSSHELLTRANSPORT* SinkTransport
);
NTSTATUS
KspShellTransferKsIrp(
IN PIKSSHELLTRANSPORT NewTransport,
IN PIRP Irp
);
void
KsWorkSinkItemWorker(
IN PVOID Context
);
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // _KSSHELLP_