ReactOS 0.4.15-dev-6679-g945ee4b
CInterruptSync Class Reference
Inheritance diagram for CInterruptSync:
Collaboration diagram for CInterruptSync:

Public Member Functions

STDMETHODIMP QueryInterface (REFIID InterfaceId, PVOID *Interface)
 
 CInterruptSync (IUnknown *OuterUnknown)
 
virtual ~CInterruptSync ()
 
- Public Member Functions inherited from CUnknownImpl< IInterruptSync >
 STDMETHODIMP_ (ULONG) AddRef()
 
 STDMETHODIMP_ (ULONG) Release()
 

Public Attributes

 IMP_IInterruptSync
 
KSPIN_LOCK m_Lock
 
LIST_ENTRY m_ServiceRoutines
 
PKINTERRUPT m_Interrupt
 
INTERRUPTSYNCMODE m_Mode
 
PRESOURCELIST m_ResourceList
 
ULONG m_ResourceIndex
 
PINTERRUPTSYNCROUTINE m_SyncRoutine
 
PVOID m_DynamicContext
 
NTSTATUS m_Status
 

Friends

BOOLEAN NTAPI CInterruptSynchronizedRoutine (IN PVOID ServiceContext)
 
BOOLEAN NTAPI IInterruptServiceRoutine (IN PKINTERRUPT Interrupt, IN PVOID ServiceContext)
 

Additional Inherited Members

- Protected Member Functions inherited from CUnknownImpl< IInterruptSync >
 CUnknownImpl ()
 
virtual ~CUnknownImpl ()
 

Detailed Description

Definition at line 24 of file interrupt.cpp.

Constructor & Destructor Documentation

◆ CInterruptSync()

CInterruptSync::CInterruptSync ( IUnknown OuterUnknown)
inline

Definition at line 30 of file interrupt.cpp.

30{}

◆ ~CInterruptSync()

virtual CInterruptSync::~CInterruptSync ( )
inlinevirtual

Definition at line 31 of file interrupt.cpp.

31{}

Member Function Documentation

◆ QueryInterface()

NTSTATUS NTAPI CInterruptSync::QueryInterface ( REFIID  InterfaceId,
PVOID Interface 
)

Definition at line 59 of file interrupt.cpp.

62{
64
65 DPRINT("CInterruptSync::QueryInterface: this %p\n", this);
66
67 if (IsEqualGUIDAligned(refiid, IID_IInterruptSync) ||
69 {
70 *Output = PVOID(PUNKNOWN(this));
71 PUNKNOWN(*Output)->AddRef();
72 return STATUS_SUCCESS;
73 }
74
75
77 {
78 DPRINT1("CInterruptSync::QueryInterface: no interface!!! iface %S\n", GuidString.Buffer);
80 }
81
83}
#define DPRINT1
Definition: precomp.h:8
const GUID IID_IUnknown
IUnknown * PUNKNOWN
Definition: com_apitest.h:45
NTSYSAPI NTSTATUS WINAPI RtlStringFromGUID(REFGUID, PUNICODE_STRING)
ULONG AddRef()
static PWSTR GuidString
Definition: apphelp.c:93
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
@ Output
Definition: arc.h:85
#define STATUS_SUCCESS
Definition: shellext.h:65
#define DPRINT
Definition: sndvol32.h:71
void * PVOID
Definition: typedefs.h:50
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
#define IsEqualGUIDAligned(guid1, guid2)
Definition: wdm.template.h:235

Friends And Related Function Documentation

◆ CInterruptSynchronizedRoutine

BOOLEAN NTAPI CInterruptSynchronizedRoutine ( IN PVOID  ServiceContext)
friend

Definition at line 92 of file interrupt.cpp.

94{
96 This->m_Status = This->m_SyncRoutine(This, This->m_DynamicContext);
97
98 DPRINT("CInterruptSynchronizedRoutine this %p SyncRoutine %p Context %p Status %x\n", This, This->m_SyncRoutine, This->m_DynamicContext, This->m_Status);
99 return TRUE;
100}
#define TRUE
Definition: types.h:120
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID ServiceContext
Definition: iofuncs.h:801

◆ IInterruptServiceRoutine

BOOLEAN NTAPI IInterruptServiceRoutine ( IN PKINTERRUPT  Interrupt,
IN PVOID  ServiceContext 
)
friend

Definition at line 147 of file interrupt.cpp.

150{
151 PLIST_ENTRY CurEntry;
154 BOOL Success, Ret;
155
157
158 DPRINT("IInterruptServiceRoutine Mode %u\n", This->m_Mode);
159
160 Ret = FALSE;
161 if (This->m_Mode == InterruptSyncModeNormal)
162 {
163 CurEntry = This->m_ServiceRoutines.Flink;
164 while (CurEntry != &This->m_ServiceRoutines)
165 {
166 Entry = CONTAINING_RECORD(CurEntry, SYNC_ENTRY, ListEntry);
167 Status = Entry->SyncRoutine((CInterruptSync*)This, Entry->DynamicContext);
168 if (Status == STATUS_SUCCESS)
169 {
170 /* Mark as handled and break on the first success */
171 Ret = TRUE;
172 break;
173 }
174 CurEntry = CurEntry->Flink;
175 }
176 return Ret;
177 }
178 else if (This->m_Mode == InterruptSyncModeAll)
179 {
180 CurEntry = This->m_ServiceRoutines.Flink;
181 while (CurEntry != &This->m_ServiceRoutines)
182 {
183 Entry = CONTAINING_RECORD(CurEntry, SYNC_ENTRY, ListEntry);
184 Status = Entry->SyncRoutine((CInterruptSync*)This, Entry->DynamicContext);
185 if (Status == STATUS_SUCCESS)
186 {
187 /* Mark as handled but don't break */
188 Ret = TRUE;
189 }
190 CurEntry = CurEntry->Flink;
191 }
192 return Ret;
193 }
194 else if (This->m_Mode == InterruptSyncModeRepeat)
195 {
196 do
197 {
198 Success = FALSE;
199 CurEntry = This->m_ServiceRoutines.Flink;
200 while (CurEntry != &This->m_ServiceRoutines)
201 {
202 Entry = CONTAINING_RECORD(CurEntry, SYNC_ENTRY, ListEntry);
203 Status = Entry->SyncRoutine((CInterruptSync*)This, Entry->DynamicContext);
204 if (Status == STATUS_SUCCESS)
205 {
206 /* Mark as handled if it works at least once */
207 Success = TRUE;
208 Ret = TRUE;
209 }
210 CurEntry = CurEntry->Flink;
211 }
212 } while(Success);
213 return Ret;
214 }
215 else
216 {
217 DPRINT("Unknown mode %u\n", This->m_Mode);
218 return Ret;
219 }
220}
LONG NTSTATUS
Definition: precomp.h:26
#define FALSE
Definition: types.h:117
@ Success
Definition: eventcreate.c:712
unsigned int BOOL
Definition: ntddk_ex.h:94
Status
Definition: gdiplustypes.h:25
@ InterruptSyncModeAll
Definition: portcls.h:841
@ InterruptSyncModeNormal
Definition: portcls.h:840
@ InterruptSyncModeRepeat
Definition: portcls.h:842
base of all file and directory entries
Definition: entries.h:83
Definition: interrupt.cpp:18
Definition: typedefs.h:120
struct _LIST_ENTRY * Flink
Definition: typedefs.h:121
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Member Data Documentation

◆ IMP_IInterruptSync

CInterruptSync::IMP_IInterruptSync

Definition at line 29 of file interrupt.cpp.

◆ m_DynamicContext

PVOID CInterruptSync::m_DynamicContext

Definition at line 43 of file interrupt.cpp.

◆ m_Interrupt

PKINTERRUPT CInterruptSync::m_Interrupt

Definition at line 37 of file interrupt.cpp.

◆ m_Lock

KSPIN_LOCK CInterruptSync::m_Lock

Definition at line 35 of file interrupt.cpp.

◆ m_Mode

INTERRUPTSYNCMODE CInterruptSync::m_Mode

Definition at line 38 of file interrupt.cpp.

◆ m_ResourceIndex

ULONG CInterruptSync::m_ResourceIndex

Definition at line 40 of file interrupt.cpp.

◆ m_ResourceList

PRESOURCELIST CInterruptSync::m_ResourceList

Definition at line 39 of file interrupt.cpp.

◆ m_ServiceRoutines

LIST_ENTRY CInterruptSync::m_ServiceRoutines

Definition at line 36 of file interrupt.cpp.

◆ m_Status

NTSTATUS CInterruptSync::m_Status

Definition at line 44 of file interrupt.cpp.

◆ m_SyncRoutine

PINTERRUPTSYNCROUTINE CInterruptSync::m_SyncRoutine

Definition at line 42 of file interrupt.cpp.


The documentation for this class was generated from the following file: