ReactOS  0.4.15-dev-5462-g4d0d22a
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 CUnknownImpl<IPortPinDMus>
18 {
19 public:
21 
26 
27  CPortPinDMus(IUnknown * OuterUnknown){}
28  virtual ~CPortPinDMus(){}
29 
30 protected:
33 
34  IPortDMus * m_Port;
35  IPortFilterDMus * m_Filter;
36  KSPIN_DESCRIPTOR * m_KsPinDescriptor;
38 
40 
45 
48 
49 
53 
56  IIrpQueue * m_IrpQueue;
57 
61 
63 };
64 
65 typedef struct
66 {
70 
71 typedef struct
72 {
77 
78 //==================================================================================================================================
80 NTAPI
82 {
84  return STATUS_SUCCESS;
85 }
86 
87 //==================================================================================================================================
89 NTAPI
91  OUT PDMUS_KERNEL_EVENT * ppDMKEvt)
92 {
93  PVOID Buffer;
94 
95  Buffer = ExAllocateFromNPagedLookasideList(&m_LookAsideEvent);
96  if (!Buffer)
98 
99  *ppDMKEvt = (PDMUS_KERNEL_EVENT)Buffer;
101  return STATUS_SUCCESS;
102 }
103 
104 USHORT
105 NTAPI
106 CPortPinDMus::GetBufferSize()
107 {
108  return PAGE_SIZE;
109 }
110 
111 NTSTATUS
112 NTAPI
114  OUT PBYTE * ppBuffer)
115 {
116  PVOID Buffer;
117 
118  Buffer = ExAllocateFromNPagedLookasideList(&m_LookAsideBuffer);
119  if (!Buffer)
121 
122  *ppBuffer = (PBYTE)Buffer;
124  return STATUS_SUCCESS;
125 }
126 
127 
128 NTSTATUS
129 NTAPI
130 CPortPinDMus::PutBuffer(
131  IN PBYTE pBuffer)
132 {
134 
135  m_IrpQueue->ReleaseMappingWithTag(Event->Tag);
136 
137  ExFreeToNPagedLookasideList(&m_LookAsideBuffer, pBuffer);
138  return STATUS_SUCCESS;
139 }
140 
141 NTSTATUS
142 NTAPI
143 CPortPinDMus::SetState(
144  IN KSSTATE State)
145 {
147  return STATUS_NOT_IMPLEMENTED;
148 }
149 
150 
151 NTSTATUS
152 NTAPI
153 CPortPinDMus::PutMessage(
154  IN PDMUS_KERNEL_EVENT pDMKEvt)
155 {
156  ExFreeToNPagedLookasideList(&m_LookAsideEvent, pDMKEvt);
157  return STATUS_SUCCESS;
158 }
159 
160 
161 NTSTATUS
162 NTAPI
163 CPortPinDMus::ConnectOutput(
164  IN PMXF sinkMXF)
165 {
167  return STATUS_NOT_IMPLEMENTED;
168 }
169 
170 
171 NTSTATUS
172 NTAPI
173 CPortPinDMus::DisconnectOutput(
174  IN PMXF sinkMXF)
175 {
177  return STATUS_NOT_IMPLEMENTED;
178 }
179 
180 //==================================================================================================================================
181 
182 VOID
184 {
186  PUCHAR Buffer;
189 
190  do
191  {
192  Status = m_IrpQueue->GetMapping(&Buffer, &BufferSize);
193  if (!NT_SUCCESS(Status))
194  {
195  return;
196  }
197 
198  if (m_Capture)
199  {
201  if (!NT_SUCCESS(Status))
202  {
203  DPRINT("Read failed with %x\n", Status);
204  return;
205  }
206  }
207  else
208  {
210  if (!NT_SUCCESS(Status))
211  {
212  DPRINT("Write failed with %x\n", Status);
213  return;
214  }
215  }
216 
217  if (!BytesWritten)
218  {
219  DPRINT("Device is busy retry later\n");
220  return;
221  }
222 
223  m_IrpQueue->UpdateMapping(BytesWritten);
224 
225  }while(TRUE);
226 
227 }
228 
229 VOID
231 {
235  PVOID Buffer;
237 
238  do
239  {
240  m_LastTag++;
242  if (!NT_SUCCESS(Status))
243  {
244  break;
245  }
246 
248  if (!NT_SUCCESS(Status))
249  break;
250 
251  //FIXME
252  //set up struct
253  //Event->Event.usFlags = DMUS_KEF_EVENT_COMPLETE;
254  Event->Event.cbStruct = sizeof(DMUS_KERNEL_EVENT);
255  Event->Event.cbEvent = (USHORT)BufferSize;
256  Event->Event.uData.pbData = (PBYTE)Buffer;
257 
258 
259  if (!Root)
260  Root = Event;
261  else
262  LastEvent->Event.pNextEvt = (struct _DMUS_KERNEL_EVENT *)Event;
263 
264  LastEvent = Event;
265  LastEvent->Event.pNextEvt = NULL;
266  LastEvent->Tag = UlongToPtr(m_LastTag);
267 
268  }while(TRUE);
269 
270  if (!Root)
271  {
272  return;
273  }
274 
275  Status = m_Mxf->PutMessage((PDMUS_KERNEL_EVENT)Root);
276  DPRINT("Status %x\n", Status);
277 }
278 
279 
280 
281 VOID
282 NTAPI
283 CPortPinDMus::RequestService()
284 {
286 
287  if (m_MidiStream)
288  {
290  }
291  else if (m_Mxf)
292  {
294  }
295 }
296 
297 //==================================================================================================================================
298 NTSTATUS
299 NTAPI
301  IN REFIID refiid,
302  OUT PVOID* Output)
303 {
304 
305  if (IsEqualGUIDAligned(refiid, IID_IIrpTarget) ||
307  {
308  *Output = PVOID(PUNKNOWN(this));
309  PUNKNOWN(*Output)->AddRef();
310  return STATUS_SUCCESS;
311  }
312 
313  return STATUS_UNSUCCESSFUL;
314 }
315 
316 NTSTATUS
317 NTAPI
318 CPortPinDMus::NewIrpTarget(
319  OUT struct IIrpTarget **OutTarget,
320  IN PCWSTR Name,
324  IN PIRP Irp,
325  IN KSOBJECT_CREATE *CreateObject)
326 {
328 
329  Irp->IoStatus.Information = 0;
330  Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
332 
333  return STATUS_UNSUCCESSFUL;
334 }
335 
336 NTSTATUS
337 NTAPI
340  IN PIRP Irp)
341 {
343 
344  Irp->IoStatus.Information = 0;
345  Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
347 
348  return STATUS_UNSUCCESSFUL;
349 }
350 
351 NTSTATUS
352 NTAPI
355  IN PIRP Irp)
356 {
358 }
359 
360 NTSTATUS
361 NTAPI
364  IN PIRP Irp)
365 {
367 }
368 
369 NTSTATUS
370 NTAPI
373  IN PIRP Irp)
374 {
376 }
377 
378 NTSTATUS
379 NTAPI
382  IN PIRP Irp)
383 {
385  ISubdevice * SubDevice;
387 
388  if (m_ServiceGroup)
389  {
390  m_ServiceGroup->RemoveMember(PSERVICESINK(this));
391  }
392 
393  if (m_MidiStream)
394  {
395  if (m_State != KSSTATE_STOP)
396  {
397  m_MidiStream->SetState(KSSTATE_STOP);
399  }
400  DPRINT("Closing stream at Irql %u\n", KeGetCurrentIrql());
401  m_MidiStream->Release();
402  }
403 
404  Status = m_Port->QueryInterface(IID_ISubdevice, (PVOID*)&SubDevice);
405  if (NT_SUCCESS(Status))
406  {
407  Status = SubDevice->GetDescriptor(&Descriptor);
408  if (NT_SUCCESS(Status))
409  {
410  // release reference count
411  Descriptor->Factory.Instances[m_ConnectDetails->PinId].CurrentPinInstanceCount--;
412  }
413  SubDevice->Release();
414  }
415 
416  if (m_Format)
417  {
419  m_Format = NULL;
420  }
421 
422  // complete the irp
423  Irp->IoStatus.Information = 0;
424  Irp->IoStatus.Status = STATUS_SUCCESS;
426 
427  // destroy DMus pin
428  m_Filter->FreePin(PPORTPINDMUS(this));
429 
430  return STATUS_SUCCESS;
431 }
432 
433 NTSTATUS
434 NTAPI
435 CPortPinDMus::QuerySecurity(
437  IN PIRP Irp)
438 {
440 }
441 
442 NTSTATUS
443 NTAPI
444 CPortPinDMus::SetSecurity(
446  IN PIRP Irp)
447 {
449 }
450 
451 BOOLEAN
452 NTAPI
453 CPortPinDMus::FastDeviceIoControl(
455  IN BOOLEAN Wait,
461  OUT PIO_STATUS_BLOCK StatusBlock,
463 {
464  return FALSE;
465 }
466 
467 BOOLEAN
468 NTAPI
469 CPortPinDMus::FastRead(
472  IN ULONG Length,
473  IN BOOLEAN Wait,
474  IN ULONG LockKey,
475  IN PVOID Buffer,
476  OUT PIO_STATUS_BLOCK StatusBlock,
478 {
479  return FALSE;
480 }
481 
482 BOOLEAN
483 NTAPI
484 CPortPinDMus::FastWrite(
487  IN ULONG Length,
488  IN BOOLEAN Wait,
489  IN ULONG LockKey,
490  IN PVOID Buffer,
491  OUT PIO_STATUS_BLOCK StatusBlock,
493 {
494  return FALSE;
495 }
496 
497 NTSTATUS
498 NTAPI
500  IN PPORTDMUS Port,
502  IN KSPIN_CONNECT * ConnectDetails,
503  IN KSPIN_DESCRIPTOR * KsPinDescriptor,
505 {
509 
510  Port->AddRef();
511  Filter->AddRef();
512 
513  m_Port = Port;
514  m_Filter = Filter;
515  m_KsPinDescriptor = KsPinDescriptor;
516  m_ConnectDetails = ConnectDetails;
518 
520 
521  DataFormat = (PKSDATAFORMAT)(ConnectDetails + 1);
522 
523  DPRINT("CPortPinDMus::Init entered\n");
524 
526  if (!m_Format)
528 
530 
531  if (KsPinDescriptor->Communication == KSPIN_COMMUNICATION_SINK && KsPinDescriptor->DataFlow == KSPIN_DATAFLOW_IN)
532  {
534  }
535  else if (KsPinDescriptor->Communication == KSPIN_COMMUNICATION_SINK && KsPinDescriptor->DataFlow == KSPIN_DATAFLOW_OUT)
536  {
538  }
539  else
540  {
541  DPRINT("Unexpected Communication %u DataFlow %u\n", KsPinDescriptor->Communication, KsPinDescriptor->DataFlow);
542  DbgBreakPoint();
543  while(TRUE);
544  }
545 
547  if (!NT_SUCCESS(Status))
548  {
549  DPRINT("Failed to allocate IrpQueue with %x\n", Status);
550  return Status;
551  }
552 
553  if (m_MidiMiniport)
554  {
555  Status = m_MidiMiniport->NewStream(&m_MidiStream, NULL, NonPagedPool, ConnectDetails->PinId, Type, m_Format, &m_ServiceGroup);
556 
557  DPRINT("CPortPinDMus::Init Status %x\n", Status);
558 
559  if (!NT_SUCCESS(Status))
560  return Status;
561  }
562  else
563  {
564  Status = m_Miniport->NewStream(&m_Mxf, NULL, NonPagedPool, ConnectDetails->PinId, Type, m_Format, &m_ServiceGroup, PAllocatorMXF(this), PMASTERCLOCK(this),&m_SchedulePreFetch);
565 
566  DPRINT("CPortPinDMus::Init Status %x\n", Status);
567 
568  if (!NT_SUCCESS(Status))
569  return Status;
570 
572  {
573  Status = m_Mxf->ConnectOutput(PMXF(this));
574  if (!NT_SUCCESS(Status))
575  {
576  DPRINT("IMXF_ConnectOutput failed with Status %x\n", Status);
577  return Status;
578  }
579  }
580 
583  }
584 
585  if (m_ServiceGroup)
586  {
587  Status = m_ServiceGroup->AddMember(PSERVICESINK(this));
588  if (!NT_SUCCESS(Status))
589  {
590  DPRINT("Failed to add pin to service group\n");
591  return Status;
592  }
593  }
594 
595  Status = m_IrpQueue->Init(ConnectDetails, KsPinDescriptor, 0, 0, FALSE);
596  if (!NT_SUCCESS(Status))
597  {
598  DPRINT("IrpQueue_Init failed with %x\n", Status);
599  return Status;
600  }
601 
603  m_Capture = Type;
604 
605  return STATUS_SUCCESS;
606 }
607 
608 VOID
609 NTAPI
611 {
612  m_ServiceGroup->RequestService();
613 }
614 
615 NTSTATUS
617  OUT IPortPinDMus ** OutPin)
618 {
619  CPortPinDMus * This;
620 
622  if (!This)
624 
625  This->AddRef();
626 
627  // store result
628  *OutPin = (IPortPinDMus*)This;
629 
630  return STATUS_SUCCESS;
631 }
632 
PIO_WORKITEM WorkItem
Definition: pin_dmus.cpp:74
#define KeGetCurrentIrql()
Definition: env_spec_w32.h:706
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesWritten
Definition: wdfiotarget.h:949
IServiceGroup * PSERVICEGROUP
Definition: portcls.h:614
BOOL WINAPI SHIM_OBJ_NAME() Notify(DWORD fdwReason, PVOID ptr)
CPPORT Port[4]
Definition: headless.c:35
const uint16_t * PCWSTR
Definition: typedefs.h:57
#define IN
Definition: typedefs.h:39
_In_ BOOLEAN Read
Definition: strmini.h:479
#define REFIID
Definition: guiddef.h:118
IPortFilterDMus * PPORTFILTERDMUS
Definition: interfaces.hpp:837
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST NPAGED_LOOKASIDE_LIST
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:101
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
Definition: wdfresource.h:339
ULONG m_LastTag
Definition: pin_dmus.cpp:62
PKSDATAFORMAT m_Format
Definition: pin_dmus.cpp:51
IN BOOLEAN OUT PSTR Buffer
Definition: progress.h:34
#define TRUE
Definition: types.h:120
IUnknown * PUNKNOWN
Definition: com_apitest.h:45
IPortPinDMus * PPORTPINDMUS
Definition: interfaces.hpp:883
#define TAG_PORTCLASS
Definition: private.hpp:24
_In_ WDFDPC _In_ BOOLEAN Wait
Definition: wdfdpc.h:167
KSPIN_CONNECT * m_ConnectDetails
Definition: pin_dmus.cpp:52
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
return pMemory GetBuffer()
struct _DMUS_KERNEL_EVENT * PDMUS_KERNEL_EVENT
ULONG m_PreCompleted
Definition: pin_dmus.cpp:59
IServiceSink * PSERVICESINK
Definition: portcls.h:569
IPortDMus * PPORTDMUS
Definition: dmusicks.h:167
_In_ WDFREQUEST _In_ size_t _In_ size_t InputBufferLength
Definition: wdfio.h:318
BOOL Init(PUSERCONNECT UserCon)
Definition: dllmain.c:386
static BOOL Write(PBYTE Address, PBYTE Data, SIZE_T Size)
Definition: vmhorizon.c:15
#define RtlMoveMemory(Destination, Source, Length)
Definition: typedefs.h:264
struct _DMUS_KERNEL_EVENT * pNextEvt
Definition: dmusicks.h:20
IMasterClock * PMASTERCLOCK
Definition: dmusicks.h:51
CPortPinDMus(IUnknown *OuterUnknown)
Definition: pin_dmus.cpp:27
#define IsEqualGUIDAligned(guid1, guid2)
Definition: wdm.template.h:235
_In_ WDFREQUEST _In_ size_t OutputBufferLength
Definition: wdfio.h:318
KSSTATE m_State
Definition: pin_dmus.cpp:50
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2055
return STATUS_NOT_IMPLEMENTED
struct IAllocatorMXF * PAllocatorMXF
Definition: dmusicks.h:107
VOID FreeItem(IN PVOID Item)
Definition: misc.c:43
IIrpQueue * m_IrpQueue
Definition: pin_dmus.cpp:56
ULONG PinId
Definition: ks.h:2603
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
#define FALSE
Definition: types.h:117
_In_ PIRP Irp
Definition: csq.h:116
VOID NTAPI DbgBreakPoint(VOID)
_Must_inspect_result_ _In_opt_ PFLT_FILTER Filter
Definition: fltkernel.h:1801
#define STDMETHODIMP
Definition: basetyps.h:43
_In_ PVOID _In_ ULONG Event
Definition: iotypes.h:467
unsigned char BOOLEAN
PVOID pBuffer
#define IoCompleteRequest
Definition: irp.c:1240
DMUS_STREAM_TYPE m_Capture
Definition: pin_dmus.cpp:54
Definition: bufpool.h:45
ULONGLONG m_SchedulePreFetch
Definition: pin_dmus.cpp:42
void * PVOID
Definition: retypes.h:9
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
Definition: wdfdevice.h:547
#define UlongToPtr(u)
Definition: config.h:106
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
Definition: wdfiotarget.h:859
VOID TransferMidiData()
Definition: pin_dmus.cpp:183
Status
Definition: gdiplustypes.h:24
IN PLARGE_INTEGER IN ULONG IN BOOLEAN IN ULONG LockKey
Definition: fatprocs.h:2662
root entry for file system trees
Definition: entries.h:148
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer
Definition: wdfiotarget.h:949
IPortDMus * m_Port
Definition: pin_dmus.cpp:34
KSDDKAPI NTSTATUS NTAPI KsDispatchInvalidDeviceRequest(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: irp.c:1168
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
CPortPinDMus * Pin
Definition: pin_dmus.cpp:73
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:218
PMINIPORTDMUS m_Miniport
Definition: pin_dmus.cpp:37
LONGLONG REFERENCE_TIME
Definition: dmusicks.h:9
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
PDEVICE_OBJECT m_DeviceObject
Definition: pin_dmus.cpp:55
PMINIPORTMIDISTREAM m_MidiStream
Definition: pin_dmus.cpp:47
INT POOL_TYPE
Definition: typedefs.h:78
uint64_t ULONGLONG
Definition: typedefs.h:67
const GUID IID_IUnknown
Type
Definition: Type.h:6
nsrefcnt Release()
* PFILE_OBJECT
Definition: iotypes.h:1998
ULONG AddRef()
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS PhysicalAddress
Definition: iotypes.h:1098
IPortFilterDMus * m_Filter
Definition: pin_dmus.cpp:35
Definition: arc.h:85
_In_ WDFREQUEST _In_ size_t _In_ size_t _In_ ULONG IoControlCode
Definition: wdfio.h:318
#define PAGE_SIZE
Definition: env_spec_w32.h:49
KSPIN_DESCRIPTOR * m_KsPinDescriptor
Definition: pin_dmus.cpp:36
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
VOID GetDMusMiniport(IN IPortDMus *iface, IN PMINIPORTDMUS *Miniport, IN PMINIPORTMIDI *MidiMiniport)
Definition: port_dmus.cpp:514
STDMETHODIMP QueryInterface(REFIID InterfaceId, PVOID *Interface)
Definition: pin_dmus.cpp:300
ULONG m_PostCompleted
Definition: pin_dmus.cpp:60
PMINIPORTMIDI m_MidiMiniport
Definition: pin_dmus.cpp:46
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
KSSTATE
Definition: ks.h:1214
IN PVOID IN PVOID IN USHORT IN USHORT IN PINTERFACE Interface
Definition: pci.h:361
NPAGED_LOOKASIDE_LIST m_LookAsideEvent
Definition: pin_dmus.cpp:43
Definition: sacdrv.h:268
ULONG m_TotalPackets
Definition: pin_dmus.cpp:58
unsigned short USHORT
Definition: pedump.c:61
IMiniportDMus * PMINIPORTDMUS
Definition: dmusicks.h:209
_In_ PFCB _In_ LONGLONG FileOffset
Definition: cdprocs.h:159
PSERVICEGROUP m_ServiceGroup
Definition: pin_dmus.cpp:39
IMiniportMidi * PMINIPORTMIDI
Definition: portcls.h:1376
#define NULL
Definition: types.h:112
#define GetMessage
Definition: winuser.h:5780
DMUS_KERNEL_EVENT Event
Definition: pin_dmus.cpp:67
struct DMUS_KERNEL_EVENT_WITH_TAG * PDMUS_KERNEL_EVENT_WITH_TAG
#define OUT
Definition: typedefs.h:40
struct SETSTREAM_CONTEXT * PSETSTREAM_CONTEXT
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ _Strict_type_match_ POOL_TYPE PoolType
Definition: wdfdevice.h:3810
NPAGED_LOOKASIDE_LIST m_LookAsideBuffer
Definition: pin_dmus.cpp:44
NTSTATUS NewPortPinDMus(OUT IPortPinDMus **OutPin)
Definition: pin_dmus.cpp:616
virtual ~CPortPinDMus()
Definition: pin_dmus.cpp:28
#define GetTime(fmt)
Definition: lcformat.c:97
unsigned int ULONG
Definition: retypes.h:1
#define IO_NO_INCREMENT
Definition: iotypes.h:598
#define UNIMPLEMENTED
Definition: debug.h:115
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
NTSTATUS NTAPI NewIrpQueue(IN IIrpQueue **Queue)
Definition: irpstream.cpp:869
#define STATUS_SUCCESS
Definition: shellext.h:65
#define DPRINT
Definition: sndvol32.h:71
struct IMXF * PMXF
Definition: dmusicks.h:68
struct _DMUS_KERNEL_EVENT DMUS_KERNEL_EVENT
IMiniportMidiStream * PMINIPORTMIDISTREAM
Definition: portcls.h:1340
VOID TransferMidiDataToDMus()
Definition: pin_dmus.cpp:230
BYTE * PBYTE
Definition: pedump.c:66
DMUS_STREAM_TYPE
Definition: dmusicks.h:28
#define PC_ASSERT_IRQL(x)
Definition: private.hpp:30
#define BufferSize
Definition: mmc.h:75
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
Definition: wdfmemory.h:251
KSDATAFORMAT * PKSDATAFORMAT