Synchronize with trunk revision 59636 (just before Alex's CreateProcess revamp).
[reactos.git] / drivers / serial / serenum / serenum.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Serial enumerator driver
4 * FILE: drivers/bus/serenum/serenum.h
5 * PURPOSE: Serial enumerator driver header
6 *
7 * PROGRAMMERS: Hervé Poussineau (hpoussin@reactos.org)
8 */
9
10 #include <ntifs.h>
11 #include <ntddk.h>
12 #include <ntddser.h>
13 #include <stdio.h>
14 #include <stdarg.h>
15 #include <debug.h>
16
17 typedef enum
18 {
19 dsStopped,
20 dsStarted,
21 dsPaused,
22 dsRemoved,
23 dsSurpriseRemoved
24 } SERENUM_DEVICE_STATE;
25
26 typedef struct _COMMON_DEVICE_EXTENSION
27 {
28 BOOLEAN IsFDO;
29 SERENUM_DEVICE_STATE PnpState;
30 } COMMON_DEVICE_EXTENSION, *PCOMMON_DEVICE_EXTENSION;
31
32 typedef struct _FDO_DEVICE_EXTENSION
33 {
34 COMMON_DEVICE_EXTENSION Common;
35
36 PDEVICE_OBJECT LowerDevice;
37 PDEVICE_OBJECT Pdo;
38 IO_REMOVE_LOCK RemoveLock;
39
40 UNICODE_STRING SerenumInterfaceName;
41
42 PDEVICE_OBJECT AttachedPdo;
43 ULONG Flags;
44 } FDO_DEVICE_EXTENSION, *PFDO_DEVICE_EXTENSION;
45
46 typedef struct _PDO_DEVICE_EXTENSION
47 {
48 COMMON_DEVICE_EXTENSION Common;
49
50 PDEVICE_OBJECT AttachedFdo;
51
52 UNICODE_STRING DeviceDescription; // REG_SZ
53 UNICODE_STRING DeviceId; // REG_SZ
54 UNICODE_STRING InstanceId; // REG_SZ
55 UNICODE_STRING HardwareIds; // REG_MULTI_SZ
56 UNICODE_STRING CompatibleIds; // REG_MULTI_SZ
57 } PDO_DEVICE_EXTENSION, *PPDO_DEVICE_EXTENSION;
58
59 #define SERENUM_TAG 'ereS'
60
61 /* Flags */
62 #define FLAG_ENUMERATION_DONE 0x01
63
64 /************************************ detect.c */
65
66 NTSTATUS
67 SerenumDetectPnpDevice(
68 IN PDEVICE_OBJECT DeviceObject,
69 IN PDEVICE_OBJECT LowerDevice);
70
71 NTSTATUS
72 SerenumDetectLegacyDevice(
73 IN PDEVICE_OBJECT DeviceObject,
74 IN PDEVICE_OBJECT LowerDevice);
75
76 /************************************ fdo.c */
77
78 DRIVER_ADD_DEVICE SerenumAddDevice;
79
80 NTSTATUS
81 SerenumFdoPnp(
82 IN PDEVICE_OBJECT DeviceObject,
83 IN PIRP Irp);
84
85 /************************************ misc.c */
86
87 NTSTATUS
88 SerenumInitMultiSzString(
89 OUT PUNICODE_STRING Destination,
90 ... /* list of PCSZ */);
91
92 NTSTATUS
93 ForwardIrpAndWait(
94 IN PDEVICE_OBJECT DeviceObject,
95 IN PIRP Irp);
96
97 NTSTATUS NTAPI
98 ForwardIrpToLowerDeviceAndForget(
99 IN PDEVICE_OBJECT DeviceObject,
100 IN PIRP Irp);
101
102 NTSTATUS NTAPI
103 ForwardIrpToAttachedFdoAndForget(
104 IN PDEVICE_OBJECT DeviceObject,
105 IN PIRP Irp);
106
107 NTSTATUS NTAPI
108 ForwardIrpAndForget(
109 IN PDEVICE_OBJECT DeviceObject,
110 IN PIRP Irp);
111
112 NTSTATUS
113 DuplicateUnicodeString(
114 IN ULONG Flags,
115 IN PCUNICODE_STRING SourceString,
116 OUT PUNICODE_STRING DestinationString);
117
118 /************************************ pdo.c */
119
120 NTSTATUS
121 SerenumPdoPnp(
122 IN PDEVICE_OBJECT DeviceObject,
123 IN PIRP Irp);
124
125 /************************************ serenum.c */
126
127 NTSTATUS NTAPI
128 DriverEntry(
129 IN PDRIVER_OBJECT DriverObject,
130 IN PUNICODE_STRING RegPath);