Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

319 lines
5.5 KiB

  1. //+-------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. //
  5. // Copyright (C) Microsoft Corporation
  6. //
  7. // File: hotplug.h
  8. //
  9. //--------------------------------------------------------------------------
  10. #pragma warning( disable : 4201 ) // nonstandard extension used : nameless struct/union
  11. #include <nt.h>
  12. #include <ntrtl.h>
  13. #include <nturtl.h>
  14. #include <windows.h>
  15. #include <windowsx.h>
  16. #include <stdio.h>
  17. #include <cpl.h>
  18. #include <commctrl.h>
  19. #include <shellapi.h>
  20. #include <shlwapi.h>
  21. #include <devguid.h>
  22. #include <dbt.h>
  23. #include <help.h>
  24. #include <systrayp.h>
  25. #include <shobjidl.h>
  26. extern "C" {
  27. #include <setupapi.h>
  28. #include <spapip.h>
  29. #include <cfgmgr32.h>
  30. #include <shimdb.h>
  31. #include <regstr.h>
  32. }
  33. #include <strsafe.h>
  34. #pragma warning( default : 4201 )
  35. #include "resource.h"
  36. #include "devicecol.h"
  37. #define STWM_NOTIFYHOTPLUG STWM_NOTIFYPCMCIA
  38. #define STSERVICE_HOTPLUG STSERVICE_PCMCIA
  39. #define HOTPLUG_REGFLAG_NOWARN PCMCIA_REGFLAG_NOWARN
  40. #define HOTPLUG_REGFLAG_VIEWALL (PCMCIA_REGFLAG_NOWARN << 1)
  41. #define TIMERID_DEVICECHANGE 4321
  42. #define ARRAYLEN(array) (sizeof(array) / sizeof(array[0]))
  43. INT_PTR CALLBACK
  44. DevTreeDlgProc(
  45. HWND hDlg,
  46. UINT message,
  47. WPARAM wParam,
  48. LPARAM lParam
  49. );
  50. INT_PTR CALLBACK
  51. RemoveConfirmDlgProc(
  52. HWND hDlg,
  53. UINT message,
  54. WPARAM wParam,
  55. LPARAM lParam
  56. );
  57. INT_PTR CALLBACK
  58. SurpriseWarnDlgProc(
  59. HWND hDlg,
  60. UINT message,
  61. WPARAM wParam,
  62. LPARAM lParam
  63. );
  64. LRESULT CALLBACK
  65. SafeRemovalBalloonProc(
  66. HWND hWnd,
  67. UINT message,
  68. WPARAM wParam,
  69. LPARAM lParam
  70. );
  71. LRESULT CALLBACK
  72. DockSafeRemovalBalloonProc(
  73. HWND hWnd,
  74. UINT message,
  75. WPARAM wParam,
  76. LPARAM lParam
  77. );
  78. extern HMODULE hHotPlug;
  79. typedef struct _DeviceTreeNode {
  80. LIST_ENTRY SiblingEntry;
  81. LIST_ENTRY ChildSiblingList;
  82. PTCHAR InstanceId;
  83. PTCHAR FriendlyName;
  84. PTCHAR DeviceDesc;
  85. PTCHAR DriveList;
  86. PTCHAR Location;
  87. struct _DeviceTreeNode *ParentNode;
  88. struct _DeviceTreeNode *NextChildRemoval;
  89. HTREEITEM hTreeItem;
  90. DEVINST DevInst;
  91. GUID ClassGuid;
  92. DWORD Capabilities;
  93. int TreeDepth;
  94. PDEVINST EjectRelations;
  95. USHORT NumEjectRelations;
  96. PDEVINST RemovalRelations;
  97. USHORT NumRemovalRelations;
  98. ULONG Problem;
  99. ULONG DevNodeStatus;
  100. BOOL bCopy;
  101. } DEVTREENODE, *PDEVTREENODE;
  102. typedef struct _DeviceTreeData {
  103. DWORD Size;
  104. HWND hwndTree;
  105. HWND hDlg;
  106. HWND hwndRemove;
  107. int TreeDepth;
  108. PDEVTREENODE SelectedTreeNode;
  109. PDEVTREENODE ChildRemovalList;
  110. LIST_ENTRY ChildSiblingList;
  111. DEVINST DevInst;
  112. PTCHAR EjectDeviceInstanceId;
  113. SP_CLASSIMAGELIST_DATA ClassImageList;
  114. BOOLEAN ComplexView;
  115. BOOLEAN HotPlugTree;
  116. BOOLEAN AllowRefresh;
  117. BOOLEAN RedrawWait;
  118. BOOLEAN RefreshEvent;
  119. } DEVICETREE, *PDEVICETREE;
  120. #define SIZECHARS(x) (sizeof((x))/sizeof(TCHAR))
  121. void
  122. OnContextHelp(
  123. LPHELPINFO HelpInfo,
  124. PDWORD ContextHelpIDs
  125. );
  126. //
  127. // from init.c
  128. //
  129. DWORD
  130. WINAPI
  131. HandleVetoedOperation(
  132. LPWSTR szCmd,
  133. VETOED_OPERATION RemovalVetoType
  134. );
  135. //
  136. // from devtree.c
  137. //
  138. LONG
  139. AddChildSiblings(
  140. PDEVICETREE DeviceTree,
  141. PDEVTREENODE ParentNode,
  142. DEVINST DeviceInstance,
  143. int TreeDepth,
  144. BOOL Recurse
  145. );
  146. void
  147. RemoveChildSiblings(
  148. PDEVICETREE DeviceTree,
  149. PLIST_ENTRY ChildSiblingList
  150. );
  151. PTCHAR
  152. FetchDeviceName(
  153. PDEVTREENODE DeviceTreeNode
  154. );
  155. BOOL
  156. DisplayChildSiblings(
  157. PDEVICETREE DeviceTree,
  158. PLIST_ENTRY ChildSiblingList,
  159. HTREEITEM hParentTreeItem,
  160. BOOL RemovableParent
  161. );
  162. void
  163. AddChildRemoval(
  164. PDEVICETREE DeviceTree,
  165. PLIST_ENTRY ChildSiblingList
  166. );
  167. void
  168. ClearRemovalList(
  169. PDEVICETREE DeviceTree
  170. );
  171. PDEVTREENODE
  172. DevTreeNodeByInstanceId(
  173. PTCHAR InstanceId,
  174. PLIST_ENTRY ChildSiblingList
  175. );
  176. PDEVTREENODE
  177. DevTreeNodeByDevInst(
  178. DEVINST DevInst,
  179. PLIST_ENTRY ChildSiblingList
  180. );
  181. PDEVTREENODE
  182. TopLevelRemovalNode(
  183. PDEVICETREE DeviceTree,
  184. PDEVTREENODE DeviceTreeNode
  185. );
  186. void
  187. AddEjectToRemoval(
  188. PDEVICETREE DeviceTree
  189. );
  190. extern TCHAR szUnknown[64];
  191. extern TCHAR szHotPlugFlags[];
  192. //
  193. // notify.c
  194. //
  195. void
  196. OnTimerDeviceChange(
  197. PDEVICETREE DeviceTree
  198. );
  199. BOOL
  200. RefreshTree(
  201. PDEVICETREE DeviceTree
  202. );
  203. //
  204. // miscutil.c
  205. //
  206. VOID
  207. HotPlugPropagateMessage(
  208. HWND hWnd,
  209. UINT uMessage,
  210. WPARAM wParam,
  211. LPARAM lParam
  212. );
  213. void
  214. InvalidateTreeItemRect(
  215. HWND hwndTree,
  216. HTREEITEM hTreeItem
  217. );
  218. DWORD
  219. GetHotPlugFlags(
  220. PHKEY phKey
  221. );
  222. PTCHAR
  223. BuildFriendlyName(
  224. DEVINST DevInst
  225. );
  226. PTCHAR
  227. BuildLocationInformation(
  228. DEVINST DevInst
  229. );
  230. LPTSTR
  231. DevNodeToDriveLetter(
  232. DEVINST DevInst
  233. );
  234. BOOL
  235. IsHotPlugDevice(
  236. DEVINST DevInst
  237. );
  238. BOOL
  239. OpenPipeAndEventHandles(
  240. LPWSTR szCmd,
  241. LPHANDLE lphHotPlugPipe,
  242. LPHANDLE lphHotPlugEvent
  243. );
  244. BOOL
  245. VetoedRemovalUI(
  246. IN PVETO_DEVICE_COLLECTION VetoedRemovalCollection
  247. );
  248. void
  249. DisplayDriverBlockBalloon(
  250. IN PDEVICE_COLLECTION blockedDriverCollection
  251. );
  252. void
  253. DisplayChildWithInvalidIdBalloon(
  254. IN PDEVICE_COLLECTION childWithInvalidIdCollection
  255. );
  256. #define WUM_EJECTDEVINST (WM_USER+279)