59 DPRINT(
"CInterruptSync::QueryInterface: this %p\n",
this);
71 DPRINT1(
"CInterruptSync::QueryInterface: no interface!!! iface %S\n",
GuidString.Buffer);
90 DPRINT(
"CInterruptSynchronizedRoutine this %p SyncRoutine %p Context %p Status %x\n",
This,
This->m_SyncRoutine,
This->m_DynamicContext,
This->m_Status);
96CInterruptSync::CallSynchronizedRoutine(
102 DPRINT(
"CInterruptSync::CallSynchronizedRoutine this %p Routine %p DynamicContext %p Irql %x Interrupt %p\n",
this, Routine, DynamicContext,
KeGetCurrentIrql(),
m_Interrupt);
106 DPRINT(
"CInterruptSync_CallSynchronizedRoutine %p no interrupt connected\n",
this);
130CInterruptSync::GetKInterrupt()
132 DPRINT(
"CInterruptSynchronizedRoutine\n");
150 DPRINT(
"IInterruptServiceRoutine Mode %u\n",
This->m_Mode);
155 CurEntry =
This->m_ServiceRoutines.Flink;
156 while (CurEntry != &
This->m_ServiceRoutines)
166 CurEntry = CurEntry->
Flink;
172 CurEntry =
This->m_ServiceRoutines.Flink;
173 while (CurEntry != &
This->m_ServiceRoutines)
182 CurEntry = CurEntry->
Flink;
191 CurEntry =
This->m_ServiceRoutines.Flink;
192 while (CurEntry != &
This->m_ServiceRoutines)
202 CurEntry = CurEntry->
Flink;
216CInterruptSync::Connect()
221 DPRINT(
"CInterruptSync::Connect\n");
251CInterruptSync::Disconnect()
253 DPRINT(
"CInterruptSync::Disconnect\n");
258 DPRINT(
"CInterruptSync_Disconnect %p no interrupt connected\n",
this);
268CInterruptSync::RegisterServiceRoutine(
275 DPRINT(
"CInterruptSync::RegisterServiceRoutine\n");
305 DPRINT(
"PcNewInterruptSync entered OutInterruptSync %p OuterUnknown %p ResourceList %p ResourceIndex %u Mode %d\n",
318 Status =
This->QueryInterface(IID_IInterruptSync, (
PVOID*)OutInterruptSync);
332 This->m_ResourceIndex = ResourceIndex;
PRESOURCELIST m_ResourceList
LIST_ENTRY m_ServiceRoutines
CInterruptSync(IUnknown *OuterUnknown)
friend BOOLEAN NTAPI CInterruptSynchronizedRoutine(IN PVOID ServiceContext)
PINTERRUPTSYNCROUTINE m_SyncRoutine
friend BOOLEAN NTAPI IInterruptServiceRoutine(IN PKINTERRUPT Interrupt, IN PVOID ServiceContext)
virtual ~CInterruptSync()
STDMETHODIMP QueryInterface(REFIID InterfaceId, PVOID *Interface)
#define NT_SUCCESS(StatCode)
#define InsertTailList(ListHead, Entry)
#define InsertHeadList(ListHead, Entry)
#define IsListEmpty(ListHead)
#define KeReleaseSpinLock(sl, irql)
#define KeAcquireSpinLock(sl, irql)
#define KeGetCurrentIrql()
#define InitializeListHead(ListHead)
#define KeInitializeSpinLock(sl)
#define CmResourceTypeInterrupt
NTSYSAPI NTSTATUS WINAPI RtlStringFromGUID(REFGUID, PUNICODE_STRING)
struct SYNC_ENTRY * PSYNC_ENTRY
BOOLEAN NTAPI CInterruptSynchronizedRoutine(IN PVOID ServiceContext)
NTSTATUS NTAPI PcNewInterruptSync(OUT PINTERRUPTSYNC *OutInterruptSync, IN PUNKNOWN OuterUnknown OPTIONAL, IN PRESOURCELIST ResourceList, IN ULONG ResourceIndex, IN INTERRUPTSYNCMODE Mode)
BOOLEAN NTAPI IInterruptServiceRoutine(IN PKINTERRUPT Interrupt, IN PVOID ServiceContext)
PVOID AllocateItem(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes)
#define CM_RESOURCE_INTERRUPT_LATCHED
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
VOID NTAPI IoDisconnectInterrupt(PKINTERRUPT InterruptObject)
NTSTATUS NTAPI IoConnectInterrupt(OUT PKINTERRUPT *InterruptObject, IN PKSERVICE_ROUTINE ServiceRoutine, IN PVOID ServiceContext, IN PKSPIN_LOCK SpinLock, IN ULONG Vector, IN KIRQL Irql, IN KIRQL SynchronizeIrql, IN KINTERRUPT_MODE InterruptMode, IN BOOLEAN ShareVector, IN KAFFINITY ProcessorEnableMask, IN BOOLEAN FloatingSave)
BOOLEAN NTAPI KeSynchronizeExecution(IN OUT PKINTERRUPT Interrupt, IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine, IN PVOID SynchronizeContext OPTIONAL)
IInterruptSync * PINTERRUPTSYNC
IResourceList * PRESOURCELIST
NTSTATUS(NTAPI * PINTERRUPTSYNCROUTINE)(IN struct IInterruptSync *InterruptSync, IN PVOID DynamicContext)
@ InterruptSyncModeNormal
@ InterruptSyncModeRepeat
#define PC_ASSERT_IRQL_EQUAL(x)
enum _KINTERRUPT_MODE KINTERRUPT_MODE
PULONG MinorVersion OPTIONAL
base of all file and directory entries
PINTERRUPTSYNCROUTINE SyncRoutine
struct _LIST_ENTRY * Flink
#define CONTAINING_RECORD(address, type, field)
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
#define STATUS_INSUFFICIENT_RESOURCES
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE Interface
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_INTERRUPT_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFINTERRUPT * Interrupt
_Must_inspect_result_ _In_ WDFIORESREQLIST _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFIORESLIST * ResourceList
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
#define IsEqualGUIDAligned(guid1, guid2)
@ CmResourceShareDeviceExclusive
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID ServiceContext
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql