📄 portcls.h
字号:
( THIS
) PURE;
STDMETHOD(WaitForTC)
( THIS_
ULONG Timeout
) PURE;
};
typedef IDmaChannelSlave *PDMACHANNELSLAVE;
#ifdef PC_IMPLEMENTATION
#define IMP_IDmaChannelSlave\
IMP_IDmaChannel;\
STDMETHODIMP Start\
( IN ULONG MapSize,\
IN BOOLEAN WriteToDevice\
);\
STDMETHODIMP Stop\
( void\
);\
STDMETHODIMP_(ULONG) ReadCounter\
( void\
);\
STDMETHODIMP WaitForTC\
( ULONG Timeout\
)
#endif
/*****************************************************************************
* INTERRUPTSYNCMODE
*****************************************************************************
* Interrupt sync mode of operation.
*/
typedef enum
{
InterruptSyncModeNormal = 1, // One pass, stop when successful.
InterruptSyncModeAll, // One pass regardless of success.
InterruptSyncModeRepeat // Repeat until all return unsuccessful.
} INTERRUPTSYNCMODE;
/*****************************************************************************
* PINTERRUPTSYNCROUTINE
*****************************************************************************
* Pointer to an interrupt synchronization routine. Both interrupt service
* routines and routines that are synchronized with ISRs use this type.
*/
typedef NTSTATUS
(*PINTERRUPTSYNCROUTINE)
(
IN struct IInterruptSync * InterruptSync,
IN PVOID DynamicContext
);
/*****************************************************************************
* IInterruptSync
*****************************************************************************
* Interface for objects providing access synchronization with interrupts.
*/
DECLARE_INTERFACE_(IInterruptSync,IUnknown)
{
STDMETHOD(CallSynchronizedRoutine)
( THIS_
IN PINTERRUPTSYNCROUTINE Routine,
IN PVOID DynamicContext
) PURE;
STDMETHOD_(PKINTERRUPT,GetKInterrupt)
( THIS
) PURE;
STDMETHOD(Connect)
( THIS
) PURE;
STDMETHOD_(void,Disconnect)
( THIS
) PURE;
STDMETHOD(RegisterServiceRoutine)
( THIS_
IN PINTERRUPTSYNCROUTINE Routine,
IN PVOID DynamicContext,
IN BOOLEAN First
) PURE;
};
typedef IInterruptSync *PINTERRUPTSYNC;
#ifdef PC_IMPLEMENTATION
#define IMP_IInterruptSync\
STDMETHODIMP CallSynchronizedRoutine\
( IN PINTERRUPTSYNCROUTINE Routine,\
IN PVOID DynamicContext\
);\
STDMETHODIMP_(PKINTERRUPT) GetKInterrupt\
( void\
);\
STDMETHODIMP Connect\
( void\
);\
STDMETHODIMP_(void) Disconnect\
( void\
);\
STDMETHODIMP RegisterServiceRoutine\
( IN PINTERRUPTSYNCROUTINE Routine,\
IN PVOID DynamicContext,\
IN BOOLEAN First\
)
#endif
/*****************************************************************************
* IServiceSink
*****************************************************************************
* Interface for notification sinks for service groups.
*/
DECLARE_INTERFACE_(IServiceSink,IUnknown)
{
STDMETHOD_(void,RequestService)
( THIS
) PURE;
};
typedef IServiceSink *PSERVICESINK;
#ifdef PC_IMPLEMENTATION
#define IMP_IServiceSink\
STDMETHODIMP_(void) RequestService\
( void\
)
#endif
/*****************************************************************************
* IServiceGroup
*****************************************************************************
* Interface for objects representing a group that is serviced collectively.
*/
DECLARE_INTERFACE_(IServiceGroup,IServiceSink)
{
STDMETHOD(AddMember)
( THIS_
IN PSERVICESINK pServiceSink
) PURE;
STDMETHOD_(void,RemoveMember)
( THIS_
IN PSERVICESINK pServiceSink
) PURE;
STDMETHOD_(void,SupportDelayedService)
( THIS
) PURE;
STDMETHOD_(void,RequestDelayedService)
( THIS_
IN ULONGLONG ullDelay
) PURE;
STDMETHOD_(void,CancelDelayedService)
( THIS
) PURE;
};
typedef IServiceGroup *PSERVICEGROUP;
#ifdef PC_IMPLEMENTATION
#define IMP_IServiceGroup\
IMP_IServiceSink;\
STDMETHODIMP AddMember\
( IN PSERVICESINK pServiceSink\
);\
STDMETHODIMP_(void) RemoveMember\
( IN PSERVICESINK pServiceSink\
);\
STDMETHODIMP_(void) SupportDelayedService\
( void\
);\
STDMETHODIMP_(void) RequestDelayedService\
( IN ULONGLONG ullDelay\
);\
STDMETHODIMP_(void) CancelDelayedService\
( void\
)
#endif
/*****************************************************************************
* IRegistryKey
*****************************************************************************
* Interface for objects providing access to a registry key.
*/
DECLARE_INTERFACE_(IRegistryKey,IUnknown)
{
STDMETHOD(QueryKey)
( THIS_
IN KEY_INFORMATION_CLASS KeyInformationClass,
OUT PVOID KeyInformation,
IN ULONG Length,
OUT PULONG ResultLength
) PURE;
STDMETHOD(EnumerateKey)
( THIS_
IN ULONG Index,
IN KEY_INFORMATION_CLASS KeyInformationClass,
OUT PVOID KeyInformation,
IN ULONG Length,
OUT PULONG ResultLength
) PURE;
STDMETHOD(QueryValueKey)
( THIS_
IN PUNICODE_STRING ValueName,
IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
OUT PVOID KeyValueInformation,
IN ULONG Length,
OUT PULONG ResultLength
) PURE;
STDMETHOD(EnumerateValueKey)
( THIS_
IN ULONG Index,
IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
OUT PVOID KeyValueInformation,
IN ULONG Length,
OUT PULONG ResultLength
) PURE;
STDMETHOD(SetValueKey)
( THIS_
IN PUNICODE_STRING ValueName OPTIONAL,
IN ULONG Type,
IN PVOID Data,
IN ULONG DataSize
) PURE;
STDMETHOD(QueryRegistryValues)
( THIS_
IN PRTL_QUERY_REGISTRY_TABLE QueryTable,
IN PVOID Context OPTIONAL
) PURE;
STDMETHOD(NewSubKey)
( THIS_
OUT IRegistryKey ** RegistrySubKey,
IN PUNKNOWN OuterUnknown,
IN ACCESS_MASK DesiredAccess,
IN PUNICODE_STRING SubKeyName,
IN ULONG CreateOptions,
OUT PULONG Disposition OPTIONAL
) PURE;
STDMETHOD(DeleteKey)
( THIS
) PURE;
};
typedef IRegistryKey *PREGISTRYKEY;
#ifdef PC_IMPLEMENTATION
#define IMP_IRegistryKey\
STDMETHODIMP QueryKey\
( IN KEY_INFORMATION_CLASS KeyInformationClass,\
OUT PVOID KeyInformation,\
IN ULONG Length,\
OUT PULONG ResultLength\
);\
STDMETHODIMP EnumerateKey\
( IN ULONG Index,\
IN KEY_INFORMATION_CLASS KeyInformationClass,\
OUT PVOID KeyInformation,\
IN ULONG Length,\
OUT PULONG ResultLength\
);\
STDMETHODIMP QueryValueKey\
( IN PUNICODE_STRING ValueName,\
IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,\
OUT PVOID KeyValueInformation,\
IN ULONG Length,\
OUT PULONG ResultLength\
);\
STDMETHODIMP EnumerateValueKey\
( IN ULONG Index,\
IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,\
OUT PVOID KeyValueInformation,\
IN ULONG Length,\
OUT PULONG ResultLength\
);\
STDMETHODIMP SetValueKey\
( IN PUNICODE_STRING ValueName OPTIONAL,\
IN ULONG Type,\
IN PVOID Data,\
IN ULONG DataSize\
);\
STDMETHODIMP QueryRegistryValues\
( IN PRTL_QUERY_REGISTRY_TABLE QueryTable,\
IN PVOID Context OPTIONAL\
);\
STDMETHODIMP NewSubKey\
( OUT IRegistryKey ** RegistrySubKey,\
IN PUNKNOWN OuterUnknown,\
IN ACCESS_MASK DesiredAccess,\
IN PUNICODE_STRING SubKeyName,\
IN ULONG CreateOptions,\
OUT PULONG Disposition OPTIONAL\
);\
STDMETHODIMP DeleteKey\
( void\
)
#endif
typedef struct _PCPROPERTY_REQUEST PCPROPERTY_REQUEST, *PPCPROPERTY_REQUEST;
typedef struct _PCMETHOD_REQUEST PCMETHOD_REQUEST, *PPCMETHOD_REQUEST;
typedef struct _PCEVENT_REQUEST PCEVENT_REQUEST, *PPCEVENT_REQUEST;
/*****************************************************************************
* PCPFNPROPERTY_HANDLER
*****************************************************************************
* Property handler function prototype.
*
* All property accesses and support queries for a given property on a given
* filter, pin or node are routed to a single handler. The parameter contains
* complete information regarding the request. The handler may return
* STATUS_PENDING, in which case it must eventually call
* PcCompletePendingPropertyRequest() to complete the request.
*/
typedef
NTSTATUS
(*PCPFNPROPERTY_HANDLER)
(
IN PPCPROPERTY_REQUEST PropertyRequest
);
/*****************************************************************************
* PCPFNMETHOD_HANDLER
*****************************************************************************
* Method handler function prototype.
*
* All method calls and support queries for a given method on a given filter,
* pin or node are routed to a single handler. The parameter contains
* complete information regarding the request. The handler may return
* STATUS_PENDING, in which case it must eventually call
* PcCompletePendingMethodRequest() to complete the request.
*/
typedef
NTSTATUS
(*PCPFNMETHOD_HANDLER)
(
IN PPCMETHOD_REQUEST MethodRequest
);
/*****************************************************************************
* PCPFNEVENT_HANDLER
*****************************************************************************
* Event handler function prototype.
*
* All event add and remove requests and all event support queries for a
* given event on a given filter, pin or node are routed to a single handler.
* The parameter contains complete information regarding the request. The
* handler may return STATUS_PENDING, in which case it must eventually call
* PcCompletePendingEventRequest() to complete the request.
*/
typedef
NTSTATUS
(*PCPFNEVENT_HANDLER)
(
IN PPCEVENT_REQUEST EventRequest
);
/*****************************************************************************
* PCPROPERTY_ITEM
*****************************************************************************
* Property table entry.
*
* A property item describes a property supported by a given filter, pin or
* node. The flags indicate what operations regarding the property are
* supported and specify selected options with respect to the port's handling
* of property requests.
*/
typedef struct
{
const GUID * Set;
ULONG Id;
ULONG Flags;
#define PCPROPERTY_ITEM_FLAG_GET KSPROPERTY_TYPE_GET
#define PCPROPERTY_ITEM_FLAG_SET KSPROPERTY_TYPE_SET
#define PCPROPERTY_ITEM_FLAG_BASICSUPPORT KSPROPERTY_TYPE_BASICSUPPORT
//not supported #define PCPROPERTY_ITEM_FLAG_RELATIONS KSPROPERTY_TYPE_RELATIONS
#define PCPROPERTY_ITEM_FLAG_SERIALIZERAW KSPROPERTY_TYPE_SERIALIZERAW
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -