merge ROS Shell without integrated explorer part into trunk
[reactos.git] / reactos / drivers / bus / serenum / serenum.h
1 #if defined(__GNUC__)
2 #include <ddk/ntddk.h>
3 #include <ddk/ntddser.h>
4 #include <ddk/wdmguid.h>
5 #include <stdio.h>
6
7 #include <debug.h>
8
9 #define SR_MSR_DSR 0x20
10 #define ExFreePoolWithTag(p, tag) ExFreePool(p)
11
12 /* FIXME: these prototypes MUST NOT be here! */
13 NTSTATUS STDCALL
14 IoAttachDeviceToDeviceStackSafe(
15 IN PDEVICE_OBJECT SourceDevice,
16 IN PDEVICE_OBJECT TargetDevice,
17 OUT PDEVICE_OBJECT *AttachedToDeviceObject);
18
19 #elif defined(_MSC_VER)
20 #include <ntddk.h>
21 #include <ntddser.h>
22 #include <c:/progra~1/winddk/inc/ddk/wdm/wxp/wdmguid.h>
23 #include <stdio.h>
24
25 #define STDCALL
26
27 #define DPRINT1 DbgPrint("(%s:%d) ", __FILE__, __LINE__), DbgPrint
28 #define CHECKPOINT1 DbgPrint("(%s:%d)\n")
29
30 #define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
31
32 NTSTATUS STDCALL
33 IoAttachDeviceToDeviceStackSafe(
34 IN PDEVICE_OBJECT SourceDevice,
35 IN PDEVICE_OBJECT TargetDevice,
36 OUT PDEVICE_OBJECT *AttachedToDeviceObject);
37
38 #define DPRINT DPRINT1
39 #define CHECKPOINT CHECKPOINT1
40
41 #define SR_MSR_DSR 0x20
42 #else
43 #error Unknown compiler!
44 #endif
45
46 typedef enum
47 {
48 dsStopped,
49 dsStarted,
50 dsPaused,
51 dsRemoved,
52 dsSurpriseRemoved
53 } SERENUM_DEVICE_STATE;
54
55 typedef struct _COMMON_DEVICE_EXTENSION
56 {
57 BOOLEAN IsFDO;
58 SERENUM_DEVICE_STATE PnpState;
59 } COMMON_DEVICE_EXTENSION, *PCOMMON_DEVICE_EXTENSION;
60
61 typedef struct _FDO_DEVICE_EXTENSION
62 {
63 COMMON_DEVICE_EXTENSION Common;
64
65 PDEVICE_OBJECT LowerDevice;
66 PDEVICE_OBJECT Pdo;
67 IO_REMOVE_LOCK RemoveLock;
68
69 UNICODE_STRING SerenumInterfaceName;
70
71 PDEVICE_OBJECT AttachedPdo;
72 ULONG Flags;
73 } FDO_DEVICE_EXTENSION, *PFDO_DEVICE_EXTENSION;
74
75 typedef struct _PDO_DEVICE_EXTENSION
76 {
77 COMMON_DEVICE_EXTENSION Common;
78
79 PDEVICE_OBJECT AttachedFdo;
80
81 UNICODE_STRING DeviceDescription; // REG_SZ
82 UNICODE_STRING DeviceId; // REG_SZ
83 UNICODE_STRING HardwareIds; // REG_MULTI_SZ
84 UNICODE_STRING CompatibleIds; // REG_MULTI_SZ
85 } PDO_DEVICE_EXTENSION, *PPDO_DEVICE_EXTENSION;
86
87 #define SERENUM_TAG TAG('S', 'e', 'r', 'e')
88
89 /* Flags */
90 #define FLAG_ENUMERATION_DONE 0x01
91
92 /************************************ detect.c */
93
94 NTSTATUS
95 SerenumDetectPnpDevice(
96 IN PDEVICE_OBJECT DeviceObject,
97 IN PDEVICE_OBJECT LowerDevice);
98
99 NTSTATUS
100 SerenumDetectLegacyDevice(
101 IN PDEVICE_OBJECT DeviceObject,
102 IN PDEVICE_OBJECT LowerDevice);
103
104 /************************************ fdo.c */
105
106 NTSTATUS STDCALL
107 SerenumAddDevice(
108 IN PDRIVER_OBJECT DriverObject,
109 IN PDEVICE_OBJECT Pdo);
110
111 NTSTATUS
112 SerenumFdoPnp(
113 IN PDEVICE_OBJECT DeviceObject,
114 IN PIRP Irp);
115
116 /************************************ misc.c */
117
118 NTSTATUS
119 SerenumDuplicateUnicodeString(
120 OUT PUNICODE_STRING Destination,
121 IN PUNICODE_STRING Source,
122 IN POOL_TYPE PoolType);
123
124 NTSTATUS
125 SerenumInitMultiSzString(
126 OUT PUNICODE_STRING Destination,
127 ... /* list of PCSZ */);
128
129 NTSTATUS
130 ForwardIrpAndWait(
131 IN PDEVICE_OBJECT DeviceObject,
132 IN PIRP Irp);
133
134 NTSTATUS STDCALL
135 ForwardIrpToLowerDeviceAndForget(
136 IN PDEVICE_OBJECT DeviceObject,
137 IN PIRP Irp);
138
139 NTSTATUS STDCALL
140 ForwardIrpToAttachedFdoAndForget(
141 IN PDEVICE_OBJECT DeviceObject,
142 IN PIRP Irp);
143
144 NTSTATUS STDCALL
145 ForwardIrpAndForget(
146 IN PDEVICE_OBJECT DeviceObject,
147 IN PIRP Irp);
148
149 /************************************ pdo.c */
150
151 NTSTATUS
152 SerenumPdoPnp(
153 IN PDEVICE_OBJECT DeviceObject,
154 IN PIRP Irp);