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.

1851 lines
36 KiB

  1. /*++
  2. Copyright (C) Microsoft Corporation, 1995 - 1999
  3. All rights reserved.
  4. Module Name:
  5. setup.hxx
  6. Abstract:
  7. Holds install headers.
  8. Author:
  9. Albert Ting (AlbertT) 17-Sept-1995
  10. Revision History:
  11. --*/
  12. #ifndef _SETUP_HXX
  13. #define _SETUP_HXX
  14. /********************************************************************
  15. Class forward refrences
  16. ********************************************************************/
  17. class TFindLocDlg;
  18. /********************************************************************
  19. Defines a copy constructor and an assignment operator.
  20. Use this macro in the private section of your class if you
  21. do not support copying and assignment.
  22. ********************************************************************/
  23. #define DEFINE_COPY_ASSIGNMENT( Type ) \
  24. Type( const Type & ); \
  25. Type & operator =( const Type & )
  26. /********************************************************************
  27. Defines a function to return the specified wizard page id.
  28. ********************************************************************/
  29. #define DEFINE_PAGE_IDENTIFIER( PageId ) \
  30. protected: \
  31. UINT \
  32. uGetPageId( \
  33. VOID \
  34. ) const \
  35. { \
  36. return PageId; \
  37. }
  38. /********************************************************************
  39. Constants
  40. ********************************************************************/
  41. const BOOL kDefaultShareState = FALSE;
  42. const BOOL kDefaultPublishState = TRUE;
  43. const DWORD kDefaultAdditionalDrivers = TArchLV::kDriverWIN95 |
  44. TArchLV::kDriverX86_2 |
  45. TArchLV::kDriverX86_3;
  46. /********************************************************************
  47. Printer setup wizard class.
  48. ********************************************************************/
  49. class TWizard: public CSimpleWndSubclass<TWizard> {
  50. SIGNATURE( 'prwz' )
  51. DEFINE_COPY_ASSIGNMENT( TWizard );
  52. public:
  53. enum PROP_PAGES {
  54. kPropPreIntro,
  55. kPropIntro,
  56. kPropType,
  57. kPropAutodetect,
  58. kPropPort,
  59. kPropPreSelectDevice,
  60. kPropDriver,
  61. kPropPostSelectDevice,
  62. kPropDriverExists,
  63. kPropName,
  64. kPropShare,
  65. kPropComment,
  66. kPropTestPage,
  67. kPropNet,
  68. kPropLocate,
  69. kPropFinish,
  70. kPropBrowse,
  71. kPropMax
  72. };
  73. enum DRIVER_EXISTS {
  74. kUninitialized = 0,
  75. kExists = 1,
  76. kDoesNotExist = 2
  77. };
  78. enum PNP_CONSTANTS {
  79. kPnPInstall = 1000,
  80. kDriverInstall = 1001,
  81. kPrinterInstall = 1002,
  82. kPrinterInstallModeless = 1003,
  83. };
  84. enum {
  85. kSelectDriverPage = -1,
  86. kSelectPrinterPage = -2,
  87. kInitialStackSize = kPropMax,
  88. };
  89. //
  90. // Some global constants
  91. //
  92. enum {
  93. //
  94. // This is the max number we try to generate a friendly printer name
  95. // in the form "Driver Name (Copy %d)". This number should be reasonably
  96. // small because we don't want performance hit on hydra.
  97. //
  98. kAddPrinterMaxRetry = 5,
  99. };
  100. enum ELocateType {
  101. kSearch,
  102. kBrowseNET,
  103. kBrowseURL,
  104. };
  105. enum EDsStatus {
  106. kDsStatusUnknown,
  107. kDsStatusUnavailable,
  108. kDsStatusAvailable,
  109. };
  110. //
  111. // Add printer attribute values.
  112. //
  113. enum EAddPrinterAttributes
  114. {
  115. kAttributesNone,
  116. kAttributesMasq,
  117. };
  118. struct Page {
  119. MGenericProp *pPage;
  120. INT iDialog;
  121. INT iTitle;
  122. INT iSubTitle;
  123. };
  124. struct AddInfo {
  125. LPCTSTR pszServerName;
  126. LPCTSTR pszPrinterName;
  127. LPCTSTR pszShareName;
  128. LPCTSTR pszPrintProcessor;
  129. DWORD dwAttributes;
  130. BOOL bShared;
  131. BOOL bPublish;
  132. EAddPrinterAttributes eFlags;
  133. EDsStatus eIsDsAvailable;
  134. };
  135. struct DriverTypes {
  136. UINT uBit;
  137. DWORD dwEncode;
  138. LPCTSTR pName;
  139. };
  140. Page _aPages[kPropMax];
  141. VAR( BOOL, bValid );
  142. VAR( UINT, uAction );
  143. VAR( HWND, hwnd );
  144. VAR( TString, strPrinterName );
  145. VAR( TStack<UINT>, Stack );
  146. VAR( BOOL, bNoPageChange );
  147. VAR( BOOL, bPreDir );
  148. VAR( BOOL, bPostDir );
  149. VAR( BOOL, bIsPrinterFolderEmpty );
  150. //
  151. // If pszServerName is NULL, this indicates it's the local machine.
  152. // If it's non-NULL, then it's a remote server.
  153. //
  154. VAR( LPCTSTR, pszServerName );
  155. VAR( TString, strServerName );
  156. VAR( TString, strPortName );
  157. VAR( TString, strShareName );
  158. VAR( TString, strDriverName );
  159. VAR( TString, strTitle );
  160. VAR( TString, strSetupPageTitle );
  161. VAR( TString, strSetupPageSubTitle );
  162. VAR( TString, strSetupPageDescription );
  163. VAR( TString, strInfFileName );
  164. VAR( TString, strLocation );
  165. VAR( TString, strComment );
  166. VAR( BOOL, bUseNewDriver );
  167. VAR( UINT, uDriverExists );
  168. VAR( BOOL, bNet );
  169. VAR( BOOL, bDefaultPrinter );
  170. VAR( BOOL, bShared );
  171. VAR( BOOL, bTestPage );
  172. VAR( BOOL, bSetDefault );
  173. VAR( BOOL, bShowSetDefault );
  174. VAR( BOOL, bPrinterCreated );
  175. VAR( BOOL, bConnected );
  176. VAR( BOOL, bErrorSaving );
  177. VAR( BOOL, bDriverChanged );
  178. VAR( BOOL, bRefreshPrinterName );
  179. VAR( BOOL, bWizardCanceled );
  180. VAR( BOOL, bUseNewDriverSticky );
  181. VAR( TPrinterDriverInstallation, Di );
  182. VAR( EDsStatus, eIsDsAvailablePerMachine );
  183. VAR( EDsStatus, eIsDsAvailablePerUser );
  184. VAR( BOOL, bNetworkInstalled);
  185. VAR( TArchLV, ArchLV );
  186. VAR( TDriverTransfer *, pDriverTransfer );
  187. VAR( BOOL, bIsCodeDownLoadAvailable );
  188. VAR( BOOL, bUseWeb );
  189. VAR( BOOL, bSkipArchSelection );
  190. VAR( BOOL, bPersistSettings );
  191. VAR( BOOL, bPublish );
  192. VAR( DWORD, dwDefaultAttributes );
  193. VAR( INT, LocateType );
  194. VAR( TDirectoryService, Ds );
  195. VAR( BOOL, bDownlevelBrowse );
  196. VAR( BOOL, bIsNTServer );
  197. VAR( UINT, nDriverInstallCount );
  198. VAR( HFONT, hBigBoldFont );
  199. //
  200. // Browse for printer property page vars ...
  201. //
  202. VAR( BOOL, bAdminPrivilege );
  203. VAR( TString, strPrintersPageURL );
  204. VAR( UINT, nBrowsePageID );
  205. VAR( IPageSwitch*, pPageSwitchController );
  206. VAR( BOOL, bStylePatched );
  207. VAR( BOOL, bPrinterAutoDetected );
  208. VAR( BOOL, bPnPAutodetect );
  209. VAR( BOOL, bRunDetection );
  210. VAR( COleComInitializer, COM );
  211. VAR( BOOL, bRestartableFromLastPage );
  212. VAR( BOOL, bRestartAgain );
  213. VAR( BOOL, bIsSharingEnabled );
  214. VAR( BOOL, bLinkWindowRegistered );
  215. VAR( int, iPosX );
  216. VAR( int, iPosY );
  217. TWizard(
  218. HWND hwnd,
  219. UINT uAction,
  220. LPCTSTR pszPrinterName,
  221. LPCTSTR pszServerName
  222. );
  223. ~TWizard(
  224. VOID
  225. );
  226. BOOL
  227. bPropPages(
  228. VOID
  229. );
  230. BOOL
  231. bAddPages(
  232. IN OUT PSP_INSTALLWIZARD_DATA pWizardData
  233. );
  234. VOID
  235. vTerminate(
  236. IN HWND hDlg
  237. );
  238. BOOL
  239. bCreatePrinter(
  240. IN HWND hwnd = NULL
  241. );
  242. BOOL
  243. bParseDriver(
  244. IN HWND hDlg
  245. );
  246. BOOL
  247. bDriverExists(
  248. VOID
  249. );
  250. static
  251. BOOL
  252. bInstallPrinter(
  253. IN LPCTSTR pszServerName,
  254. IN LPCTSTR pszPrinterName,
  255. IN LPCTSTR pszShareName,
  256. IN LPCTSTR pszPortName,
  257. IN LPCTSTR pszDriverName,
  258. IN LPCTSTR pszPrintProcessor,
  259. IN LPCTSTR pszLocation,
  260. IN LPCTSTR pszComment,
  261. IN BOOL bShared,
  262. IN BOOL bPublish,
  263. IN EAddPrinterAttributes eAttributeFlags,
  264. IN EDsStatus eIsDsAvailable,
  265. IN DWORD dwAttributes,
  266. IN PSECURITY_DESCRIPTOR pSecurityDescriptor
  267. );
  268. BOOL
  269. bPrintTestPage(
  270. VOID
  271. );
  272. UINT
  273. MapPageID(
  274. UINT uPageID
  275. ) const;
  276. VOID
  277. OnWizardInitro(
  278. HWND hDlgIntroPage
  279. );
  280. VOID
  281. OnWizardFinish(
  282. HWND hDlgFinishPage
  283. );
  284. BOOL
  285. bShouldRestart(
  286. VOID
  287. );
  288. // implement CSimpleWndSubclass<...>
  289. LRESULT
  290. WindowProc(
  291. IN HWND hwnd,
  292. IN UINT uMsg,
  293. IN WPARAM wParam,
  294. IN LPARAM lParam
  295. );
  296. private:
  297. static
  298. INT CALLBACK
  299. iSetupDlgCallback(
  300. IN HWND hwndDlg,
  301. IN UINT uMsg,
  302. IN LPARAM lParam
  303. );
  304. static
  305. BOOL
  306. bPreAddPrinter(
  307. IN AddInfo &Info
  308. );
  309. static
  310. BOOL
  311. bPostAddPrinter(
  312. IN AddInfo &Info,
  313. IN HANDLE hPrinter
  314. );
  315. BOOL
  316. bCreatePages(
  317. VOID
  318. );
  319. VOID
  320. vReadRegistrySettingDefaults(
  321. VOID
  322. );
  323. VOID
  324. vWriteRegistrySettingDefaults(
  325. VOID
  326. );
  327. BOOL
  328. bCreatePropPages(
  329. IN UINT *pnPageHandles,
  330. IN UINT nPageHandles,
  331. IN HPROPSHEETPAGE *pPageHandles,
  332. IN UINT nPages,
  333. IN Page *pPages
  334. );
  335. VOID
  336. SetupFonts(
  337. IN HINSTANCE hInstance,
  338. IN HWND hwnd,
  339. IN HFONT *hBigBoldFont
  340. );
  341. BOOL
  342. bInsertPage(
  343. IN OUT UINT &Index,
  344. IN MGenericProp *pWizPage,
  345. IN UINT uDlgId,
  346. IN UINT uTitleId = IDS_WIZ_TITLE,
  347. IN UINT uSubTitleId = IDS_WIZ_SUBTITLE
  348. );
  349. HRESULT
  350. ServerAccessCheck(
  351. LPCTSTR pszServer,
  352. BOOL *pbFullAccess
  353. );
  354. };
  355. /********************************************************************
  356. Page switch controller class (implements IPageSwitch)
  357. ********************************************************************/
  358. class TPageSwitch: public IPageSwitch
  359. {
  360. SIGNATURE( 'pwps' )
  361. //
  362. // Do not allow this class to be copied
  363. //
  364. DEFINE_COPY_ASSIGNMENT( TPageSwitch );
  365. public:
  366. TPageSwitch(
  367. TWizard *pWizard
  368. );
  369. ~TPageSwitch(
  370. VOID
  371. );
  372. //
  373. // Implementation of INotifyReflect methods
  374. //
  375. STDMETHOD(GetPrevPageID)( THIS_ UINT *puPageID ) ;
  376. STDMETHOD(GetNextPageID)( THIS_ UINT *puPageID ) ;
  377. STDMETHOD(SetPrinterInfo)( THIS_ LPCTSTR pszPrinterName, LPCTSTR pszComment, LPCTSTR pszLocation, LPCTSTR pszShareName ) ;
  378. STDMETHOD(QueryCancel)( THIS_ ) ;
  379. private:
  380. VAR( TWizard*, pWizard );
  381. };
  382. /********************************************************************
  383. Mixin Wizard property sheet class.
  384. ********************************************************************/
  385. class MWizardProp : public MGenericProp {
  386. SIGNATURE( 'wizp' )
  387. DEFINE_COPY_ASSIGNMENT( MWizardProp );
  388. public:
  389. MWizardProp(
  390. IN TWizard *pWizard
  391. );
  392. virtual
  393. ~MWizardProp(
  394. VOID
  395. );
  396. protected:
  397. VAR(TWizard*, pWizard);
  398. //
  399. // Control ID for the Next and Finish button
  400. // in the property sheet
  401. //
  402. enum {
  403. kID_BTN_NEXT = 12324,
  404. kID_BTN_FINISH = 12325,
  405. };
  406. virtual
  407. BOOL
  408. bHandle_InitDialog(
  409. VOID
  410. );
  411. virtual
  412. BOOL
  413. bHandle_Command(
  414. IN WORD wId,
  415. IN WORD wNotifyId,
  416. IN HWND hwnd
  417. );
  418. VOID
  419. SetControlFont(
  420. IN HFONT hFont,
  421. IN HWND hwnd,
  422. IN INT nId
  423. );
  424. virtual
  425. BOOL
  426. bHandle_Notify(
  427. IN WPARAM wIdCtrl,
  428. IN LPNMHDR pnmh
  429. );
  430. virtual
  431. BOOL
  432. bHandle_SetActive(
  433. VOID
  434. );
  435. virtual
  436. BOOL
  437. bHandle_KillActive(
  438. VOID
  439. );
  440. virtual
  441. BOOL
  442. bHandle_WizBack(
  443. VOID
  444. );
  445. virtual
  446. BOOL
  447. bHandle_WizNext(
  448. VOID
  449. );
  450. virtual
  451. BOOL
  452. bHandle_WizFinish(
  453. VOID
  454. );
  455. virtual
  456. BOOL
  457. bHandle_Cancel(
  458. VOID
  459. );
  460. virtual
  461. BOOL
  462. bHandle_Timer(
  463. IN WPARAM wIdTimer,
  464. IN TIMERPROC *tmProc
  465. );
  466. virtual
  467. UINT
  468. uGetPageId(
  469. VOID
  470. ) const = 0;
  471. VOID
  472. vSetDefaultButton(
  473. INT uID
  474. );
  475. private:
  476. enum {
  477. kFalse = FALSE,
  478. kTrue = TRUE,
  479. kDontCare = -1,
  480. kPush = -2,
  481. kPop = -3,
  482. kNone = -4,
  483. kEnd = -5,
  484. kSetButtonState = -6,
  485. kNoPage = -7,
  486. kSkipPage = -8,
  487. };
  488. struct DriverWizPageEntry {
  489. INT uMessage;
  490. INT uCurrentPage;
  491. INT uSkipArchPage;
  492. INT uPreDir;
  493. INT uPostDir;
  494. INT Result;
  495. INT Action;
  496. };
  497. struct PrinterWizPageEntry {
  498. INT uMessage;
  499. INT uCurrentPage;
  500. INT uSharingEnabled;
  501. INT uAutodetect;
  502. INT uPrinterDetected;
  503. INT uPnPInstall;
  504. INT uKeepExisting;
  505. INT uDriverExists;
  506. INT uSharing;
  507. INT uNetwork;
  508. INT bIsRemoteServer;
  509. INT uDirectoryService;
  510. INT uPreDir;
  511. INT uPostDir;
  512. INT uSetDefault;
  513. INT uShared;
  514. INT bAdminPrivilege;
  515. INT nLocateType;
  516. INT nDownlevelBrowse;
  517. INT uConnected;
  518. INT Result;
  519. INT Action;
  520. };
  521. BOOL
  522. bHandle_PageChange(
  523. BOOL bReturn,
  524. UINT uMsg,
  525. WPARAM wParam,
  526. LPARAM lParam
  527. );
  528. BOOL
  529. bDriverWizardPageChange(
  530. IN UINT uMsg
  531. );
  532. BOOL
  533. bAddPrinterWizardPageChange(
  534. IN UINT uMsg
  535. );
  536. BOOL
  537. bHandleMessage(
  538. IN UINT uMsg,
  539. IN WPARAM wParam,
  540. IN LPARAM lParam
  541. );
  542. VOID
  543. vCheckToPatchStyles(
  544. VOID
  545. );
  546. };
  547. class TWizPreIntro : public MWizardProp {
  548. DEFINE_COPY_ASSIGNMENT( TWizPreIntro );
  549. DEFINE_PAGE_IDENTIFIER( DLG_WIZ_PRE_INTRO );
  550. public:
  551. TWizPreIntro(
  552. TWizard* pWizard
  553. );
  554. private:
  555. //
  556. // Virtual override for MWizardProp.
  557. //
  558. BOOL
  559. bHandle_SetActive(
  560. VOID
  561. );
  562. };
  563. class TWizIntro : public MWizardProp {
  564. DEFINE_COPY_ASSIGNMENT( TWizIntro );
  565. DEFINE_PAGE_IDENTIFIER( DLG_WIZ_INTRO );
  566. public:
  567. TWizIntro(
  568. TWizard* pWizard
  569. );
  570. private:
  571. //
  572. // Virtual override for MWizardProp.
  573. //
  574. BOOL
  575. bHandle_InitDialog(
  576. VOID
  577. );
  578. BOOL
  579. bHandle_SetActive(
  580. VOID
  581. );
  582. BOOL
  583. bHandle_Notify(
  584. IN WPARAM wParam,
  585. IN LPNMHDR pnmh
  586. );
  587. };
  588. class TWizFinish : public MWizardProp {
  589. DEFINE_COPY_ASSIGNMENT( TWizFinish );
  590. DEFINE_PAGE_IDENTIFIER( DLG_WIZ_FINISH );
  591. public:
  592. TWizFinish(
  593. TWizard* pWizard
  594. );
  595. private:
  596. //
  597. // Virtual override for MWizardProp.
  598. //
  599. BOOL
  600. bHandle_InitDialog(
  601. VOID
  602. );
  603. BOOL
  604. bHandle_WizFinish(
  605. VOID
  606. );
  607. BOOL
  608. bHandle_SetActive(
  609. VOID
  610. );
  611. };
  612. class TWizType : public MWizardProp {
  613. DEFINE_COPY_ASSIGNMENT( TWizType );
  614. DEFINE_PAGE_IDENTIFIER( DLG_WIZ_TYPE );
  615. public:
  616. TWizType(
  617. TWizard* pWizard
  618. );
  619. static
  620. BOOL
  621. bConnectToPrinter(
  622. IN HWND hDlg,
  623. IN TString &strPrinterName,
  624. IN TString *pstrComment = NULL,
  625. IN TString *pstrLocation = NULL,
  626. IN TString *pstrShareName = NULL
  627. );
  628. private:
  629. //
  630. // Virtual override for MWizardProp.
  631. //
  632. VOID
  633. vReadUI(
  634. VOID
  635. );
  636. BOOL
  637. bHandle_InitDialog(
  638. VOID
  639. );
  640. BOOL
  641. bHandle_SetActive(
  642. VOID
  643. );
  644. BOOL
  645. bHandle_WizNext(
  646. VOID
  647. );
  648. BOOL
  649. bHandle_Command(
  650. IN WORD wId,
  651. IN WORD wNotifyId,
  652. IN HWND hwnd
  653. );
  654. };
  655. class TWizDetect : public MWizardProp {
  656. DEFINE_COPY_ASSIGNMENT( TWizDetect );
  657. DEFINE_PAGE_IDENTIFIER( DLG_WIZ_DETECT );
  658. public:
  659. TWizDetect(
  660. TWizard* pWizard
  661. );
  662. private:
  663. //
  664. // Virtual override for MWizardProp.
  665. //
  666. VOID
  667. vReadUI(
  668. VOID
  669. );
  670. BOOL
  671. bHandle_InitDialog(
  672. VOID
  673. );
  674. BOOL
  675. bHandle_SetActive(
  676. VOID
  677. );
  678. BOOL
  679. bHandle_WizNext(
  680. VOID
  681. );
  682. BOOL
  683. bHandle_Cancel(
  684. VOID
  685. );
  686. BOOL
  687. bHandle_Timer(
  688. IN WPARAM wIdTimer,
  689. IN TIMERPROC *tmProc
  690. );
  691. VOID
  692. vToggleTestPageControls(
  693. int nCmdShow
  694. );
  695. VOID
  696. vStartAnimation(
  697. BOOL bStart = TRUE
  698. );
  699. //
  700. // Some private constants
  701. //
  702. enum
  703. {
  704. POLLING_TIMER_ID = 1, // The polling timer ID
  705. POLLING_TIMER_INTERVAL = 200 // Polling timer interval
  706. };
  707. VAR( TPnPDetect, pnpPrinterDetector );
  708. };
  709. class TWizDriverExists : public MWizardProp {
  710. DEFINE_COPY_ASSIGNMENT( TWizDriverExists );
  711. DEFINE_PAGE_IDENTIFIER( DLG_WIZ_DRIVEREXISTS );
  712. public:
  713. TWizDriverExists(
  714. TWizard* pWizard
  715. );
  716. private:
  717. //
  718. // Virtual override for MWizardProp.
  719. //
  720. BOOL
  721. bHandle_SetActive(
  722. VOID
  723. );
  724. BOOL
  725. bHandle_InitDialog(
  726. VOID
  727. );
  728. BOOL
  729. TWizDriverExists::
  730. bHandle_WizNext(
  731. VOID
  732. );
  733. VOID
  734. vReadUI(
  735. VOID
  736. );
  737. };
  738. class TWizPort : public MWizardProp {
  739. DEFINE_COPY_ASSIGNMENT( TWizPort );
  740. DEFINE_PAGE_IDENTIFIER( DLG_WIZ_PORT );
  741. public:
  742. TWizPort(
  743. TWizard* pWizard
  744. );
  745. BOOL
  746. bValid(
  747. VOID
  748. );
  749. private:
  750. TPortsLV _PortsLV;
  751. HWND _hMonitorList;
  752. //
  753. // Virtual override for MWizardProp.
  754. //
  755. BOOL
  756. bHandle_Command(
  757. IN WORD wId,
  758. IN WORD wNotifyId,
  759. IN HWND hwnd
  760. );
  761. BOOL
  762. bHandle_InitDialog(
  763. VOID
  764. );
  765. BOOL
  766. bHandle_WizNext(
  767. VOID
  768. );
  769. BOOL
  770. bHandle_Notify(
  771. IN WPARAM wIdCtrl,
  772. IN LPNMHDR pnmh
  773. );
  774. BOOL
  775. bHandle_SetActive(
  776. VOID
  777. );
  778. VOID
  779. vSelectionPort(
  780. VOID
  781. );
  782. BOOL
  783. bInitializeMonitorList(
  784. VOID
  785. );
  786. BOOL
  787. bGetSelectedMonitor(
  788. IN TString &strMonitor
  789. );
  790. VOID
  791. vEnableMonitorList(
  792. VOID
  793. );
  794. VOID
  795. vDisableMonitorList(
  796. VOID
  797. );
  798. VOID
  799. vSetFocusMonitorList(
  800. VOID
  801. );
  802. VOID
  803. vSelectionMonitor(
  804. VOID
  805. );
  806. BOOL
  807. bIsRemoteableMonitor(
  808. IN LPCTSTR pszMonitorName
  809. );
  810. };
  811. class TWizPortNew: public MWizardProp
  812. {
  813. DEFINE_COPY_ASSIGNMENT(TWizPortNew);
  814. DEFINE_PAGE_IDENTIFIER(DLG_WIZ_PORT_NEW);
  815. public:
  816. // construction/destruction
  817. TWizPortNew(
  818. TWizard* pWizard
  819. );
  820. // port types in order of importance
  821. enum
  822. {
  823. PORT_TYPE_LPT1, // LPT1 is the recommended printer port (pri 0)
  824. PORT_TYPE_LPTX, // LPTX the rest paralell ports (pri 1)
  825. PORT_TYPE_COMX, // COMX the serial ports (pri 2)
  826. PORT_TYPE_FILE, // the print to file ports (pri 3)
  827. PORT_TYPE_OTHER, // other port type - local, internet ports, TS ports, etc... (pri 4)
  828. PORT_TYPE_LAST
  829. };
  830. private:
  831. struct PortInfo
  832. {
  833. int iType; // port type - see above
  834. LPCTSTR pszName; // port name
  835. LPCTSTR pszDesc; // port decription
  836. };
  837. // overrides & private members
  838. BOOL
  839. bHandle_Command(
  840. IN WORD wId,
  841. IN WORD wNotifyId,
  842. IN HWND hwnd
  843. );
  844. BOOL
  845. bHandle_InitDialog(
  846. VOID
  847. );
  848. BOOL
  849. bHandle_SetActive(
  850. VOID
  851. );
  852. BOOL
  853. bHandle_WizNext(
  854. VOID
  855. );
  856. BOOL
  857. bHandle_Notify(
  858. IN WPARAM wParam,
  859. IN LPNMHDR pnmh
  860. );
  861. VOID
  862. vSelectionPort(
  863. VOID
  864. );
  865. VOID
  866. vSelectionMonitor(
  867. VOID
  868. );
  869. BOOL
  870. bInitializePortsList(
  871. OUT int *piNewlyAdded
  872. );
  873. BOOL
  874. bInitializeMonitorsList(
  875. VOID
  876. );
  877. BOOL
  878. bIsRemoteableMonitor(
  879. IN LPCTSTR pszMonitorName
  880. );
  881. VOID
  882. vSelectPortsRadio(
  883. VOID
  884. );
  885. HRESULT
  886. hGetPorts(
  887. OUT int *piNewlyAdded
  888. );
  889. static int
  890. iGetPortType(
  891. IN LPCTSTR pszPortName
  892. );
  893. static BOOL
  894. bFormatPortName(
  895. IN const PortInfo &pi,
  896. OUT TString *pstrFriendlyName
  897. );
  898. class CPortsAdaptor: public Alg::CDefaultAdaptor<PortInfo>
  899. {
  900. public:
  901. // special comparition based on type & name
  902. static int Compare(const PortInfo &i1, const PortInfo &i2)
  903. {
  904. return (i1.iType == i2.iType ?
  905. // if the types are the same then compare the names
  906. lstrcmp(i1.pszName, i2.pszName) :
  907. // ... else compare the types
  908. Alg::CDefaultAdaptor<int>::Compare(i1.iType, i2.iType));
  909. }
  910. };
  911. typedef CSortedArray<PortInfo, PortInfo, CPortsAdaptor> CPortsArray;
  912. // data members
  913. HWND m_hwndCB_Ports;
  914. HWND m_hwndCB_Monitors;
  915. CAutoHandleBitmap m_hBmp;
  916. CAutoPtrSpl<BYTE> m_spBuffer;
  917. CAutoPtr<CPortsArray> m_spPorts;
  918. };
  919. class TWizName : public MWizardProp {
  920. DEFINE_COPY_ASSIGNMENT( TWizName );
  921. DEFINE_PAGE_IDENTIFIER( DLG_WIZ_NAME );
  922. public:
  923. TWizName(
  924. TWizard* pWizard
  925. );
  926. private:
  927. TString _strGeneratedPrinterName;
  928. //
  929. // Virtual override for MWizardProp.
  930. //
  931. BOOL
  932. bHandle_InitDialog(
  933. VOID
  934. );
  935. VOID
  936. vReadUI(
  937. VOID
  938. );
  939. BOOL
  940. bHandle_SetActive(
  941. VOID
  942. );
  943. BOOL
  944. bHandle_WizNext(
  945. VOID
  946. );
  947. VOID
  948. vUpdateName(
  949. VOID
  950. );
  951. };
  952. class TWizTestPage : public MWizardProp {
  953. DEFINE_COPY_ASSIGNMENT( TWizTestPage );
  954. DEFINE_PAGE_IDENTIFIER( DLG_WIZ_TEST_PAGE );
  955. public:
  956. TWizTestPage(
  957. TWizard* pWizard
  958. );
  959. private:
  960. //
  961. // Virtual override for MWizardProp.
  962. //
  963. BOOL
  964. bHandle_InitDialog(
  965. VOID
  966. );
  967. VOID
  968. vReadUI(
  969. VOID
  970. );
  971. BOOL
  972. bHandle_SetActive(
  973. VOID
  974. );
  975. BOOL
  976. bHandle_WizNext(
  977. VOID
  978. );
  979. };
  980. class TWizShare : public MWizardProp {
  981. DEFINE_COPY_ASSIGNMENT( TWizShare );
  982. DEFINE_PAGE_IDENTIFIER( DLG_WIZ_SHARE );
  983. public:
  984. TWizShare(
  985. TWizard* pWizard
  986. );
  987. ~TWizShare(
  988. VOID
  989. );
  990. private:
  991. TPrtShare *_pPrtShare;
  992. TString _strGeneratedShareName;
  993. BOOL
  994. bRefreshUI(
  995. IN BOOL bDriverChanged
  996. );
  997. VOID
  998. vSharePrinter(
  999. VOID
  1000. );
  1001. VOID
  1002. vUnsharePrinter(
  1003. VOID
  1004. );
  1005. VOID
  1006. vSetDefaultShareName(
  1007. VOID
  1008. );
  1009. //
  1010. // Virtual override for MWizardProp.
  1011. //
  1012. BOOL
  1013. bHandle_InitDialog(
  1014. VOID
  1015. );
  1016. VOID
  1017. vReadUI(
  1018. VOID
  1019. );
  1020. BOOL
  1021. bHandle_SetActive(
  1022. VOID
  1023. );
  1024. BOOL
  1025. bHandle_WizNext(
  1026. VOID
  1027. );
  1028. BOOL
  1029. bHandle_Command(
  1030. IN WORD wId,
  1031. IN WORD wNotifyId,
  1032. IN HWND hwnd
  1033. );
  1034. };
  1035. class TWizComment : public MWizardProp {
  1036. DEFINE_COPY_ASSIGNMENT( TWizComment );
  1037. DEFINE_PAGE_IDENTIFIER( DLG_WIZ_COMMENT );
  1038. public:
  1039. TWizComment(
  1040. TWizard* pWizard
  1041. );
  1042. ~TWizComment(
  1043. VOID
  1044. );
  1045. BOOL
  1046. bHandle_InitDialog(
  1047. VOID
  1048. );
  1049. BOOL
  1050. bHandle_WizNext(
  1051. VOID
  1052. );
  1053. private:
  1054. BOOL
  1055. bHandle_Command(
  1056. IN WORD wId,
  1057. IN WORD wNotifyId,
  1058. IN HWND hwnd
  1059. );
  1060. TFindLocDlg* _pLocDlg;
  1061. CMultilineEditBug m_wndComment;
  1062. };
  1063. class TWizNet : public MWizardProp {
  1064. DEFINE_COPY_ASSIGNMENT( TWizNet );
  1065. DEFINE_PAGE_IDENTIFIER( DLG_WIZ_NET );
  1066. public:
  1067. TWizNet(
  1068. TWizard* pWizard
  1069. );
  1070. private:
  1071. //
  1072. // Virtual override for MWizardProp.
  1073. //
  1074. BOOL
  1075. bHandle_InitDialog(
  1076. VOID
  1077. );
  1078. BOOL
  1079. bHandle_WizNext(
  1080. VOID
  1081. );
  1082. };
  1083. class TWizLocate : public MWizardProp {
  1084. DEFINE_COPY_ASSIGNMENT( TWizLocate );
  1085. DEFINE_PAGE_IDENTIFIER( DLG_WIZ_LOCATE );
  1086. public:
  1087. TWizLocate(
  1088. TWizard* pWizard
  1089. );
  1090. private:
  1091. //
  1092. // Handle printer connection when downlevel browse is disabled
  1093. //
  1094. BOOL
  1095. Handle_ConnectToPrinterName(
  1096. VOID
  1097. );
  1098. //
  1099. // Handle clicking at URL browse
  1100. //
  1101. BOOL
  1102. Handle_URLBrowseClick(
  1103. VOID
  1104. );
  1105. //
  1106. // Reads the UI into class members
  1107. //
  1108. VOID
  1109. vReadUI(
  1110. VOID
  1111. );
  1112. //
  1113. // Search for printer in the directory
  1114. //
  1115. VOID
  1116. vSearch(
  1117. VOID
  1118. );
  1119. //
  1120. // Virtual override for MWizardProp.
  1121. //
  1122. BOOL
  1123. bHandle_WizNext(
  1124. VOID
  1125. );
  1126. BOOL
  1127. bHandle_WizBack(
  1128. VOID
  1129. );
  1130. BOOL
  1131. bHandle_InitDialog(
  1132. VOID
  1133. );
  1134. BOOL
  1135. bHandle_SetActive(
  1136. VOID
  1137. );
  1138. BOOL
  1139. bHandle_Command(
  1140. IN WORD wId,
  1141. IN WORD wNotifyId,
  1142. IN HWND hwnd
  1143. );
  1144. BOOL
  1145. bHandle_Notify(
  1146. IN WPARAM wIdCtrl,
  1147. IN LPNMHDR pnmh
  1148. );
  1149. VAR( TString, strConnectToURL );
  1150. VAR( TString, strConnectToNET );
  1151. };
  1152. class TWizDriverIntro : public MWizardProp {
  1153. DEFINE_COPY_ASSIGNMENT( TWizDriverIntro );
  1154. DEFINE_PAGE_IDENTIFIER( DLG_WIZ_DRIVER_INTRO );
  1155. public:
  1156. TWizDriverIntro(
  1157. TWizard* pWizard
  1158. );
  1159. private:
  1160. //
  1161. // Virtual override for MWizardProp.
  1162. //
  1163. BOOL
  1164. bHandle_InitDialog(
  1165. VOID
  1166. );
  1167. BOOL
  1168. bHandle_SetActive(
  1169. VOID
  1170. );
  1171. };
  1172. class TWizArchitecture : public MWizardProp {
  1173. DEFINE_COPY_ASSIGNMENT( TWizArchitecture );
  1174. DEFINE_PAGE_IDENTIFIER( DLG_WIZ_DRIVER_ARCHITECTURE );
  1175. public:
  1176. TWizArchitecture(
  1177. TWizard* pWizard
  1178. );
  1179. private:
  1180. //
  1181. // Virtual override for MWizardProp.
  1182. //
  1183. BOOL
  1184. bHandle_InitDialog(
  1185. VOID
  1186. );
  1187. BOOL
  1188. bHandle_SetActive(
  1189. VOID
  1190. );
  1191. BOOL
  1192. bHandle_Notify(
  1193. IN WPARAM wParam,
  1194. IN LPNMHDR pnmh
  1195. );
  1196. BOOL
  1197. bHandle_WizNext(
  1198. VOID
  1199. );
  1200. };
  1201. class TWizDriverEnd : public MWizardProp {
  1202. DEFINE_COPY_ASSIGNMENT( TWizDriverEnd );
  1203. DEFINE_PAGE_IDENTIFIER( DLG_WIZ_DRIVER_END );
  1204. public:
  1205. TWizDriverEnd(
  1206. TWizard* pWizard
  1207. );
  1208. static
  1209. BOOL
  1210. bInstallDriver(
  1211. IN HWND hwnd,
  1212. IN DWORD dwEncode,
  1213. IN TPrinterDriverInstallation &Di,
  1214. IN BOOL bFromWeb,
  1215. IN DWORD dwDriverFlags,
  1216. OUT TString *pstrDriverName
  1217. );
  1218. private:
  1219. //
  1220. // Virtual override for MWizardProp.
  1221. //
  1222. BOOL
  1223. bHandle_InitDialog(
  1224. VOID
  1225. );
  1226. BOOL
  1227. bHandle_WizFinish(
  1228. VOID
  1229. );
  1230. BOOL
  1231. bHandle_SetActive(
  1232. VOID
  1233. );
  1234. BOOL
  1235. bInstallNativeDriver(
  1236. OUT DWORD *pdwEncode
  1237. );
  1238. BOOL
  1239. bInstallSelectedDrivers(
  1240. OUT DWORD *pdwEncode
  1241. );
  1242. VOID
  1243. vDisplaySelectedDrivers(
  1244. VOID
  1245. );
  1246. };
  1247. class TWizPreSelectDriver : public MWizardProp {
  1248. DEFINE_COPY_ASSIGNMENT( TWizPreSelectDriver );
  1249. DEFINE_PAGE_IDENTIFIER( DLG_WIZ_PRE_SELECT_DEVICE );
  1250. public:
  1251. TWizPreSelectDriver(
  1252. TWizard* pWizard
  1253. );
  1254. private:
  1255. //
  1256. // Virtual override for MWizardProp.
  1257. //
  1258. BOOL
  1259. bHandle_SetActive(
  1260. VOID
  1261. );
  1262. };
  1263. class TWizPostSelectDriver : public MWizardProp {
  1264. DEFINE_COPY_ASSIGNMENT( TWizPostSelectDriver );
  1265. DEFINE_PAGE_IDENTIFIER( DLG_WIZ_POST_SELECT_DEVICE );
  1266. public:
  1267. TWizPostSelectDriver(
  1268. TWizard* pWizard
  1269. );
  1270. private:
  1271. //
  1272. // Virtual override for MWizardProp.
  1273. //
  1274. BOOL
  1275. bHandle_SetActive(
  1276. VOID
  1277. );
  1278. };
  1279. /********************************************************************
  1280. Printer setup data
  1281. ********************************************************************/
  1282. class TPrinterSetupData : public MSingletonWin {
  1283. DEFINE_COPY_ASSIGNMENT( TPrinterSetupData );
  1284. public:
  1285. TPrinterSetupData::
  1286. TPrinterSetupData(
  1287. IN HWND hwnd,
  1288. IN UINT uAction,
  1289. IN UINT cchPrinterName,
  1290. IN OUT LPTSTR pszPrinterName,
  1291. OUT UINT* pcchPrinterName,
  1292. IN LPCTSTR pszServerName,
  1293. IN LPCTSTR pszWindowName,
  1294. IN LPCTSTR pszInfName,
  1295. IN BOOL bModal,
  1296. IN BOOL bRestartableFromLastPage
  1297. );
  1298. TPrinterSetupData::
  1299. ~TPrinterSetupData(
  1300. VOID
  1301. );
  1302. BOOL
  1303. TPrinterSetupData::
  1304. bValid(
  1305. VOID
  1306. );
  1307. static
  1308. INT
  1309. TPrinterSetupData::
  1310. iPrinterSetupProc(
  1311. IN TPrinterSetupData *pSetupData ADOPT
  1312. );
  1313. private:
  1314. UINT _uAction;
  1315. UINT _cchPrinterName;
  1316. UINT* _pcchPrinterName;
  1317. LPTSTR _pszPrinterName;
  1318. LPCTSTR _pszServerName;
  1319. TString _strPrinterName;
  1320. TString _strServerName;
  1321. TString _strInfFileName;
  1322. BOOL _bValid;
  1323. BOOL _bRestartableFromLastPage;
  1324. };
  1325. /********************************************************************
  1326. Global definitions.
  1327. ********************************************************************/
  1328. //
  1329. // New printer driver wizard action flags.
  1330. //
  1331. enum ENewPrinterDriverFlags
  1332. {
  1333. kDriverWizardDefault = 0,
  1334. kSkipArchSelection = 1 << 1,
  1335. };
  1336. BOOL
  1337. bPrinterInstall(
  1338. IN LPCTSTR pszServerName,
  1339. IN LPCTSTR pszDriverName,
  1340. IN LPCTSTR pszPortName,
  1341. IN LPCTSTR pszPrintProcessor,
  1342. IN OUT LPTSTR pszPrinterNameBuffer,
  1343. IN UINT cchPrinterName,
  1344. IN DWORD dwFlags,
  1345. IN DWORD dwAttributes,
  1346. IN PSECURITY_DESCRIPTOR pSecurityDescriptor,
  1347. OUT PDWORD pdwError
  1348. );
  1349. BOOL
  1350. bPrinterSetup(
  1351. IN HWND hwnd,
  1352. IN UINT uAction,
  1353. IN UINT cchPrinterName,
  1354. IN OUT LPTSTR pszPrinterName,
  1355. OUT UINT *pcchPrinterName,
  1356. IN LPCTSTR pszServerName
  1357. );
  1358. BOOL
  1359. bPrinterSetupNew(
  1360. IN HWND hwnd,
  1361. IN UINT uAction,
  1362. IN UINT cchPrinterName,
  1363. IN OUT LPTSTR pszPrinterName,
  1364. OUT UINT *pcchPrinterName,
  1365. IN LPCTSTR pszServerName,
  1366. IN LPCTSTR pszInfFileName,
  1367. IN BOOL bRestartableFromLastPage
  1368. );
  1369. BOOL
  1370. bDriverSetupNew(
  1371. IN HWND hwnd,
  1372. IN UINT uAction,
  1373. IN UINT cchPrinterName,
  1374. IN OUT LPTSTR pszPrinterName,
  1375. OUT UINT* pcchPrinterName,
  1376. IN LPCTSTR pszServerName,
  1377. IN INT Flags,
  1378. IN BOOL bRestartableFromLastPage
  1379. );
  1380. BOOL
  1381. bRemovePrinter(
  1382. IN HWND hwnd,
  1383. IN LPCTSTR pszPrinterName,
  1384. IN LPCTSTR pszServerName,
  1385. IN BOOL bQuiet
  1386. );
  1387. BOOL
  1388. bPrinterNetInstall(
  1389. IN HWND hwnd,
  1390. IN LPCTSTR pszPrinterName
  1391. );
  1392. bPrinterNetRemove(
  1393. IN HWND hwnd,
  1394. IN LPCTSTR pszPrinterName,
  1395. IN BOOL bQuiet
  1396. );
  1397. BOOL
  1398. bInstallWizard(
  1399. IN LPCTSTR pszServerName,
  1400. IN OUT PSP_INSTALLWIZARD_DATA pWizardData,
  1401. IN OUT PVOID * pRefrenceData,
  1402. OUT PDWORD pdwError
  1403. );
  1404. BOOL
  1405. bDestroyWizard(
  1406. IN LPCTSTR pszServerName,
  1407. IN OUT PSP_INSTALLWIZARD_DATA pWizardData,
  1408. IN OUT PVOID pRefrenceData,
  1409. OUT PDWORD pdwError
  1410. );
  1411. BOOL
  1412. bInfInstall(
  1413. IN LPCTSTR pszServerName,
  1414. IN LPCTSTR pszInfName,
  1415. IN LPCTSTR pszModelName,
  1416. IN LPCTSTR pszPortName,
  1417. IN OUT LPTSTR pszPrinterNameBuffer,
  1418. IN UINT cchPrinterName,
  1419. IN LPCTSTR pszSourcePath,
  1420. IN DWORD dwFlags,
  1421. IN DWORD dwAttributes,
  1422. IN PSECURITY_DESCRIPTOR pSecurityDescriptor,
  1423. IN OUT PDWORD pdwOutFlags,
  1424. OUT PDWORD pdwError
  1425. );
  1426. BOOL
  1427. bInstallNewPrinterDriver(
  1428. IN HWND hwnd,
  1429. IN UINT uAction,
  1430. IN LPCTSTR pszServerName,
  1431. IN OUT TString &strDriverName,
  1432. OUT TDriverTransfer *pDriverTransfer,
  1433. IN INT Flags,
  1434. OUT PBOOL pbCanceled,
  1435. IN BOOL bRestartableFromLastPage,
  1436. IN PUINT pnDriverInstallCount = NULL
  1437. );
  1438. BOOL
  1439. bInstallPrinterDriver(
  1440. IN LPCTSTR pszServerName,
  1441. IN LPCTSTR pszDriverName,
  1442. IN LPCTSTR pszArchitecture,
  1443. IN LPCTSTR pszVersion,
  1444. IN LPCTSTR pszInfName,
  1445. IN LPCTSTR pszSourcePath,
  1446. IN DWORD dwFlags,
  1447. IN HWND hwnd,
  1448. IN DWORD *pdwLastError
  1449. );
  1450. BOOL
  1451. bRemovePrinterDriver(
  1452. IN LPCTSTR pszServerName,
  1453. IN LPCTSTR pszDriverName,
  1454. IN LPCTSTR pszArchitecture,
  1455. IN LPCTSTR pszVersion,
  1456. IN DWORD dwFlags,
  1457. IN DWORD *pdwError
  1458. );
  1459. BOOL
  1460. bFindPrinter(
  1461. IN HWND hwnd,
  1462. IN LPTSTR pszBuffer,
  1463. IN UINT *puSize
  1464. );
  1465. BOOL
  1466. bPromptForUnknownDriver(
  1467. IN TPrinterDriverInstallation &Di,
  1468. IN TString &strDriverName,
  1469. IN DWORD dwFlags
  1470. );
  1471. BOOL
  1472. GetOrUseInfName(
  1473. IN OUT TString &strInfName
  1474. );
  1475. #endif // ndef _SETUP_HXX