Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenfilter.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
1.7.6.1
|