hotplug.h
Upload User: caisha3
Upload Date: 2013-09-21
Package Size: 208739k
Code Size: 8k
Category:

Windows Develop

Development Platform:

Visual C++

  1. //+-------------------------------------------------------------------------
  2. //
  3. //  Microsoft Windows
  4. //
  5. //  Copyright (C) Microsoft Corporation, 1997 - 1999
  6. //
  7. //  File:       hotplug.h
  8. //
  9. //--------------------------------------------------------------------------
  10. #include <nt.h>
  11. #include <ntrtl.h>
  12. #include <nturtl.h>
  13. #include <windows.h>
  14. #include <windowsx.h>
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include <string.h>
  18. #include <cpl.h>
  19. #include <cplp.h>
  20. #include <commctrl.h>
  21. #include <setupapi.h>
  22. #include <cfgmgr32.h>
  23. #include <prsht.h>
  24. #include <dlgs.h>     // common dlg IDs
  25. #include <shellapi.h>
  26. #include <shlobj.h>
  27. #include <shlwapi.h>
  28. #include <shlobjp.h>
  29. #include <devguid.h>
  30. #include <dbt.h>
  31. #include "resource.h"
  32. #define STWM_NOTIFYHOTPLUG  STWM_NOTIFYPCMCIA
  33. #define STSERVICE_HOTPLUG   STSERVICE_PCMCIA
  34. #define HOTPLUG_REGFLAG_NOWARN PCMCIA_REGFLAG_NOWARN
  35. #define HOTPLUG_REGFLAG_VIEWALL (PCMCIA_REGFLAG_NOWARN << 1)
  36. #define TIMERID_DEVICECHANGE 4321
  37. #define ARRAYLEN(array)     (sizeof(array) / sizeof(array[0]))
  38. LRESULT CALLBACK
  39. DevTreeDlgProc(
  40.    HWND   hDlg,
  41.    UINT   message,
  42.    WPARAM wParam,
  43.    LPARAM lParam
  44.    );
  45. LRESULT CALLBACK
  46. RemoveConfirmDlgProc(
  47.    HWND   hDlg,
  48.    UINT   message,
  49.    WPARAM wParam,
  50.    LPARAM lParam
  51.    );
  52. LRESULT CALLBACK
  53. RemoveFinishDlgProc(
  54.    HWND   hDlg,
  55.    UINT   message,
  56.    WPARAM wParam,
  57.    LPARAM lParam
  58.    );
  59. LRESULT CALLBACK
  60. SurpriseWarnDlgProc(
  61.    HWND   hDlg,
  62.    UINT   message,
  63.    WPARAM wParam,
  64.    LPARAM lParam
  65.    );
  66. LRESULT CALLBACK
  67. SafeRemovalDlgProc(
  68.    HWND   hDlg,
  69.    UINT   message,
  70.    WPARAM wParam,
  71.    LPARAM lParam
  72.    );
  73. LRESULT CALLBACK
  74. DeviceRemovalVetoedDlgProc(
  75.     HWND   hDlg,
  76.     UINT   message,
  77.     WPARAM wParam,
  78.     LPARAM lParam
  79.     );
  80. void
  81. OnSystrayOptionClicked(
  82.     HWND hDlg
  83.     );
  84. extern HMODULE hHotPlug;
  85. typedef struct _DeviceTreeNode {
  86.   LIST_ENTRY SiblingEntry;
  87.   LIST_ENTRY ChildSiblingList;
  88.   PTCHAR     InstanceId;
  89.   PTCHAR     FriendlyName;
  90.   PTCHAR     DeviceDesc;
  91.   PTCHAR     ClassName;
  92.   PTCHAR     DriveList;
  93.   PTCHAR     Location;
  94.   struct _DeviceTreeNode *ParentNode;
  95.   struct _DeviceTreeNode *NextChildRemoval;
  96.   HTREEITEM  hTreeItem;
  97.   DEVINST    DevInst;
  98.   GUID       ClassGuid;
  99.   DWORD      Capabilities;
  100.   int        TreeDepth;
  101.   PDEVINST   EjectRelations;
  102.   USHORT     NumEjectRelations;
  103.   PDEVINST   RemovalRelations;
  104.   USHORT     NumRemovalRelations;
  105.   ULONG      Problem;
  106.   ULONG      DevNodeStatus;
  107.   BOOL       bCopy;
  108. } DEVTREENODE, *PDEVTREENODE;
  109. typedef struct _DeviceTreeData {
  110.    DWORD Size;
  111.    HWND hwndTree;
  112.    HWND hDlg;
  113.    HWND hwndRemove;
  114.    HMACHINE hMachine;
  115.    int  TreeDepth;
  116.    PDEVTREENODE SelectedTreeNode;
  117.    PDEVTREENODE ChildRemovalList;
  118.    LIST_ENTRY ChildSiblingList;
  119.    DEVINST    DevInst;
  120.    PTCHAR     EjectDeviceInstanceId;
  121.    SP_CLASSIMAGELIST_DATA ClassImageList;
  122.    BOOLEAN    ComplexView;
  123.    BOOLEAN    HotPlugTree;
  124.    BOOLEAN    AllowRefresh;
  125.    BOOLEAN    RedrawWait;
  126.    BOOLEAN    RefreshEvent;
  127.    BOOLEAN    IsDialog;
  128.    BOOLEAN    HideUI;
  129.    TCHAR      MachineName[MAX_COMPUTERNAME_LENGTH+1];
  130. } DEVICETREE, *PDEVICETREE;
  131. typedef enum {
  132.     VETOED_EJECT = 1,
  133.     VETOED_REMOVAL,
  134.     VETOED_UNDOCK,
  135.     VETOED_STANDBY,
  136.     VETOED_HIBERNATE,
  137.     VETOED_WARM_EJECT,
  138.     VETOED_WARM_UNDOCK
  139. } VETOED_OPERATION;
  140. typedef struct _WIZPAGE_OBJECT {
  141.     DWORD RefCount;
  142.     PDEVICETREE DeviceTree;
  143. } WIZPAGE_OBJECT, *PWIZPAGE_OBJECT;
  144. typedef struct _GenericDeviceCollection {
  145.     struct _GenericDeviceCollection *Next;
  146.     TCHAR   DeviceInstanceId[MAX_DEVICE_ID_LEN];
  147. } DEVICE_COLLECTION, *PDEVICE_COLLECTION;
  148. typedef struct _GenericDeviceCollectionData {
  149.     HMACHINE hMachine;
  150.     PDEVICE_COLLECTION DeviceList;
  151.     INT      NumDevices;
  152.     SP_CLASSIMAGELIST_DATA ClassImageList;
  153. } DEVICE_COLLECTION_DATA, *PDEVICE_COLLECTION_DATA;
  154. typedef struct _VetoDeviceCollectionData {
  155.     struct _GenericDeviceCollectionData; // Unnamed structure.
  156.     PNP_VETO_TYPE VetoType;
  157.     VETOED_OPERATION VetoedOperation;
  158. } VETO_DEVICE_COLLECTION_DATA, *PVETO_DEVICE_COLLECTION_DATA;
  159. typedef struct _SafeRemovalDeviceCollectionData {
  160.     struct _GenericDeviceCollectionData; // Unnamed structure.
  161.     BOOL DockInList;
  162. } SAFE_REMOVAL_COLLECTION_DATA, *PSAFE_REMOVAL_COLLECTION_DATA;
  163. //
  164. // shared data structure with systray
  165. //
  166. typedef struct _SurpriseWarnDeviceList {
  167.     struct _SurpriseWarnDeviceList *Next;
  168.     TCHAR   DeviceInstanceId[MAX_DEVICE_ID_LEN];
  169. } SURPRISEWARNDEVICES, *PSURPRISEWARNDEVICES;
  170. typedef struct _SurpriseWarnData {
  171.     HMACHINE hMachine;
  172.     PSURPRISEWARNDEVICES DeviceList;
  173.     INT      NumDevices;
  174.     SP_CLASSIMAGELIST_DATA  ClassImageList;
  175.     BOOL    DockInList;
  176. } SURPRISEWARNDATA, *PSURPRISEWARNDATA;
  177. #define SIZECHARS(x) (sizeof((x))/sizeof(TCHAR))
  178. void
  179. OnContextHelp(
  180.   LPHELPINFO HelpInfo,
  181.   PDWORD ContextHelpIDs
  182.   );
  183. //
  184. // from init.c
  185. //
  186. DWORD
  187. WINAPI
  188. HandleVetoedOperation(
  189.     LPWSTR              szCmd,
  190.     VETOED_OPERATION    RemovalVetoType
  191.     );
  192. //
  193. // from hotplug.c
  194. //
  195. PDEVICETREE
  196. GetDeviceTreeFromPsPage(
  197.     LPPROPSHEETPAGE ppsp
  198.     );
  199. //
  200. // from devtree.c
  201. //
  202. LONG
  203. AddChildSiblings(
  204.     PDEVICETREE  DeviceTree,
  205.     PDEVTREENODE ParentNode,
  206.     DEVINST      DeviceInstance,
  207.     int          TreeDepth,
  208.     BOOL         Recurse
  209.     );
  210. void
  211. RemoveChildSiblings(
  212.     PDEVICETREE  DeviceTree,
  213.     PLIST_ENTRY  ChildSiblingList
  214.     );
  215. PTCHAR
  216. FetchDeviceName(
  217.      PDEVTREENODE DeviceTreeNode
  218.      );
  219. BOOL
  220. DisplayChildSiblings(
  221.     PDEVICETREE  DeviceTree,
  222.     PLIST_ENTRY  ChildSiblingList,
  223.     HTREEITEM    hParentTreeItem,
  224.     BOOL         RemovableParent
  225.     );
  226. void
  227. AddChildRemoval(
  228.     PDEVICETREE DeviceTree,
  229.     PLIST_ENTRY ChildSiblingList
  230.     );
  231. void
  232. ClearRemovalList(
  233.     PDEVICETREE  DeviceTree
  234.     );
  235. PDEVTREENODE
  236. DevTreeNodeByInstanceId(
  237.     PTCHAR InstanceId,
  238.     PLIST_ENTRY ChildSiblingList
  239.     );
  240. PDEVTREENODE
  241. DevTreeNodeByDevInst(
  242.     DEVINST DevInst,
  243.     PLIST_ENTRY ChildSiblingList
  244.     );
  245. PDEVTREENODE
  246. TopLevelRemovalNode(
  247.     PDEVICETREE DeviceTree,
  248.     PDEVTREENODE DeviceTreeNode
  249.     );
  250. void
  251. AddEjectToRemoval(
  252.     PDEVICETREE DeviceTree
  253.     );
  254. extern TCHAR szUnknown[64];
  255. extern TCHAR szHotPlugFlags[];
  256. /*
  257.  *  Cheat alert
  258.  * setupapi private exports.
  259.  *
  260.  */
  261. DWORD
  262. pSetupGuidFromString(
  263.   PWCHAR GuidString,
  264.   LPGUID Guid
  265.   );
  266. DWORD
  267. pSetupStringFromGuid(
  268.     GUID *Guid,
  269.     PTSTR GuidString,
  270.     DWORD GuidStringSize
  271.     );
  272. //
  273. // notify.c
  274. //
  275. void
  276. OnTimerDeviceChange(
  277.    PDEVICETREE DeviceTree
  278.    );
  279. BOOL
  280. RefreshTree(
  281.    PDEVICETREE DeviceTree
  282.    );
  283. //
  284. // miscutil.c
  285. //
  286. void
  287. SetDlgText(
  288.     HWND hDlg,
  289.     int iControl,
  290.     int nStartString,
  291.     int nEndString
  292.     );
  293. VOID
  294. HotPlugPropagateMessage(
  295.     HWND hWnd,
  296.     UINT uMessage,
  297.     WPARAM wParam,
  298.     LPARAM lParam
  299.     );
  300. BOOL
  301. RemovalPermission(
  302.    void
  303.    );
  304. int
  305. HPMessageBox(
  306.    HWND hWnd,
  307.    int  IdText,
  308.    int  IdCaption,
  309.    UINT Type
  310.    );
  311. void
  312. InvalidateTreeItemRect(
  313.    HWND hwndTree,
  314.    HTREEITEM  hTreeItem
  315.    );
  316. DWORD
  317. GetHotPlugFlags(
  318.    PHKEY phKey
  319.    );
  320. PTCHAR
  321. BuildFriendlyName(
  322.    DEVINST DevInst,
  323.    HMACHINE hMachine
  324.    );
  325. PTCHAR
  326. BuildLocationInformation(
  327.    DEVINST DevInst,
  328.    HMACHINE hMachine
  329.    );
  330. LPTSTR
  331. DevNodeToDriveLetter(
  332.     DEVINST DevInst
  333.     );
  334. BOOL
  335. IsHotPlugDevice(
  336.     DEVINST DevInst,
  337.     HMACHINE hMachine
  338.     );
  339. #define WUM_EJECTDEVINST  (WM_USER+279)