JwaLmSvc.pas
上传用户:davidchvip
上传日期:2009-07-28
资源大小:1749k
文件大小:22k
源码类别:

Windows编程

开发平台:

Delphi

  1. {******************************************************************************}
  2. {                                                                       }
  3. { Lan Manager Service API interface Unit for Object Pascal                     }
  4. {                                                                       }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft          }
  6. { Corporation. All Rights Reserved.                                            }
  7. {                 }
  8. { The original file is: lmsvc.h, released November 2001. The original Pascal   }
  9. { code is: LmSvc.pas, released Februari 2002. The initial developer of the     }
  10. { Pascal code is Marcel van Brakel (brakelm@chello.nl).                        }
  11. {                                                                              }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001            }
  13. { Marcel van Brakel. All Rights Reserved.                                      }
  14. {                 }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
  16. {                }
  17. { You may retrieve the latest version of this file at the Project JEDI home    }
  18. { page, located at http://delphi-jedi.org or my personal homepage located at   }
  19. { http://members.chello.nl/m.vanbrakel2                                        }
  20. {                }
  21. { The contents of this file are used with permission, subject to the Mozilla   }
  22. { Public License Version 1.1 (the "License"); you may not use this file except }
  23. { in compliance with the License. You may obtain a copy of the License at      }
  24. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  25. {                                                                              }
  26. { Software distributed under the License is distributed on an "AS IS" basis,   }
  27. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  28. { the specific language governing rights and limitations under the License.    }
  29. {                                                                              }
  30. { Alternatively, the contents of this file may be used under the terms of the  }
  31. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  32. { provisions of the LGPL License are applicable instead of those above.        }
  33. { If you wish to allow use of your version of this file only under the terms   }
  34. { of the LGPL License and not to allow others to use your version of this file }
  35. { under the MPL, indicate your decision by deleting  the provisions above and  }
  36. { replace  them with the notice and other provisions required by the LGPL      }
  37. { License.  If you do not delete the provisions above, a recipient may use     }
  38. { your version of this file under either the MPL or the LGPL License.          }
  39. {                 }
  40. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  41. {                 }
  42. {******************************************************************************}
  43. unit JwaLmSvc;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include "lmsvc.h"'}
  47. {$HPPEMIT ''}
  48. {$I WINDEFINES.INC}
  49. interface
  50. uses
  51.   JwaLmCons, JwaWinType;
  52. //
  53. //  Data Structures
  54. //
  55. type
  56.   LPSERVICE_INFO_0 = ^SERVICE_INFO_0;
  57.   {$EXTERNALSYM LPSERVICE_INFO_0}
  58.   PSERVICE_INFO_0 = ^SERVICE_INFO_0;
  59.   {$EXTERNALSYM PSERVICE_INFO_0}
  60.   _SERVICE_INFO_0 = record
  61.     svci0_name: LPWSTR;
  62.   end;
  63.   {$EXTERNALSYM _SERVICE_INFO_0}
  64.   SERVICE_INFO_0 = _SERVICE_INFO_0;
  65.   {$EXTERNALSYM SERVICE_INFO_0}
  66.   TServiceInfo0 = SERVICE_INFO_0;
  67.   PServiceInfo0 = PSERVICE_INFO_0;
  68.   LPSERVICE_INFO_1 = ^SERVICE_INFO_1;
  69.   {$EXTERNALSYM LPSERVICE_INFO_1}
  70.   PSERVICE_INFO_1 = ^SERVICE_INFO_1;
  71.   {$EXTERNALSYM PSERVICE_INFO_1}
  72.   _SERVICE_INFO_1 = record
  73.     svci1_name: LPWSTR;
  74.     svci1_status: DWORD;
  75.     svci1_code: DWORD;
  76.     svci1_pid: DWORD;
  77.   end;
  78.   {$EXTERNALSYM _SERVICE_INFO_1}
  79.   SERVICE_INFO_1 = _SERVICE_INFO_1;
  80.   {$EXTERNALSYM SERVICE_INFO_1}
  81.   TServiceInfo1 = SERVICE_INFO_1;
  82.   PServiceInfo1 = PSERVICE_INFO_1;
  83.   LPSERVICE_INFO_2 = ^SERVICE_INFO_2;
  84.   {$EXTERNALSYM LPSERVICE_INFO_2}
  85.   PSERVICE_INFO_2 = ^SERVICE_INFO_2;
  86.   {$EXTERNALSYM PSERVICE_INFO_2}
  87.   _SERVICE_INFO_2 = record
  88.     svci2_name: LPWSTR;
  89.     svci2_status: DWORD;
  90.     svci2_code: DWORD;
  91.     svci2_pid: DWORD;
  92.     svci2_text: LPWSTR;
  93.     svci2_specific_error: DWORD;
  94.     svci2_display_name: LPWSTR;
  95.   end;
  96.   {$EXTERNALSYM _SERVICE_INFO_2}
  97.   SERVICE_INFO_2 = _SERVICE_INFO_2;
  98.   {$EXTERNALSYM SERVICE_INFO_2}
  99.   TServiceInfo2 = SERVICE_INFO_2;
  100.   PServiceInfo2 = PSERVICE_INFO_2;
  101. //
  102. // Function Prototypes
  103. //
  104. function NetServiceControl(servername, service: LPCWSTR; opcode: DWORD; arg: DWORD; var bufptr: LPBYTE): NET_API_STATUS; stdcall;
  105. {$EXTERNALSYM NetServiceControl}
  106. function NetServiceEnum(servername: LPCWSTR; level: DWORD; var bufptr: LPBYTE; prefmaxlen: DWORD; entriesread, totalentries, resume_handle: LPDWORD): NET_API_STATUS; stdcall;
  107. {$EXTERNALSYM NetServiceEnum}
  108. function NetServiceGetInfo(servername, service: LPCWSTR; level: DWORD; var bufptr: LPBYTE): NET_API_STATUS; stdcall;
  109. {$EXTERNALSYM NetServiceGetInfo}
  110. function NetServiceInstall(servername, service: LPCWSTR; argc: DWORD; argv: LPCWSTR; var bufptr: LPBYTE): NET_API_STATUS; stdcall;
  111. {$EXTERNALSYM NetServiceInstall}
  112. //
  113. // Special Values and Constants
  114. //
  115. //
  116. //  Bitmask and bit values for svci1_status, and svci2_status
  117. //  fields.  For each "subfield", there is a mask defined,
  118. //  and a number of constants representing the value
  119. //  obtained by doing (status & mask).
  120. //
  121. // Bits 0,1 -- general status
  122. const
  123.   SERVICE_INSTALL_STATE     = $03;
  124.   {$EXTERNALSYM SERVICE_INSTALL_STATE}
  125.   SERVICE_UNINSTALLED       = $00;
  126.   {$EXTERNALSYM SERVICE_UNINSTALLED}
  127.   SERVICE_INSTALL_PENDING   = $01;
  128.   {$EXTERNALSYM SERVICE_INSTALL_PENDING}
  129.   SERVICE_UNINSTALL_PENDING = $02;
  130.   {$EXTERNALSYM SERVICE_UNINSTALL_PENDING}
  131.   SERVICE_INSTALLED         = $03;
  132.   {$EXTERNALSYM SERVICE_INSTALLED}
  133. // Bits 2,3 -- paused/active status
  134.   SERVICE_PAUSE_STATE           = $0C;
  135.   {$EXTERNALSYM SERVICE_PAUSE_STATE}
  136.   LM20_SERVICE_ACTIVE           = $00;
  137.   {$EXTERNALSYM LM20_SERVICE_ACTIVE}
  138.   LM20_SERVICE_CONTINUE_PENDING = $04;
  139.   {$EXTERNALSYM LM20_SERVICE_CONTINUE_PENDING}
  140.   LM20_SERVICE_PAUSE_PENDING    = $08;
  141.   {$EXTERNALSYM LM20_SERVICE_PAUSE_PENDING}
  142.   LM20_SERVICE_PAUSED           = $0C;
  143.   {$EXTERNALSYM LM20_SERVICE_PAUSED}
  144. // Bit 4 -- uninstallable indication
  145.   SERVICE_NOT_UNINSTALLABLE = $00;
  146.   {$EXTERNALSYM SERVICE_NOT_UNINSTALLABLE}
  147.   SERVICE_UNINSTALLABLE     = $10;
  148.   {$EXTERNALSYM SERVICE_UNINSTALLABLE}
  149. // Bit 5 -- pausable indication
  150.   SERVICE_NOT_PAUSABLE = $00;
  151.   {$EXTERNALSYM SERVICE_NOT_PAUSABLE}
  152.   SERVICE_PAUSABLE     = $20;
  153.   {$EXTERNALSYM SERVICE_PAUSABLE}
  154. // Workstation service only:
  155. // Bits 8,9,10 -- redirection paused/active
  156.   SERVICE_REDIR_PAUSED       = $700;
  157.   {$EXTERNALSYM SERVICE_REDIR_PAUSED}
  158.   SERVICE_REDIR_DISK_PAUSED  = $100;
  159.   {$EXTERNALSYM SERVICE_REDIR_DISK_PAUSED}
  160.   SERVICE_REDIR_PRINT_PAUSED = $200;
  161.   {$EXTERNALSYM SERVICE_REDIR_PRINT_PAUSED}
  162.   SERVICE_REDIR_COMM_PAUSED  = $400;
  163.   {$EXTERNALSYM SERVICE_REDIR_COMM_PAUSED}
  164. //
  165. //  Additional standard LAN Manager for MS-DOS services
  166. //
  167.   SERVICE_DOS_ENCRYPTION = WideString('ENCRYPT');
  168.   {$EXTERNALSYM SERVICE_DOS_ENCRYPTION}
  169. //
  170. //  NetServiceControl opcodes.
  171. //
  172.   SERVICE_CTRL_INTERROGATE = 0;
  173.   {$EXTERNALSYM SERVICE_CTRL_INTERROGATE}
  174.   SERVICE_CTRL_PAUSE       = 1;
  175.   {$EXTERNALSYM SERVICE_CTRL_PAUSE}
  176.   SERVICE_CTRL_CONTINUE    = 2;
  177.   {$EXTERNALSYM SERVICE_CTRL_CONTINUE}
  178.   SERVICE_CTRL_UNINSTALL   = 3;
  179.   {$EXTERNALSYM SERVICE_CTRL_UNINSTALL}
  180. //
  181. //  Workstation service only:  Bits used in the "arg" parameter
  182. //  to NetServiceControl in conjunction with the opcode
  183. //  SERVICE_CTRL_PAUSE or SERVICE_CTRL_CONTINUE, to pause or
  184. //  continue redirection.
  185. //
  186.   SERVICE_CTRL_REDIR_DISK  = $1;
  187.   {$EXTERNALSYM SERVICE_CTRL_REDIR_DISK}
  188.   SERVICE_CTRL_REDIR_PRINT = $2;
  189.   {$EXTERNALSYM SERVICE_CTRL_REDIR_PRINT}
  190.   SERVICE_CTRL_REDIR_COMM  = $4;
  191.   {$EXTERNALSYM SERVICE_CTRL_REDIR_COMM}
  192. //
  193. //  Values for svci1_code, and svci2_code when status
  194. //  of the service is SERVICE_INSTALL_PENDING or
  195. //  SERVICE_UNINSTALL_PENDING.
  196. //  A service can optionally provide a hint to the installer
  197. //  that the install is proceeding and how long to wait
  198. //  (in 0.1 second increments) before querying status again.
  199. //
  200.   SERVICE_IP_NO_HINT  = $0;
  201.   {$EXTERNALSYM SERVICE_IP_NO_HINT}
  202.   SERVICE_CCP_NO_HINT = $0;
  203.   {$EXTERNALSYM SERVICE_CCP_NO_HINT}
  204.   SERVICE_IP_QUERY_HINT  = $10000;
  205.   {$EXTERNALSYM SERVICE_IP_QUERY_HINT}
  206.   SERVICE_CCP_QUERY_HINT = $10000;
  207.   {$EXTERNALSYM SERVICE_CCP_QUERY_HINT}
  208. //
  209. // Mask for install proceeding checkpoint number
  210. //
  211.   SERVICE_IP_CHKPT_NUM  = $0FF;
  212.   {$EXTERNALSYM SERVICE_IP_CHKPT_NUM}
  213.   SERVICE_CCP_CHKPT_NUM = $0FF;
  214.   {$EXTERNALSYM SERVICE_CCP_CHKPT_NUM}
  215. //
  216. // Mask for wait time hint before querying again
  217. //
  218.   SERVICE_IP_WAIT_TIME  = $0FF00;
  219.   {$EXTERNALSYM SERVICE_IP_WAIT_TIME}
  220.   SERVICE_CCP_WAIT_TIME = $0FF00;
  221.   {$EXTERNALSYM SERVICE_CCP_WAIT_TIME}
  222. //
  223. // Shift count for building wait time _code values
  224. //
  225.   SERVICE_IP_WAITTIME_SHIFT   = 8;
  226.   {$EXTERNALSYM SERVICE_IP_WAITTIME_SHIFT}
  227.   SERVICE_NTIP_WAITTIME_SHIFT = 12;
  228.   {$EXTERNALSYM SERVICE_NTIP_WAITTIME_SHIFT}
  229. //
  230. // Mask used for upper and lower portions of wait hint time.
  231. //
  232.   UPPER_HINT_MASK     = $0000FF00;
  233.   {$EXTERNALSYM UPPER_HINT_MASK}
  234.   LOWER_HINT_MASK     = $000000FF;
  235.   {$EXTERNALSYM LOWER_HINT_MASK}
  236.   UPPER_GET_HINT_MASK = $0FF00000;
  237.   {$EXTERNALSYM UPPER_GET_HINT_MASK}
  238.   LOWER_GET_HINT_MASK = $0000FF00;
  239.   {$EXTERNALSYM LOWER_GET_HINT_MASK}
  240.   SERVICE_NT_MAXTIME  = $0000FFFF;
  241.   {$EXTERNALSYM SERVICE_NT_MAXTIME}
  242.   SERVICE_RESRV_MASK  = $0001FFFF;
  243.   {$EXTERNALSYM SERVICE_RESRV_MASK}
  244.   SERVICE_MAXTIME     = $000000FF;
  245.   {$EXTERNALSYM SERVICE_MAXTIME}
  246. //
  247. //  SERVICE_BASE is the base of service error codes,
  248. //  chosen to avoid conflict with OS, redirector,
  249. //  netapi, and errlog codes.
  250. //
  251. // Don't change the comments following the manifest constants without
  252. // understanding how mapmsg works.
  253. //
  254.   SERVICE_BASE       = 3050;
  255.   {$EXTERNALSYM SERVICE_BASE}
  256.   SERVICE_UIC_NORMAL = 0;
  257.   {$EXTERNALSYM SERVICE_UIC_NORMAL}
  258. {*
  259.  *  Uninstall codes, to be used in high byte of 'code' on final NetStatus,
  260.  *  which sets the status to UNINSTALLED.
  261.  *}
  262.   SERVICE_UIC_BADPARMVAL = (SERVICE_BASE + 1);
  263.   {$EXTERNALSYM SERVICE_UIC_BADPARMVAL}
  264. {*
  265.  * The Registry or the information you just typed includes an illegal
  266.  * value for "%1".
  267.  *}
  268.   SERVICE_UIC_MISSPARM = (SERVICE_BASE + 2);
  269.   {$EXTERNALSYM SERVICE_UIC_MISSPARM}
  270. {*
  271.  * The required parameter was not provided on the command
  272.  * line or in the configuration file.
  273.  *}
  274.   SERVICE_UIC_UNKPARM = (SERVICE_BASE + 3);
  275.   {$EXTERNALSYM SERVICE_UIC_UNKPARM}
  276. {*
  277.  * LAN Manager does not recognize "%1" as a valid option.
  278.  *}
  279.   SERVICE_UIC_RESOURCE = (SERVICE_BASE + 4);
  280.   {$EXTERNALSYM SERVICE_UIC_RESOURCE}
  281. {*
  282.  * A request for resource could not be satisfied.
  283.  *}
  284.   SERVICE_UIC_CONFIG = (SERVICE_BASE + 5);
  285.   {$EXTERNALSYM SERVICE_UIC_CONFIG}
  286. {*
  287.  * A problem exists with the system configuration.
  288.  *}
  289.   SERVICE_UIC_SYSTEM = (SERVICE_BASE + 6);
  290.   {$EXTERNALSYM SERVICE_UIC_SYSTEM}
  291. {*
  292.  * A system error has occurred.
  293.  *}
  294.   SERVICE_UIC_INTERNAL = (SERVICE_BASE + 7);
  295.   {$EXTERNALSYM SERVICE_UIC_INTERNAL}
  296. {*
  297.  * An internal consistency error has occurred.
  298.  *}
  299.   SERVICE_UIC_AMBIGPARM = (SERVICE_BASE + 8);
  300.   {$EXTERNALSYM SERVICE_UIC_AMBIGPARM}
  301. {*
  302.  * The configuration file or the command line has an ambiguous option.
  303.  *}
  304.   SERVICE_UIC_DUPPARM = (SERVICE_BASE + 9);
  305.   {$EXTERNALSYM SERVICE_UIC_DUPPARM}
  306. {*
  307.  * The configuration file or the command line has a duplicate parameter.
  308.  *}
  309.   SERVICE_UIC_KILL = (SERVICE_BASE + 10);
  310.   {$EXTERNALSYM SERVICE_UIC_KILL}
  311. {*
  312.  * The service did not respond to control and was stopped with
  313.  * the DosKillProc function.
  314.  *}
  315.   SERVICE_UIC_EXEC = (SERVICE_BASE + 11);
  316.   {$EXTERNALSYM SERVICE_UIC_EXEC}
  317. {*
  318.  * An error occurred when attempting to run the service program.
  319.  *}
  320.   SERVICE_UIC_SUBSERV = (SERVICE_BASE + 12);
  321.   {$EXTERNALSYM SERVICE_UIC_SUBSERV}
  322. {*
  323.  * The sub-service failed to start.
  324.  *}
  325.   SERVICE_UIC_CONFLPARM = (SERVICE_BASE + 13);
  326.   {$EXTERNALSYM SERVICE_UIC_CONFLPARM}
  327. {*
  328.  * There is a conflict in the value or use of these options: %1.
  329.  *}
  330.   SERVICE_UIC_FILE = (SERVICE_BASE + 14);
  331.   {$EXTERNALSYM SERVICE_UIC_FILE}
  332. {*
  333.  * There is a problem with the file.
  334.  *}
  335. //
  336. //  The modifiers
  337. //
  338. //
  339. // General:
  340. //
  341.   SERVICE_UIC_M_NULL = 0;
  342.   {$EXTERNALSYM SERVICE_UIC_M_NULL}
  343. //
  344. //  RESOURCE:
  345. //
  346.   SERVICE_UIC_M_MEMORY    = (SERVICE_BASE + 20); // memory
  347.   {$EXTERNALSYM SERVICE_UIC_M_MEMORY}
  348.   SERVICE_UIC_M_DISK      = (SERVICE_BASE + 21); // disk space
  349.   {$EXTERNALSYM SERVICE_UIC_M_DISK}
  350.   SERVICE_UIC_M_THREADS   = (SERVICE_BASE + 22); // thread
  351.   {$EXTERNALSYM SERVICE_UIC_M_THREADS}
  352.   SERVICE_UIC_M_PROCESSES = (SERVICE_BASE + 23); // process
  353.   {$EXTERNALSYM SERVICE_UIC_M_PROCESSES}
  354. //
  355. //  CONFIG:
  356. //
  357. //
  358. // Security failure
  359. //
  360.   SERVICE_UIC_M_SECURITY = (SERVICE_BASE + 24);
  361.   {$EXTERNALSYM SERVICE_UIC_M_SECURITY}
  362. {* Security Failure. %0 *}
  363.   SERVICE_UIC_M_LANROOT = (SERVICE_BASE + 25);
  364.   {$EXTERNALSYM SERVICE_UIC_M_LANROOT}
  365. {*
  366.  * Bad or missing LAN Manager root directory.
  367.  *}
  368.   SERVICE_UIC_M_REDIR = (SERVICE_BASE + 26);
  369.   {$EXTERNALSYM SERVICE_UIC_M_REDIR}
  370. {*
  371.  * The network software is not installed.
  372.  *}
  373.   SERVICE_UIC_M_SERVER = (SERVICE_BASE + 27);
  374.   {$EXTERNALSYM SERVICE_UIC_M_SERVER}
  375. {*
  376.  * The server is not started.
  377.  *}
  378.   SERVICE_UIC_M_SEC_FILE_ERR = (SERVICE_BASE + 28);
  379.   {$EXTERNALSYM SERVICE_UIC_M_SEC_FILE_ERR}
  380. {*
  381.  * The server cannot access the user accounts database (NET.ACC).
  382.  *}
  383.   SERVICE_UIC_M_FILES = (SERVICE_BASE + 29);
  384.   {$EXTERNALSYM SERVICE_UIC_M_FILES}
  385. {*
  386.  * Incompatible files are installed in the LANMAN tree.
  387.  *}
  388.   SERVICE_UIC_M_LOGS = (SERVICE_BASE + 30);
  389.   {$EXTERNALSYM SERVICE_UIC_M_LOGS}
  390. {*
  391.  * The LANMANLOGS directory is invalid.
  392.  *}
  393.   SERVICE_UIC_M_LANGROUP = (SERVICE_BASE + 31);
  394.   {$EXTERNALSYM SERVICE_UIC_M_LANGROUP}
  395. {*
  396.  * The domain specified could not be used.
  397.  *}
  398.   SERVICE_UIC_M_MSGNAME = (SERVICE_BASE + 32);
  399.   {$EXTERNALSYM SERVICE_UIC_M_MSGNAME}
  400. {*
  401.  * The computer name is being used as a message alias on another computer.
  402.  *}
  403.   SERVICE_UIC_M_ANNOUNCE = (SERVICE_BASE + 33);
  404.   {$EXTERNALSYM SERVICE_UIC_M_ANNOUNCE}
  405. {*
  406.  * The announcement of the server name failed.
  407.  *}
  408.   SERVICE_UIC_M_UAS = (SERVICE_BASE + 34);
  409.   {$EXTERNALSYM SERVICE_UIC_M_UAS}
  410. {*
  411.  * The user accounts database is not configured correctly.
  412.  *}
  413.   SERVICE_UIC_M_SERVER_SEC_ERR = (SERVICE_BASE + 35);
  414.   {$EXTERNALSYM SERVICE_UIC_M_SERVER_SEC_ERR}
  415. {*
  416.  * The server is not running with user-level security.
  417.  *}
  418.   SERVICE_UIC_M_WKSTA = (SERVICE_BASE + 37);
  419.   {$EXTERNALSYM SERVICE_UIC_M_WKSTA}
  420. {*
  421.  * The workstation is not configured properly.
  422.  *}
  423.   SERVICE_UIC_M_ERRLOG = (SERVICE_BASE + 38);
  424.   {$EXTERNALSYM SERVICE_UIC_M_ERRLOG}
  425. {*
  426.  * View your error log for details.
  427.  *}
  428.   SERVICE_UIC_M_FILE_UW = (SERVICE_BASE + 39);
  429.   {$EXTERNALSYM SERVICE_UIC_M_FILE_UW}
  430. {*
  431.  * Unable to write to this file.
  432.  *}
  433.   SERVICE_UIC_M_ADDPAK = (SERVICE_BASE + 40);
  434.   {$EXTERNALSYM SERVICE_UIC_M_ADDPAK}
  435. {*
  436.  * ADDPAK file is corrupted.  Delete LANMANNETPROGADDPAK.SER
  437.  * and reapply all ADDPAKs.
  438.  *}
  439.   SERVICE_UIC_M_LAZY = (SERVICE_BASE + 41);
  440.   {$EXTERNALSYM SERVICE_UIC_M_LAZY}
  441. {*
  442.  * The LM386 server cannot be started because CACHE.EXE is not running.
  443.  *}
  444.   SERVICE_UIC_M_UAS_MACHINE_ACCT = (SERVICE_BASE + 42);
  445.   {$EXTERNALSYM SERVICE_UIC_M_UAS_MACHINE_ACCT}
  446. {*
  447.  * There is no account for this computer in the security database.
  448.  *}
  449.   SERVICE_UIC_M_UAS_SERVERS_NMEMB = (SERVICE_BASE + 43);
  450.   {$EXTERNALSYM SERVICE_UIC_M_UAS_SERVERS_NMEMB}
  451. {*
  452.  * This computer is not a member of the group SERVERS.
  453.  *}
  454.   SERVICE_UIC_M_UAS_SERVERS_NOGRP = (SERVICE_BASE + 44);
  455.   {$EXTERNALSYM SERVICE_UIC_M_UAS_SERVERS_NOGRP}
  456. {*
  457.  * The group SERVERS is not present in the local security database.
  458.  *}
  459.   SERVICE_UIC_M_UAS_INVALID_ROLE = (SERVICE_BASE + 45);
  460.   {$EXTERNALSYM SERVICE_UIC_M_UAS_INVALID_ROLE}
  461. {*
  462.  * This computer is configured as a member of a workgroup, not as
  463.  * a member of a domain. The Netlogon service does not need to run in this
  464.  * configuration.
  465.  *}
  466.   SERVICE_UIC_M_NETLOGON_NO_DC = (SERVICE_BASE + 46);
  467.   {$EXTERNALSYM SERVICE_UIC_M_NETLOGON_NO_DC}
  468. {*
  469.  * The primary Domain Controller for this domain could not be located.
  470.  *}
  471.   SERVICE_UIC_M_NETLOGON_DC_CFLCT = (SERVICE_BASE + 47);
  472.   {$EXTERNALSYM SERVICE_UIC_M_NETLOGON_DC_CFLCT}
  473. {*
  474.  * This computer is configured to be the primary domain controller of its domain.
  475.  * However, the computer %1 is currently claiming to be the primary domain controller
  476.  * of the domain.
  477.  *}
  478.   SERVICE_UIC_M_NETLOGON_AUTH = (SERVICE_BASE + 48);
  479.   {$EXTERNALSYM SERVICE_UIC_M_NETLOGON_AUTH}
  480. {*
  481.  * The service failed to authenticate with the primary domain controller.
  482.  *}
  483.   SERVICE_UIC_M_UAS_PROLOG = (SERVICE_BASE + 49);
  484.   {$EXTERNALSYM SERVICE_UIC_M_UAS_PROLOG}
  485. {*
  486.  * There is a problem with the security database creation date or serial number.
  487.  *}
  488.   SERVICE2_BASE = 5600;
  489.   {$EXTERNALSYM SERVICE2_BASE}
  490. {* new SEVICE_UIC messages go here *}
  491.   SERVICE_UIC_M_NETLOGON_MPATH = (SERVICE2_BASE + 0);
  492.   {$EXTERNALSYM SERVICE_UIC_M_NETLOGON_MPATH}
  493. {*
  494.  * Could not share the User or Script path.
  495.  *}
  496.   SERVICE_UIC_M_LSA_MACHINE_ACCT = (SERVICE2_BASE + 1);
  497.   {$EXTERNALSYM SERVICE_UIC_M_LSA_MACHINE_ACCT}
  498. {*
  499.  * The password for this computer is not found in the local security
  500.  * database.
  501.  *}
  502.   SERVICE_UIC_M_DATABASE_ERROR = (SERVICE2_BASE + 2);
  503.   {$EXTERNALSYM SERVICE_UIC_M_DATABASE_ERROR}
  504. {*
  505.  * An internal error occurred while accessing the computer's
  506.  * local or network security database.
  507.  *}
  508. //
  509. //  End modifiers
  510. //
  511. //
  512. // Commonly used Macros:
  513. //
  514. function SERVICE_IP_CODE(tt, nn: LONG): LONG;
  515. {$EXTERNALSYM SERVICE_IP_CODE}
  516. function SERVICE_CCP_CODE(tt, nn: LONG): LONG;
  517. {$EXTERNALSYM SERVICE_CCP_CODE}
  518. function SERVICE_UIC_CODE(cc, mm: LONG): LONG;
  519. {$EXTERNALSYM SERVICE_UIC_CODE}
  520. //
  521. // This macro takes a wait hint (tt) which can have a maximum value of
  522. // 0xFFFF and puts it into the service status code field.
  523. // 0x0FF1FFnn  (where nn is the checkpoint information).
  524. //
  525. function SERVICE_NT_CCP_CODE(tt, nn: LONG): LONG;
  526. {$EXTERNALSYM SERVICE_NT_CCP_CODE}
  527. //
  528. // This macro takes a status code field, and strips out the wait hint
  529. // from the upper and lower sections.
  530. // 0x0FF1FFnn results in 0x0000FFFF.
  531. //
  532. function SERVICE_NT_WAIT_GET(code: DWORD): DWORD;
  533. {$EXTERNALSYM SERVICE_NT_WAIT_GET}
  534. implementation
  535. {$IFDEF DYNAMIC_LINK}
  536. var
  537.   _NetServiceControl: Pointer;
  538. function NetServiceControl;
  539. begin
  540.   GetProcedureAddress(_NetServiceControl, netapi32, 'NetServiceControl');
  541.   asm
  542.     mov esp, ebp
  543.     pop ebp
  544.     jmp [_NetServiceControl]
  545.   end;
  546. end;
  547. {$ELSE}
  548. function NetServiceControl; external netapi32 name 'NetServiceControl';
  549. {$ENDIF DYNAMIC_LINK}
  550. {$IFDEF DYNAMIC_LINK}
  551. var
  552.   _NetServiceEnum: Pointer;
  553. function NetServiceEnum;
  554. begin
  555.   GetProcedureAddress(_NetServiceEnum, netapi32, 'NetServiceEnum');
  556.   asm
  557.     mov esp, ebp
  558.     pop ebp
  559.     jmp [_NetServiceEnum]
  560.   end;
  561. end;
  562. {$ELSE}
  563. function NetServiceEnum; external netapi32 name 'NetServiceEnum';
  564. {$ENDIF DYNAMIC_LINK}
  565. {$IFDEF DYNAMIC_LINK}
  566. var
  567.   _NetServiceGetInfo: Pointer;
  568. function NetServiceGetInfo;
  569. begin
  570.   GetProcedureAddress(_NetServiceGetInfo, netapi32, 'NetServiceGetInfo');
  571.   asm
  572.     mov esp, ebp
  573.     pop ebp
  574.     jmp [_NetServiceGetInfo]
  575.   end;
  576. end;
  577. {$ELSE}
  578. function NetServiceGetInfo; external netapi32 name 'NetServiceGetInfo';
  579. {$ENDIF DYNAMIC_LINK}
  580. {$IFDEF DYNAMIC_LINK}
  581. var
  582.   _NetServiceInstall: Pointer;
  583. function NetServiceInstall;
  584. begin
  585.   GetProcedureAddress(_NetServiceInstall, netapi32, 'NetServiceInstall');
  586.   asm
  587.     mov esp, ebp
  588.     pop ebp
  589.     jmp [_NetServiceInstall]
  590.   end;
  591. end;
  592. {$ELSE}
  593. function NetServiceInstall; external netapi32 name 'NetServiceInstall';
  594. {$ENDIF DYNAMIC_LINK}
  595. // #define SERVICE_IP_CODE(tt,nn) ((long)SERVICE_IP_QUERY_HINT|(long)(nn|(tt<<SERVICE_IP_WAITTIME_SHIFT)))
  596. function SERVICE_IP_CODE(tt, nn: LONG): LONG;
  597. begin
  598.   Result := SERVICE_IP_QUERY_HINT or (nn or (tt shl SERVICE_IP_WAITTIME_SHIFT));
  599. end;
  600. // #define SERVICE_CCP_CODE(tt,nn) ((long)SERVICE_CCP_QUERY_HINT|(long)(nn|(tt<<SERVICE_IP_WAITTIME_SHIFT)))
  601. function SERVICE_CCP_CODE(tt, nn: LONG): LONG;
  602. begin
  603.   Result := SERVICE_CCP_QUERY_HINT or (nn or (tt shl SERVICE_IP_WAITTIME_SHIFT));
  604. end;
  605. // #define SERVICE_UIC_CODE(cc,mm) ((long)(((long)cc<<16)|(long)(unsigned short)mm))
  606. function SERVICE_UIC_CODE(cc, mm: LONG): LONG;
  607. begin
  608.   Result := (cc shl 16) or WORD(mm);
  609. end;
  610. // #define SERVICE_NT_CCP_CODE(tt,nn)  
  611. //   (  
  612. //     ((long)SERVICE_CCP_QUERY_HINT)   | 
  613. //     ((long)(nn))   | 
  614. //     (((tt)&LOWER_HINT_MASK) << SERVICE_IP_WAITTIME_SHIFT)   | 
  615. //     (((tt)&UPPER_HINT_MASK) << SERVICE_NTIP_WAITTIME_SHIFT)   
  616. //   )
  617. function SERVICE_NT_CCP_CODE(tt, nn: LongInt): LongInt;
  618. begin
  619.   Result := SERVICE_CCP_QUERY_HINT or nn or ((tt and LOWER_HINT_MASK) shl SERVICE_IP_WAITTIME_SHIFT) or ((tt and UPPER_HINT_MASK) shl SERVICE_NTIP_WAITTIME_SHIFT);
  620. end;
  621. // #define SERVICE_NT_WAIT_GET(code) 
  622. //     (   
  623. //       (((code) & UPPER_GET_HINT_MASK) >> SERVICE_NTIP_WAITTIME_SHIFT)  |  
  624. //       (((code) & LOWER_GET_HINT_MASK) >> SERVICE_IP_WAITTIME_SHIFT)  
  625. //     )
  626. function SERVICE_NT_WAIT_GET(code: DWORD): DWORD;
  627. begin
  628.   Result := ((code and UPPER_GET_HINT_MASK) shr SERVICE_NTIP_WAITTIME_SHIFT) or ((code and LOWER_GET_HINT_MASK) shr SERVICE_IP_WAITTIME_SHIFT);
  629. end;
  630. end.