Source code of Windows XP (NT5)
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.

994 lines
16 KiB

  1. #include <nt.h>
  2. #include <ntrtl.h>
  3. #include <nturtl.h>
  4. #include <windows.h>
  5. #include <windowsx.h>
  6. #include <prsht.h>
  7. #include <commctrl.h>
  8. #include <setupapi.h>
  9. #include <ocmanage.h>
  10. #include <winspool.h>
  11. #include <winsprlp.h>
  12. #include <shellapi.h>
  13. #include <lm.h>
  14. #include <userenv.h>
  15. #include <userenvp.h>
  16. #include <tapi.h>
  17. #include <shlobj.h>
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <aclapi.h>
  21. #ifdef WX86
  22. #include <wx86ofl.h>
  23. #endif
  24. #include "winfax.h"
  25. #include "resource.h"
  26. #define NO_FAX_LIST
  27. #include "faxutil.h"
  28. #include "faxreg.h"
  29. //
  30. // fax ocm component names
  31. //
  32. // WARNING: if you change these strings, you must
  33. // also change the strings in the setup inf files
  34. //
  35. #define COMPONENT_FAX L"Fax"
  36. #define COMPONENT_FAX_CLIENT L"Fax_Client"
  37. #define COMPONENT_FAX_ADMIN L"Fax_Remote_Admin"
  38. #define DEFAULT_FAX_STORE_DIR L"%systemroot%\\FaxStore"
  39. #define FAX_SERVICE_NAME L"Fax"
  40. #define FAX_PRINTER_NAME L"Fax"
  41. #define OUTLOOKCONFIG_DIR L"addins"
  42. #define FAX_DRIVER_NAME L"Windows NT Fax Driver"
  43. #define FAX_MONITOR_NAME L"Windows NT Fax Monitor"
  44. #define FAX_MONITOR_FILE L"msfaxmon.dll"
  45. // #define FAX_SERVICE_DISPLAY_NAME L"Fax Service"
  46. #define FAX_SERVICE_IMAGE_NAME L"%systemroot%\\system32\\faxsvc.exe"
  47. #define FAX_SERVICE_DEPENDENCY L"TapiSrv\0RpcSs\0PlugPlay\0Spooler\0"
  48. #define WINNT_CURVER L"Software\\Microsoft\\Windows NT\\CurrentVersion"
  49. #define DIGID L"DigitalProductId"
  50. #define REGKEY_PROFILES L"\\ProfileList"
  51. #define REGVAL_PROFILES L"ProfilesDirectory"
  52. #define FAXAB_SERVICE_NAME L"MSFAX AB"
  53. #define FAXXP_SERVICE_NAME L"MSFAX XP"
  54. #undef StringSize
  55. #define StringSize(_s) (( _s ) ? (wcslen( _s ) + 1) * sizeof(WCHAR) : 0)
  56. #define SecToNano(_sec) (DWORDLONG)((_sec) * 1000 * 1000 * 10)
  57. #define MinToNano(_min) SecToNano((_min)*60)
  58. #define COVERPAGE_EDITOR L"%systemroot%\\system32\\faxcover.exe"
  59. #define DEFAULT_FAX_PROFILE L""
  60. #define COVERPAGE_EXTENSION L".cov"
  61. #define COVERPAGE_ASSOC_NAME L"Coverpage"
  62. #define COVERPAGE_ASSOC_DESC L"Fax Coverpage File"
  63. #define COVERPAGE_OPEN_COMMAND L"%SystemRoot%\\system32\\faxcover.exe \"%1\""
  64. #define COVERPAGE_PRINT_COMMAND L"%SystemRoot%\\system32\\faxcover.exe /p \"%1\""
  65. #define EXCHANGE_CLIENT_EXT_NAME "FaxExtension"
  66. #define EXCHANGE_CLIENT_EXT_NAMEW L"FaxExtension"
  67. #define EXCHANGE_CLIENT_EXT_FILE "%windir%\\system32\\faxext32.dll"
  68. #define EXCHANGE_CONTEXT_MASK "00000100000000"
  69. #define DIRID_COVERPAGE 66001
  70. #define DIRID_CLIENTS 66002
  71. #define DIRID_OUTLOOK_ECF 66003
  72. #define FILEQ_FLAG_ENV 1
  73. #define FILEQ_FLAG_SHELL 2
  74. #define SETUP_ACTION_NONE 0
  75. #define SETUP_ACTION_COPY 1
  76. #define SETUP_ACTION_DELETE 2
  77. //
  78. // BugBug... If the CLSID global REGKEY_MYCLSID changes in fax\shellext, then this must also change
  79. //
  80. #define FAXSHELL_CLSID L"{7f9609be-af9a-11d1-83e0-00c04fb6e984}"
  81. #define EMPTY_STRING L""
  82. typedef struct _WIZ_DATA {
  83. DWORD RoutingMask;
  84. DWORD Rings;
  85. DWORD ArchiveOutgoing;
  86. WCHAR Csid[128];
  87. WCHAR Tsid[128];
  88. WCHAR RoutePrinterName[128];
  89. WCHAR RouteDir[MAX_PATH];
  90. WCHAR RouteProfile[128];
  91. WCHAR UserName[128];
  92. WCHAR PhoneNumber[128];
  93. WCHAR PrinterName[128];
  94. WCHAR ArchiveDir[MAX_PATH];
  95. } WIZ_DATA, *PWIZ_DATA;
  96. typedef struct _LINE_INFO {
  97. DWORD PermanentLineID;
  98. BOOL Selected;
  99. LPWSTR DeviceName;
  100. LPWSTR ProviderName;
  101. DWORD Rings;
  102. DWORD Flags;
  103. } LINE_INFO, *PLINE_INFO;
  104. typedef struct _SECURITY_INFO {
  105. WCHAR AccountName[256];
  106. WCHAR Password[256];
  107. } SECURITY_INFO, *PSECURITY_INFO;
  108. typedef struct _PLATFORM_INFO {
  109. LPWSTR PrintPlatform;
  110. LPWSTR OsPlatform;
  111. BOOL Selected;
  112. DWORD Mask;
  113. LPWSTR DriverDir;
  114. BOOL ThisPlatform;
  115. } PLATFORM_INFO, *PPLATFORM_INFO;
  116. typedef struct _WIZPAGE {
  117. DWORD ButtonState;
  118. DWORD PageId;
  119. DWORD DlgId;
  120. DLGPROC DlgProc;
  121. DWORD Title;
  122. DWORD SubTitle;
  123. } WIZPAGE, *PWIZPAGE;
  124. typedef struct _FILE_QUEUE_INFO {
  125. LPWSTR SectionName;
  126. DWORD InfDirId;
  127. LPWSTR DirName;
  128. DWORD Flags;
  129. DWORD ShellId;
  130. } FILE_QUEUE_INFO, *PFILE_QUEUE_INFO;
  131. typedef struct _FILE_QUEUE_CONTEXT {
  132. HWND hwnd;
  133. PVOID QueueContext;
  134. } FILE_QUEUE_CONTEXT, *PFILE_QUEUE_CONTEXT;
  135. //
  136. // group flags
  137. //
  138. #define USE_COMMON_GROUP 0x00000001 // do not use USE_USER_GROUP and USE_COMMON_GROUP
  139. #define USE_USER_GROUP 0x00000002 // together, they are mutually exclusive
  140. #define USE_APP_PATH 0x00000004 // commandline must contain the subkey name
  141. #define USE_SERVER_NAME 0x00000008 // if we're doing a client install the append the server name to the command line
  142. #define USE_SHELL_PATH 0x00000010 // use CSIDL_COMMON_APPPATH in front of exe path
  143. #define USE_SUBDIR 0x00000020 // create a subdir, don't set the working directory
  144. typedef struct GROUP_ITEM {
  145. DWORD ResourceID;
  146. TCHAR Name[MAX_PATH];
  147. } GROUP_ITEM, *PGROUPITEM;
  148. typedef struct _GROUP_ITEMS {
  149. GROUP_ITEM GroupName;
  150. GROUP_ITEM Description;
  151. GROUP_ITEM CommandLine;
  152. GROUP_ITEM IconPath;
  153. GROUP_ITEM WorkingDirectory;
  154. DWORD Flags;
  155. INT IconIndex;
  156. INT ShowCmd;
  157. WORD HotKey;
  158. GROUP_ITEM InfoTip;
  159. } GROUP_ITEMS, *PGROUP_ITEMS;
  160. typedef struct _MDM_DEVSPEC {
  161. DWORD Contents; // Set to 1 (indicates containing key)
  162. DWORD KeyOffset; // Offset to key from start of this struct.
  163. // (not from start of LINEDEVCAPS ).
  164. // 8 in our case.
  165. CHAR String[1]; // place containing null-terminated registry key.
  166. } MDM_DEVSPEC, *PMDM_DEVSPEC;
  167. typedef struct {
  168. HANDLE hComm;
  169. CHAR szDeviceName[1];
  170. } DEVICEID, *PDEVICEID;
  171. typedef enum _DATAYPE {
  172. DT_STRING,
  173. DT_LONGINT,
  174. DT_BOOLEAN,
  175. DT_NONE,
  176. } DATATYPE;
  177. typedef struct _UNATTEND_ANSWER {
  178. LPWSTR KeyName;
  179. DATATYPE DataType;
  180. DWORD UseMaskOnBool;
  181. LPVOID DataPtr;
  182. } UNATTEND_ANSWER, *PUNATTEND_ANSWER;
  183. extern HINSTANCE hInstance;
  184. extern SETUP_INIT_COMPONENT SetupInitComponent;
  185. extern BOOL Unattended;
  186. extern BOOL Upgrade;
  187. extern BOOL NtGuiMode;
  188. extern BOOL NtWorkstation;
  189. extern DWORD FaxDevices;
  190. extern BOOL UnInstall;
  191. extern PLINE_INFO LineInfo;
  192. extern "C" BOOL MapiAvail;
  193. extern WORD EnumPlatforms[4];
  194. extern DWORD InstalledPlatforms;
  195. extern DWORD CountPlatforms;
  196. extern PLATFORM_INFO Platforms[];
  197. extern BOOL RemoteAdminSetup;
  198. extern BOOL RebootRequired;
  199. extern BOOL SuppressReboot;
  200. extern BOOL PointPrintSetup;
  201. extern DWORD InstallThreadError;
  202. extern BOOL OkToCancel;
  203. extern WCHAR ClientSetupServerName[MAX_PATH];
  204. extern WCHAR ThisPlatformName[MAX_PATH];
  205. extern DWORD CurrentCountryId;
  206. extern LPWSTR CurrentAreaCode;
  207. extern DWORD InstallType;
  208. extern DWORD Installed;
  209. extern WIZ_DATA WizData;
  210. #define WM_MY_PROGRESS (WM_USER+100)
  211. LPWSTR
  212. GetString(
  213. DWORD ResourceId
  214. );
  215. BOOL
  216. StopFaxService(
  217. VOID
  218. );
  219. DWORD
  220. DeviceInitialization(
  221. HWND hwnd
  222. );
  223. BOOL
  224. SetWizData(
  225. VOID
  226. );
  227. INT_PTR
  228. SecurityErrorDlgProc(
  229. HWND hwnd,
  230. UINT message,
  231. WPARAM wParam,
  232. LPARAM lParam
  233. );
  234. INT_PTR
  235. CommonDlgProc(
  236. HWND hwnd,
  237. UINT message,
  238. WPARAM wParam,
  239. LPARAM lParam
  240. );
  241. INT_PTR
  242. DeviceStatusDlgProc(
  243. HWND hwnd,
  244. UINT message,
  245. WPARAM wParam,
  246. LPARAM lParam
  247. );
  248. INT_PTR
  249. WelcomeDlgProc(
  250. HWND hwnd,
  251. UINT message,
  252. WPARAM wParam,
  253. LPARAM lParam
  254. );
  255. INT_PTR
  256. FinalDlgProc(
  257. HWND hwnd,
  258. UINT message,
  259. WPARAM wParam,
  260. LPARAM lParam
  261. );
  262. INT_PTR
  263. EulaDlgProc(
  264. HWND hwnd,
  265. UINT message,
  266. WPARAM wParam,
  267. LPARAM lParam
  268. );
  269. INT_PTR
  270. PlatformsDlgProc(
  271. HWND hwnd,
  272. UINT message,
  273. WPARAM wParam,
  274. LPARAM lParam
  275. );
  276. INT_PTR
  277. FileCopyDlgProc(
  278. HWND hwnd,
  279. UINT message,
  280. WPARAM wParam,
  281. LPARAM lParam
  282. );
  283. INT_PTR
  284. LastPageDlgProc(
  285. HWND hwnd,
  286. UINT message,
  287. WPARAM wParam,
  288. LPARAM lParam
  289. );
  290. INT_PTR
  291. LastPageUninstallDlgProc(
  292. HWND hwnd,
  293. UINT message,
  294. WPARAM wParam,
  295. LPARAM lParam
  296. );
  297. INT_PTR
  298. ServerNameDlgProc(
  299. HWND hwnd,
  300. UINT message,
  301. WPARAM wParam,
  302. LPARAM lParam
  303. );
  304. INT_PTR
  305. StationIdDlgProc(
  306. HWND hwnd,
  307. UINT message,
  308. WPARAM wParam,
  309. LPARAM lParam
  310. );
  311. INT_PTR
  312. RoutePrintDlgProc(
  313. HWND hwnd,
  314. UINT message,
  315. WPARAM wParam,
  316. LPARAM lParam
  317. );
  318. INT_PTR
  319. RouteStoreDlgProc(
  320. HWND hwnd,
  321. UINT message,
  322. WPARAM wParam,
  323. LPARAM lParam
  324. );
  325. INT_PTR
  326. RouteMailDlgProc(
  327. HWND hwnd,
  328. UINT message,
  329. WPARAM wParam,
  330. LPARAM lParam
  331. );
  332. INT_PTR
  333. RouteSecurityDlgProc(
  334. HWND hwnd,
  335. UINT message,
  336. WPARAM wParam,
  337. LPARAM lParam
  338. );
  339. INT_PTR
  340. ClientServerNameDlgProc(
  341. HWND hwnd,
  342. UINT message,
  343. WPARAM wParam,
  344. LPARAM lParam
  345. );
  346. INT_PTR
  347. ClientUserInfoDlgProc(
  348. HWND hwnd,
  349. UINT message,
  350. WPARAM wParam,
  351. LPARAM lParam
  352. );
  353. INT_PTR
  354. ClientFileCopyDlgProc(
  355. HWND hwnd,
  356. UINT msg,
  357. WPARAM wParam,
  358. LPARAM lParam
  359. );
  360. INT_PTR
  361. PrinterNameDlgProc(
  362. HWND hwnd,
  363. UINT message,
  364. WPARAM wParam,
  365. LPARAM lParam
  366. );
  367. INT_PTR
  368. RemoteAdminFileCopyDlgProc(
  369. HWND hwnd,
  370. UINT message,
  371. WPARAM wParam,
  372. LPARAM lParam
  373. );
  374. INT_PTR
  375. DeviceSelectionDlgProc(
  376. HWND hwnd,
  377. UINT msg,
  378. WPARAM wParam,
  379. LPARAM lParam
  380. );
  381. INT_PTR
  382. ExchangeDlgProc(
  383. HWND hwnd,
  384. UINT msg,
  385. WPARAM wParam,
  386. LPARAM lParam
  387. );
  388. INT_PTR
  389. LastClientPageDlgProc(
  390. HWND hwnd,
  391. UINT msg,
  392. WPARAM wParam,
  393. LPARAM lParam
  394. );
  395. PVOID
  396. MyEnumPrinters(
  397. LPWSTR pServerName,
  398. DWORD level,
  399. PDWORD pcPrinters,
  400. DWORD Flags
  401. );
  402. BOOL
  403. IsPrinterFaxPrinter(
  404. LPWSTR PrinterName
  405. );
  406. int
  407. PopUpMsg(
  408. HWND hwnd,
  409. DWORD ResourceId,
  410. BOOL Error,
  411. DWORD Type
  412. );
  413. BOOL
  414. UnAttendGetAnswer(
  415. DWORD ControlId,
  416. LPBYTE AnswerBuf,
  417. DWORD AnswerBufSize
  418. );
  419. extern"C"
  420. BOOL
  421. GetMapiProfiles(
  422. HWND hwnd,
  423. DWORD ResourceId
  424. );
  425. extern"C"
  426. BOOL
  427. GetDefaultMapiProfile(
  428. LPWSTR ProfileName
  429. );
  430. DWORD
  431. DoUninstall(
  432. VOID
  433. );
  434. DWORD
  435. ServerInstallation(
  436. HWND hwnd,
  437. LPWSTR SourceRoot
  438. );
  439. BOOL
  440. DoBrowseDestDir(
  441. HWND hDlg
  442. );
  443. BOOL
  444. GetUserInformation(
  445. LPWSTR *UserName,
  446. LPWSTR *FaxNumber,
  447. LPWSTR *AreaCode
  448. );
  449. DWORD
  450. ClientFileCopyThread(
  451. HWND hwnd
  452. );
  453. DWORD
  454. PointPrintFileCopyThread(
  455. HWND hwnd
  456. );
  457. DWORD
  458. RemoteAdminCopyThread(
  459. HWND hwnd
  460. );
  461. VOID
  462. SetWizPageTitle(
  463. HWND hWnd
  464. );
  465. DWORD
  466. GetModemClass(
  467. HANDLE hFile
  468. );
  469. BOOL
  470. CreateServerFaxPrinter(
  471. HWND hwnd,
  472. LPWSTR FaxPrinterName
  473. );
  474. DWORD
  475. StartFaxService(
  476. VOID
  477. );
  478. VOID
  479. CreateGroupItems(
  480. LPWSTR ServerName
  481. );
  482. VOID
  483. DeleteNt4Group(
  484. VOID
  485. );
  486. //
  487. // fileq.c
  488. //
  489. BOOL
  490. InitializeFileQueue(
  491. HWND hwnd,
  492. HINF *SetupInf,
  493. HSPFILEQ **FileQueue,
  494. PVOID *QueueContext,
  495. LPWSTR SourceRoot
  496. );
  497. BOOL
  498. ProcessFileQueue(
  499. HINF SetupInf,
  500. HSPFILEQ *FileQueue,
  501. PVOID QueueContext,
  502. LPWSTR SourceRoot,
  503. PFILE_QUEUE_INFO FileQueueInfo,
  504. DWORD CountFileQueueInfo,
  505. PSP_FILE_CALLBACK MyQueueCallback,
  506. DWORD ActionId
  507. );
  508. BOOL
  509. CloseFileQueue(
  510. HSPFILEQ *FileQueue,
  511. PVOID QueueContext
  512. );
  513. UINT
  514. InstallQueueCallback(
  515. IN PVOID QueueContext,
  516. IN UINT Notification,
  517. IN UINT Param1,
  518. IN UINT Param2
  519. );
  520. VOID
  521. SetProgress(
  522. DWORD StatusString
  523. );
  524. BOOL
  525. SetClientRegistryData(
  526. VOID
  527. );
  528. BOOL
  529. SetInstalledFlag(
  530. BOOL Installed
  531. );
  532. BOOL
  533. SetInstallType(
  534. DWORD InstallType
  535. );
  536. DWORD
  537. CreateClientFaxPrinter(
  538. HWND hwnd,
  539. LPWSTR FaxPrinterName
  540. );
  541. BOOL
  542. InstallHelpFiles(
  543. VOID
  544. );
  545. VOID
  546. DoExchangeInstall(
  547. HWND hwnd
  548. );
  549. LPWSTR
  550. RemoveLastNode(
  551. LPWSTR Path
  552. );
  553. BOOL
  554. PlatformOverride(
  555. LPWSTR ThisPlatformName,
  556. LPWSTR Override,
  557. LPWSTR SourceRoot,
  558. LPWSTR Result
  559. );
  560. BOOL
  561. StartSpoolerService(
  562. VOID
  563. );
  564. BOOL
  565. MyDeleteFile(
  566. LPWSTR FileName
  567. );
  568. int
  569. PopUpMsgFmt(
  570. HWND hwnd,
  571. DWORD ResourceId,
  572. BOOL Error,
  573. DWORD Type,
  574. ...
  575. );
  576. LPWSTR
  577. GetProductName(
  578. VOID
  579. );
  580. DWORD
  581. ExtraChars(
  582. HWND hwnd,
  583. LPWSTR TextBuffer
  584. );
  585. LPWSTR
  586. CompactFileName(
  587. LPCTSTR FileNameIn,
  588. DWORD CharsToRemove
  589. );
  590. DWORD
  591. MyStartService(
  592. LPWSTR ServiceName
  593. );
  594. BOOL
  595. SetServerRegistryData(
  596. LPWSTR SourceRoot
  597. );
  598. BOOL
  599. SetSoundRegistryData(
  600. VOID
  601. );
  602. VOID
  603. DeleteModemRegistryKey(
  604. VOID
  605. );
  606. BOOL
  607. SetInstalledPlatforms(
  608. DWORD PlatformsMask
  609. );
  610. BOOL
  611. InstallFaxService(
  612. BOOL UseLocalSystem,
  613. BOOL DemandStart,
  614. LPWSTR AccountName,
  615. LPWSTR Password
  616. );
  617. BOOL
  618. RenameFaxService(
  619. VOID
  620. );
  621. BOOL
  622. SetServiceAccount(
  623. LPWSTR ServiceName,
  624. PSECURITY_INFO SecurityInfo
  625. );
  626. BOOL
  627. DeleteFaxService(
  628. VOID
  629. );
  630. BOOL
  631. AddPrinterDrivers(
  632. VOID
  633. );
  634. BOOL
  635. CreateNetworkShare(
  636. LPWSTR Path,
  637. LPWSTR ShareName,
  638. LPWSTR Comment
  639. );
  640. DWORD
  641. SetServiceSecurity(
  642. LPWSTR AccountName
  643. );
  644. BOOL
  645. CallModemInstallWizard(
  646. HWND hwnd
  647. );
  648. BOOL
  649. DeleteFaxPrinters(
  650. HWND hwnd
  651. );
  652. BOOL
  653. DeleteDirectoryTree(
  654. LPWSTR Root
  655. );
  656. BOOL
  657. DeleteFaxRegistryData(
  658. VOID
  659. );
  660. BOOL
  661. DeleteRegistryTree(
  662. HKEY hKey,
  663. LPWSTR SubKey
  664. );
  665. BOOL
  666. MyDeleteService(
  667. LPWSTR ServiceName
  668. );
  669. VOID
  670. DeleteGroupItems(
  671. VOID
  672. );
  673. extern "C"
  674. BOOL
  675. DeleteFaxMsgServices(
  676. VOID
  677. );
  678. BOOL
  679. DeleteNetworkShare(
  680. LPWSTR ShareName
  681. );
  682. extern "C"
  683. VOID
  684. AddFaxAbToMapiSvcInf(
  685. LPWSTR SystemPath
  686. );
  687. extern "C"
  688. VOID
  689. AddFaxXpToMapiSvcInf(
  690. LPWSTR SystemPath
  691. );
  692. extern "C"
  693. BOOL
  694. InstallExchangeClientExtension(
  695. LPSTR ExtensionName,
  696. LPSTR ExtensionKey,
  697. LPSTR FileName,
  698. LPSTR ContextMask
  699. );
  700. extern "C"
  701. BOOL
  702. GetExchangeInstallCommand(
  703. LPWSTR InstallCommand
  704. );
  705. extern "C"
  706. BOOL
  707. CreateDefaultMapiProfile(
  708. LPWSTR ProfileName
  709. );
  710. extern "C"
  711. BOOL
  712. InstallFaxAddressBook(
  713. HWND hwnd,
  714. LPWSTR ProfileName
  715. );
  716. extern "C"
  717. BOOL
  718. InstallFaxTransport(
  719. LPWSTR ProfileNameW
  720. );
  721. extern "C"
  722. BOOL
  723. IsMapiServiceInstalled(
  724. LPWSTR ProfileNameW,
  725. LPWSTR ServiceNameW
  726. );
  727. extern "C"
  728. DWORD
  729. IsExchangeRunning(
  730. VOID
  731. );
  732. extern "C"
  733. BOOL
  734. InitializeMapi(
  735. BOOL MinimalInit
  736. );
  737. BOOL
  738. MyInitializeMapi(
  739. BOOL MinimalInit
  740. );
  741. VOID
  742. InitializeStringTable(
  743. VOID
  744. );
  745. BOOL
  746. GetInstallationInfo(
  747. LPDWORD Installed,
  748. LPDWORD InstallType,
  749. LPDWORD InstalledPlatforms
  750. );
  751. HPROPSHEETPAGE
  752. GetWelcomeWizardPage(
  753. VOID
  754. );
  755. HPROPSHEETPAGE
  756. GetEulaWizardPage(
  757. VOID
  758. );
  759. HPROPSHEETPAGE
  760. GetFinalWizardPage(
  761. VOID
  762. );
  763. VOID
  764. CenterWindow(
  765. HWND hwnd,
  766. HWND hwndToCenterOver
  767. );
  768. BOOL
  769. AddServerFilesToQueue(
  770. HINF SetupInf,
  771. HSPFILEQ FileQueue,
  772. LPWSTR SourceRoot
  773. );
  774. BOOL
  775. CalcServerDiskSpace(
  776. HINF SetupInf,
  777. HDSKSPC DiskSpace,
  778. LPWSTR SourceRoot,
  779. BOOL AddToQueue
  780. );
  781. BOOL
  782. CreateLocalFaxPrinter(
  783. LPWSTR FaxPrinterName
  784. );
  785. BOOL
  786. RecreateNt5Beta3FaxPrinters(
  787. VOID
  788. );
  789. BOOL
  790. RecreateNt4FaxPrinters(
  791. VOID
  792. );
  793. DWORD
  794. ServerGetStepCount(
  795. VOID
  796. );
  797. BOOL
  798. RegisterOleControlDlls(
  799. HINF hInf
  800. );
  801. BOOL
  802. SetServiceWorldAccessMask(
  803. SC_HANDLE hService,
  804. DWORD AccessMask
  805. );
  806. BOOL
  807. SetKeySecurity(
  808. HKEY hKey
  809. );
  810. LPWSTR
  811. VerifyInstallPath(
  812. LPWSTR SourcePath
  813. );
  814. BOOL
  815. SetFaxShellExtension(
  816. LPCWSTR Path
  817. );
  818. BOOL
  819. IsNt4or351Upgrade(
  820. VOID
  821. );
  822. BOOL
  823. MyGetSpecialPath(
  824. INT Id,
  825. LPWSTR Buffer
  826. );
  827. BOOL
  828. SuperHideDirectory(
  829. PWSTR Directory
  830. );