ReactOS  0.4.14-dev-854-gb9426a3
pin_dmus.cpp
Go to the documentation of this file.
1 /*
2  * COPYRIGHT: See COPYING in the top level directory
3  * PROJECT: ReactOS Kernel Streaming
4  * FILE: drivers/wdm/audio/backpln/portcls/pin_dmus.cpp
5  * PURPOSE: DMus IRP Audio Pin
6  * PROGRAMMER: Johannes Anderwald
7  */
8 
9 #include "private.hpp"
10 
11 #ifndef YDEBUG
12 #define NDEBUG
13 #endif
14 
15 #include <debug.h>
16 
17 class CPortPinDMus : public IPortPinDMus
18 {
19 public:
21 
23  {
25  return m_Ref;
26  }
28  {
30 
31  if (!m_Ref)
32  {
33  delete this;
34  return 0;
35  }
36  return m_Ref;
37  }
42 
43  CPortPinDMus(IUnknown * OuterUnknown){}
44  virtual ~CPortPinDMus(){}
45 
46 protected:
49 
50  IPortDMus * m_Port;
51  IPortFilterDMus * m_Filter;
52  KSPIN_DESCRIPTOR * m_KsPinDescriptor;
54 
56 
61 
64 
65 
69 
72  IIrpQueue * m_IrpQueue;
73 
77 
79 
81 };
82 
83 typedef struct
84 {
88 
89 typedef struct
90 {
95 
96 //==================================================================================================================================
98 NTAPI
100 {
102  return STATUS_SUCCESS;
103 }
104 
105 //==================================================================================================================================
106 NTSTATUS
107 NTAPI
109  OUT PDMUS_KERNEL_EVENT * ppDMKEvt)
110 {
111  PVOID Buffer;
112 
113  Buffer = ExAllocateFromNPagedLookasideList(&m_LookAsideEvent);
114  if (!Buffer)
116 
117  *ppDMKEvt = (PDMUS_KERNEL_EVENT)Buffer;
119  return STATUS_SUCCESS;
120 }
121 
122 USHORT
123 NTAPI
124 CPortPinDMus::GetBufferSize()
125 {
126  return PAGE_SIZE;
127 }
128 
129 NTSTATUS
130 NTAPI
131 CPortPinDMus::GetBuffer(
132  OUT PBYTE * ppBuffer)
133 {
134  PVOID Buffer;
135 
136  Buffer = ExAllocateFromNPagedLookasideList(&m_LookAsideBuffer);
137  if (!Buffer)
139 
140  *ppBuffer = (PBYTE)Buffer;
142  return STATUS_SUCCESS;
143 }
144 
145 
146 NTSTATUS
147 NTAPI
148 CPortPinDMus::PutBuffer(
149  IN PBYTE pBuffer)
150 {
152 
153  m_IrpQueue->ReleaseMappingWithTag(Event->Tag);
154 
155  ExFreeToNPagedLookasideList(&m_LookAsideBuffer, pBuffer);
156  return STATUS_SUCCESS;
157 }
158 
159 NTSTATUS
160 NTAPI
161 CPortPinDMus::SetState(
162  IN KSSTATE State)
163 {
165  return STATUS_NOT_IMPLEMENTED;
166 }
167 
168 
169 NTSTATUS
170 NTAPI
171 CPortPinDMus::PutMessage(
172  IN PDMUS_KERNEL_EVENT pDMKEvt)
173 {
174  ExFreeToNPagedLookasideList(&m_LookAsideEvent, pDMKEvt);
175  return STATUS_SUCCESS;
176 }
177 
178 
179 NTSTATUS
180 NTAPI
181 CPortPinDMus::ConnectOutput(
182  IN PMXF sinkMXF)
183 {
185  return STATUS_NOT_IMPLEMENTED;
186 }
187 
188 
189 NTSTATUS
190 NTAPI
191 CPortPinDMus::DisconnectOutput(
192  IN PMXF sinkMXF)
193 {
195  return STATUS_NOT_IMPLEMENTED;
196 }
197 
198 //==================================================================================================================================
199 
200 VOID
202 {
204  PUCHAR Buffer;
207 
208  do
209  {
210  Status = m_IrpQueue->GetMapping(&Buffer, &BufferSize);
211  if (!NT_SUCCESS(Status))
212  {
213  return;
214  }
215 
216  if (m_Capture)
217  {
219  if (!NT_SUCCESS(Status))
220  {
221  DPRINT("Read failed with %x\n", Status);
222  return;
223  }
224  }
225  else
226  {
228  if (!NT_SUCCESS(Status))
229  {
230  DPRINT("Write failed with %x\n", Status);
231  return;
232  }
233  }
234 
235  if (!BytesWritten)
236  {
237  DPRINT("Device is busy retry later\n");
238  return;
239  }
240 
241  m_IrpQueue->UpdateMapping(BytesWritten);
242 
243  }while(TRUE);
244 
245 }
246 
247 VOID
249 {
253  PVOID Buffer;
255 
256  do
257  {
258  m_LastTag++;
260  if (!NT_SUCCESS(Status))
261  {
262  break;
263  }
264 
266  if (!NT_SUCCESS(Status))
267  break;
268 
269  //FIXME
270  //set up struct
271  //Event->Event.usFlags = DMUS_KEF_EVENT_COMPLETE;
272  Event->Event.cbStruct = sizeof(DMUS_KERNEL_EVENT);
273  Event->Event.cbEvent = (USHORT)BufferSize;
274  Event->Event.uData.pbData = (PBYTE)Buffer;
275 
276 
277  if (!Root)
278  Root = Event;
279  else
280  LastEvent->Event.pNextEvt = (struct _DMUS_KERNEL_EVENT *)Event;
281 
282  LastEvent = Event;
283  LastEvent->Event.pNextEvt = NULL;
284  LastEvent->Tag = UlongToPtr(m_LastTag);
285 
286  }while(TRUE);
287 
288  if (!Root)
289  {
290  return;
291  }
292 
293  Status = m_Mxf->PutMessage((PDMUS_KERNEL_EVENT)Root);
294  DPRINT("Status %x\n", Status);
295 }
296 
297 
298 
299 VOID
300 NTAPI
301 CPortPinDMus::RequestService()
302 {
304 
305  if (m_MidiStream)
306  {
308  }
309  else if (m_Mxf)
310  {
312  }
313 }
314 
315 //==================================================================================================================================
316 NTSTATUS
317 NTAPI
319  IN REFIID refiid,
320  OUT PVOID* Output)
321 {
322 
323  if (IsEqualGUIDAligned(refiid, IID_IIrpTarget) ||
325  {
326  *Output = PVOID(PUNKNOWN(this));
327  PUNKNOWN(*Output)->AddRef();
328  return STATUS_SUCCESS;
329  }
330 
331  return STATUS_UNSUCCESSFUL;
332 }
333 
334 NTSTATUS
335 NTAPI
336 CPortPinDMus::NewIrpTarget(
337  OUT struct IIrpTarget **OutTarget,
338  IN PCWSTR Name,
342  IN PIRP Irp,
343  IN KSOBJECT_CREATE *CreateObject)
344 {
346 
347  Irp->IoStatus.Information = 0;
348  Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
350 
351  return STATUS_UNSUCCESSFUL;
352 }
353 
354 NTSTATUS
355 NTAPI
358  IN PIRP Irp)
359 {
361 
362  Irp->IoStatus.Information = 0;
363  Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
365 
366  return STATUS_UNSUCCESSFUL;
367 }
368 
369 NTSTATUS
370 NTAPI
373  IN PIRP Irp)
374 {
376 }
377 
378 NTSTATUS
379 NTAPI
382  IN PIRP Irp)
383 {
385 }
386 
387 NTSTATUS
388 NTAPI
391  IN PIRP Irp)
392 {
394 }
395 
396 NTSTATUS
397 NTAPI
400  IN PIRP Irp)
401 {
403  ISubdevice * SubDevice;
405 
406  if (m_ServiceGroup)
407  {
408  m_ServiceGroup->RemoveMember(PSERVICESINK(this));
409  }
410 
411  if (m_MidiStream)
412  {
413  if (m_State != KSSTATE_STOP)
414  {
415  m_MidiStream->SetState(KSSTATE_STOP);
417  }
418  DPRINT("Closing stream at Irql %u\n", KeGetCurrentIrql());
419  m_MidiStream->Release();
420  }
421 
422  Status = m_Port->QueryInterface(IID_ISubdevice, (PVOID*)&SubDevice);
423  if (NT_SUCCESS(Status))
424  {
425  Status = SubDevice->GetDescriptor(&Descriptor);
426  if (NT_SUCCESS(Status))
427  {
428  // release reference count
429  Descriptor->Factory.Instances[m_ConnectDetails->PinId].CurrentPinInstanceCount--;
430  }
431  SubDevice->Release();
432  }
433 
434  if (m_Format)
435  {
437  m_Format = NULL;
438  }
439 
440  // complete the irp
441  Irp->IoStatus.Information = 0;
442  Irp->IoStatus.Status = STATUS_SUCCESS;
444 
445  // destroy DMus pin
446  m_Filter->FreePin(PPORTPINDMUS(this));
447 
448  return STATUS_SUCCESS;
449 }
450 
451 NTSTATUS
452 NTAPI
453 CPortPinDMus::QuerySecurity(
455  IN PIRP Irp)
456 {
458 }
459 
460 NTSTATUS
461 NTAPI
462 CPortPinDMus::SetSecurity(
464  IN PIRP Irp)
465 {
467 }
468 
469 BOOLEAN
470 NTAPI
471 CPortPinDMus::FastDeviceIoControl(
473  IN BOOLEAN Wait,
479  OUT PIO_STATUS_BLOCK StatusBlock,
481 {
482  return FALSE;
483 }
484 
485 BOOLEAN
486 NTAPI
487 CPortPinDMus::FastRead(
490  IN ULONG Length,
491  IN BOOLEAN Wait,
492  IN ULONG LockKey,
493  IN PVOID Buffer,
494  OUT PIO_STATUS_BLOCK StatusBlock,
496 {
497  return FALSE;
498 }
499 
500 BOOLEAN
501 NTAPI
502 CPortPinDMus::FastWrite(
505  IN ULONG Length,
506  IN BOOLEAN Wait,
507  IN ULONG LockKey,
508  IN PVOID Buffer,
509  OUT PIO_STATUS_BLOCK StatusBlock,
511 {
512  return FALSE;
513 }
514 
515 NTSTATUS
516 NTAPI
518  IN PPORTDMUS Port,
520  IN KSPIN_CONNECT * ConnectDetails,
521  IN KSPIN_DESCRIPTOR * KsPinDescriptor,
523 {
527 
528  Port->AddRef();
529  Filter->AddRef();
530 
531  m_Port = Port;
532  m_Filter = Filter;
533  m_KsPinDescriptor = KsPinDescriptor;
534  m_ConnectDetails = ConnectDetails;
536 
538 
539  DataFormat = (PKSDATAFORMAT)(ConnectDetails + 1);
540 
541  DPRINT("CPortPinDMus::Init entered\n");
542 
544  if (!m_Format)
546 
548 
549  if (KsPinDescriptor->Communication == KSPIN_COMMUNICATION_SINK && KsPinDescriptor->DataFlow == KSPIN_DATAFLOW_IN)
550  {
552  }
553  else if (KsPinDescriptor->Communication == KSPIN_COMMUNICATION_SINK && KsPinDescriptor->DataFlow == KSPIN_DATAFLOW_OUT)
554  {
556  }
557  else
558  {
559  DPRINT("Unexpected Communication %u DataFlow %u\n", KsPinDescriptor->Communication, KsPinDescriptor->DataFlow);
560  DbgBreakPoint();
561  while(TRUE);
562  }
563 
565  if (!NT_SUCCESS(Status))
566  {
567  DPRINT("Failed to allocate IrpQueue with %x\n", Status);
568  return Status;
569  }
570 
571  if (m_MidiMiniport)
572  {
573  Status = m_MidiMiniport->NewStream(&m_MidiStream, NULL, NonPagedPool, ConnectDetails->PinId, Type, m_Format, &m_ServiceGroup);
574 
575  DPRINT("CPortPinDMus::Init Status %x\n", Status);
576 
577  if (!NT_SUCCESS(Status))
578  return Status;
579  }
580  else
581  {
582  Status = m_Miniport->NewStream(&m_Mxf, NULL, NonPagedPool, ConnectDetails->PinId, Type, m_Format, &m_ServiceGroup, PAllocatorMXF(this), PMASTERCLOCK(this),&m_SchedulePreFetch);
583 
584  DPRINT("CPortPinDMus::Init Status %x\n", Status);
585 
586  if (!NT_SUCCESS(Status))
587  return Status;
588 
590  {
591  Status = m_Mxf->ConnectOutput(PMXF(this));
592  if (!NT_SUCCESS(Status))
593  {
594  DPRINT("IMXF_ConnectOutput failed with Status %x\n", Status);
595  return Status;
596  }
597  }
598 
601  }
602 
603  if (m_ServiceGroup)
604  {
605  Status = m_ServiceGroup->AddMember(PSERVICESINK(this));
606  if (!NT_SUCCESS(Status))
607  {
608  DPRINT("Failed to add pin to service group\n");
609  return Status;
610  }
611  }
612 
613  Status = m_IrpQueue->Init(ConnectDetails, KsPinDescriptor, 0, 0, FALSE);
614  if (!NT_SUCCESS(Status))
615  {
616  DPRINT("IrpQueue_Init failed with %x\n", Status);
617  return Status;
618  }
619 
621  m_Capture = Type;
622 
623  return STATUS_SUCCESS;
624 }
625 
626 VOID
627 NTAPI
629 {
630  m_ServiceGroup->RequestService();
631 }
632 
633 NTSTATUS
635  OUT IPortPinDMus ** OutPin)
636 {
637  CPortPinDMus * This;
638 
640  if (!This)
642 
643  This->AddRef();
644 
645  // store result
646  *OutPin = (IPortPinDMus*)This;
647 
648  return STATUS_SUCCESS;
649 }
650 
PIO_WORKITEM WorkItem
Definition: pin_dmus.cpp:92
#define KeGetCurrentIrql()
Definition: env_spec_w32.h:706
IServiceGroup * PSERVICEGROUP
Definition: portcls.h:614
BOOL WINAPI SHIM_OBJ_NAME() Notify(DWORD fdwReason, PVOID ptr)
CPPORT Port[4]
Definition: headless.c:34
const uint16_t * PCWSTR
Definition: typedefs.h:55
#define IN
Definition: typedefs.h:38
_In_ BOOLEAN Read
Definition: strmini.h:479
_Must_inspect_result_ _In_ PFILE_OBJECT _In_opt_ PLARGE_INTEGER _In_ ULONG _In_ FLT_IO_OPERATION_FLAGS _Out_opt_ PULONG BytesWritten
Definition: fltkernel.h:1293
#define REFIID
Definition: guiddef.h:118
#define TRUE
Definition: types.h:120
IPortFilterDMus * PPORTFILTERDMUS
Definition: interfaces.hpp:838
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST NPAGED_LOOKASIDE_LIST
_Must_inspect_result_ _In_ PFILE_OBJECT _In_ ULONG IoControlCode
Definition: fltkernel.h:1383
Type
Definition: Type.h:6
ULONG m_LastTag
Definition: pin_dmus.cpp:78
_In_ BOOLEAN Release
Definition: classpnp.h:929
#define STATUS_NOT_IMPLEMENTED
Definition: ntstatus.h:225
PKSDATAFORMAT m_Format
Definition: pin_dmus.cpp:67
_In_ PIRP Irp
Definition: csq.h:116
IUnknown * PUNKNOWN
Definition: com_apitest.h:45
IPortPinDMus * PPORTPINDMUS
Definition: interfaces.hpp:884
#define TAG_PORTCLASS
Definition: private.hpp:24
KSPIN_CONNECT * m_ConnectDetails
Definition: pin_dmus.cpp:68
unsigned char * PUCHAR
Definition: retypes.h:3
PVOID AllocateItem(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes)
Definition: misc.c:30
LONG NTSTATUS
Definition: precomp.h:26
struct _DMUS_KERNEL_EVENT * PDMUS_KERNEL_EVENT
ULONG m_PreCompleted
Definition: pin_dmus.cpp:75
_Must_inspect_result_ _In_ PFILE_OBJECT _In_ ULONG _In_ ULONG _In_ ULONG OutputBufferLength
Definition: fltkernel.h:1374
IServiceSink * PSERVICESINK
Definition: portcls.h:569
IPortDMus * PPORTDMUS
Definition: dmusicks.h:167
BOOL Init(PUSERCONNECT UserCon)
Definition: dllmain.c:385
STDMETHODIMP_(ULONG) Release()
Definition: pin_dmus.cpp:27
static BOOL Write(PBYTE Address, PBYTE Data, SIZE_T Size)
Definition: vmhorizon.c:15
void DbgBreakPoint()
Definition: mach.c:553
CHAR InputBuffer[80]
Definition: conmgr.c:33
#define RtlMoveMemory(Destination, Source, Length)
Definition: typedefs.h:263
struct _DMUS_KERNEL_EVENT * pNextEvt
Definition: dmusicks.h:20
IMasterClock * PMASTERCLOCK
Definition: dmusicks.h:51
CPortPinDMus(IUnknown *OuterUnknown)
Definition: pin_dmus.cpp:43
#define IsEqualGUIDAligned(guid1, guid2)
Definition: wdm.template.h:233
KSSTATE m_State
Definition: pin_dmus.cpp:66
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
struct IAllocatorMXF * PAllocatorMXF
Definition: dmusicks.h:107
VOID FreeItem(IN PVOID Item)
Definition: misc.c:43
IIrpQueue * m_IrpQueue
Definition: pin_dmus.cpp:72
ULONG PinId
Definition: ks.h:2603
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
long LONG
Definition: pedump.c:60
_Must_inspect_result_ _In_opt_ PFLT_FILTER Filter
Definition: fltkernel.h:1802
#define STDMETHODIMP
Definition: basetyps.h:43
_In_ PVOID _In_ ULONG Event
Definition: iotypes.h:435
unsigned char BOOLEAN
smooth NULL
Definition: ftsmooth.c:416
PVOID pBuffer
#define IoCompleteRequest
Definition: irp.c:1240
void DPRINT(...)
Definition: polytest.cpp:61
DMUS_STREAM_TYPE m_Capture
Definition: pin_dmus.cpp:70
Definition: bufpool.h:45
ULONGLONG m_SchedulePreFetch
Definition: pin_dmus.cpp:58
_Must_inspect_result_ __drv_aliasesMem _In_ PDEVICE_OBJECT _In_opt_ PVOID _In_ ULONG _Out_opt_ PVOID OutputBuffer
Definition: iofuncs.h:713
void * PVOID
Definition: retypes.h:9
_Inout_ PFILE_OBJECT FileObject
Definition: cdprocs.h:593
#define UlongToPtr(u)
Definition: config.h:106
VOID TransferMidiData()
Definition: pin_dmus.cpp:201
IN PLARGE_INTEGER IN ULONG IN BOOLEAN IN ULONG LockKey
Definition: fatprocs.h:2650
IN PVOID IN PVOID IN USHORT IN USHORT IN PINTERFACE Interface
Definition: pci.h:359
root entry for file system trees
Definition: entries.h:148
IPortDMus * m_Port
Definition: pin_dmus.cpp:50
KSDDKAPI NTSTATUS NTAPI KsDispatchInvalidDeviceRequest(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: irp.c:1156
CPortPinDMus * Pin
Definition: pin_dmus.cpp:91
VOID NTAPI ExInitializeNPagedLookasideList(IN PNPAGED_LOOKASIDE_LIST Lookaside, IN PALLOCATE_FUNCTION Allocate OPTIONAL, IN PFREE_FUNCTION Free OPTIONAL, IN ULONG Flags, IN SIZE_T Size, IN ULONG Tag, IN USHORT Depth)
Definition: lookas.c:222
PMINIPORTDMUS m_Miniport
Definition: pin_dmus.cpp:53
LONGLONG REFERENCE_TIME
Definition: dmusicks.h:9
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
PDEVICE_OBJECT m_DeviceObject
Definition: pin_dmus.cpp:71
PMINIPORTMIDISTREAM m_MidiStream
Definition: pin_dmus.cpp:63
INT POOL_TYPE
Definition: typedefs.h:76
uint64_t ULONGLONG
Definition: typedefs.h:65
const GUID IID_IUnknown
#define BufferSize
Definition: classpnp.h:419
nsrefcnt Release()
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:101
* PFILE_OBJECT
Definition: iotypes.h:1955
ULONG AddRef()
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS PhysicalAddress
Definition: iotypes.h:1061
IPortFilterDMus * m_Filter
Definition: pin_dmus.cpp:51
#define InterlockedDecrement
Definition: armddk.h:52
Definition: arc.h:85
#define PAGE_SIZE
Definition: env_spec_w32.h:49
KSPIN_DESCRIPTOR * m_KsPinDescriptor
Definition: pin_dmus.cpp:52
STDMETHODIMP_(ULONG) AddRef()
Definition: pin_dmus.cpp:22
_Must_inspect_result_ _In_ PFILE_OBJECT _In_ ULONG _In_ ULONG InputBufferLength
Definition: fltkernel.h:1372
Status
Definition: gdiplustypes.h:24
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
VOID GetDMusMiniport(IN IPortDMus *iface, IN PMINIPORTDMUS *Miniport, IN PMINIPORTMIDI *MidiMiniport)
Definition: port_dmus.cpp:533
STDMETHODIMP QueryInterface(REFIID InterfaceId, PVOID *Interface)
Definition: pin_dmus.cpp:318
IN PDEVICE_OBJECT DeviceObject
Definition: fatprocs.h:1560
ULONG m_PostCompleted
Definition: pin_dmus.cpp:76
PMINIPORTMIDI m_MidiMiniport
Definition: pin_dmus.cpp:62
BOOL WINAPI DeviceIoControl(IN HANDLE hDevice, IN DWORD dwIoControlCode, IN LPVOID lpInBuffer OPTIONAL, IN DWORD nInBufferSize OPTIONAL, OUT LPVOID lpOutBuffer OPTIONAL, IN DWORD nOutBufferSize OPTIONAL, OUT LPDWORD lpBytesReturned OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: deviceio.c:136
#define InterlockedIncrement
Definition: armddk.h:53
KSSTATE
Definition: ks.h:1214
NPAGED_LOOKASIDE_LIST m_LookAsideEvent
Definition: pin_dmus.cpp:59
Definition: sacdrv.h:267
ULONG m_TotalPackets
Definition: pin_dmus.cpp:74
unsigned short USHORT
Definition: pedump.c:61
IMiniportDMus * PMINIPORTDMUS
Definition: dmusicks.h:209
_In_ PFCB _In_ LONGLONG FileOffset
Definition: cdprocs.h:151
PSERVICEGROUP m_ServiceGroup
Definition: pin_dmus.cpp:55
IMiniportMidi * PMINIPORTMIDI
Definition: portcls.h:1366
#define GetMessage
Definition: winuser.h:5765
static ULONG WINAPI AddRef(IStream *iface)
Definition: clist.c:90
DMUS_KERNEL_EVENT Event
Definition: pin_dmus.cpp:85
struct DMUS_KERNEL_EVENT_WITH_TAG * PDMUS_KERNEL_EVENT_WITH_TAG
#define OUT
Definition: typedefs.h:39
struct SETSTREAM_CONTEXT * PSETSTREAM_CONTEXT
NPAGED_LOOKASIDE_LIST m_LookAsideBuffer
Definition: pin_dmus.cpp:60
NTSTATUS NewPortPinDMus(OUT IPortPinDMus **OutPin)
Definition: pin_dmus.cpp:634
virtual ~CPortPinDMus()
Definition: pin_dmus.cpp:44
#define GetTime(fmt)
Definition: lcformat.c:97
unsigned int ULONG
Definition: retypes.h:1
#define IO_NO_INCREMENT
Definition: iotypes.h:566
#define UNIMPLEMENTED
Definition: debug.h:114
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:261
NTSTATUS NTAPI NewIrpQueue(IN IIrpQueue **Queue)
Definition: irpstream.cpp:808
IN BOOLEAN OUT PSTR Buffer
Definition: progress.h:34
return STATUS_SUCCESS
Definition: btrfs.c:2938
struct IMXF * PMXF
Definition: dmusicks.h:68
struct _DMUS_KERNEL_EVENT DMUS_KERNEL_EVENT
IMiniportMidiStream * PMINIPORTMIDISTREAM
Definition: portcls.h:1330
_Must_inspect_result_ _In_ FLT_CONTEXT_TYPE _In_ SIZE_T _In_ POOL_TYPE PoolType
Definition: fltkernel.h:1444
VOID TransferMidiDataToDMus()
Definition: pin_dmus.cpp:248
BYTE * PBYTE
Definition: pedump.c:66
DMUS_STREAM_TYPE
Definition: dmusicks.h:28
#define PC_ASSERT_IRQL(x)
Definition: private.hpp:30
KSDATAFORMAT * PKSDATAFORMAT
IN BOOLEAN Wait
Definition: fatprocs.h:1529
_In_ PSTORAGE_PROPERTY_ID _Outptr_ PSTORAGE_DESCRIPTOR_HEADER * Descriptor
Definition: classpnp.h:966