ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

filter.c
Go to the documentation of this file.
00001 /*
00002  * COPYRIGHT:       See COPYING in the top level directory
00003  * PROJECT:         ReactOS Kernel Streaming
00004  * FILE:            drivers/wdm/audio/filters/kmixer/filter.c
00005  * PURPOSE:         Filter File Context Header header
00006  * PROGRAMMER:      Johannes Anderwald
00007  */
00008 
00009 #include "kmixer.h"
00010 
00011 NTSTATUS
00012 NTAPI
00013 Dispatch_fnDeviceIoControl(
00014     PDEVICE_OBJECT DeviceObject,
00015     PIRP Irp)
00016 {
00017     UNIMPLEMENTED
00018 
00019     Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
00020     Irp->IoStatus.Information = 0;
00021     IoCompleteRequest(Irp, IO_NO_INCREMENT);
00022     return STATUS_UNSUCCESSFUL;
00023 }
00024 
00025 NTSTATUS
00026 NTAPI
00027 Dispatch_fnClose(
00028     PDEVICE_OBJECT DeviceObject,
00029     PIRP Irp)
00030 {
00031     UNIMPLEMENTED
00032 
00033     Irp->IoStatus.Status = STATUS_SUCCESS;
00034     Irp->IoStatus.Information = 0;
00035     IoCompleteRequest(Irp, IO_NO_INCREMENT);
00036     return STATUS_SUCCESS;
00037 }
00038 
00039 static KSDISPATCH_TABLE DispatchTable =
00040 {
00041     Dispatch_fnDeviceIoControl,
00042     KsDispatchInvalidDeviceRequest,
00043     KsDispatchInvalidDeviceRequest,
00044     KsDispatchInvalidDeviceRequest,
00045     Dispatch_fnClose,
00046     KsDispatchInvalidDeviceRequest,
00047     KsDispatchInvalidDeviceRequest,
00048     KsDispatchFastIoDeviceControlFailure,
00049     KsDispatchFastWriteFailure,
00050     KsDispatchFastWriteFailure,
00051 };
00052 
00053 NTSTATUS
00054 NTAPI
00055 DispatchCreateKMixPin(
00056     IN  PDEVICE_OBJECT DeviceObject,
00057     IN  PIRP Irp)
00058 {
00059     NTSTATUS Status;
00060 
00061     DPRINT("DispatchCreateKMix entered\n");
00062 
00063     /* create the pin */
00064     Status = CreatePin(Irp);
00065 
00066     /* save result */
00067     Irp->IoStatus.Status = Status;
00068     /* complete the request */
00069     IoCompleteRequest(Irp, IO_NO_INCREMENT);
00070     /* done */
00071     return Status;
00072 }
00073 
00074 NTSTATUS
00075 NTAPI
00076 DispatchCreateKMixAllocator(
00077     IN  PDEVICE_OBJECT DeviceObject,
00078     IN  PIRP Irp)
00079 {
00080     NTSTATUS Status;
00081 
00082     /* create the allocator */
00083     Status = KsCreateDefaultAllocator(Irp);
00084 
00085     /* save result */
00086     Irp->IoStatus.Status = Status;
00087     /* complete the request */
00088     IoCompleteRequest(Irp, IO_NO_INCREMENT);
00089     /* done */
00090     return Status;
00091 }
00092 
00093 NTSTATUS
00094 NTAPI
00095 DispatchCreateKMix(
00096     IN  PDEVICE_OBJECT DeviceObject,
00097     IN  PIRP Irp)
00098 {
00099     NTSTATUS Status;
00100     KSOBJECT_HEADER ObjectHeader;
00101     PKSOBJECT_CREATE_ITEM CreateItem;
00102     PKMIXER_DEVICE_EXT DeviceExtension;
00103 
00104     DPRINT("DispatchCreateKMix entered\n");
00105 
00106     /* check if the request was from usermode */
00107     if (Irp->RequestorMode == UserMode)
00108     {
00109         /* deny access from usermode */
00110         Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
00111         Irp->IoStatus.Information = 0;
00112         IoCompleteRequest(Irp, IO_NO_INCREMENT);
00113         return STATUS_INVALID_DEVICE_REQUEST;
00114     }
00115 
00116     /* get device extension */
00117     DeviceExtension = (PKMIXER_DEVICE_EXT)DeviceObject->DeviceExtension;
00118 
00119 #if 0
00120     /* reference the software bus object */
00121     Status = KsReferenceSoftwareBusObject(DeviceExtension->KsDeviceHeader);
00122 
00123     if (!NT_SUCCESS(Status))
00124     {
00125         /* failed to reference bus object */
00126         Irp->IoStatus.Status = Status;
00127         Irp->IoStatus.Information = 0;
00128         IoCompleteRequest(Irp, IO_NO_INCREMENT);
00129         return Status;
00130     }
00131 #endif
00132 
00133    /* allocate create item */
00134     CreateItem = ExAllocatePool(NonPagedPool, sizeof(KSOBJECT_CREATE_ITEM) * 2);
00135     if (!CreateItem)
00136     {
00137         /* not enough memory */
00138         Irp->IoStatus.Information = 0;
00139         Irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
00140         IoCompleteRequest(Irp, IO_NO_INCREMENT);
00141         return STATUS_INSUFFICIENT_RESOURCES;
00142     }
00143 
00144     /* zero create struct */
00145     RtlZeroMemory(CreateItem, sizeof(KSOBJECT_CREATE_ITEM) * 2);
00146 
00147     /* initialize pin create item */
00148     CreateItem[0].Create = DispatchCreateKMixPin;
00149     RtlInitUnicodeString(&CreateItem[0].ObjectClass, KSSTRING_Pin);
00150     CreateItem[1].Create = DispatchCreateKMixAllocator;
00151     RtlInitUnicodeString(&CreateItem[1].ObjectClass, KSSTRING_Allocator);
00152 
00153     /* allocate object header */
00154     Status = KsAllocateObjectHeader(&ObjectHeader, 2, CreateItem, Irp, &DispatchTable);
00155 
00156     if (!NT_SUCCESS(Status))
00157     {
00158         /* failed to allocate object header */
00159         ExFreePool(CreateItem);
00160         KsDereferenceSoftwareBusObject(DeviceExtension->KsDeviceHeader);
00161     }
00162 
00163     DPRINT("KsAllocateObjectHeader result %x\n", Status);
00164     /* complete the irp */
00165     Irp->IoStatus.Information = 0;
00166     Irp->IoStatus.Status = Status;
00167     IoCompleteRequest(Irp, IO_NO_INCREMENT);
00168     return Status;
00169 }
00170 
00171 NTSTATUS
00172 NTAPI
00173 KMixAllocateDeviceHeader(
00174     IN PKMIXER_DEVICE_EXT DeviceExtension)
00175 {
00176     NTSTATUS Status;
00177     PKSOBJECT_CREATE_ITEM CreateItem;
00178 
00179     /* allocate create item */
00180     CreateItem = ExAllocatePool(NonPagedPool, sizeof(KSOBJECT_CREATE_ITEM) * 2);
00181     if (!CreateItem)
00182         return STATUS_INSUFFICIENT_RESOURCES;
00183 
00184     /* initialize create item struct */
00185     RtlZeroMemory(CreateItem, sizeof(KSOBJECT_CREATE_ITEM) * 2);
00186     CreateItem[0].Create = DispatchCreateKMix;
00187     RtlInitUnicodeString(&CreateItem[0].ObjectClass, L"GLOBAL");
00188     CreateItem[1].Create = DispatchCreateKMix;
00189     RtlInitUnicodeString(&CreateItem[1].ObjectClass, KSSTRING_Filter);
00190 
00191     Status = KsAllocateDeviceHeader(&DeviceExtension->KsDeviceHeader,
00192                                     2,
00193                                     CreateItem);
00194     return Status;
00195 }
00196 

Generated on Sun May 27 2012 04:24:45 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.