swenum.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #ifndef _SWENUM_
  2. #define _SWENUM_
  3. #define IOCTL_SWENUM_INSTALL_INTERFACE CTL_CODE(FILE_DEVICE_BUS_EXTENDER, 0x000, METHOD_BUFFERED, FILE_ANY_ACCESS)
  4. #define IOCTL_SWENUM_REMOVE_INTERFACE CTL_CODE(FILE_DEVICE_BUS_EXTENDER, 0x001, METHOD_BUFFERED, FILE_ANY_ACCESS)
  5. #define IOCTL_SWENUM_GET_BUS_ID CTL_CODE(FILE_DEVICE_BUS_EXTENDER, 0x002, METHOD_NEITHER, FILE_READ_ACCESS)
  6. typedef struct _SWENUM_INSTALL_INTERFACE {
  7. GUID DeviceId;
  8. GUID InterfaceId;
  9. WCHAR ReferenceString[1];
  10. } SWENUM_INSTALL_INTERFACE, *PSWENUM_INSTALL_INTERFACE;
  11. #if defined(_KS_)
  12. #define STATIC_BUSID_SoftwareDeviceEnumerator STATIC_KSMEDIUMSETID_Standard
  13. #define BUSID_SoftwareDeviceEnumerator KSMEDIUMSETID_Standard
  14. #else
  15. #define STATIC_BUSID_SoftwareDeviceEnumerator \
  16. 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  17. #endif /* _KS_ */
  18. #if defined(_NTDDK_)
  19. #if !defined(_KS_)
  20. typedef VOID (NTAPI *PFNREFERENCEDEVICEOBJECT)(PVOID Context);
  21. typedef VOID (NTAPI *PFNDEREFERENCEDEVICEOBJECT)(PVOID Context);
  22. typedef NTSTATUS (NTAPI *PFNQUERYREFERENCESTRING)(PVOID Context, PWCHAR *String);
  23. #endif /* _KS_ */
  24. #define BUS_INTERFACE_SWENUM_VERSION 0x100
  25. typedef struct _BUS_INTERFACE_SWENUM {
  26. INTERFACE Interface;
  27. PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject;
  28. PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject;
  29. PFNQUERYREFERENCESTRING QueryReferenceString;
  30. } BUS_INTERFACE_SWENUM, *PBUS_INTERFACE_SWENUM;
  31. #if defined(__cplusplus)
  32. extern "C" {
  33. #endif
  34. #if defined(_KS_)
  35. KSDDKAPI
  36. NTSTATUS
  37. NTAPI
  38. KsQuerySoftwareBusInterface(
  39. IN PDEVICE_OBJECT PnpDeviceObject,
  40. OUT PBUS_INTERFACE_SWENUM BusInterface
  41. );
  42. KSDDKAPI
  43. NTSTATUS
  44. NTAPI
  45. KsReferenceSoftwareBusObject(
  46. IN KSDEVICE_HEADER Header
  47. );
  48. KSDDKAPI
  49. VOID
  50. NTAPI
  51. KsDereferenceSoftwareBusObject(
  52. IN KSDEVICE_HEADER Header
  53. );
  54. KSDDKAPI
  55. NTSTATUS
  56. NTAPI
  57. KsCreateBusEnumObject(
  58. IN PWSTR BusIdentifier,
  59. IN PDEVICE_OBJECT BusDeviceObject,
  60. IN PDEVICE_OBJECT PhysicalDeviceObject,
  61. IN PDEVICE_OBJECT PnpDeviceObject,
  62. IN REFGUID InterfaceGuid,
  63. IN PWSTR ServiceRelativePath
  64. );
  65. KSDDKAPI
  66. NTSTATUS
  67. NTAPI
  68. KsGetBusEnumIdentifier(
  69. IN OUT PIRP Irp
  70. );
  71. KSDDKAPI
  72. NTSTATUS
  73. NTAPI
  74. KsGetBusEnumPnpDeviceObject(
  75. IN PDEVICE_OBJECT DeviceObject,
  76. OUT PDEVICE_OBJECT *PnpDeviceObject
  77. );
  78. KSDDKAPI
  79. NTSTATUS
  80. NTAPI
  81. KsInstallBusEnumInterface(
  82. IN PIRP Irp
  83. );
  84. KSDDKAPI
  85. NTSTATUS
  86. NTAPI
  87. KsIsBusEnumChildDevice(
  88. IN PDEVICE_OBJECT DeviceObject,
  89. OUT PBOOLEAN ChildDevice
  90. );
  91. KSDDKAPI
  92. NTSTATUS
  93. NTAPI
  94. KsRemoveBusEnumInterface(
  95. IN PIRP Irp
  96. );
  97. KSDDKAPI
  98. NTSTATUS
  99. NTAPI
  100. KsServiceBusEnumPnpRequest(
  101. IN PDEVICE_OBJECT DeviceObject,
  102. IN OUT PIRP Irp
  103. );
  104. KSDDKAPI
  105. NTSTATUS
  106. NTAPI
  107. KsServiceBusEnumCreateRequest(
  108. IN PDEVICE_OBJECT DeviceObject,
  109. IN OUT PIRP Irp
  110. );
  111. KSDDKAPI
  112. NTSTATUS
  113. NTAPI
  114. KsGetBusEnumParentFDOFromChildPDO(
  115. IN PDEVICE_OBJECT DeviceObject,
  116. OUT PDEVICE_OBJECT *FunctionalDeviceObject
  117. );
  118. #endif /* _KS_ */
  119. #if defined(__cplusplus)
  120. }
  121. #endif
  122. #endif /* _NTDDK_ */
  123. #endif /* _SWENUM_ */