14 const GUID GUID_NULL = {0x00000000
L, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
15 const GUID KSMEDIUMSETID_Standard = {0x4747B320
L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
98 DPRINT(
"KsReleaseDevice\n");
205 ListEntry = ListEntry->
Flink;
403 IN PFNKSCONTEXT_DISPATCH PowerDispatch
OPTIONAL,
448 PKSOBJECT_CREATE_ITEM
461 IN PKSOBJECT_CREATE_ITEM ItemsList)
480 Entry->ReferenceCount = 0;
504 if (
Entry->ItemFreeCallback)
559 Header->BasicHeader.Parent.KsDevice = &
Header->KsDevice;
562 if (ItemsCount && ItemsList)
569 Header->ItemListCount = ItemsCount;
676 if (ItemsCount && ItemsList)
693 IoStack->
FileObject->FsContext2 = ObjectHeader;
761 while(
Entry != ListHead)
810 DPRINT(
"KsAddObjectCreateItemToDeviceHeader entered\n");
832 DPRINT(
"KsAddObjectCreateItemToDeviceHeader Status %x\n",
Status);
854 DPRINT(
"KsAddObjectCreateItemToDeviceHeader entered\n");
888 IN PKSOBJECT_CREATE_ITEM CreateItem,
890 IN PFNKSITEMFREECALLBACK ItemFreeCallback
OPTIONAL)
894 PKSOBJECT_CREATE_ITEM
Item;
927 Item->Context = CreateItem->Context;
928 Item->Create = CreateItem->Create;
929 Item->Flags = CreateItem->Flags;
930 Item->SecurityDescriptor = CreateItem->SecurityDescriptor;
931 Item->ObjectClass.Length = 0;
932 Item->ObjectClass.MaximumLength = CreateItem->ObjectClass.MaximumLength;
936 if (!
Item->ObjectClass.Buffer)
948 if (ItemFreeCallback)
951 ItemFreeCallback =
NULL;
975 IN PKSOBJECT_CREATE_ITEM CreateItem)
991 KSOBJECT_CREATE_ITEM
Item;
1010 KSOBJECT_CREATE_ITEM
Item;
1172 Irp->AssociatedIrp.SystemBuffer = InBuffer;
1275 PathAdjusted =
TRUE;
1374 DPRINT1(
"FileObject not attached!\n");
1381 if (!DriverObjectExtension)
1383 DPRINT1(
"No DriverObjectExtension!\n");
1392 DPRINT1(
"failed to allocate KO_OBJECT_HEADER\n");
1449 PKSOBJECT_CREATE_ITEM CreateItem;
1545 DriverObjectExtension->CreateObjectHandler = CreateObjectHandler;
1559 DPRINT1(
"Setting KS function handlers\n");
1626 IKsDevice *KsDevice;
1629 DPRINT(
"KsAcquireDevice\n");
1636 KsDevice->lpVtbl->AcquireDevice(KsDevice);
1647 IKsDevice *KsDevice;
1654 KsDevice->lpVtbl->ReleaseDevice(KsDevice);
1666 IKsDevice *KsDevice;
1671 DeviceHeader = DeviceExtension->DeviceHeader;
1683 KsDevice->lpVtbl->Release(KsDevice);
1844 IN ULONG MaxMappingsByteCount,
1898 IN PKSAUTOMATION_TABLE AutomationTableA
OPTIONAL,
1899 IN PKSAUTOMATION_TABLE AutomationTableB
OPTIONAL)
1904 if (!AutomationTableA)
1905 return AutomationTableB->MethodSetsCount;
1907 if (!AutomationTableB)
1908 return AutomationTableA->MethodSetsCount;
1911 DPRINT(
"AutomationTableA MethodItemSize %lu MethodSetsCount %lu\n", AutomationTableA->MethodItemSize, AutomationTableA->MethodSetsCount);
1912 DPRINT(
"AutomationTableB MethodItemSize %lu MethodSetsCount %lu\n", AutomationTableB->MethodItemSize, AutomationTableB->MethodSetsCount);
1914 if (AutomationTableA->MethodItemSize && AutomationTableB->MethodItemSize)
1917 ASSERT(AutomationTableA->MethodItemSize == AutomationTableB->MethodItemSize);
1921 Count = AutomationTableA->MethodSetsCount;
1928 for(SubIndex = 0; SubIndex < AutomationTableA->MethodSetsCount; SubIndex++)
1947 IN PKSAUTOMATION_TABLE AutomationTableA
OPTIONAL,
1948 IN PKSAUTOMATION_TABLE AutomationTableB
OPTIONAL)
1953 if (!AutomationTableA)
1954 return AutomationTableB->EventSetsCount;
1956 if (!AutomationTableB)
1957 return AutomationTableA->EventSetsCount;
1959 DPRINT(
"AutomationTableA EventItemSize %lu EventSetsCount %lu\n", AutomationTableA->EventItemSize, AutomationTableA->EventSetsCount);
1960 DPRINT(
"AutomationTableB EventItemSize %lu EventSetsCount %lu\n", AutomationTableB->EventItemSize, AutomationTableB->EventSetsCount);
1962 if (AutomationTableA->EventItemSize && AutomationTableB->EventItemSize)
1965 ASSERT(AutomationTableA->EventItemSize == AutomationTableB->EventItemSize);
1969 Count = AutomationTableA->EventSetsCount;
1976 for(SubIndex = 0; SubIndex < AutomationTableA->EventSetsCount; SubIndex++)
1996 IN PKSAUTOMATION_TABLE AutomationTableA
OPTIONAL,
1997 IN PKSAUTOMATION_TABLE AutomationTableB
OPTIONAL)
2002 if (!AutomationTableA)
2003 return AutomationTableB->PropertySetsCount;
2005 if (!AutomationTableB)
2006 return AutomationTableA->PropertySetsCount;
2009 DPRINT(
"AutomationTableA PropertyItemSize %lu PropertySetsCount %lu\n", AutomationTableA->PropertyItemSize, AutomationTableA->PropertySetsCount);
2010 DPRINT(
"AutomationTableB PropertyItemSize %lu PropertySetsCount %lu\n", AutomationTableB->PropertyItemSize, AutomationTableB->PropertySetsCount);
2011 ASSERT(AutomationTableA->PropertyItemSize == AutomationTableB->PropertyItemSize);
2014 Count = AutomationTableA->PropertySetsCount;
2021 for(SubIndex = 0; SubIndex < AutomationTableA->PropertySetsCount; SubIndex++)
2023 if (
IsEqualGUIDAligned(AutomationTableB->PropertySets[
Index].Set, AutomationTableA->PropertySets[SubIndex].Set))
2041 IN PKSAUTOMATION_TABLE AutomationTableA
OPTIONAL,
2042 IN PKSAUTOMATION_TABLE AutomationTableB
OPTIONAL)
2047 if (!AutomationTableA)
2050 RtlMoveMemory((
PVOID)
Table->MethodSets, AutomationTableB->MethodSets,
sizeof(KSMETHOD_SET) * AutomationTableB->MethodSetsCount);
2053 else if (!AutomationTableB)
2056 RtlMoveMemory((
PVOID)
Table->MethodSets, AutomationTableA->MethodSets,
sizeof(KSMETHOD_SET) * AutomationTableA->MethodSetsCount);
2061 RtlMoveMemory((
PVOID)
Table->MethodSets, AutomationTableA->MethodSets,
sizeof(KSMETHOD_SET) * AutomationTableA->MethodSetsCount);
2063 Count = AutomationTableA->MethodSetsCount;
2071 for(SubIndex = 0; SubIndex < AutomationTableA->MethodSetsCount; SubIndex++)
2094 OUT PKSPROPERTY_SET OutPropertySet,
2098 PKSPROPERTY_ITEM CurrentPropertyItem;
2102 CurrentPropertyItem = (PKSPROPERTY_ITEM)OutPropertySet->PropertyItem;
2105 if (CurrentPropertyItem->PropertyId ==
PropertyItem->PropertyId)
2112 CurrentPropertyItem = (PKSPROPERTY_ITEM)((
ULONG_PTR)CurrentPropertyItem + PropertyItemSize);
2116 OutPropertySet->PropertiesCount++;
2122 OUT PKSPROPERTY_SET OutPropertySet,
2123 IN PKSPROPERTY_SET PropertySetA,
2124 IN PKSPROPERTY_SET PropertySetB,
2132 PropertyCount = PropertySetA->PropertiesCount + PropertySetB->PropertiesCount;
2156 OutPropertySet->PropertiesCount = PropertySetA->PropertiesCount;
2160 CurrentPropertyItem = (PKSPROPERTY_ITEM)PropertySetB->PropertyItem;
2168 CurrentPropertyItem = (PKSPROPERTY_ITEM)((
ULONG_PTR)CurrentPropertyItem +
Table->PropertyItemSize);
2179 IN PKSAUTOMATION_TABLE AutomationTableA
OPTIONAL,
2180 IN PKSAUTOMATION_TABLE AutomationTableB
OPTIONAL,
2187 if (!AutomationTableA)
2190 RtlMoveMemory((
PVOID)
Table->PropertySets, AutomationTableB->PropertySets,
sizeof(KSPROPERTY_SET) * AutomationTableB->PropertySetsCount);
2193 else if (!AutomationTableB)
2196 RtlMoveMemory((
PVOID)
Table->PropertySets, AutomationTableA->PropertySets,
sizeof(KSPROPERTY_SET) * AutomationTableA->PropertySetsCount);
2201 RtlMoveMemory((
PVOID)
Table->PropertySets, AutomationTableA->PropertySets,
sizeof(KSPROPERTY_SET) * AutomationTableA->PropertySetsCount);
2203 Count = AutomationTableA->PropertySetsCount;
2211 for(SubIndex = 0; SubIndex < AutomationTableA->PropertySetsCount; SubIndex++)
2213 if (
IsEqualGUIDAligned(AutomationTableB->PropertySets[
Index].Set, AutomationTableA->PropertySets[SubIndex].Set))
2230 Status =
KspMergePropertySet(
Table, (PKSPROPERTY_SET)&
Table->PropertySets[SubIndex], (PKSPROPERTY_SET)&AutomationTableA->PropertySets[SubIndex], (PKSPROPERTY_SET)&AutomationTableB->PropertySets[
Index], Bag);
2246 IN PKSAUTOMATION_TABLE AutomationTableA
OPTIONAL,
2247 IN PKSAUTOMATION_TABLE AutomationTableB
OPTIONAL)
2252 if (!AutomationTableA)
2255 RtlMoveMemory((
PVOID)
Table->EventSets, AutomationTableB->EventSets,
sizeof(KSEVENT_SET) * AutomationTableB->EventSetsCount);
2258 else if (!AutomationTableB)
2261 RtlMoveMemory((
PVOID)
Table->EventSets, AutomationTableA->EventSets,
sizeof(KSEVENT_SET) * AutomationTableA->EventSetsCount);
2266 RtlMoveMemory((
PVOID)
Table->EventSets, AutomationTableA->EventSets,
sizeof(KSEVENT_SET) * AutomationTableA->EventSetsCount);
2268 Count = AutomationTableA->EventSetsCount;
2276 for(SubIndex = 0; SubIndex < AutomationTableA->EventSetsCount; SubIndex++)
2304 OUT PKSAUTOMATION_TABLE *AutomationTableAB,
2305 IN PKSAUTOMATION_TABLE AutomationTableA
OPTIONAL,
2306 IN PKSAUTOMATION_TABLE AutomationTableB
OPTIONAL,
2309 PKSAUTOMATION_TABLE
Table;
2312 if (!AutomationTableA && !AutomationTableB)
2339 if (
Table->PropertySetsCount)
2341 if (AutomationTableA)
2344 Table->PropertyItemSize = AutomationTableA->PropertyItemSize;
2349 Table->PropertyItemSize = AutomationTableB->PropertyItemSize;
2352 if (AutomationTableA && AutomationTableB)
2355 ASSERT(AutomationTableA->PropertyItemSize == AutomationTableB->PropertyItemSize);
2361 if (!
Table->PropertySets)
2388 if (
Table->MethodSetsCount)
2390 if (AutomationTableA)
2393 Table->MethodItemSize = AutomationTableA->MethodItemSize;
2398 Table->MethodItemSize = AutomationTableB->MethodItemSize;
2404 if (!
Table->MethodSets)
2431 if (
Table->EventSetsCount)
2433 if (AutomationTableA)
2436 Table->EventItemSize = AutomationTableA->EventItemSize;
2441 Table->EventItemSize = AutomationTableB->EventItemSize;
2447 if (!
Table->EventSets)
2471 *AutomationTableAB =
Table;
2480 if (
Table->PropertySets)
2487 if (
Table->MethodSets)
2494 if (
Table->EventSets)
2531 ClientUnknown->lpVtbl->AddRef(ClientUnknown);
PGENERIC_MAPPING NTAPI IoGetFileObjectGenericMapping(VOID)
#define DO_DEVICE_INITIALIZING
#define STATUS_OBJECT_NAME_COLLISION
KSDDKAPI NTSTATUS NTAPI KsDefaultDispatchPower(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
VOID KspAddPropertyItem(OUT PKSPROPERTY_SET OutPropertySet, IN PKSPROPERTY_ITEM PropertyItem, IN ULONG PropertyItemSize)
struct KSBASIC_HEADER * PKSBASIC_HEADER
NTSTATUS KspAddObjectCreateItemToList(PLIST_ENTRY ListHead, IN PDRIVER_DISPATCH Create, IN PVOID Context, IN PWCHAR ObjectClass, IN PSECURITY_DESCRIPTOR SecurityDescriptor)
KSDDKAPI NTSTATUS NTAPI KsDefaultDispatchPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
ULONG KspCountEventSets(IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL, IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL)
_Inout_ PLIST_ENTRY _In_ PVOID _In_ PSTRING _In_ BOOLEAN _In_ BOOLEAN _In_ ULONG _In_ PFLT_CALLBACK_DATA _In_opt_ PCHECK_FOR_TRAVERSE_ACCESS _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectContext
#define STATUS_DEVICE_REMOVED
COMDDKAPI NTSTATUS NTAPI KoDeviceInitialize(IN PDEVICE_OBJECT DeviceObject)
#define IOCTL_KS_WRITE_STREAM
KSDDKAPI NTSTATUS NTAPI KsDispatchSetSecurity(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define IRP_MN_REMOVE_DEVICE
#define STATUS_INSUFFICIENT_RESOURCES
_In_opt_ PDEVICE_OBJECT _In_ ULONG _Outptr_result_nullonfailure_ _At_ * SymbolicLinkList(return==0, __drv_allocatesMem(Mem))) PZZWSTR *SymbolicLinkList
NTSTATUS NTAPI KsAddItemToObjectBag(IN KSOBJECT_BAG ObjectBag, IN PVOID Item, IN PFNKSFREE Free OPTIONAL)
struct KSIDEVICE_HEADER * PKSIDEVICE_HEADER
_In_ ULONG _In_ ULONG _In_ ULONG Length
NTSTATUS NTAPI IoOpenDeviceInterfaceRegistryKey(IN PUNICODE_STRING SymbolicLinkName, IN ACCESS_MASK DesiredAccess, OUT PHANDLE DeviceInterfaceKey)
NTSTATUS(* KoCreateObjectHandler)(IN REFCLSID ClassId, IN IUnknown *UnkOuter OPTIONAL, IN REFIID InterfaceId, OUT PVOID *Interface)
KSDDKAPI NTSTATUS NTAPI KsDispatchQuerySecurity(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
_In_ UCHAR _In_ ULONG _Out_ PUCHAR _Outptr_result_bytebuffer_ OutBufferLength PVOID * OutBuffer
KSIDENTIFIER KSPIN_MEDIUM
NTSTATUS NTAPI IoAllocateDriverObjectExtension(IN PDRIVER_OBJECT DriverObject, IN PVOID ClientIdentificationAddress, IN ULONG DriverObjectExtensionSize, OUT PVOID *DriverObjectExtension)
ULONG KspCountMethodSets(IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL, IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL)
#define OBJ_CASE_INSENSITIVE
KSDDKAPI NTSTATUS NTAPI KsUnserializeObjectPropertiesFromRegistry(IN PFILE_OBJECT FileObject, IN HANDLE ParentKey OPTIONAL, IN PUNICODE_STRING RegistryPath OPTIONAL)
_Must_inspect_result_ __drv_aliasesMem PDEVICE_OBJECT _In_ PDEVICE_OBJECT TargetDevice
NTSTATUS NTAPI KsMergeAutomationTables(OUT PKSAUTOMATION_TABLE *AutomationTableAB, IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL, IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL, IN KSOBJECT_BAG Bag OPTIONAL)
#define STATUS_MORE_PROCESSING_REQUIRED
KSDDKAPI NTSTATUS NTAPI KsAllocateDeviceHeader(OUT KSDEVICE_HEADER *OutHeader, IN ULONG ItemsCount, IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL)
IN BOOLEAN OUT PSTR Buffer
KSDDKAPI VOID NTAPI KsSetDevicePnpAndBaseObject(IN KSDEVICE_HEADER Header, IN PDEVICE_OBJECT PnpDeviceObject, IN PDEVICE_OBJECT BaseDevice)
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH _In_opt_ PEPROCESS _In_opt_ PETHREAD _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
#define STATUS_INVALID_PARAMETER
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
#define IOCTL_KS_READ_STREAM
ULONG KspCountPropertySets(IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL, IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL)
NTSTATUS NTAPI KsRegisterFilterWithNoKSPins(IN PDEVICE_OBJECT DeviceObject, IN const GUID *InterfaceClassGUID, IN ULONG PinCount, IN BOOL *PinDirection, IN KSPIN_MEDIUM *MediumList, IN GUID *CategoryList OPTIONAL)
#define IRP_MN_WRITE_CONFIG
struct KSIOBJECT_HEADER * PKSIOBJECT_HEADER
static PVOID Mapping[EMS_PHYSICAL_PAGES]
PVOID AllocateItem(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes)
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
KSDDKAPI VOID NTAPI KsNullDriverUnload(IN PDRIVER_OBJECT DriverObject)
NTSTATUS NTAPI KopDispatchCreate(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
KSDDKAPI PDEVICE_OBJECT NTAPI KsQueryDevicePnpObject(IN KSDEVICE_HEADER Header)
KSDDKAPI BOOLEAN NTAPI KsDispatchFastIoDeviceControlFailure(IN PFILE_OBJECT FileObject, IN BOOLEAN Wait, IN PVOID InputBuffer OPTIONAL, IN ULONG InputBufferLength, OUT PVOID OutputBuffer OPTIONAL, IN ULONG OutputBufferLength, IN ULONG IoControlCode, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
IN PVOID IN PVOID IN USHORT IN USHORT Size
KSDDKAPI VOID NTAPI KsAcquireControl(IN PVOID Object)
NTSTATUS NTAPI IoGetDeviceInterfaces(IN CONST GUID *InterfaceClassGuid, IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, IN ULONG Flags, OUT PWSTR *SymbolicLinkList)
VOID NTAPI IoDetachDevice(IN PDEVICE_OBJECT TargetDevice)
NTSTATUS KspDeviceSetGetBusData(IN PDEVICE_OBJECT DeviceObject, IN ULONG DataType, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length, IN BOOL bGet)
KSDDKAPI ULONG NTAPI KsRemoveItemFromObjectBag(IN KSOBJECT_BAG ObjectBag, IN PVOID Item, IN BOOLEAN Free)
PDEVICE_OBJECT NTAPI IoGetRelatedDeviceObject(IN PFILE_OBJECT FileObject)
PDEVICE_OBJECT PhysicalDeviceObject
#define InsertTailList(ListHead, Entry)
_In_ const GUID _In_ ULONG PinCount
LONG NTAPI KeReleaseMutex(IN PKMUTEX Mutex, IN BOOLEAN Wait)
LONG NTAPI KeSetEvent(IN PKEVENT Event, IN KPRIORITY Increment, IN BOOLEAN Wait)
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
KSDDKAPI ULONG NTAPI KsDeviceSetBusData(IN PKSDEVICE Device, IN ULONG DataType, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length)
#define OBJ_KERNEL_HANDLE
NTSTATUS NTAPI KspSynchronousIoControlDeviceCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
NTSTATUS NTAPI KopAddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalDeviceObject)
VOID NTAPI KsReleaseControl(IN PVOID Object)
KSDDKAPI VOID NTAPI KsFreeObjectHeader(IN PVOID Header)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_ ULONG _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesReturned
#define RtlMoveMemory(Destination, Source, Length)
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
KSDDKAPI NTSTATUS NTAPI KsSetMajorFunctionHandler(IN PDRIVER_OBJECT DriverObject, IN ULONG MajorFunction)
#define IsEqualGUIDAligned(guid1, guid2)
KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI KsQueryObjectCreateItem(IN KSOBJECT_HEADER Header)
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
KSDDKAPI void NTAPI KsDeviceRegisterAdapterObject(IN PKSDEVICE Device, IN PADAPTER_OBJECT AdapterObject, IN ULONG MaxMappingsByteCount, IN ULONG MappingTableStride)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
BOOLEAN NTAPI ExAcquireResourceExclusiveLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
KSDDKAPI NTSTATUS NTAPI KsSynchronousIoControlDevice(IN PFILE_OBJECT FileObject, IN KPROCESSOR_MODE RequestorMode, IN ULONG IoControl, IN PVOID InBuffer, IN ULONG InSize, OUT PVOID OutBuffer, IN ULONG OutSize, OUT PULONG BytesReturned)
_In_ PDEVICE_OBJECT DeviceObject
return STATUS_NOT_IMPLEMENTED
VOID FreeItem(IN PVOID Item)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
KSDDKAPI NTSTATUS NTAPI KsForwardIrp(IN PIRP Irp, IN PFILE_OBJECT FileObject, IN BOOLEAN ReuseStackLocation)
const GUID KSMEDIUMSETID_Standard
PDEVICE_OBJECT NTAPI IoAttachDeviceToDeviceStack(IN PDEVICE_OBJECT SourceDevice, IN PDEVICE_OBJECT TargetDevice)
PFNKSITEMFREECALLBACK ItemFreeCallback
_In_ UCHAR _In_ UCHAR MinorFunction
NTSTATUS KspCopyEventSets(OUT PKSAUTOMATION_TABLE Table, IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL, IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL)
KSDDKAPI VOID NTAPI KsRecalculateStackDepth(IN KSDEVICE_HEADER Header, IN BOOLEAN ReuseStackLocation)
_In_ PVOID _In_ ULONG Event
PKSOBJECT_CREATE_ITEM CreateItem
#define STATUS_INVALID_PARAMETER_2
NTSTATUS KspAddCreateItemToList(OUT PLIST_ENTRY ListHead, IN ULONG ItemsCount, IN PKSOBJECT_CREATE_ITEM ItemsList)
KSDDKAPI NTSTATUS NTAPI KsCacheMedium(IN PUNICODE_STRING SymbolicLink, IN PKSPIN_MEDIUM Medium, IN ULONG PinDirection)
FORCEINLINE PLIST_ENTRY RemoveHeadList(_Inout_ PLIST_ENTRY ListHead)
struct CREATE_ITEM_ENTRY * PCREATE_ITEM_ENTRY
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)
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
NTSTATUS KspObjectFreeCreateItems(IN KSDEVICE_HEADER Header, IN PKSOBJECT_CREATE_ITEM CreateItem)
#define IRP_MN_READ_CONFIG
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
#define STATUS_INVALID_PARAMETER_5
#define DEVICE_INTERFACE_INCLUDE_NONACTIVE
KSDDKAPI VOID NTAPI KsTerminateDevice(IN PDEVICE_OBJECT DeviceObject)
NTSTATUS RtlAppendUnicodeToString(IN PUNICODE_STRING Str1, IN PWSTR Str2)
struct _LIST_ENTRY * Flink
KSDDKAPI VOID NTAPI KsReleaseDeviceSecurityLock(IN KSDEVICE_HEADER DevHeader)
KSDDKAPI PUNKNOWN NTAPI KsRegisterAggregatedClientUnknown(IN PVOID Object, IN PUNKNOWN ClientUnknown)
NTSTATUS KspCopyMethodSets(OUT PKSAUTOMATION_TABLE Table, IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL, IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL)
KSDDKAPI NTSTATUS NTAPI KsDispatchInvalidDeviceRequest(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define STATUS_ALLOTTED_SPACE_EXCEEDED
#define NT_SUCCESS(StatCode)
_In_ WDFCOLLECTION _In_ ULONG Index
#define EXCEPTION_EXECUTE_HANDLER
KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItemsByContext(IN KSDEVICE_HEADER Header, IN PVOID Context)
VOID NTAPI SeCaptureSubjectContext(_Out_ PSECURITY_SUBJECT_CONTEXT SubjectContext)
Captures the security subject context of the calling thread and calling process.
VOID NTAPI KsReleaseDevice(IN PKSDEVICE Device)
KSDDKAPI PVOID NTAPI KsGetFirstChild(IN PVOID Object)
__in PWDFDEVICE_INIT __in BOOLEAN Exclusive
COMDDKAPI VOID NTAPI KoRelease(IN REFCLSID ClassId)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
struct _IO_STATUS_BLOCK * PIO_STATUS_BLOCK
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
NTSTATUS NTAPI CompleteRequest(IN PIRP Irp, IN NTSTATUS Status, IN ULONG_PTR Information)
#define STATUS_UNSUCCESSFUL
struct KO_DRIVER_EXTENSION * PKO_DRIVER_EXTENSION
_Inout_opt_ PDEVICE_OBJECT _Inout_opt_ PDEVICE_OBJECT _Inout_opt_ PDEVICE_OBJECT * NextDeviceObject
VOID NTAPI KeInitializeMutex(IN PKMUTEX Mutex, IN ULONG Level)
static KSDISPATCH_TABLE KoDispatchTable
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
KSDDKAPI VOID NTAPI KsAcquireDeviceSecurityLock(IN KSDEVICE_HEADER DevHeader, IN BOOLEAN Exclusive)
struct PropertyItem PropertyItem
KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToDeviceHeader(IN KSDEVICE_HEADER DevHeader, IN PDRIVER_DISPATCH Create, IN PVOID Context, IN PWCHAR ObjectClass, IN PSECURITY_DESCRIPTOR SecurityDescriptor)
KSDDKAPI VOID NTAPI KsFreeDeviceHeader(IN KSDEVICE_HEADER DevHeader)
NTSTATUS KspMergePropertySet(OUT PKSAUTOMATION_TABLE Table, OUT PKSPROPERTY_SET OutPropertySet, IN PKSPROPERTY_SET PropertySetA, IN PKSPROPERTY_SET PropertySetB, IN KSOBJECT_BAG Bag OPTIONAL)
#define STATUS_INVALID_PARAMETER_1
PVOID NTAPI IoGetDriverObjectExtension(IN PDRIVER_OBJECT DriverObject, IN PVOID ClientIdentificationAddress)
#define KeEnterCriticalRegion()
KSDDKAPI NTSTATUS NTAPI KsAllocateObjectCreateItem(IN KSDEVICE_HEADER DevHeader, IN PKSOBJECT_CREATE_ITEM CreateItem, IN BOOLEAN AllocateEntry, IN PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL)
KSDDKAPI ULONG NTAPI KsDeviceGetBusData(IN PKSDEVICE Device, IN ULONG DataType, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length)
KSDDKAPI VOID NTAPI KsCompletePendingRequest(IN PIRP Irp)
KSDDKAPI VOID NTAPI KsSetPowerDispatch(IN KSOBJECT_HEADER Header, IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL, IN PVOID PowerContext OPTIONAL)
_Must_inspect_result_ _In_ WDFDEVICE Device
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
#define KOSTRING_CreateObject
#define IRP_MJ_SYSTEM_CONTROL
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
_In_ WDF_POWER_DEVICE_STATE TargetState
KSDDKAPI NTSTATUS NTAPI KsForwardAndCatchIrp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PFILE_OBJECT FileObject, IN KSSTACK_USE StackUse)
VOID KspFreeCreateItems(PLIST_ENTRY ListHead)
KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToObjectHeader(IN KSOBJECT_HEADER ObjectHeader, IN PDRIVER_DISPATCH Create, IN PVOID Context, IN PWCHAR ObjectClass, IN PSECURITY_DESCRIPTOR SecurityDescriptor)
_In_ ULONG _In_ ULONG Offset
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
KSDDKAPI NTSTATUS NTAPI KsCreateDefaultSecurity(IN PSECURITY_DESCRIPTOR ParentSecurity OPTIONAL, OUT PSECURITY_DESCRIPTOR *DefaultSecurity)
DRIVER_DISPATCH * PDRIVER_DISPATCH
_Must_inspect_result_ _In_opt_ WDFKEY ParentKey
PRTL_UNICODE_STRING_BUFFER Path
#define KeLeaveCriticalRegion()
#define KeInitializeEvent(pEvt, foo, foo2)
#define InterlockedIncrement
KSDDKAPI PVOID NTAPI KsGetNextSibling(IN PVOID Object)
VOID NTAPI PoStartNextPowerIrp(IN PIRP Irp)
KSDDKAPI NTSTATUS NTAPI KsDefaultForwardIrp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
KSDDKAPI VOID NTAPI KsSetTargetDeviceObject(IN KSOBJECT_HEADER Header, IN PDEVICE_OBJECT TargetDevice OPTIONAL)
KSDDKAPI BOOLEAN NTAPI KsDispatchFastReadFailure(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN Wait, IN ULONG LockKey, OUT PVOID Buffer, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
#define InitializeListHead(ListHead)
KSDDKAPI ACCESS_MASK NTAPI KsQueryObjectAccessMask(IN KSOBJECT_HEADER Header)
NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeStringToString(PUNICODE_STRING Destination, PUNICODE_STRING Source)
NTSYSAPI NTSTATUS WINAPI RtlStringFromGUID(REFGUID, PUNICODE_STRING)
_Inout_opt_ PDEVICE_OBJECT _Inout_opt_ PDEVICE_OBJECT * FunctionalDeviceObject
static OUT PIO_STATUS_BLOCK IoStatusBlock
LIST_ENTRY ObjectItemList
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
COMDDKAPI NTSTATUS NTAPI KoDriverInitialize(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPathName, IN KoCreateObjectHandler CreateObjectHandler)
#define IoSkipCurrentIrpStackLocation(Irp)
VOID NTAPI SeReleaseSubjectContext(_In_ PSECURITY_SUBJECT_CONTEXT SubjectContext)
Releases both the primary and client tokens of a security subject context.
NTSTATUS KspCopyPropertySets(OUT PKSAUTOMATION_TABLE Table, IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL, IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL, IN KSOBJECT_BAG Bag OPTIONAL)
NTSTATUS NTAPI DllInitialize(PUNICODE_STRING RegistryPath)
BOOLEAN NTAPI ExAcquireResourceSharedLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
_In_ WDFCOLLECTION _In_ WDFOBJECT Item
PIRP NTAPI IoBuildDeviceIoControlRequest(IN ULONG IoControlCode, IN PDEVICE_OBJECT DeviceObject, IN PVOID InputBuffer, IN ULONG InputBufferLength, IN PVOID OutputBuffer, IN ULONG OutputBufferLength, IN BOOLEAN InternalDeviceIoControl, IN PKEVENT Event, IN PIO_STATUS_BLOCK IoStatusBlock)
KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItem(IN KSDEVICE_HEADER Header, IN PUNICODE_STRING CreateItem)
struct tagContext Context
VOID NTAPI IoFreeIrp(IN PIRP Irp)
KSDDKAPI NTSTATUS NTAPI KsAllocateObjectHeader(OUT KSOBJECT_HEADER *Header, IN ULONG ItemsCount, IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL, IN PIRP Irp, IN KSDISPATCH_TABLE *Table)
KSDDKAPI VOID NTAPI KsAcquireDevice(IN PKSDEVICE Device)
NTSTATUS NTAPI IoCreateDevice(IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
NTSTATUS NTAPI KopDispatchClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define InitializeObjectAttributes(p, n, a, r, s)
char * cleanup(char *str)
#define RtlCopyMemory(Destination, Source, Length)
PIRP NTAPI IoAllocateIrp(IN CCHAR StackSize, IN BOOLEAN ChargeQuota)
#define FILE_DEVICE_SECURE_OPEN
#define _SEH2_EXCEPT(...)
_Must_inspect_result_ _In_ WDFDEVICE _In_ CONST GUID * InterfaceClassGUID
#define _SEH2_GetExceptionCode()
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
#define STATUS_INVALID_PARAMETER_4
KSDDKAPI NTSTATUS NTAPI KsAcquireResetValue(IN PIRP Irp, OUT KSRESET *ResetValue)
KSDDKAPI VOID NTAPI KsSetTargetState(IN KSOBJECT_HEADER Header, IN KSTARGET_STATE TargetState)
struct KO_OBJECT_HEADER * PKO_OBJECT_HEADER
struct _BEEP_DEVICE_EXTENSION * PDEVICE_EXTENSION
HRESULT Create([out]ITransactionReceiver **ppReceiver)
KSDDKAPI VOID NTAPI KsDereferenceBusObject(IN KSDEVICE_HEADER Header)
base of all file and directory entries
static const WCHAR SymbolicLink[]
#define IRP_MJ_DEVICE_CONTROL
#define RTL_CONSTANT_STRING(s)
PULONG MinorVersion OPTIONAL
NTSTATUS NTAPI KspSetGetBusDataCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)