Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenprivate.hpp
Go to the documentation of this file.
00001 /* 00002 PortCls FDO Extension 00003 00004 by Andrew Greenwood 00005 */ 00006 00007 #ifndef PORTCLS_PRIVATE_H 00008 #define PORTCLS_PRIVATE_H 00009 00010 //#define _KS_NO_ANONYMOUS_STRUCTURES_ 00011 #define PC_IMPLEMENTATION 00012 #define COM_STDMETHOD_CAN_THROW 00013 #define PC_NO_IMPORTS 00014 00015 #include <ntddk.h> 00016 #include <portcls.h> 00017 00018 #ifndef YDEBUG 00019 #define NDEBUG 00020 #endif 00021 00022 #include <debug.h> 00023 00024 #include <dmusicks.h> 00025 #include <kcom.h> 00026 #include "interfaces.hpp" 00027 #include <ks.h> 00028 #include <ksmedia.h> 00029 #include <stdio.h> 00030 00031 //#include <intrin.h> 00032 00033 #define TAG_PORTCLASS 'SLCP' 00034 00035 #define PC_ASSERT(exp) \ 00036 (VOID)((!(exp)) ? \ 00037 RtlAssert((PVOID) #exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE) 00038 00039 #define PC_ASSERT_IRQL(x) PC_ASSERT(KeGetCurrentIrql() <= (x)) 00040 #define PC_ASSERT_IRQL_EQUAL(x) PC_ASSERT(KeGetCurrentIrql()==(x)) 00041 00042 extern 00043 "C" 00044 NTSTATUS 00045 NTAPI 00046 PortClsCreate( 00047 IN PDEVICE_OBJECT DeviceObject, 00048 IN PIRP Irp); 00049 00050 extern 00051 "C" 00052 NTSTATUS 00053 NTAPI 00054 PortClsPnp( 00055 IN PDEVICE_OBJECT DeviceObject, 00056 IN PIRP Irp); 00057 00058 extern 00059 "C" 00060 NTSTATUS 00061 NTAPI 00062 PortClsPower( 00063 IN PDEVICE_OBJECT DeviceObject, 00064 IN PIRP Irp); 00065 00066 extern 00067 "C" 00068 NTSTATUS 00069 NTAPI 00070 PortClsSysControl( 00071 IN PDEVICE_OBJECT DeviceObject, 00072 IN PIRP Irp); 00073 00074 NTSTATUS 00075 NewMiniportDMusUART( 00076 OUT PMINIPORT* OutMiniport, 00077 IN REFCLSID ClassId); 00078 00079 NTSTATUS 00080 NewMiniportFmSynth( 00081 OUT PMINIPORT* OutMiniport, 00082 IN REFCLSID ClassId); 00083 00084 NTSTATUS 00085 NewPortDMus( 00086 OUT PPORT* OutPort); 00087 00088 NTSTATUS 00089 NewPortTopology( 00090 OUT PPORT* OutPort); 00091 00092 NTSTATUS 00093 NewPortWaveCyclic( 00094 OUT PPORT* OutPort); 00095 00096 NTSTATUS 00097 NewPortWavePci( 00098 OUT PPORT* OutPort); 00099 00100 NTSTATUS 00101 NewIDrmPort( 00102 OUT PDRMPORT2 *OutPort); 00103 00104 NTSTATUS 00105 NewPortClsVersion( 00106 OUT PPORTCLSVERSION * OutVersion); 00107 00108 NTSTATUS 00109 NewPortFilterWaveCyclic( 00110 OUT IPortFilterWaveCyclic ** OutFilter); 00111 00112 NTSTATUS 00113 NewPortPinWaveCyclic( 00114 OUT IPortPinWaveCyclic ** OutPin); 00115 00116 NTSTATUS 00117 NewPortFilterWavePci( 00118 OUT IPortFilterWavePci ** OutFilter); 00119 00120 NTSTATUS 00121 NewPortPinWavePci( 00122 OUT IPortPinWavePci ** OutPin); 00123 00124 PDEVICE_OBJECT 00125 GetDeviceObjectFromWaveCyclic( 00126 IPortWavePci* iface); 00127 00128 PDEVICE_OBJECT 00129 GetDeviceObjectFromPortWavePci( 00130 IPortWavePci* iface); 00131 00132 PMINIPORTWAVEPCI 00133 GetWavePciMiniport( 00134 PPORTWAVEPCI Port); 00135 00136 00137 NTSTATUS 00138 NewPortFilterDMus( 00139 OUT PPORTFILTERDMUS * OutFilter); 00140 00141 00142 NTSTATUS 00143 NewPortPinDMus( 00144 OUT PPORTPINDMUS * OutPin); 00145 00146 VOID 00147 GetDMusMiniport( 00148 IN IPortDMus * iface, 00149 IN PMINIPORTDMUS * Miniport, 00150 IN PMINIPORTMIDI * MidiMiniport); 00151 00152 #if (NTDDI_VERSION >= NTDDI_VISTA) 00153 00154 NTSTATUS 00155 NewPortFilterWaveRT( 00156 OUT IPortFilterWaveRT ** OutFilter); 00157 00158 NTSTATUS 00159 NewPortPinWaveRT( 00160 OUT IPortPinWaveRT ** OutPin); 00161 00162 PMINIPORTWAVERT 00163 GetWaveRTMiniport( 00164 IN IPortWaveRT* iface); 00165 00166 PDEVICE_OBJECT 00167 GetDeviceObjectFromPortWaveRT( 00168 IPortWaveRT* iface); 00169 00170 00171 NTSTATUS 00172 NewPortWaveRTStream( 00173 PPORTWAVERTSTREAM *OutStream); 00174 00175 NTSTATUS 00176 NewPortWaveRT( 00177 OUT PPORT* OutPort); 00178 00179 00180 #endif 00181 00182 NTSTATUS 00183 NewPortFilterTopology( 00184 OUT IPortFilterTopology ** OutFilter); 00185 00186 PMINIPORTTOPOLOGY 00187 GetTopologyMiniport( 00188 PPORTTOPOLOGY Port); 00189 00190 NTSTATUS 00191 NTAPI 00192 NewDispatchObject( 00193 IN PIRP Irp, 00194 IN IIrpTarget * Target, 00195 IN ULONG ObjectCreateItemCount, 00196 IN PKSOBJECT_CREATE_ITEM ObjectCreateItem); 00197 00198 PMINIPORTWAVECYCLIC 00199 GetWaveCyclicMiniport( 00200 IN IPortWaveCyclic* iface); 00201 00202 PVOID 00203 AllocateItem( 00204 IN POOL_TYPE PoolType, 00205 IN SIZE_T NumberOfBytes, 00206 IN ULONG Tag); 00207 00208 VOID 00209 FreeItem( 00210 IN PVOID Item, 00211 IN ULONG Tag); 00212 00213 NTSTATUS 00214 NTAPI 00215 NewIrpQueue( 00216 IN IIrpQueue **Queue); 00217 00218 NTSTATUS 00219 NTAPI 00220 TopologyPropertyHandler( 00221 IN PIRP Irp, 00222 IN PKSIDENTIFIER Request, 00223 IN OUT PVOID Data); 00224 00225 NTSTATUS 00226 NTAPI 00227 PinPropertyHandler( 00228 IN PIRP Irp, 00229 IN PKSIDENTIFIER Request, 00230 IN OUT PVOID Data); 00231 00232 extern 00233 "C" 00234 NTSTATUS 00235 NTAPI 00236 PcDmaMasterDescription( 00237 IN PRESOURCELIST ResourceList OPTIONAL, 00238 IN BOOLEAN ScatterGather, 00239 IN BOOLEAN Dma32BitAddresses, 00240 IN BOOLEAN IgnoreCount, 00241 IN BOOLEAN Dma64BitAddresses, 00242 IN DMA_WIDTH DmaWidth, 00243 IN DMA_SPEED DmaSpeed, 00244 IN ULONG MaximumLength, 00245 IN ULONG DmaPort, 00246 OUT PDEVICE_DESCRIPTION DeviceDescription); 00247 00248 extern 00249 "C" 00250 NTSTATUS 00251 NTAPI 00252 PcDmaSlaveDescription( 00253 IN PRESOURCELIST ResourceList OPTIONAL, 00254 IN ULONG DmaIndex, 00255 IN BOOLEAN DemandMode, 00256 IN BOOLEAN AutoInitialize, 00257 IN DMA_SPEED DmaSpeed, 00258 IN ULONG MaximumLength, 00259 IN ULONG DmaPort, 00260 OUT PDEVICE_DESCRIPTION DeviceDescription); 00261 00262 extern 00263 "C" 00264 NTSTATUS 00265 NTAPI 00266 PcCreateSubdeviceDescriptor( 00267 OUT SUBDEVICE_DESCRIPTOR ** OutSubdeviceDescriptor, 00268 IN ULONG InterfaceCount, 00269 IN GUID * InterfaceGuids, 00270 IN ULONG IdentifierCount, 00271 IN KSIDENTIFIER *Identifier, 00272 IN ULONG FilterPropertiesCount, 00273 IN KSPROPERTY_SET * FilterProperties, 00274 IN ULONG Unknown1, 00275 IN ULONG Unknown2, 00276 IN ULONG PinPropertiesCount, 00277 IN KSPROPERTY_SET * PinProperties, 00278 IN ULONG EventSetCount, 00279 IN KSEVENT_SET * EventSet, 00280 IN PPCFILTER_DESCRIPTOR FilterDescription); 00281 00282 extern 00283 "C" 00284 NTSTATUS 00285 NTAPI 00286 PcValidateConnectRequest( 00287 IN PIRP Irp, 00288 IN KSPIN_FACTORY * Descriptor, 00289 OUT PKSPIN_CONNECT* Connect); 00290 00291 NTSTATUS 00292 NTAPI 00293 PcCreateItemDispatch( 00294 IN PDEVICE_OBJECT DeviceObject, 00295 IN PIRP Irp); 00296 00297 PDEVICE_OBJECT 00298 GetDeviceObject( 00299 IPortWaveCyclic* iface); 00300 00301 VOID 00302 NTAPI 00303 PcIoTimerRoutine( 00304 IN PDEVICE_OBJECT DeviceObject, 00305 IN PVOID Context); 00306 00307 NTSTATUS 00308 NTAPI 00309 NewIUnregisterSubdevice( 00310 OUT PUNREGISTERSUBDEVICE *OutDevice); 00311 00312 NTSTATUS 00313 NTAPI 00314 NewIUnregisterPhysicalConnection( 00315 OUT PUNREGISTERPHYSICALCONNECTION *OutConnection); 00316 00317 NTSTATUS 00318 NTAPI 00319 PcHandlePropertyWithTable( 00320 IN PIRP Irp, 00321 IN ULONG PropertySetCount, 00322 IN PKSPROPERTY_SET PropertySet, 00323 IN PSUBDEVICE_DESCRIPTOR Descriptor); 00324 00325 NTSTATUS 00326 NTAPI 00327 PcHandleEnableEventWithTable( 00328 IN PIRP Irp, 00329 IN PSUBDEVICE_DESCRIPTOR Descriptor); 00330 00331 NTSTATUS 00332 NTAPI 00333 PcHandleDisableEventWithTable( 00334 IN PIRP Irp, 00335 IN PSUBDEVICE_DESCRIPTOR Descriptor); 00336 00337 IIrpTarget * 00338 NTAPI 00339 KsoGetIrpTargetFromIrp( 00340 PIRP Irp); 00341 00342 #define DEFINE_KSPROPERTY_CONNECTIONSET(PinSet,\ 00343 PropStateHandler, PropDataFormatHandler, PropAllocatorFraming)\ 00344 DEFINE_KSPROPERTY_TABLE(PinSet) {\ 00345 DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(PropStateHandler, PropStateHandler),\ 00346 DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(PropDataFormatHandler, PropDataFormatHandler),\ 00347 DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(PropAllocatorFraming)\ 00348 } 00349 00350 #define DEFINE_KSPROPERTY_ITEM_AUDIO_POSITION(GetHandler, SetHandler)\ 00351 DEFINE_KSPROPERTY_ITEM(\ 00352 KSPROPERTY_AUDIO_POSITION,\ 00353 (GetHandler),\ 00354 sizeof(KSPROPERTY),\ 00355 sizeof(KSAUDIO_POSITION),\ 00356 (SetHandler),\ 00357 NULL, 0, NULL, NULL, 0) 00358 00359 #define DEFINE_KSPROPERTY_AUDIOSET(PinSet,\ 00360 PropPositionHandler)\ 00361 DEFINE_KSPROPERTY_TABLE(PinSet) {\ 00362 DEFINE_KSPROPERTY_ITEM_AUDIO_POSITION(PropPositionHandler, PropPositionHandler)\ 00363 } 00364 00365 00366 #define DEFINE_KSPROPERTY_ITEM_DRMAUDIOSTREAM_CONTENTID(SetHandler)\ 00367 DEFINE_KSPROPERTY_ITEM(\ 00368 KSPROPERTY_DRMAUDIOSTREAM_CONTENTID,\ 00369 NULL,\ 00370 sizeof(KSPROPERTY),\ 00371 sizeof(ULONG),\ 00372 (SetHandler),\ 00373 NULL, 0, NULL, NULL, 0) 00374 00375 #define DEFINE_KSPROPERTY_DRMSET(PinSet,\ 00376 PropPositionHandler)\ 00377 DEFINE_KSPROPERTY_TABLE(PinSet) {\ 00378 DEFINE_KSPROPERTY_ITEM_DRMAUDIOSTREAM_CONTENTID(PropPositionHandler)\ 00379 } 00380 00381 #define DEFINE_KSPROPERTY_PINPROPOSEDATAFORMAT(PinSet,\ 00382 PropGeneral, PropInstances, PropIntersection)\ 00383 DEFINE_KSPROPERTY_TABLE(PinSet) {\ 00384 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\ 00385 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\ 00386 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\ 00387 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\ 00388 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\ 00389 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\ 00390 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\ 00391 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\ 00392 DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(PropGeneral),\ 00393 DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(PropGeneral),\ 00394 DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(PropGeneral),\ 00395 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\ 00396 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\ 00397 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral),\ 00398 DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(PropGeneral)\ 00399 } 00400 00401 typedef struct 00402 { 00403 KSDEVICE_HEADER KsDeviceHeader; 00404 PDEVICE_OBJECT PhysicalDeviceObject; 00405 PDEVICE_OBJECT PrevDeviceObject; 00406 PCPFNSTARTDEVICE StartDevice; 00407 ULONG_PTR Unused[4]; 00408 IAdapterPowerManagement * AdapterPowerManagement; 00409 ULONG MaxSubDevices; 00410 KSOBJECT_CREATE_ITEM * CreateItems; 00411 00412 IResourceList* resources; 00413 00414 LIST_ENTRY TimerList; 00415 KSPIN_LOCK TimerListLock; 00416 00417 DEVICE_POWER_STATE DevicePowerState; 00418 SYSTEM_POWER_STATE SystemPowerState; 00419 00420 } PCLASS_DEVICE_EXTENSION, *PPCLASS_DEVICE_EXTENSION; 00421 00422 00423 typedef struct 00424 { 00425 PVOID Pin; 00426 PIO_WORKITEM WorkItem; 00427 PIRP Irp; 00428 }CLOSESTREAM_CONTEXT, *PCLOSESTREAM_CONTEXT; 00429 00430 typedef struct 00431 { 00432 LIST_ENTRY Entry; 00433 PIO_TIMER_ROUTINE pTimerRoutine; 00434 PVOID Context; 00435 }TIMER_CONTEXT, *PTIMER_CONTEXT; 00436 00437 typedef struct 00438 { 00439 KSOBJECT_HEADER ObjectHeader; 00440 IIrpTarget * Target; 00441 PKSOBJECT_CREATE_ITEM CreateItem; 00442 }DISPATCH_CONTEXT, *PDISPATCH_CONTEXT; 00443 00444 #endif Generated on Sun May 27 2012 04:28:37 for ReactOS by
1.7.6.1
|