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.

845 lines
19 KiB

  1. /*++
  2. Copyright (c) 1989-1993 Microsoft Corporation
  3. Module Name:
  4. wfwnet.c
  5. Abstract:
  6. Provides entry points for the functions that will be mapped
  7. to LANMAN.DRV.
  8. Author:
  9. Chuck Y Chan (ChuckC) 25-Mar-1993
  10. Revision History:
  11. --*/
  12. #include <windows.h>
  13. #include <locals.h>
  14. WORD vLastCall = LAST_CALL_IS_LOCAL ;
  15. WORD vLastError = 0 ;
  16. WORD wNetTypeCaps ; /* Current capabilities */
  17. WORD wUserCaps ;
  18. WORD wConnectionCaps ;
  19. WORD wErrorCaps ;
  20. WORD wDialogCaps ;
  21. WORD wAdminCaps ;
  22. WORD wSpecVersion = 0x0310 ;
  23. WORD wDriverVersion = 0x0300 ;
  24. WORD _acrtused=0;
  25. void I_SetCapBits(void) ;
  26. //
  27. // global pointers to functions
  28. //
  29. LPWNETOPENJOB lpfnWNetOpenJob = NULL ;
  30. LPWNETCLOSEJOB lpfnWNetCloseJob = NULL ;
  31. LPWNETWRITEJOB lpfnWNetWriteJob = NULL ;
  32. LPWNETABORTJOB lpfnWNetAbortJob = NULL ;
  33. LPWNETHOLDJOB lpfnWNetHoldJob = NULL ;
  34. LPWNETRELEASEJOB lpfnWNetReleaseJob = NULL ;
  35. LPWNETCANCELJOB lpfnWNetCancelJob = NULL ;
  36. LPWNETSETJOBCOPIES lpfnWNetSetJobCopies = NULL ;
  37. LPWNETWATCHQUEUE lpfnWNetWatchQueue = NULL ;
  38. LPWNETUNWATCHQUEUE lpfnWNetUnwatchQueue = NULL ;
  39. LPWNETLOCKQUEUEDATA lpfnWNetLockQueueData = NULL ;
  40. LPWNETUNLOCKQUEUEDATA lpfnWNetUnlockQueueData = NULL ;
  41. LPWNETQPOLL lpfnWNetQPoll = NULL ;
  42. LPWNETDEVICEMODE lpfnWNetDeviceMode = NULL ;
  43. LPWNETVIEWQUEUEDIALOG lpfnWNetViewQueueDialog = NULL ;
  44. LPWNETGETCAPS lpfnWNetGetCaps16 = NULL ;
  45. LPWNETGETERROR lpfnWNetGetError16 = NULL ;
  46. LPWNETGETERRORTEXT lpfnWNetGetErrorText16 = NULL ;
  47. extern VOID FAR PASCAL GrabInterrupts(void);
  48. int FAR PASCAL LibMain(HINSTANCE hInstance,
  49. WORD wDataSeg,
  50. WORD cbHeapSize,
  51. LPSTR lpszCmdLine) ;
  52. /*
  53. * functions passed to LANMAN.DRV
  54. */
  55. WORD API WNetOpenJob(LPSTR p1,LPSTR p2,WORD p3,LPINT p4)
  56. {
  57. WORD err ;
  58. if (!lpfnWNetOpenJob)
  59. {
  60. //
  61. // start off as a our code until we get the entry point
  62. //
  63. vLastCall = LAST_CALL_IS_LOCAL ;
  64. //
  65. // get the entry point from LANMAN.DRV
  66. //
  67. err = GetLanmanDrvEntryPoints( (LPFN *)&lpfnWNetOpenJob,
  68. "WNETOPENJOB" ) ;
  69. if (err)
  70. {
  71. SetLastError(err) ;
  72. return err ;
  73. }
  74. }
  75. //
  76. // note it is no longer an error in our code. and call the API
  77. //
  78. vLastCall = LAST_CALL_IS_LANMAN_DRV ;
  79. return ( (*lpfnWNetOpenJob)(p1,p2,p3,p4) ) ;
  80. }
  81. WORD API WNetCloseJob(WORD p1,LPINT p2,LPSTR p3)
  82. {
  83. WORD err ;
  84. if (!lpfnWNetCloseJob)
  85. {
  86. //
  87. // start off as a our code until we get the entry point
  88. //
  89. vLastCall = LAST_CALL_IS_LOCAL ;
  90. //
  91. // get the entry point from LANMAN.DRV
  92. //
  93. err = GetLanmanDrvEntryPoints( (LPFN *)&lpfnWNetCloseJob,
  94. "WNETCLOSEJOB" ) ;
  95. if (err)
  96. {
  97. SetLastError(err) ;
  98. return err ;
  99. }
  100. }
  101. //
  102. // note it is no longer an error in our code. and call the API
  103. //
  104. vLastCall = LAST_CALL_IS_LANMAN_DRV ;
  105. return ( (*lpfnWNetCloseJob)(p1,p2,p3) ) ;
  106. }
  107. WORD API WNetWriteJob(HANDLE p1,LPSTR p2,LPINT p3)
  108. {
  109. WORD err ;
  110. if (!lpfnWNetWriteJob)
  111. {
  112. //
  113. // start off as a our code until we get the entry point
  114. //
  115. vLastCall = LAST_CALL_IS_LOCAL ;
  116. //
  117. // get the entry point from LANMAN.DRV
  118. //
  119. err = GetLanmanDrvEntryPoints( (LPFN *)&lpfnWNetWriteJob,
  120. "WNETWRITEJOB" ) ;
  121. if (err)
  122. {
  123. SetLastError(err) ;
  124. return err ;
  125. }
  126. }
  127. //
  128. // note it is no longer an error in our code. and call the API
  129. //
  130. vLastCall = LAST_CALL_IS_LANMAN_DRV ;
  131. return ( (*lpfnWNetWriteJob)(p1,p2,p3) ) ;
  132. }
  133. WORD API WNetAbortJob(WORD p1,LPSTR p2)
  134. {
  135. WORD err ;
  136. if (!lpfnWNetAbortJob)
  137. {
  138. //
  139. // start off as a our code until we get the entry point
  140. //
  141. vLastCall = LAST_CALL_IS_LOCAL ;
  142. //
  143. // get the entry point from LANMAN.DRV
  144. //
  145. err = GetLanmanDrvEntryPoints( (LPFN *)&lpfnWNetAbortJob,
  146. "WNETABORTJOB" ) ;
  147. if (err)
  148. {
  149. SetLastError(err) ;
  150. return err ;
  151. }
  152. }
  153. //
  154. // note it is no longer an error in our code. and call the API
  155. //
  156. vLastCall = LAST_CALL_IS_LANMAN_DRV ;
  157. return ( (*lpfnWNetAbortJob)(p1,p2) ) ;
  158. }
  159. WORD API WNetHoldJob(LPSTR p1,WORD p2)
  160. {
  161. WORD err ;
  162. if (!lpfnWNetHoldJob)
  163. {
  164. //
  165. // start off as a our code until we get the entry point
  166. //
  167. vLastCall = LAST_CALL_IS_LOCAL ;
  168. //
  169. // get the entry point from LANMAN.DRV
  170. //
  171. err = GetLanmanDrvEntryPoints( (LPFN *)&lpfnWNetHoldJob,
  172. "WNETHOLDJOB" ) ;
  173. if (err)
  174. {
  175. SetLastError(err) ;
  176. return err ;
  177. }
  178. }
  179. //
  180. // note it is no longer an error in our code. and call the API
  181. //
  182. vLastCall = LAST_CALL_IS_LANMAN_DRV ;
  183. return ( (*lpfnWNetHoldJob)(p1,p2) ) ;
  184. }
  185. WORD API WNetReleaseJob(LPSTR p1,WORD p2)
  186. {
  187. WORD err ;
  188. if (!lpfnWNetReleaseJob)
  189. {
  190. //
  191. // start off as a our code until we get the entry point
  192. //
  193. vLastCall = LAST_CALL_IS_LOCAL ;
  194. //
  195. // get the entry point from LANMAN.DRV
  196. //
  197. err = GetLanmanDrvEntryPoints( (LPFN *)&lpfnWNetReleaseJob,
  198. "WNETRELEASEJOB" ) ;
  199. if (err)
  200. {
  201. SetLastError(err) ;
  202. return err ;
  203. }
  204. }
  205. //
  206. // note it is no longer an error in our code. and call the API
  207. //
  208. vLastCall = LAST_CALL_IS_LANMAN_DRV ;
  209. return ( (*lpfnWNetReleaseJob)(p1,p2) ) ;
  210. }
  211. WORD API WNetCancelJob(LPSTR p1,WORD p2)
  212. {
  213. WORD err ;
  214. if (!lpfnWNetCancelJob)
  215. {
  216. //
  217. // start off as a our code until we get the entry point
  218. //
  219. vLastCall = LAST_CALL_IS_LOCAL ;
  220. //
  221. // get the entry point from LANMAN.DRV
  222. //
  223. err = GetLanmanDrvEntryPoints( (LPFN *)&lpfnWNetCancelJob,
  224. "WNETCANCELJOB" ) ;
  225. if (err)
  226. {
  227. SetLastError(err) ;
  228. return err ;
  229. }
  230. }
  231. //
  232. // note it is no longer an error in our code. and call the API
  233. //
  234. vLastCall = LAST_CALL_IS_LANMAN_DRV ;
  235. return ( (*lpfnWNetCancelJob)(p1,p2) ) ;
  236. }
  237. WORD API WNetSetJobCopies(LPSTR p1,WORD p2,WORD p3)
  238. {
  239. WORD err ;
  240. if (!lpfnWNetSetJobCopies)
  241. {
  242. //
  243. // start off as a our code until we get the entry point
  244. //
  245. vLastCall = LAST_CALL_IS_LOCAL ;
  246. //
  247. // get the entry point from LANMAN.DRV
  248. //
  249. err = GetLanmanDrvEntryPoints( (LPFN *)&lpfnWNetSetJobCopies,
  250. "WNETSETJOBCOPIES" ) ;
  251. if (err)
  252. {
  253. SetLastError(err) ;
  254. return err ;
  255. }
  256. }
  257. //
  258. // note it is no longer an error in our code. and call the API
  259. //
  260. vLastCall = LAST_CALL_IS_LANMAN_DRV ;
  261. return ( (*lpfnWNetSetJobCopies)(p1,p2,p3) ) ;
  262. }
  263. WORD API WNetWatchQueue(HWND p1,LPSTR p2,LPSTR p3,WORD p4)
  264. {
  265. WORD err ;
  266. if (!lpfnWNetWatchQueue)
  267. {
  268. //
  269. // start off as a our code until we get the entry point
  270. //
  271. vLastCall = LAST_CALL_IS_LOCAL ;
  272. //
  273. // get the entry point from LANMAN.DRV
  274. //
  275. err = GetLanmanDrvEntryPoints( (LPFN *)&lpfnWNetWatchQueue,
  276. "WNETWATCHQUEUE" ) ;
  277. if (err)
  278. {
  279. SetLastError(err) ;
  280. return err ;
  281. }
  282. }
  283. //
  284. // note it is no longer an error in our code. and call the API
  285. //
  286. vLastCall = LAST_CALL_IS_LANMAN_DRV ;
  287. return ( (*lpfnWNetWatchQueue)(p1,p2,p3,p4) ) ;
  288. }
  289. WORD API WNetUnwatchQueue(LPSTR p1)
  290. {
  291. WORD err ;
  292. if (!lpfnWNetUnwatchQueue)
  293. {
  294. //
  295. // start off as a our code until we get the entry point
  296. //
  297. vLastCall = LAST_CALL_IS_LOCAL ;
  298. //
  299. // get the entry point from LANMAN.DRV
  300. //
  301. err = GetLanmanDrvEntryPoints( (LPFN *)&lpfnWNetUnwatchQueue,
  302. "WNETUNWATCHQUEUE" ) ;
  303. if (err)
  304. {
  305. SetLastError(err) ;
  306. return err ;
  307. }
  308. }
  309. //
  310. // note it is no longer an error in our code. and call the API
  311. //
  312. vLastCall = LAST_CALL_IS_LANMAN_DRV ;
  313. return ( (*lpfnWNetUnwatchQueue)(p1) ) ;
  314. }
  315. WORD API WNetLockQueueData(LPSTR p1,LPSTR p2,LPQUEUESTRUCT FAR *p3)
  316. {
  317. WORD err ;
  318. if (!lpfnWNetLockQueueData)
  319. {
  320. //
  321. // start off as a our code until we get the entry point
  322. //
  323. vLastCall = LAST_CALL_IS_LOCAL ;
  324. //
  325. // get the entry point from LANMAN.DRV
  326. //
  327. err = GetLanmanDrvEntryPoints( (LPFN *)&lpfnWNetLockQueueData,
  328. "WNETLOCKQUEUEDATA" ) ;
  329. if (err)
  330. {
  331. SetLastError(err) ;
  332. return err ;
  333. }
  334. }
  335. //
  336. // note it is no longer an error in our code. and call the API
  337. //
  338. vLastCall = LAST_CALL_IS_LANMAN_DRV ;
  339. return ( (*lpfnWNetLockQueueData)(p1,p2,p3) ) ;
  340. }
  341. WORD API WNetUnlockQueueData(LPSTR p1)
  342. {
  343. WORD err ;
  344. if (!lpfnWNetUnlockQueueData)
  345. {
  346. //
  347. // start off as a our code until we get the entry point
  348. //
  349. vLastCall = LAST_CALL_IS_LOCAL ;
  350. //
  351. // get the entry point from LANMAN.DRV
  352. //
  353. err = GetLanmanDrvEntryPoints( (LPFN *)&lpfnWNetUnlockQueueData,
  354. "WNETUNLOCKQUEUEDATA" ) ;
  355. if (err)
  356. {
  357. SetLastError(err) ;
  358. return err ;
  359. }
  360. }
  361. //
  362. // note it is no longer an error in our code. and call the API
  363. //
  364. vLastCall = LAST_CALL_IS_LANMAN_DRV ;
  365. return ( (*lpfnWNetUnlockQueueData)(p1) ) ;
  366. }
  367. void API WNetQPoll(HWND hWnd, unsigned iMessage, WORD wParam, LONG lParam)
  368. {
  369. WORD err ;
  370. if (!lpfnWNetQPoll)
  371. {
  372. //
  373. // start off as a our code until we get the entry point
  374. //
  375. vLastCall = LAST_CALL_IS_LOCAL ;
  376. //
  377. // get the entry point from LANMAN.DRV
  378. //
  379. err = GetLanmanDrvEntryPoints( (LPFN *)&lpfnWNetQPoll,
  380. "WNETQPOLL" ) ;
  381. if (err)
  382. {
  383. SetLastError(err) ;
  384. return ;
  385. }
  386. }
  387. //
  388. // note it is no longer an error in our code. and call the API
  389. //
  390. vLastCall = LAST_CALL_IS_LANMAN_DRV ;
  391. (*lpfnWNetQPoll)(hWnd, iMessage, wParam, lParam) ;
  392. }
  393. WORD API WNetDeviceMode(HWND p1)
  394. {
  395. WORD err ;
  396. if (!lpfnWNetDeviceMode)
  397. {
  398. //
  399. // start off as a our code until we get the entry point
  400. //
  401. vLastCall = LAST_CALL_IS_LOCAL ;
  402. //
  403. // get the entry point from LANMAN.DRV
  404. //
  405. err = GetLanmanDrvEntryPoints( (LPFN *)&lpfnWNetDeviceMode,
  406. "WNETDEVICEMODE" ) ;
  407. if (err)
  408. {
  409. SetLastError(err) ;
  410. return err ;
  411. }
  412. }
  413. //
  414. // note it is no longer an error in our code. and call the API
  415. //
  416. vLastCall = LAST_CALL_IS_LANMAN_DRV ;
  417. return ( (*lpfnWNetDeviceMode)(p1) ) ;
  418. }
  419. WORD API WNetViewQueueDialog(HWND p1,LPSTR p2)
  420. {
  421. WORD err ;
  422. if (!lpfnWNetViewQueueDialog)
  423. {
  424. //
  425. // start off as a our code until we get the entry point
  426. //
  427. vLastCall = LAST_CALL_IS_LOCAL ;
  428. //
  429. // get the entry point from LANMAN.DRV
  430. //
  431. err = GetLanmanDrvEntryPoints( (LPFN *)&lpfnWNetViewQueueDialog,
  432. "WNETVIEWQUEUEDIALOG" ) ;
  433. if (err)
  434. {
  435. SetLastError(err) ;
  436. return err ;
  437. }
  438. }
  439. //
  440. // note it is no longer an error in our code. and call the API
  441. //
  442. vLastCall = LAST_CALL_IS_LANMAN_DRV ;
  443. return ( (*lpfnWNetViewQueueDialog)(p1,p2) ) ;
  444. }
  445. WORD API WNetGetCaps16(WORD p1)
  446. {
  447. WORD err ;
  448. if (!lpfnWNetGetCaps16)
  449. {
  450. //
  451. // start off as a our code until we get the entry point
  452. //
  453. vLastCall = LAST_CALL_IS_LOCAL ;
  454. //
  455. // get the entry point from LANMAN.DRV
  456. //
  457. err = GetLanmanDrvEntryPoints( (LPFN *)&lpfnWNetGetCaps16,
  458. "WNETGETCAPS" ) ;
  459. if (err)
  460. {
  461. SetLastError(err) ;
  462. return err ;
  463. }
  464. }
  465. //
  466. // note it is no longer an error in our code. and call the API
  467. //
  468. vLastCall = LAST_CALL_IS_LANMAN_DRV ;
  469. return ( (*lpfnWNetGetCaps16)(p1) ) ;
  470. }
  471. WORD API WNetGetError16(LPINT p1)
  472. {
  473. WORD err ;
  474. if (!lpfnWNetGetError16)
  475. {
  476. //
  477. // start off as a our code until we get the entry point
  478. //
  479. vLastCall = LAST_CALL_IS_LOCAL ;
  480. //
  481. // get the entry point from LANMAN.DRV
  482. //
  483. err = GetLanmanDrvEntryPoints( (LPFN *)&lpfnWNetGetError16,
  484. "WNETGETERROR" ) ;
  485. if (err)
  486. {
  487. SetLastError(err) ;
  488. return err ;
  489. }
  490. }
  491. //
  492. // note it is no longer an error in our code. and call the API
  493. //
  494. vLastCall = LAST_CALL_IS_LANMAN_DRV ;
  495. return ( (*lpfnWNetGetError16)(p1) ) ;
  496. }
  497. WORD API WNetGetErrorText16(WORD p1, LPSTR p2, LPINT p3)
  498. {
  499. WORD err ;
  500. if (!lpfnWNetGetErrorText16)
  501. {
  502. //
  503. // start off as a our code until we get the entry point
  504. //
  505. vLastCall = LAST_CALL_IS_LOCAL ;
  506. //
  507. // get the entry point from LANMAN.DRV
  508. //
  509. err = GetLanmanDrvEntryPoints( (LPFN *)&lpfnWNetGetErrorText16,
  510. "WNETGETERRORTEXT" ) ;
  511. if (err)
  512. {
  513. SetLastError(err) ;
  514. return err ;
  515. }
  516. }
  517. //
  518. // note it is no longer an error in our code. and call the API
  519. //
  520. vLastCall = LAST_CALL_IS_LANMAN_DRV ;
  521. return ( (*lpfnWNetGetErrorText16)(p1,p2,p3) ) ;
  522. }
  523. WORD API WNetGetCaps(WORD nIndex)
  524. {
  525. switch (nIndex)
  526. {
  527. case WNNC_SPEC_VERSION:
  528. return wSpecVersion;
  529. case WNNC_NET_TYPE:
  530. return wNetTypeCaps;
  531. case WNNC_DRIVER_VERSION:
  532. return wDriverVersion;
  533. case WNNC_USER:
  534. return wUserCaps;
  535. case WNNC_CONNECTION:
  536. return wConnectionCaps;
  537. case WNNC_PRINTING:
  538. return (WNetGetCaps16(nIndex)) ;
  539. case WNNC_DIALOG:
  540. return wDialogCaps;
  541. case WNNC_ADMIN:
  542. return wAdminCaps;
  543. case WNNC_ERROR:
  544. return wErrorCaps;
  545. default:
  546. return 0;
  547. }
  548. }
  549. /*
  550. * misc support functions
  551. */
  552. /*******************************************************************
  553. NAME: GetLanmanDrvEntryPoints
  554. SYNOPSIS: gets the address of the named procedure
  555. from LANMAN.DRV, will load library if first time.
  556. ENTRY: lplpfn - used to receive the address
  557. lpName - name of the procedure
  558. EXIT:
  559. RETURNS: 0 if success, error code otherwise.
  560. NOTES:
  561. HISTORY:
  562. ChuckC 25-Mar-93 Created
  563. ********************************************************************/
  564. WORD GetLanmanDrvEntryPoints(LPFN *lplpfn, LPSTR lpName)
  565. {
  566. static HINSTANCE hModule = NULL ;
  567. //
  568. // if we havent loaded it, load it now
  569. //
  570. if (hModule == NULL)
  571. {
  572. hModule = LoadLibrary(LANMAN_DRV) ;
  573. if (hModule == NULL)
  574. return WN_NOT_SUPPORTED ;
  575. }
  576. //
  577. // get the procedure
  578. //
  579. *lplpfn = (LPFN) GetProcAddress(hModule, lpName) ;
  580. if (! *lplpfn )
  581. return WN_NOT_SUPPORTED ;
  582. return NO_ERROR ;
  583. }
  584. /*******************************************************************
  585. NAME: SetLastError
  586. SYNOPSIS: makes note of last error
  587. ENTRY:
  588. EXIT:
  589. RETURNS:
  590. NOTES:
  591. HISTORY:
  592. ChuckC 25-Mar-93 Created
  593. ********************************************************************/
  594. WORD SetLastError(WORD err)
  595. {
  596. vLastError = err ;
  597. return err ;
  598. }
  599. /*******************************************************************
  600. NAME: LibMain
  601. SYNOPSIS: dll init entry point. only thing we do here is init
  602. the capability bits.
  603. ENTRY:
  604. EXIT:
  605. RETURNS:
  606. NOTES:
  607. HISTORY:
  608. ChuckC 25-Mar-93 Created
  609. ********************************************************************/
  610. #define NETWARE_DLL "NETWARE.DRV"
  611. int FAR PASCAL LibMain(HINSTANCE hInstance,
  612. WORD wDataSeg,
  613. WORD cbHeapSize,
  614. LPSTR lpszCmdLine)
  615. {
  616. OFSTRUCT ofStruct ;
  617. int fh ;
  618. BOOL fLoadNetware = FALSE ;
  619. char IsInstalledString[16] ;
  620. UNREFERENCED(hInstance) ;
  621. UNREFERENCED(wDataSeg) ;
  622. UNREFERENCED(cbHeapSize) ;
  623. UNREFERENCED(lpszCmdLine) ;
  624. I_SetCapBits() ;
  625. if (GetProfileString("NWCS",
  626. "NwcsInstalled",
  627. "0",
  628. IsInstalledString,
  629. sizeof(IsInstalledString)))
  630. {
  631. fLoadNetware = (lstrcmp("1",IsInstalledString)==0) ;
  632. }
  633. //
  634. // if enhanced mode, grab the interrupt for NWIPXSPX
  635. //
  636. if ((GetWinFlags() & WF_ENHANCED) && fLoadNetware) {
  637. GrabInterrupts();
  638. }
  639. //
  640. // if the file NETWARE.DRV exists, we load it. we dont really
  641. // use it, but some Netware aware apps require that it is loaded.
  642. //
  643. if (fLoadNetware &&
  644. ((fh = OpenFile(NETWARE_DLL, &ofStruct, OF_READ)) != -1))
  645. {
  646. _lclose(fh) ;
  647. (void)WriteProfileString("Windows",
  648. "NetWarn",
  649. "0") ;
  650. (void)LoadLibrary(NETWARE_DLL) ;
  651. }
  652. return 1 ;
  653. }
  654. /*******************************************************************
  655. NAME: I_SetCapBits
  656. SYNOPSIS: initernal routine to set the capability bits
  657. ENTRY:
  658. EXIT:
  659. RETURNS:
  660. NOTES:
  661. HISTORY:
  662. ChuckC 25-Mar-93 Created
  663. ********************************************************************/
  664. void I_SetCapBits(void)
  665. {
  666. wNetTypeCaps = WNNC_NET_MultiNet |
  667. WNNC_SUBNET_WinWorkgroups;
  668. wUserCaps = WNNC_USR_GetUser;
  669. wConnectionCaps = (WNNC_CON_AddConnection |
  670. WNNC_CON_CancelConnection |
  671. WNNC_CON_GetConnections |
  672. WNNC_CON_AutoConnect |
  673. WNNC_CON_BrowseDialog |
  674. WNNC_CON_RestoreConnection ) ;
  675. wErrorCaps = WNNC_ERR_GetError |
  676. WNNC_ERR_GetErrorText;
  677. wDialogCaps = (WNNC_DLG_DeviceMode |
  678. WNNC_DLG_ShareAsDialog |
  679. WNNC_DLG_PropertyDialog |
  680. WNNC_DLG_ConnectionDialog |
  681. WNNC_DLG_ConnectDialog |
  682. WNNC_DLG_DisconnectDialog |
  683. WNNC_DLG_BrowseDialog );
  684. wAdminCaps = ( WNNC_ADM_GetDirectoryType |
  685. WNNC_ADM_DirectoryNotify ) ;
  686. /* disable LFN for now
  687. | WNNC_ADM_LongNames ) ;
  688. */
  689. }