Reactos
at master 162 lines 3.3 kB view raw
1#pragma once 2 3#ifndef _SWENUM_ 4#define _SWENUM_ 5 6#define IOCTL_SWENUM_INSTALL_INTERFACE \ 7 CTL_CODE(FILE_DEVICE_BUS_EXTENDER, 0x000, METHOD_BUFFERED, FILE_ANY_ACCESS) 8 9#define IOCTL_SWENUM_REMOVE_INTERFACE \ 10 CTL_CODE(FILE_DEVICE_BUS_EXTENDER, 0x001, METHOD_BUFFERED, FILE_ANY_ACCESS) 11 12#define IOCTL_SWENUM_GET_BUS_ID \ 13 CTL_CODE(FILE_DEVICE_BUS_EXTENDER, 0x002, METHOD_NEITHER, FILE_READ_ACCESS) 14 15typedef struct _SWENUM_INSTALL_INTERFACE { 16 GUID DeviceId; 17 GUID InterfaceId; 18 WCHAR ReferenceString[1]; 19} SWENUM_INSTALL_INTERFACE, *PSWENUM_INSTALL_INTERFACE; 20 21#ifdef _KS_ 22#define STATIC_BUSID_SoftwareDeviceEnumerator STATIC_KSMEDIUMSETID_Standard 23#define BUSID_SoftwareDeviceEnumerator KSMEDIUMSETID_Standard 24#else 25#define STATIC_BUSID_SoftwareDeviceEnumerator \ 26 0x4747B320L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00} 27#endif /* _KS_ */ 28 29#ifdef _NTDDK_ 30 31#ifndef _KS_ 32 33typedef VOID 34(NTAPI *PFNREFERENCEDEVICEOBJECT)( 35 _In_ PVOID Context); 36 37typedef VOID 38(NTAPI *PFNDEREFERENCEDEVICEOBJECT)( 39 _In_ PVOID Context); 40 41typedef NTSTATUS 42(NTAPI *PFNQUERYREFERENCESTRING)( 43 _In_ PVOID Context, 44 _Inout_ PWCHAR *String); 45 46#endif /* !_KS_ */ 47 48#define BUS_INTERFACE_SWENUM_VERSION 0x100 49 50typedef struct _BUS_INTERFACE_SWENUM { 51 INTERFACE Interface; 52 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject; 53 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject; 54 PFNQUERYREFERENCESTRING QueryReferenceString; 55} BUS_INTERFACE_SWENUM, *PBUS_INTERFACE_SWENUM; 56 57#if defined(__cplusplus) 58extern "C" { 59#endif 60 61#ifdef _KS_ 62 63KSDDKAPI 64NTSTATUS 65NTAPI 66KsQuerySoftwareBusInterface( 67 _In_ PDEVICE_OBJECT PnpDeviceObject, 68 _Out_ PBUS_INTERFACE_SWENUM BusInterface); 69 70KSDDKAPI 71NTSTATUS 72NTAPI 73KsReferenceSoftwareBusObject( 74 _In_ KSDEVICE_HEADER Header); 75 76KSDDKAPI 77VOID 78NTAPI 79KsDereferenceSoftwareBusObject( 80 _In_ KSDEVICE_HEADER Header); 81 82_IRQL_requires_max_(PASSIVE_LEVEL) 83KSDDKAPI 84NTSTATUS 85NTAPI 86KsCreateBusEnumObject( 87 _In_ PWSTR BusIdentifier, 88 _In_ PDEVICE_OBJECT BusDeviceObject, 89 _In_ PDEVICE_OBJECT PhysicalDeviceObject, 90 _In_opt_ PDEVICE_OBJECT PnpDeviceObject, 91 _In_opt_ REFGUID InterfaceGuid, 92 _In_opt_ PWSTR ServiceRelativePath); 93 94KSDDKAPI 95NTSTATUS 96NTAPI 97KsGetBusEnumIdentifier( 98 _Inout_ PIRP Irp); 99 100_IRQL_requires_max_(PASSIVE_LEVEL) 101KSDDKAPI 102NTSTATUS 103NTAPI 104KsGetBusEnumPnpDeviceObject( 105 _In_ PDEVICE_OBJECT DeviceObject, 106 _Out_ PDEVICE_OBJECT *PnpDeviceObject); 107 108_IRQL_requires_max_(PASSIVE_LEVEL) 109KSDDKAPI 110NTSTATUS 111NTAPI 112KsInstallBusEnumInterface( 113 _In_ PIRP Irp); 114 115_IRQL_requires_max_(PASSIVE_LEVEL) 116KSDDKAPI 117NTSTATUS 118NTAPI 119KsIsBusEnumChildDevice( 120 _In_ PDEVICE_OBJECT DeviceObject, 121 _Out_ PBOOLEAN ChildDevice); 122 123_IRQL_requires_max_(PASSIVE_LEVEL) 124KSDDKAPI 125NTSTATUS 126NTAPI 127KsRemoveBusEnumInterface( 128 _In_ PIRP Irp); 129 130_IRQL_requires_max_(PASSIVE_LEVEL) 131KSDDKAPI 132NTSTATUS 133NTAPI 134KsServiceBusEnumPnpRequest( 135 _In_ PDEVICE_OBJECT DeviceObject, 136 _Inout_ PIRP Irp); 137 138_IRQL_requires_max_(PASSIVE_LEVEL) 139KSDDKAPI 140NTSTATUS 141NTAPI 142KsServiceBusEnumCreateRequest( 143 _In_ PDEVICE_OBJECT DeviceObject, 144 _Inout_ PIRP Irp); 145 146_IRQL_requires_max_(PASSIVE_LEVEL) 147KSDDKAPI 148NTSTATUS 149NTAPI 150KsGetBusEnumParentFDOFromChildPDO( 151 _In_ PDEVICE_OBJECT DeviceObject, 152 _Out_ PDEVICE_OBJECT *FunctionalDeviceObject); 153 154#endif /* _KS_ */ 155 156#if defined(__cplusplus) 157} 158#endif 159 160#endif /* _NTDDK_ */ 161 162#endif /* _SWENUM_ */