31 if (
This->BasicHeader.ClientAggregate)
34 Status =
This->BasicHeader.ClientAggregate->lpVtbl->QueryInterface(
This->BasicHeader.ClientAggregate, refiid,
Output);
43 DPRINT(
"IKsDevice_fnQueryInterface no interface\n");
78 return &
This->KsDevice;
97 Bag->BagMutex =
Mutex;
110 IN IKsDevice * iface)
120 IN IKsDevice * iface)
130 IN IKsDevice * iface,
138 *MaxMappingsByteCount =
This->MaxMappingsByteCount;
139 *MappingTableStride =
This->MappingTableStride;
148 IN IKsDevice * iface,
149 IN struct KSPOWER_ENTRY *
Entry,
161 IN IKsDevice * iface,
162 IN struct KSPOWER_ENTRY *
Entry)
174 IN IKsDevice * iface,
190 IN IKsDevice * iface,
214 IN IKsDevice * iface,
271 DPRINT(
"IKsDevice_PnpPostStart: PostStart Routine returned %x\n",
Status);
293 DeviceHeader = DeviceExtension->DeviceHeader;
295 DPRINT(
"IKsDevice_PnpStartDevice DeviceHeader %p\n", DeviceHeader);
303 DPRINT1(
"NextDevice object failed to start with %x\n",
Status);
309 TranslatedResourceList = IoStack->
Parameters.StartDevice.AllocatedResourcesTranslated;
310 UntranslatedResourceList = IoStack->
Parameters.StartDevice.AllocatedResources;
315 if (DeviceHeader->
KsDevice.Descriptor)
318 if (DeviceHeader->
KsDevice.Descriptor->Dispatch)
321 if (DeviceHeader->
KsDevice.Descriptor->Dispatch->Start)
325 TranslatedResourceList,
326 UntranslatedResourceList);
329 DPRINT(
"IKsDevice_PnpStartDevice Start %p, Context %p\n", DeviceHeader->
KsDevice.Descriptor->Dispatch->Start, DeviceHeader->
KsDevice.Context);
346 if (DeviceHeader->
KsDevice.Descriptor->Dispatch->PostStart)
400 DPRINT(
"IKsDevice_PnpStartDevice Status %x PostStartRoutine %p\n",
Status, Ctx);
422 DeviceHeader = DeviceExtension->DeviceHeader;
514 DPRINT1(
"IRP_MN_QUERY_INTERFACE Device supports interface\n");
523 DPRINT1(
"IRP_MN_QUERY_INTERFACE Next Device: Status %x\n",
Status);
533 DPRINT(
"IRP_MN_QUERY_DEVICE_RELATIONS Next Device: Status %x\n",
Status);
544 DPRINT(
"IRP_MN_FILTER_RESOURCE_REQUIREMENTS Next Device: Status %x\n",
Status);
555 DPRINT(
"IRP_MN_QUERY_RESOURCE_REQUIREMENTS Next Device: Status %x\n",
Status);
583 Irp->IoStatus.Information = 0;
602 DPRINT(
"IKsDevice_Create\n");
608 DeviceHeader = DeviceExtension->DeviceHeader;
651 KSCREATE_ITEM_IRP_STORAGE(
Irp) = CreateItemEntry->
CreateItem;
699 Header = DeviceExtension->DeviceHeader;
701 DPRINT1(
"DeviceHeader %p\n", DeviceExtension->DeviceHeader);
714 DPRINT(
"Descriptor QueryCapabilities %p\n",
Descriptor->Dispatch->QueryCapabilities);
715 DPRINT(
"Descriptor SurpriseRemoval %p\n",
Descriptor->Dispatch->SurpriseRemoval);
718 DPRINT(
"Descriptor QueryInterface %p\n",
Descriptor->Dispatch->QueryInterface);
724 DPRINT1(
"KsInitializeDevice Failed to allocate device header with %x\n",
Status);
734 if (!
Header->KsDevice.Bag)
770 DPRINT(
"KsInitializeDevice FilterDescriptorCount %lu\n",
Descriptor->FilterDescriptorsCount);
775 DPRINT(
"KsInitializeDevice Index %lu KspCreateFilterFactory Status %lx\n",
Index,
Status);
882 DPRINT(
"KsDereferenceSoftwareBusObject DeviceHeader %p\n",
Header);
#define KeGetCurrentIrql()
BOOL WINAPI SHIM_OBJ_NAME() Notify(DWORD fdwReason, PVOID ptr)
NTSTATUS NTAPI IKsDevice_Pnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI IKsDevice_fnQueryInterface(IN IKsDevice *iface, REFIID refiid, PVOID *Output)
#define IRP_MN_REMOVE_DEVICE
#define STATUS_INSUFFICIENT_RESOURCES
struct KSIDEVICE_HEADER * PKSIDEVICE_HEADER
_In_ PIRP _In_ PDEVICE_OBJECT Device
_Out_ PULONG NumberOfMapRegisters
KSDDKAPI NTSTATUS NTAPI KsReferenceSoftwareBusObject(IN KSDEVICE_HEADER Header)
KSDDKAPI VOID NTAPI KsDereferenceSoftwareBusObject(IN KSDEVICE_HEADER Header)
NTSTATUS NTAPI IKsDevice_fnInitializeObjectBag(IN IKsDevice *iface, IN PKSIOBJECT_BAG Bag, IN PRKMUTEX Mutex)
#define STATUS_NOT_IMPLEMENTED
KSDDKAPI NTSTATUS NTAPI KsAllocateDeviceHeader(OUT KSDEVICE_HEADER *OutHeader, IN ULONG ItemsCount, IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL)
NTSTATUS NTAPI IKsDevice_Power(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
PKSDEVICE NTAPI IKsDevice_fnGetStruct(IN IKsDevice *iface)
KSDDKAPI VOID NTAPI KsSetDevicePnpAndBaseObject(IN KSDEVICE_HEADER Header, IN PDEVICE_OBJECT PnpDeviceObject, IN PDEVICE_OBJECT BaseDevice)
#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS
#define IRP_MN_QUERY_RESOURCE_REQUIREMENTS
struct KSIOBJECT_HEADER * PKSIOBJECT_HEADER
PVOID AllocateItem(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes)
ULONG NTAPI IKsDevice_fnRelease(IN IKsDevice *iface)
NTSTATUS NTAPI IKsDevice_fnReleaseDevice(IN IKsDevice *iface)
static IKsDeviceVtbl vt_IKsDevice
NTSTATUS NTAPI IKsDevice_fnCheckIoCapability(IN IKsDevice *iface, IN ULONG Unknown)
PDEVICE_OBJECT PhysicalDeviceObject
#define InsertTailList(ListHead, Entry)
NTSTATUS NTAPI IKsDevice_PnpStartDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
LONG NTAPI KeReleaseMutex(IN PKMUTEX Mutex, IN BOOLEAN Wait)
PIO_WORKITEM NTAPI IoAllocateWorkItem(IN PDEVICE_OBJECT DeviceObject)
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
VOID NTAPI IoFreeWorkItem(IN PIO_WORKITEM IoWorkItem)
struct KSIOBJECT_BAG * PKSIOBJECT_BAG
#define IsEqualGUIDAligned(guid1, guid2)
VOID FreeItem(IN PVOID Item)
long __cdecl _InterlockedIncrement(_Interlocked_operand_ long volatile *_Addend)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
PKSOBJECT_CREATE_ITEM CreateItem
#define IoCompleteRequest
NTSTATUS NTAPI IKsDevice_fnAcquireDevice(IN IKsDevice *iface)
KSDDKAPI NTSTATUS NTAPI KsInitializeDevice(IN PDEVICE_OBJECT FunctionalDeviceObject, IN PDEVICE_OBJECT PhysicalDeviceObject, IN PDEVICE_OBJECT NextDeviceObject, IN const KSDEVICE_DESCRIPTOR *Descriptor OPTIONAL)
NTSTATUS KspSetFilterFactoriesState(IN PKSIDEVICE_HEADER DeviceHeader, IN BOOLEAN NewState)
NTSTATUS NTAPI IKsDevice_fnPinStateChange(IN IKsDevice *iface, IN KSPIN Pin, IN PIRP Irp, IN KSSTATE OldState, IN KSSTATE NewState)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
NTSTATUS NTAPI KspCreateFilterFactory(IN PDEVICE_OBJECT DeviceObject, IN const KSFILTER_DESCRIPTOR *Descriptor, IN PWSTR RefString OPTIONAL, IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL, IN ULONG CreateItemFlags, IN PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL, IN PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL, OUT PKSFILTERFACTORY *FilterFactory OPTIONAL)
#define IRP_MN_QUERY_STOP_DEVICE
PKSIDEVICE_HEADER DeviceHeader
NTSTATUS NTAPI IoAllocateAdapterChannel(IN PADAPTER_OBJECT AdapterObject, IN PDEVICE_OBJECT DeviceObject, IN ULONG NumberOfMapRegisters, IN PDRIVER_CONTROL ExecutionRoutine, IN PVOID Context)
ULONG NTAPI IKsDevice_fnAddRef(IN IKsDevice *iface)
IN PDCB IN VBO IN ULONG IN BOOLEAN Pin
#define NT_SUCCESS(StatCode)
NTSTATUS NTAPI IKsDevice_fnArbitrateAdapterChannel(IN IKsDevice *iface, IN ULONG NumberOfMapRegisters, IN PDRIVER_CONTROL ExecutionRoutine, IN PVOID Context)
NTSTATUS NTAPI IKsDevice_fnGetAdapterObject(IN IKsDevice *iface, IN PADAPTER_OBJECT *Object, IN PULONG MaxMappingsByteCount, IN PULONG MappingTableStride)
#define IRP_MN_START_DEVICE
static const UCHAR Index[8]
#define IRP_MN_QUERY_INTERFACE
NTSTATUS NTAPI CompleteRequest(IN PIRP Irp, IN NTSTATUS Status, IN ULONG_PTR Information)
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
#define STATUS_UNSUCCESSFUL
_Inout_opt_ PDEVICE_OBJECT _Inout_opt_ PDEVICE_OBJECT _Inout_opt_ PDEVICE_OBJECT * NextDeviceObject
VOID NTAPI KeInitializeMutex(IN PKMUTEX Mutex, IN ULONG Level)
VOID NTAPI IKsDevice_PnpPostStart(IN PDEVICE_OBJECT DeviceObject, IN PVOID Context)
#define InterlockedDecrement
KSDDKAPI VOID NTAPI KsFreeDeviceHeader(IN KSDEVICE_HEADER DevHeader)
NTSTATUS NTAPI IKsDevice_fnRemovePowerEntry(IN IKsDevice *iface, IN struct KSPOWER_ENTRY *Entry)
VOID NTAPI IoQueueWorkItem(IN PIO_WORKITEM IoWorkItem, IN PIO_WORKITEM_ROUTINE WorkerRoutine, IN WORK_QUEUE_TYPE QueueType, IN PVOID Context)
IN PDEVICE_OBJECT DeviceObject
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH * Dispatch
KSDDKAPI NTSTATUS NTAPI KsReferenceBusObject(IN KSDEVICE_HEADER Header)
#define InterlockedIncrement
#define InitializeListHead(ListHead)
struct PNP_POSTSTART_CONTEXT * PPNP_POSTSTART_CONTEXT
_Inout_opt_ PDEVICE_OBJECT _Inout_opt_ PDEVICE_OBJECT * FunctionalDeviceObject
NTSTATUS FindMatchingCreateItem(PLIST_ENTRY ListHead, PUNICODE_STRING String, OUT PCREATE_ITEM_ENTRY *OutCreateItem)
#define IRP_MN_QUERY_DEVICE_RELATIONS
_In_ PDEVICE_OBJECT _In_ ULONG _In_ PDRIVER_CONTROL ExecutionRoutine
#define STATUS_NOT_SUPPORTED
NTSTATUS KspForwardIrpSynchronous(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
DRIVER_CONTROL * PDRIVER_CONTROL
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
NTSTATUS NTAPI IKsDevice_fnAddPowerEntry(IN IKsDevice *iface, IN struct KSPOWER_ENTRY *Entry, IN IKsPowerNotify *Notify)
struct _BEEP_DEVICE_EXTENSION * PDEVICE_EXTENSION
KSDDKAPI VOID NTAPI KsDereferenceBusObject(IN KSDEVICE_HEADER Header)
base of all file and directory entries
NTSTATUS NTAPI IKsDevice_Create(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
_In_ PSTORAGE_PROPERTY_ID _Outptr_ PSTORAGE_DESCRIPTOR_HEADER * Descriptor
PULONG MinorVersion OPTIONAL