home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 May / Pcwk5b98.iso / Borland / Cplus45 / BC45 / MSINC.PAK / LMSVC.H < prev    next >
C/C++ Source or Header  |  1995-08-29  |  14KB  |  568 lines

  1. /*++ BUILD Version: 0002    // Increment this if a change has global effects
  2.  
  3. Module Name:
  4.  
  5.     lmsvc.h
  6.  
  7. Abstract:
  8.  
  9.     This file contains structures, function prototypes, and definitions
  10.     for the NetService API.
  11.  
  12. Author:
  13.  
  14.     Dan Lafferty (danl)     08-Mar-1991
  15.  
  16. [Environment:]
  17.  
  18.     User Mode -Win32
  19.  
  20. [Notes:]
  21.  
  22.     You must include NETCONS.H before this file, since this file depends
  23.     on values defined in NETCONS.H.
  24.  
  25. Revision History:
  26.  
  27.     10-Mar-1991     danl
  28.         Created from LM2.0 header files and NT-LAN API Spec.
  29.     29-Jul-1991  DanHi
  30.         Change comments after manifest constants for error messages to a format
  31.         that is recognized by mapmsg.exe
  32.     06-Sep-1991 JohnRo
  33.         Added OPTIONAL keywords as applicable.
  34.     16-Sep-1991 CliffV
  35.         Added TEXT() around SERVICE_ service named.
  36.         Added Netlogon specific uninstall codes.
  37.     16-Sep-1991 JohnRo
  38.         Correct UNICODE use of SERVICE_ENCRYPT.
  39.     25-Sep-1991 CliffV
  40.         Added SERVICE2_BASE and SERVICE_UIC_M_NETLOGON_PATH from LM 2.1.
  41.     14-Feb-1992 RitaW
  42.         Moved service name strings to lmsname.h.
  43.     02-Jun-1992 JohnRo
  44.         RAID 9829: Avoid winsvc.h compiler warnings.
  45.     31-Mar-1993 Danl
  46.         Used upper bits in the code field to extend the max possible waithint
  47.         to FFFF.  Created macros for accessing this.  (SERVICE_NT...).
  48.  
  49. --*/
  50.  
  51. /*
  52.  *      C/C++ Run Time Library - Version 6.5
  53.  *
  54.  *      Copyright (c) 1994 by Borland International
  55.  *      All Rights Reserved.
  56.  *
  57.  */
  58.  
  59. #ifndef _LMSVC_
  60. #define _LMSVC_
  61. #define __LMSVC_H
  62.  
  63. #ifdef __cplusplus
  64. extern "C" {
  65. #endif
  66.  
  67. //
  68. // Include the file which contains all the service name strings.
  69. //
  70. #include <lmsname.h>
  71.  
  72. //
  73. //  Data Structures
  74. //
  75.  
  76. typedef struct _SERVICE_INFO_0 {
  77.     LPTSTR  svci0_name;
  78. } SERVICE_INFO_0, *PSERVICE_INFO_0, * LPSERVICE_INFO_0;
  79.  
  80. typedef struct _SERVICE_INFO_1 {
  81.     LPTSTR  svci1_name;
  82.     DWORD   svci1_status;
  83.     DWORD   svci1_code;
  84.     DWORD   svci1_pid;
  85. } SERVICE_INFO_1, *PSERVICE_INFO_1, * LPSERVICE_INFO_1;
  86.  
  87. typedef struct _SERVICE_INFO_2 {
  88.     LPTSTR  svci2_name;
  89.     DWORD   svci2_status;
  90.     DWORD   svci2_code;
  91.     DWORD   svci2_pid;
  92.     LPTSTR  svci2_text;
  93.     DWORD   svci2_specific_error;
  94.     LPTSTR  svci2_display_name;
  95. } SERVICE_INFO_2, *PSERVICE_INFO_2, * LPSERVICE_INFO_2;
  96.  
  97. //
  98. // Function Prototypes
  99. //
  100.  
  101. NET_API_STATUS NET_API_FUNCTION
  102. NetServiceControl (
  103.     IN  LPTSTR  servername OPTIONAL,
  104.     IN  LPTSTR  service,
  105.     IN  DWORD   opcode,
  106.     IN  DWORD   arg,
  107.     OUT LPBYTE  *bufptr
  108.     );
  109.  
  110. NET_API_STATUS NET_API_FUNCTION
  111. NetServiceEnum (
  112.     IN  LPTSTR      servername OPTIONAL,
  113.     IN  DWORD       level,
  114.     OUT LPBYTE      *bufptr,
  115.     IN  DWORD       prefmaxlen,
  116.     OUT LPDWORD     entriesread,
  117.     OUT LPDWORD     totalentries,
  118.     IN OUT LPDWORD  resume_handle OPTIONAL
  119.     );
  120.  
  121. NET_API_STATUS NET_API_FUNCTION
  122. NetServiceGetInfo (
  123.     IN  LPTSTR  servername OPTIONAL,
  124.     IN  LPTSTR  service,
  125.     IN  DWORD   level,
  126.     OUT LPBYTE   *bufptr
  127.     );
  128.  
  129. NET_API_STATUS NET_API_FUNCTION
  130. NetServiceInstall (
  131.     IN  LPTSTR  servername OPTIONAL,
  132.     IN  LPTSTR  service,
  133.     IN  DWORD   argc,
  134.     IN  LPTSTR  argv[],
  135.     OUT LPBYTE  *bufptr
  136.     );
  137.  
  138. //
  139. // Special Values and Constants
  140. //
  141.  
  142. //
  143. //  Bitmask and bit values for svci1_status, and svci2_status
  144. //  fields.  For each "subfield", there is a mask defined,
  145. //  and a number of constants representing the value
  146. //  obtained by doing (status & mask).
  147. //
  148.  
  149. // Bits 0,1 -- general status
  150.  
  151. #define SERVICE_INSTALL_STATE       0x03
  152. #define SERVICE_UNINSTALLED         0x00
  153. #define SERVICE_INSTALL_PENDING     0x01
  154. #define SERVICE_UNINSTALL_PENDING   0x02
  155. #define SERVICE_INSTALLED           0x03
  156.  
  157. // Bits 2,3 -- paused/active status
  158.  
  159. #define SERVICE_PAUSE_STATE              0x0C
  160. #define LM20_SERVICE_ACTIVE              0x00
  161. #define LM20_SERVICE_CONTINUE_PENDING    0x04
  162. #define LM20_SERVICE_PAUSE_PENDING       0x08
  163. #define LM20_SERVICE_PAUSED              0x0C
  164.  
  165. // Bit 4 -- uninstallable indication
  166.  
  167. #define SERVICE_NOT_UNINSTALLABLE   0x00
  168. #define SERVICE_UNINSTALLABLE       0x10
  169.  
  170. // Bit 5 -- pausable indication
  171.  
  172. #define SERVICE_NOT_PAUSABLE        0x00
  173. #define SERVICE_PAUSABLE            0x20
  174.  
  175. // Workstation service only:
  176. // Bits 8,9,10 -- redirection paused/active
  177.  
  178. #define SERVICE_REDIR_PAUSED        0x700
  179. #define SERVICE_REDIR_DISK_PAUSED   0x100
  180. #define SERVICE_REDIR_PRINT_PAUSED  0x200
  181. #define SERVICE_REDIR_COMM_PAUSED   0x400
  182.  
  183. //
  184. //  Additional standard LAN Manager for MS-DOS services
  185. //
  186.  
  187. #define SERVICE_DOS_ENCRYPTION  TEXT("ENCRYPT")
  188.  
  189. //
  190. //  NetServiceControl opcodes.
  191. //
  192.  
  193. #define SERVICE_CTRL_INTERROGATE    0
  194. #define SERVICE_CTRL_PAUSE          1
  195. #define SERVICE_CTRL_CONTINUE       2
  196. #define SERVICE_CTRL_UNINSTALL      3
  197.  
  198. //
  199. //  Workstation service only:  Bits used in the "arg" parameter
  200. //  to NetServiceControl in conjunction with the opcode
  201. //  SERVICE_CTRL_PAUSE or SERVICE_CTRL_CONTINUE, to pause or
  202. //  continue redirection.
  203. //
  204.  
  205. #define SERVICE_CTRL_REDIR_DISK     0x1
  206. #define SERVICE_CTRL_REDIR_PRINT    0x2
  207. #define SERVICE_CTRL_REDIR_COMM     0x4
  208.  
  209. //
  210. //  Values for svci1_code, and svci2_code when status
  211. //  of the service is SERVICE_INSTALL_PENDING or
  212. //  SERVICE_UNINSTALL_PENDING.
  213. //  A service can optionally provide a hint to the installer
  214. //  that the install is proceeding and how long to wait
  215. //  (in 0.1 second increments) before querying status again.
  216. //
  217.  
  218. #define SERVICE_IP_NO_HINT          0x0
  219. #define SERVICE_CCP_NO_HINT         0x0
  220.  
  221. #define SERVICE_IP_QUERY_HINT       0x10000
  222. #define SERVICE_CCP_QUERY_HINT      0x10000
  223.  
  224. //
  225. // Mask for install proceeding checkpoint number
  226. //
  227.  
  228. #define SERVICE_IP_CHKPT_NUM        0x0FF
  229. #define SERVICE_CCP_CHKPT_NUM       0x0FF
  230.  
  231. //
  232. // Mask for wait time hint before querying again
  233. //
  234.  
  235. #define SERVICE_IP_WAIT_TIME        0x0FF00
  236. #define SERVICE_CCP_WAIT_TIME       0x0FF00
  237.  
  238. //
  239. // Shift count for building wait time _code values
  240. //
  241.  
  242. #define SERVICE_IP_WAITTIME_SHIFT   8
  243. #define SERVICE_NTIP_WAITTIME_SHIFT 12
  244.  
  245. //
  246. // Mask used for upper and lower portions of wait hint time.
  247. //
  248. #define UPPER_HINT_MASK     0x0000FF00
  249. #define LOWER_HINT_MASK     0x000000FF
  250. #define UPPER_GET_HINT_MASK 0x0FF00000
  251. #define LOWER_GET_HINT_MASK 0x0000FF00
  252. #define SERVICE_NT_MAXTIME  0x0000FFFF
  253. #define SERVICE_RESRV_MASK  0x0001FFFF
  254. #define SERVICE_MAXTIME     0x000000FF
  255.  
  256. //
  257. //  SERVICE_BASE is the base of service error codes,
  258. //  chosen to avoid conflict with OS, redirector,
  259. //  netapi, and errlog codes.
  260. //
  261. // Don't change the comments following the manifest constants without
  262. // understanding how mapmsg works.
  263. //
  264.  
  265. #define SERVICE_BASE                3050
  266. #define SERVICE_UIC_NORMAL          0
  267. /*
  268.  *  Uninstall codes, to be used in high byte of 'code' on final NetStatus,
  269.  *  which sets the status to UNINSTALLED.
  270.  */
  271.  
  272. #define SERVICE_UIC_BADPARMVAL          (SERVICE_BASE + 1)
  273. /*
  274.  * The Registry or the information you just typed includes an illegal
  275.  * value for "%1".
  276.  */
  277.  
  278. #define SERVICE_UIC_MISSPARM            (SERVICE_BASE + 2)
  279. /*
  280.  * The required parameter was not provided on the command
  281.  * line or in the configuration file.
  282.  */
  283.  
  284. #define SERVICE_UIC_UNKPARM             (SERVICE_BASE + 3)
  285. /*
  286.  * LAN Manager does not recognize "%1" as a valid option.
  287.  */
  288.  
  289. #define SERVICE_UIC_RESOURCE            (SERVICE_BASE + 4)
  290. /*
  291.  * A request for resource could not be satisfied.
  292.  */
  293.  
  294. #define SERVICE_UIC_CONFIG              (SERVICE_BASE + 5)
  295. /*
  296.  * A problem exists with the system configuration.
  297.  */
  298.  
  299. #define SERVICE_UIC_SYSTEM              (SERVICE_BASE + 6)
  300. /*
  301.  * A system error has occurred.
  302.  */
  303.  
  304. #define SERVICE_UIC_INTERNAL            (SERVICE_BASE + 7)
  305. /*
  306.  * An internal consistency error has occurred.
  307.  */
  308.  
  309. #define SERVICE_UIC_AMBIGPARM           (SERVICE_BASE + 8)
  310. /*
  311.  * The configuration file or the command line has an ambiguous option.
  312.  */
  313.  
  314. #define SERVICE_UIC_DUPPARM             (SERVICE_BASE + 9)
  315. /*
  316.  * The configuration file or the command line has a duplicate parameter.
  317.  */
  318.  
  319. #define SERVICE_UIC_KILL                (SERVICE_BASE + 10)
  320. /*
  321.  * The service did not respond to control and was stopped with
  322.  * the DosKillProc function.
  323.  */
  324.  
  325. #define SERVICE_UIC_EXEC                (SERVICE_BASE + 11)
  326. /*
  327.  * An error occurred when attempting to run the service program.
  328.  */
  329.  
  330. #define SERVICE_UIC_SUBSERV             (SERVICE_BASE + 12)
  331. /*
  332.  * The sub-service failed to start.
  333.  */
  334.  
  335. #define SERVICE_UIC_CONFLPARM           (SERVICE_BASE + 13)
  336. /*
  337.  * There is a conflict in the value or use of these options: %1.
  338.  */
  339.  
  340. #define SERVICE_UIC_FILE                (SERVICE_BASE + 14)
  341. /*
  342.  * There is a problem with the file.
  343.  */
  344.  
  345.  
  346.  
  347. //
  348. //  The modifiers
  349. //
  350.  
  351. //
  352. // General:
  353. //
  354.  
  355. #define SERVICE_UIC_M_NULL  0
  356.  
  357. //
  358. //  RESOURCE:
  359. //
  360.  
  361. #define SERVICE_UIC_M_MEMORY    (SERVICE_BASE + 20)     /* memory */
  362. #define SERVICE_UIC_M_DISK      (SERVICE_BASE + 21)     /* disk space */
  363. #define SERVICE_UIC_M_THREADS   (SERVICE_BASE + 22)     /* thread */
  364. #define SERVICE_UIC_M_PROCESSES (SERVICE_BASE + 23)     /* process */
  365.  
  366. //
  367. //  CONFIG:
  368. //
  369.  
  370. //
  371. // Security failure
  372. //
  373.  
  374. #define SERVICE_UIC_M_SECURITY          (SERVICE_BASE + 24)
  375. /* Security Failure. %0 */
  376.  
  377. #define SERVICE_UIC_M_LANROOT           (SERVICE_BASE + 25)
  378. /*
  379.  * Bad or missing LAN Manager root directory.
  380.  */
  381.  
  382. #define SERVICE_UIC_M_REDIR             (SERVICE_BASE + 26)
  383. /*
  384.  * The network software is not installed.
  385.  */
  386.  
  387. #define SERVICE_UIC_M_SERVER            (SERVICE_BASE + 27)
  388. /*
  389.  * The server is not started.
  390.  */
  391.  
  392. #define SERVICE_UIC_M_SEC_FILE_ERR      (SERVICE_BASE + 28)
  393. /*
  394.  * The server cannot access the user accounts database (NET.ACC).
  395.  */
  396.  
  397. #define SERVICE_UIC_M_FILES             (SERVICE_BASE + 29)
  398. /*
  399.  * Incompatible files are installed in the LANMAN tree.
  400.  */
  401.  
  402. #define SERVICE_UIC_M_LOGS              (SERVICE_BASE + 30)
  403. /*
  404.  * The LANMAN\LOGS directory is invalid.
  405.  */
  406.  
  407. #define SERVICE_UIC_M_LANGROUP          (SERVICE_BASE + 31)
  408. /*
  409.  * The domain specified could not be used.
  410.  */
  411.  
  412. #define SERVICE_UIC_M_MSGNAME           (SERVICE_BASE + 32)
  413. /*
  414.  * The computer name is being used as a message alias on another computer.
  415.  */
  416.  
  417. #define SERVICE_UIC_M_ANNOUNCE          (SERVICE_BASE + 33)
  418. /*
  419.  * The announcement of the server name failed.
  420.  */
  421.  
  422. #define SERVICE_UIC_M_UAS               (SERVICE_BASE + 34)
  423. /*
  424.  * The user accounts database is not configured correctly.
  425.  */
  426.  
  427. #define SERVICE_UIC_M_SERVER_SEC_ERR    (SERVICE_BASE + 35)
  428. /*
  429.  * The server is not running with user-level security.
  430.  */
  431.  
  432. #define SERVICE_UIC_M_WKSTA             (SERVICE_BASE + 37)
  433. /*
  434.  * The workstation is not configured properly.
  435.  */
  436.  
  437. #define SERVICE_UIC_M_ERRLOG            (SERVICE_BASE + 38)
  438. /*
  439.  * View your error log for details.
  440.  */
  441.  
  442. #define SERVICE_UIC_M_FILE_UW           (SERVICE_BASE + 39)
  443. /*
  444.  * Unable to write to this file.
  445.  */
  446.  
  447. #define SERVICE_UIC_M_ADDPAK            (SERVICE_BASE + 40)
  448. /*
  449.  * ADDPAK file is corrupted.  Delete LANMAN\NETPROG\ADDPAK.SER
  450.  * and reapply all ADDPAKs.
  451.  */
  452.  
  453. #define SERVICE_UIC_M_LAZY              (SERVICE_BASE + 41)
  454. /*
  455.  * The LM386 server cannot be started because CACHE.EXE is not running.
  456.  */
  457.  
  458. #define SERVICE_UIC_M_UAS_MACHINE_ACCT  (SERVICE_BASE + 42)
  459. /*
  460.  * There is no account for this computer in the security database.
  461.  */
  462.  
  463. #define SERVICE_UIC_M_UAS_SERVERS_NMEMB (SERVICE_BASE + 43)
  464. /*
  465.  * This computer is not a member of the group SERVERS.
  466.  */
  467.  
  468. #define SERVICE_UIC_M_UAS_SERVERS_NOGRP (SERVICE_BASE + 44)
  469. /*
  470.  * The group SERVERS is not present in the local security database.
  471.  */
  472.  
  473. #define SERVICE_UIC_M_UAS_INVALID_ROLE  (SERVICE_BASE + 45)
  474. /*
  475.  * This Windows NT computer is configured as a member of a workgroup, not as
  476.  * a member of a domain. The Netlogon service does not need to run in this
  477.  * configuration.
  478.  */
  479.  
  480. #define SERVICE_UIC_M_NETLOGON_NO_DC    (SERVICE_BASE + 46)
  481. /*
  482.  * The Windows NT domain controller for this domain could not be located.
  483.  */
  484.  
  485. #define SERVICE_UIC_M_NETLOGON_DC_CFLCT (SERVICE_BASE + 47)
  486. /*
  487.  * A primary domain controller is already running in this domain.
  488.  */
  489.  
  490. #define SERVICE_UIC_M_NETLOGON_AUTH     (SERVICE_BASE + 48)
  491. /*
  492.  * The service failed to authenticate with the primary domain controller.
  493.  */
  494.  
  495. #define SERVICE_UIC_M_UAS_PROLOG        (SERVICE_BASE + 49)
  496. /*
  497.  * There is a problem with the security database creation date or serial number.
  498.  */
  499.  
  500.  
  501. #define SERVICE2_BASE    5600
  502. /* new SEVICE_UIC messages go here */
  503.  
  504. #define SERVICE_UIC_M_NETLOGON_MPATH    (SERVICE2_BASE + 0)
  505. /*
  506.  * Could not share the User or Script path.
  507.  */
  508.  
  509. #define SERVICE_UIC_M_LSA_MACHINE_ACCT  (SERVICE2_BASE + 1)
  510. /*
  511.  * The password for this computer is not found in the local security
  512.  * database.
  513.  */
  514.  
  515. #define SERVICE_UIC_M_DATABASE_ERROR    (SERVICE2_BASE + 2)
  516. /*
  517.  * An internal error occurred while accessing the computer's 
  518.  * local or network security database.
  519.  */
  520.  
  521.  
  522. //
  523. //  End modifiers
  524. //
  525.  
  526. //
  527. // Commonly used Macros:
  528. //
  529.  
  530. #define SERVICE_IP_CODE(tt,nn) \
  531.   ((long)SERVICE_IP_QUERY_HINT|(long)(nn|(tt<<SERVICE_IP_WAITTIME_SHIFT)))
  532.  
  533. #define SERVICE_CCP_CODE(tt,nn) \
  534.   ((long)SERVICE_CCP_QUERY_HINT|(long)(nn|(tt<<SERVICE_IP_WAITTIME_SHIFT)))
  535.  
  536. #define SERVICE_UIC_CODE(cc,mm) \
  537.   ((long)(((long)cc<<16)|(long)(unsigned short)mm))
  538.  
  539. //
  540. // This macro takes a wait hint (tt) which can have a maximum value of
  541. // 0xFFFF and puts it into the service status code field.
  542. // 0x0FF1FFnn  (where nn is the checkpoint information).
  543. //
  544. #define SERVICE_NT_CCP_CODE(tt,nn)  \
  545.   (  \
  546.     ((long)SERVICE_CCP_QUERY_HINT)   | \
  547.     ((long)(nn))   | \
  548.     (((tt)&LOWER_HINT_MASK) << SERVICE_IP_WAITTIME_SHIFT)   | \
  549.     (((tt)&UPPER_HINT_MASK) << SERVICE_NTIP_WAITTIME_SHIFT)   \
  550.   )
  551.  
  552. //
  553. // This macro takes a status code field, and strips out the wait hint
  554. // from the upper and lower sections.
  555. // 0x0FF1FFnn results in 0x0000FFFF.
  556. //
  557. #define SERVICE_NT_WAIT_GET(code) \
  558.     (   \
  559.       (((code) & UPPER_GET_HINT_MASK) >> SERVICE_NTIP_WAITTIME_SHIFT)  |  \
  560.       (((code) & LOWER_GET_HINT_MASK) >> SERVICE_IP_WAITTIME_SHIFT)  \
  561.     )
  562.  
  563. #ifdef __cplusplus
  564. }
  565. #endif
  566.  
  567. #endif // _LMSVC_
  568.