1 /***********************************************************************\
2 *                                  dbt.d                                *
3 *                                                                       *
4 *                       Windows API header module                       *
5 *                                                                       *
6 *                 Translated from MinGW Windows headers                 *
7 *                           by Vladimir Vlasov                          *
8 *                                                                       *
9 *                       Placed into public domain                       *
10 \***********************************************************************/
11 module win32.dbt;
12 version(Windows):
13 
14 import win32.w32api, win32.windef;
15 import win32.basetyps; // for GUID
16 
17 // FIXME: clean up Windows version support
18 
19 enum : DWORD {
20 	DBT_NO_DISK_SPACE           = 0x47,
21 	DBT_CONFIGMGPRIVATE         = 0x7FFF,
22 	DBT_DEVICEARRIVAL           = 0x8000,
23 	DBT_DEVICEQUERYREMOVE       = 0x8001,
24 	DBT_DEVICEQUERYREMOVEFAILED = 0x8002,
25 	DBT_DEVICEREMOVEPENDING     = 0x8003,
26 	DBT_DEVICEREMOVECOMPLETE    = 0x8004,
27 	DBT_DEVICETYPESPECIFIC      = 0x8005,
28 	DBT_DEVTYP_OEM              = 0,
29 	DBT_DEVTYP_DEVNODE,
30 	DBT_DEVTYP_VOLUME,
31 	DBT_DEVTYP_PORT,
32 	DBT_DEVTYP_NET,
33 	DBT_DEVTYP_DEVICEINTERFACE,
34 	DBT_DEVTYP_HANDLE        // = 6
35 }
36 
37 enum : DWORD {
38 	DBT_APPYBEGIN,
39 	DBT_APPYEND,
40 	DBT_DEVNODES_CHANGED     = 7,
41 	DBT_QUERYCHANGECONFIG    = 0x17,
42 	DBT_CONFIGCHANGED        = 0x18,
43 	DBT_CONFIGCHANGECANCELED = 0x19,
44 	DBT_MONITORCHANGE        = 0x1B,
45 	DBT_SHELLLOGGEDON        = 32,
46 	DBT_CONFIGMGAPI32        = 34,
47 	DBT_VXDINITCOMPLETE      = 35,
48 	DBT_VOLLOCKQUERYLOCK     = 0x8041,
49 	DBT_VOLLOCKLOCKTAKEN     = 0x8042,
50 	DBT_VOLLOCKLOCKFAILED    = 0x8043,
51 	DBT_VOLLOCKQUERYUNLOCK   = 0x8044,
52 	DBT_VOLLOCKLOCKRELEASED  = 0x8045,
53 	DBT_VOLLOCKUNLOCKFAILED  = 0x8046,
54 	DBT_USERDEFINED          = 0xFFFF
55 }
56 
57 enum : WORD {
58 	DBTF_MEDIA = 1,
59 	DBTF_NET   = 2
60 }
61 
62 enum : DWORD {
63 	BSM_ALLCOMPONENTS      = 0,
64 	BSM_APPLICATIONS       = 8,
65 	BSM_ALLDESKTOPS        = 16,
66 	BSM_INSTALLABLEDRIVERS = 4,
67 	BSM_NETDRIVER          = 2,
68 	BSM_VXDS               = 1,
69 	BSF_FLUSHDISK          = 0x00000004,
70 	BSF_FORCEIFHUNG        = 0x00000020,
71 	BSF_IGNORECURRENTTASK  = 0x00000002,
72 	BSF_NOHANG             = 0x00000008,
73 	BSF_NOTIMEOUTIFNOTHUNG = 0x00000040,
74 	BSF_POSTMESSAGE        = 0x00000010,
75 	BSF_QUERY              = 0x00000001,
76 	BSF_MSGSRV32ISOK_BIT   = 31,
77 	BSF_MSGSRV32ISOK       = 0x80000000
78 }
79 
80 static if (_WIN32_WINNT >= 0x500) {
81 	enum : DWORD {
82 		BSF_ALLOWSFW          = 0x00000080,
83 		BSF_SENDNOTIFYMESSAGE = 0x00000100
84 	}
85 }
86 
87 static if (_WIN32_WINNT >= 0x501) {
88 	enum : DWORD {
89 		BSF_LUID        = 0x00000400,
90 		BSF_RETURNHDESK = 0x00000200
91 	}
92 }
93 
94 struct DEV_BROADCAST_HDR {
95 	DWORD dbch_size = DEV_BROADCAST_HDR.sizeof;
96 	DWORD dbch_devicetype;
97 	DWORD dbch_reserved;
98 }
99 alias DEV_BROADCAST_HDR* PDEV_BROADCAST_HDR;
100 
101 struct DEV_BROADCAST_OEM {
102 	DWORD dbco_size = DEV_BROADCAST_OEM.sizeof;
103 	DWORD dbco_devicetype;
104 	DWORD dbco_reserved;
105 	DWORD dbco_identifier;
106 	DWORD dbco_suppfunc;
107 }
108 alias DEV_BROADCAST_OEM* PDEV_BROADCAST_OEM;
109 
110 struct DEV_BROADCAST_PORT_A {
111 	DWORD dbcp_size = DEV_BROADCAST_PORT_A.sizeof;
112 	DWORD dbcp_devicetype;
113 	DWORD dbcp_reserved;
114 	char  _dbcp_name;
115 	char* dbcp_name() { return &_dbcp_name; }
116 }
117 alias DEV_BROADCAST_PORT_A* PDEV_BROADCAST_PORT_A;
118 
119 struct DEV_BROADCAST_PORT_W {
120 	DWORD  dbcp_size = DEV_BROADCAST_PORT_W.sizeof;
121 	DWORD  dbcp_devicetype;
122 	DWORD  dbcp_reserved;
123 	WCHAR  _dbcp_name;
124 	WCHAR* dbcp_name() { return &_dbcp_name; }
125 }
126 alias DEV_BROADCAST_PORT_W* PDEV_BROADCAST_PORT_W;
127 
128 struct DEV_BROADCAST_USERDEFINED {
129 	DEV_BROADCAST_HDR dbud_dbh;
130 	char  _dbud_szName;
131 	char* dbud_szName() { return &_dbud_szName; }
132 }
133 
134 struct DEV_BROADCAST_VOLUME {
135 	DWORD dbcv_size = DEV_BROADCAST_VOLUME.sizeof;
136 	DWORD dbcv_devicetype;
137 	DWORD dbcv_reserved;
138 	DWORD dbcv_unitmask;
139 	WORD  dbcv_flags;
140 }
141 alias DEV_BROADCAST_VOLUME* PDEV_BROADCAST_VOLUME;
142 
143 version (Unicode) {
144 	alias DEV_BROADCAST_PORT_W DEV_BROADCAST_PORT;
145 } else {
146 	alias DEV_BROADCAST_PORT_A DEV_BROADCAST_PORT;
147 }
148 alias DEV_BROADCAST_PORT* PDEV_BROADCAST_PORT;
149 
150 static if (_WIN32_WINNT >= 0x500) {
151 	struct DEV_BROADCAST_DEVICEINTERFACE_A {
152 		DWORD dbcc_size = DEV_BROADCAST_DEVICEINTERFACE_A.sizeof;
153 		DWORD dbcc_devicetype;
154 		DWORD dbcc_reserved;
155 		GUID  dbcc_classguid;
156 		char  _dbcc_name;
157 		char* dbcc_name() { return &_dbcc_name; }
158 	}
159 	alias DEV_BROADCAST_DEVICEINTERFACE_A* PDEV_BROADCAST_DEVICEINTERFACE_A;
160 
161 	struct DEV_BROADCAST_DEVICEINTERFACE_W {
162 		DWORD  dbcc_size = DEV_BROADCAST_DEVICEINTERFACE_W.sizeof;
163 		DWORD  dbcc_devicetype;
164 		DWORD  dbcc_reserved;
165 		GUID   dbcc_classguid;
166 		WCHAR  _dbcc_name;
167 		WCHAR* dbcc_name() { return &_dbcc_name; }
168 	}
169 	alias DEV_BROADCAST_DEVICEINTERFACE_W* PDEV_BROADCAST_DEVICEINTERFACE_W;
170 
171 	version (Unicode) {
172 		alias DEV_BROADCAST_DEVICEINTERFACE_W DEV_BROADCAST_DEVICEINTERFACE;
173 	} else {
174 		alias DEV_BROADCAST_DEVICEINTERFACE_A DEV_BROADCAST_DEVICEINTERFACE;
175 	}
176 	alias DEV_BROADCAST_DEVICEINTERFACE* PDEV_BROADCAST_DEVICEINTERFACE;
177 
178 	struct DEV_BROADCAST_HANDLE {
179 		DWORD  dbch_size = DEV_BROADCAST_HANDLE.sizeof;
180 		DWORD  dbch_devicetype;
181 		DWORD  dbch_reserved;
182 		HANDLE dbch_handle;
183 		DWORD  dbch_hdevnotify;
184 		GUID   dbch_eventguid;
185 		LONG   dbch_nameoffset;
186 		BYTE   _dbch_data;
187 		BYTE*  dbch_data() { return &_dbch_data; }
188 	}
189 	alias DEV_BROADCAST_HANDLE* PDEV_BROADCAST_HANDLE;
190 }