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

Windows编程

开发平台:

Delphi

  1. {******************************************************************************}
  2. {                                                                       }
  3. { Lan Manager 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: lm.h, released June 2000. The original Pascal          }
  9. { code is: LM.pas, released December 2000. The initial developer of the        }
  10. { Pascal code is Petr Vones (petr.v@mujmail.cz).                               }
  11. {                                                                              }
  12. { Portions created by Petr Vones are Copyright (C) 2000 Petr Vones             }
  13. {                                                                              }
  14. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001            }
  15. { Marcel van Brakel. All Rights Reserved.                                      }
  16. {                 }
  17. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
  18. {                }
  19. { You may retrieve the latest version of this file at the Project JEDI home    }
  20. { page, located at http://delphi-jedi.org or my personal homepage located at   }
  21. { http://members.chello.nl/m.vanbrakel2                                        }
  22. {                }
  23. { The contents of this file are used with permission, subject to the Mozilla   }
  24. { Public License Version 1.1 (the "License"); you may not use this file except }
  25. { in compliance with the License. You may obtain a copy of the License at      }
  26. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  27. {                                                                              }
  28. { Software distributed under the License is distributed on an "AS IS" basis,   }
  29. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  30. { the specific language governing rights and limitations under the License.    }
  31. {                                                                              }
  32. { Alternatively, the contents of this file may be used under the terms of the  }
  33. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  34. { provisions of the LGPL License are applicable instead of those above.        }
  35. { If you wish to allow use of your version of this file only under the terms   }
  36. { of the LGPL License and not to allow others to use your version of this file }
  37. { under the MPL, indicate your decision by deleting  the provisions above and  }
  38. { replace  them with the notice and other provisions required by the LGPL      }
  39. { License.  If you do not delete the provisions above, a recipient may use     }
  40. { your version of this file under either the MPL or the LGPL License.          }
  41. {                 }
  42. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  43. {                 }
  44. {******************************************************************************}
  45. unit JwaLM;
  46. {$ALIGN ON}
  47. {$MINENUMSIZE 4}
  48. {$WEAKPACKAGEUNIT}
  49. interface
  50. (*$HPPEMIT '#include <windef.h>'*)
  51. (*$HPPEMIT '#include <winerror.h>'*)
  52. (*$HPPEMIT '#include <winsvc.h>'*)
  53. (*$HPPEMIT '#include <netcons.h>'*)
  54. (*$HPPEMIT '#include <netsetup.h>'*)
  55. (*$HPPEMIT '#include <lmaccess.h>'*)
  56. (*$HPPEMIT '#include <lmalert.h>'*)
  57. (*$HPPEMIT '#include <lmapibuf.h>'*)
  58. (*$HPPEMIT '#include <lmaudit.h>'*)
  59. (*$HPPEMIT '#include <lmat.h>'*)
  60. (*$HPPEMIT '#include <lmbrowsr.h>'*)
  61. (*$HPPEMIT '#include <lmconfig.h>'*)
  62. (*$HPPEMIT '#include <lmchdev.h>'*)
  63. (*$HPPEMIT '#include <lmcons.h>'*)
  64. (*$HPPEMIT '#include <lmdfs.h>'*)
  65. (*$HPPEMIT '#include <lmerr.h>'*)
  66. (*$HPPEMIT '#include <lmerrlog.h>'*)
  67. (*$HPPEMIT '#include <lmjoin.h>'*)
  68. (*$HPPEMIT '#include <lmmsg.h>'*)
  69. (*$HPPEMIT '#include <lmsname.h>'*)
  70. (*$HPPEMIT '#include <lmremutl.h>'*)
  71. (*$HPPEMIT '#include <lmrepl.h>'*)
  72. (*$HPPEMIT '#include <lmserver.h>'*)
  73. (*$HPPEMIT '#include <lmshare.h>'*)
  74. (*$HPPEMIT '#include <lmstats.h>'*)
  75. (*$HPPEMIT '#include <lmsvc.h>'*)
  76. (*$HPPEMIT '#include <lmuse.h>'*)
  77. (*$HPPEMIT '#include <lmuseflg.h>'*)
  78. (*$HPPEMIT '#include <lmwksta.h>'*)
  79. uses
  80.   JwaWinSvc, JwaWinType, JwaWinBase, JwaWinNT;
  81. // Translated from LMERR.H
  82. const
  83.   {$EXTERNALSYM NERR_Success}
  84.   NERR_Success = 0;
  85.   {$EXTERNALSYM NERR_BASE}
  86.   NERR_BASE = 2100;
  87. // **********WARNING ****************
  88. // *The range 2750-2799 has been    *
  89. // *allocated to the IBM LAN Server *
  90. // **********************************
  91. // **********WARNING ****************
  92. // *The range 2900-2999 has been    *
  93. // *reserved for Microsoft OEMs     *
  94. // **********************************
  95.   {$EXTERNALSYM NERR_NetNotStarted}
  96.   NERR_NetNotStarted       = (NERR_BASE+2);
  97.   // The workstation driver is not installed.
  98.   {$EXTERNALSYM NERR_UnknownServer}
  99.   NERR_UnknownServer       = (NERR_BASE+3);
  100.   // The server could not be located.
  101.   {$EXTERNALSYM NERR_ShareMem}
  102.   NERR_ShareMem            = (NERR_BASE+4);
  103.   // An internal error occurred.  The network cannot access a shared memory segment.
  104.   {$EXTERNALSYM NERR_NoNetworkResource}
  105.   NERR_NoNetworkResource   = (NERR_BASE+5);
  106.   // A network resource shortage occurred .
  107.   {$EXTERNALSYM NERR_RemoteOnly}
  108.   NERR_RemoteOnly          = (NERR_BASE+6);
  109.   // This operation is not supported on workstations.
  110.   {$EXTERNALSYM NERR_DevNotRedirected}
  111.   NERR_DevNotRedirected    = (NERR_BASE+7);
  112.     // The device is not connected.
  113.   // NERR_BASE+8 is used for ERROR_CONNECTED_OTHER_PASSWORD
  114.   {$EXTERNALSYM NERR_ServerNotStarted}
  115.   NERR_ServerNotStarted    = (NERR_BASE+14);
  116.   // The Server service is not started.
  117.   {$EXTERNALSYM NERR_ItemNotFound}
  118.   NERR_ItemNotFound        = (NERR_BASE+15);
  119.   // The queue is empty.
  120.   {$EXTERNALSYM NERR_UnknownDevDir}
  121.   NERR_UnknownDevDir       = (NERR_BASE+16);
  122.   // The device or directory does not exist.
  123.   {$EXTERNALSYM NERR_RedirectedPath}
  124.   NERR_RedirectedPath      = (NERR_BASE+17);
  125.   // The operation is invalid on a redirected resource.
  126.   {$EXTERNALSYM NERR_DuplicateShare}
  127.   NERR_DuplicateShare      = (NERR_BASE+18);
  128.   // The name has already been shared.
  129.   {$EXTERNALSYM NERR_NoRoom}
  130.   NERR_NoRoom              = (NERR_BASE+19);
  131.   // The server is currently out of the requested resource.
  132.   {$EXTERNALSYM NERR_TooManyItems}
  133.   NERR_TooManyItems        = (NERR_BASE+21);
  134.   // Requested addition of items exceeds the maximum allowed.
  135.   {$EXTERNALSYM NERR_InvalidMaxUsers}
  136.   NERR_InvalidMaxUsers     = (NERR_BASE+22);
  137.   // The Peer service supports only two simultaneous users.
  138.   {$EXTERNALSYM NERR_BufTooSmall}
  139.   NERR_BufTooSmall         = (NERR_BASE+23);
  140.   // The API return buffer is too small.
  141.   {$EXTERNALSYM NERR_RemoteErr}
  142.   NERR_RemoteErr           = (NERR_BASE+27);
  143.   // A remote API error occurred.
  144.   {$EXTERNALSYM NERR_LanmanIniError}
  145.   NERR_LanmanIniError      = (NERR_BASE+31);
  146.   // An error occurred when opening or reading the configuration file.
  147.   {$EXTERNALSYM NERR_NetworkError}
  148.   NERR_NetworkError        = (NERR_BASE+36);
  149.   // A general network error occurred.
  150.   {$EXTERNALSYM NERR_WkstaInconsistentState}
  151.   NERR_WkstaInconsistentState  = (NERR_BASE+37);
  152.   // The Workstation service is in an inconsistent state. Restart the computer before restarting the Workstation service.
  153.   {$EXTERNALSYM NERR_WkstaNotStarted}
  154.   NERR_WkstaNotStarted     = (NERR_BASE+38);
  155.   // The Workstation service has not been started.
  156.   {$EXTERNALSYM NERR_BrowserNotStarted}
  157.   NERR_BrowserNotStarted   = (NERR_BASE+39);
  158.   // The requested information is not available.
  159.   {$EXTERNALSYM NERR_InternalError}
  160.   NERR_InternalError       = (NERR_BASE+40);
  161.   // An internal Windows NT error occurred.
  162.   {$EXTERNALSYM NERR_BadTransactConfig}
  163.   NERR_BadTransactConfig   = (NERR_BASE+41);
  164.   // The server is not configured for transactions.
  165.   {$EXTERNALSYM NERR_InvalidAPI}
  166.   NERR_InvalidAPI          = (NERR_BASE+42);
  167.   // The requested API is not supported on the remote server.
  168.   {$EXTERNALSYM NERR_BadEventName}
  169.   NERR_BadEventName        = (NERR_BASE+43);
  170.   // The event name is invalid.
  171.   {$EXTERNALSYM NERR_DupNameReboot}
  172.   NERR_DupNameReboot       = (NERR_BASE+44);
  173.   // The computer name already exists on the network. Change it and restart the computer.
  174. // Config API related
  175. // Error codes from BASE+45 to BASE+49
  176.   {$EXTERNALSYM NERR_CfgCompNotFound}
  177.   NERR_CfgCompNotFound     = (NERR_BASE+46);
  178.   // The specified component could not be found in the configuration information.
  179.   {$EXTERNALSYM NERR_CfgParamNotFound}
  180.   NERR_CfgParamNotFound    = (NERR_BASE+47);
  181.   // The specified parameter could not be found in the configuration information.
  182.   {$EXTERNALSYM NERR_LineTooLong}
  183.   NERR_LineTooLong         = (NERR_BASE+49);
  184.   // A line in the configuration file is too long.
  185. // Spooler API related
  186. // Error codes from BASE+50 to BASE+79
  187.   {$EXTERNALSYM NERR_QNotFound}
  188.   NERR_QNotFound           = (NERR_BASE+50);
  189.   // The printer does not exist.
  190.   {$EXTERNALSYM NERR_JobNotFound}
  191.   NERR_JobNotFound         = (NERR_BASE+51);
  192.   // The print job does not exist.
  193.   {$EXTERNALSYM NERR_DestNotFound}
  194.   NERR_DestNotFound        = (NERR_BASE+52);
  195.   // The printer destination cannot be found.
  196.   {$EXTERNALSYM NERR_DestExists}
  197.   NERR_DestExists          = (NERR_BASE+53);
  198.   // The printer destination already exists.
  199.   {$EXTERNALSYM NERR_QExists}
  200.   NERR_QExists             = (NERR_BASE+54);
  201.   // The printer queue already exists.
  202.   {$EXTERNALSYM NERR_QNoRoom}
  203.   NERR_QNoRoom             = (NERR_BASE+55);
  204.   // No more printers can be added.
  205.   {$EXTERNALSYM NERR_JobNoRoom}
  206.   NERR_JobNoRoom           = (NERR_BASE+56);
  207.   // No more print jobs can be added.
  208.   {$EXTERNALSYM NERR_DestNoRoom}
  209.   NERR_DestNoRoom          = (NERR_BASE+57);
  210.   // No more printer destinations can be added.
  211.   {$EXTERNALSYM NERR_DestIdle}
  212.   NERR_DestIdle            = (NERR_BASE+58);
  213.   // This printer destination is idle and cannot accept control operations.
  214.   {$EXTERNALSYM NERR_DestInvalidOp}
  215.   NERR_DestInvalidOp       = (NERR_BASE+59);
  216.   // This printer destination request contains an invalid control function.
  217.   {$EXTERNALSYM NERR_ProcNoRespond}
  218.   NERR_ProcNoRespond       = (NERR_BASE+60);
  219.   // The print processor is not responding.
  220.   {$EXTERNALSYM NERR_SpoolerNotLoaded}
  221.   NERR_SpoolerNotLoaded    = (NERR_BASE+61);
  222.   // The spooler is not running.
  223.   {$EXTERNALSYM NERR_DestInvalidState}
  224.   NERR_DestInvalidState    = (NERR_BASE+62);
  225.   // This operation cannot be performed on the print destination in its current state.
  226.   {$EXTERNALSYM NERR_QInvalidState}
  227.   NERR_QInvalidState       = (NERR_BASE+63);
  228.   // This operation cannot be performed on the printer queue in its current state.
  229.   {$EXTERNALSYM NERR_JobInvalidState}
  230.   NERR_JobInvalidState     = (NERR_BASE+64);
  231.   // This operation cannot be performed on the print job in its current state.
  232.   {$EXTERNALSYM NERR_SpoolNoMemory}
  233.   NERR_SpoolNoMemory       = (NERR_BASE+65);
  234.   // A spooler memory allocation failure occurred.
  235.   {$EXTERNALSYM NERR_DriverNotFound}
  236.   NERR_DriverNotFound      = (NERR_BASE+66);
  237.   // The device driver does not exist.
  238.   {$EXTERNALSYM NERR_DataTypeInvalid}
  239.   NERR_DataTypeInvalid     = (NERR_BASE+67);
  240.   // The data type is not supported by the print processor.
  241.   {$EXTERNALSYM NERR_ProcNotFound}
  242.   NERR_ProcNotFound        = (NERR_BASE+68);
  243.   // The print processor is not installed.
  244. // Service API related
  245. // Error codes from BASE+80 to BASE+99
  246.   {$EXTERNALSYM NERR_ServiceTableLocked}
  247.   NERR_ServiceTableLocked  = (NERR_BASE+80);
  248.   // The service database is locked.
  249.   {$EXTERNALSYM NERR_ServiceTableFull}
  250.   NERR_ServiceTableFull    = (NERR_BASE+81);
  251.   // The service table is full.
  252.   {$EXTERNALSYM NERR_ServiceInstalled}
  253.   NERR_ServiceInstalled    = (NERR_BASE+82);
  254.   // The requested service has already been started.
  255.   {$EXTERNALSYM NERR_ServiceEntryLocked}
  256.   NERR_ServiceEntryLocked  = (NERR_BASE+83);
  257.   // The service does not respond to control actions.
  258.   {$EXTERNALSYM NERR_ServiceNotInstalled}
  259.   NERR_ServiceNotInstalled  = (NERR_BASE+84);
  260.   // The service has not been started.
  261.   {$EXTERNALSYM NERR_BadServiceName}
  262.   NERR_BadServiceName      = (NERR_BASE+85);
  263.   // The service name is invalid.
  264.   {$EXTERNALSYM NERR_ServiceCtlTimeout}
  265.   NERR_ServiceCtlTimeout   = (NERR_BASE+86);
  266.   // The service is not responding to the control function.
  267.   {$EXTERNALSYM NERR_ServiceCtlBusy}
  268.   NERR_ServiceCtlBusy      = (NERR_BASE+87);
  269.   // The service control is busy.
  270.   {$EXTERNALSYM NERR_BadServiceProgName}
  271.   NERR_BadServiceProgName  = (NERR_BASE+88);
  272.   // The configuration file contains an invalid service program name.
  273.   {$EXTERNALSYM NERR_ServiceNotCtrl}
  274.   NERR_ServiceNotCtrl      = (NERR_BASE+89);
  275.   // The service could not be controlled in its present state.
  276.   {$EXTERNALSYM NERR_ServiceKillProc}
  277.   NERR_ServiceKillProc     = (NERR_BASE+90);
  278.   // The service ended abnormally.
  279.   {$EXTERNALSYM NERR_ServiceCtlNotValid}
  280.   NERR_ServiceCtlNotValid  = (NERR_BASE+91);
  281.   // The requested pause or stop is not valid for this service.
  282.   {$EXTERNALSYM NERR_NotInDispatchTbl}
  283.   NERR_NotInDispatchTbl    = (NERR_BASE+92);
  284.   // The service control dispatcher could not find the service name in the dispatch table.
  285.   {$EXTERNALSYM NERR_BadControlRecv}
  286.   NERR_BadControlRecv      = (NERR_BASE+93);
  287.   // The service control dispatcher pipe read failed.
  288.   {$EXTERNALSYM NERR_ServiceNotStarting}
  289.   NERR_ServiceNotStarting  = (NERR_BASE+94);
  290.   // A thread for the new service could not be created.
  291. // Wksta and Logon API related
  292. // Error codes from BASE+100 to BASE+118
  293.   {$EXTERNALSYM NERR_AlreadyLoggedOn}
  294.   NERR_AlreadyLoggedOn     = (NERR_BASE+100);
  295.   // This workstation is already logged on to the local-area network.
  296.   {$EXTERNALSYM NERR_NotLoggedOn}
  297.   NERR_NotLoggedOn         = (NERR_BASE+101);
  298.   // The workstation is not logged on to the local-area network.
  299.   {$EXTERNALSYM NERR_BadUsername}
  300.   NERR_BadUsername         = (NERR_BASE+102);
  301.   // The user name or group name parameter is invalid.
  302.   {$EXTERNALSYM NERR_BadPassword}
  303.   NERR_BadPassword         = (NERR_BASE+103);
  304.   // The password parameter is invalid.
  305.   {$EXTERNALSYM NERR_UnableToAddName_W}
  306.   NERR_UnableToAddName_W   = (NERR_BASE+104);
  307.   // @W The logon processor did not add the message alias.
  308.   {$EXTERNALSYM NERR_UnableToAddName_F}
  309.   NERR_UnableToAddName_F   = (NERR_BASE+105);
  310.   // The logon processor did not add the message alias.
  311.   {$EXTERNALSYM NERR_UnableToDelName_W}
  312.   NERR_UnableToDelName_W   = (NERR_BASE+106);
  313.   // @W The logoff processor did not delete the message alias.
  314.   {$EXTERNALSYM NERR_UnableToDelName_F}
  315.   NERR_UnableToDelName_F   = (NERR_BASE+107);
  316.   // The logoff processor did not delete the message alias.
  317.   {$EXTERNALSYM NERR_LogonsPaused}
  318.   NERR_LogonsPaused        = (NERR_BASE+109);
  319.   // Network logons are paused.
  320.   {$EXTERNALSYM NERR_LogonServerConflict}
  321.   NERR_LogonServerConflict  = (NERR_BASE+110);
  322.   // A centralized logon-server conflict occurred.
  323.   {$EXTERNALSYM NERR_LogonNoUserPath}
  324.   NERR_LogonNoUserPath     = (NERR_BASE+111);
  325.   // The server is configured without a valid user path.
  326.   {$EXTERNALSYM NERR_LogonScriptError}
  327.   NERR_LogonScriptError    = (NERR_BASE+112);
  328.   // An error occurred while loading or running the logon script.
  329.   {$EXTERNALSYM NERR_StandaloneLogon}
  330.   NERR_StandaloneLogon     = (NERR_BASE+114);
  331.   // The logon server was not specified.  Your computer will be logged on as STANDALONE.
  332.   {$EXTERNALSYM NERR_LogonServerNotFound}
  333.   NERR_LogonServerNotFound  = (NERR_BASE+115);
  334.   // The logon server could not be found.
  335.   {$EXTERNALSYM NERR_LogonDomainExists}
  336.   NERR_LogonDomainExists   = (NERR_BASE+116);
  337.   // There is already a logon domain for this computer.
  338.   {$EXTERNALSYM NERR_NonValidatedLogon}
  339.   NERR_NonValidatedLogon   = (NERR_BASE+117);
  340.     // The logon server could not validate the logon.
  341. // ACF API related (access, user, group);
  342. // Error codes from BASE+119 to BASE+149
  343.   {$EXTERNALSYM NERR_ACFNotFound}
  344.   NERR_ACFNotFound         = (NERR_BASE+119);
  345.   // The security database could not be found.
  346.   {$EXTERNALSYM NERR_GroupNotFound}
  347.   NERR_GroupNotFound       = (NERR_BASE+120);
  348.   // The group name could not be found.
  349.   {$EXTERNALSYM NERR_UserNotFound}
  350.   NERR_UserNotFound        = (NERR_BASE+121);
  351.   // The user name could not be found.
  352.   {$EXTERNALSYM NERR_ResourceNotFound}
  353.   NERR_ResourceNotFound    = (NERR_BASE+122);
  354.   // The resource name could not be found.
  355.   {$EXTERNALSYM NERR_GroupExists}
  356.   NERR_GroupExists         = (NERR_BASE+123);
  357.   // The group already exists.
  358.   {$EXTERNALSYM NERR_UserExists}
  359.   NERR_UserExists          = (NERR_BASE+124);
  360.   // The user account already exists.
  361.   {$EXTERNALSYM NERR_ResourceExists}
  362.   NERR_ResourceExists      = (NERR_BASE+125);
  363.   // The resource permission list already exists.
  364.   {$EXTERNALSYM NERR_NotPrimary}
  365.   NERR_NotPrimary          = (NERR_BASE+126);
  366.   // This operation is only allowed on the primary domain controller of the domain.
  367.   {$EXTERNALSYM NERR_ACFNotLoaded}
  368.   NERR_ACFNotLoaded        = (NERR_BASE+127);
  369.   // The security database has not been started.
  370.   {$EXTERNALSYM NERR_ACFNoRoom}
  371.   NERR_ACFNoRoom           = (NERR_BASE+128);
  372.   // There are too many names in the user accounts database.
  373.   {$EXTERNALSYM NERR_ACFFileIOFail}
  374.   NERR_ACFFileIOFail       = (NERR_BASE+129);
  375.   // A disk I/O failure occurred.
  376.   {$EXTERNALSYM NERR_ACFTooManyLists}
  377.   NERR_ACFTooManyLists     = (NERR_BASE+130);
  378.   // The limit of 64 entries per resource was exceeded.
  379.   {$EXTERNALSYM NERR_UserLogon}
  380.   NERR_UserLogon           = (NERR_BASE+131);
  381.   // Deleting a user with a session is not allowed.
  382.   {$EXTERNALSYM NERR_ACFNoParent}
  383.   NERR_ACFNoParent         = (NERR_BASE+132);
  384.   // The parent directory could not be located.
  385.   {$EXTERNALSYM NERR_CanNotGrowSegment}
  386.   NERR_CanNotGrowSegment   = (NERR_BASE+133);
  387.   // Unable to add to the security database session cache segment.
  388.   {$EXTERNALSYM NERR_SpeGroupOp}
  389.   NERR_SpeGroupOp          = (NERR_BASE+134);
  390.   // This operation is not allowed on this special group.
  391.   {$EXTERNALSYM NERR_NotInCache}
  392.   NERR_NotInCache          = (NERR_BASE+135);
  393.   // This user is not cached in user accounts database session cache.
  394.   {$EXTERNALSYM NERR_UserInGroup}
  395.   NERR_UserInGroup         = (NERR_BASE+136);
  396.   // The user already belongs to this group.
  397.   {$EXTERNALSYM NERR_UserNotInGroup}
  398.   NERR_UserNotInGroup      = (NERR_BASE+137);
  399.   // The user does not belong to this group.
  400.   {$EXTERNALSYM NERR_AccountUndefined}
  401.   NERR_AccountUndefined    = (NERR_BASE+138);
  402.   // This user account is undefined.
  403.   {$EXTERNALSYM NERR_AccountExpired}
  404.   NERR_AccountExpired      = (NERR_BASE+139);
  405.   // This user account has expired.
  406.   {$EXTERNALSYM NERR_InvalidWorkstation}
  407.   NERR_InvalidWorkstation  = (NERR_BASE+140);
  408.   // The user is not allowed to log on from this workstation.
  409.   {$EXTERNALSYM NERR_InvalidLogonHours}
  410.   NERR_InvalidLogonHours   = (NERR_BASE+141);
  411.   // The user is not allowed to log on at this time.
  412.   {$EXTERNALSYM NERR_PasswordExpired}
  413.   NERR_PasswordExpired     = (NERR_BASE+142);
  414.   // The password of this user has expired.
  415.   {$EXTERNALSYM NERR_PasswordCantChange}
  416.   NERR_PasswordCantChange  = (NERR_BASE+143);
  417.   // The password of this user cannot change.
  418.   {$EXTERNALSYM NERR_PasswordHistConflict}
  419.   NERR_PasswordHistConflict  = (NERR_BASE+144);
  420.   // This password cannot be used now.
  421.   {$EXTERNALSYM NERR_PasswordTooShort}
  422.   NERR_PasswordTooShort    = (NERR_BASE+145);
  423.   // The password is shorter than required.
  424.   {$EXTERNALSYM NERR_PasswordTooRecent}
  425.   NERR_PasswordTooRecent   = (NERR_BASE+146);
  426.   // The password of this user is too recent to change.
  427.   {$EXTERNALSYM NERR_InvalidDatabase}
  428.   NERR_InvalidDatabase     = (NERR_BASE+147);
  429.   // The security database is corrupted.
  430.   {$EXTERNALSYM NERR_DatabaseUpToDate}
  431.   NERR_DatabaseUpToDate    = (NERR_BASE+148);
  432.   // No updates are necessary to this replicant network/local security database.
  433.   {$EXTERNALSYM NERR_SyncRequired}
  434.   NERR_SyncRequired        = (NERR_BASE+149);
  435.     // This replicant database is outdated; synchronization is required.
  436. // Use API related
  437. // Error codes from BASE+150 to BASE+169
  438.   {$EXTERNALSYM NERR_UseNotFound}
  439.   NERR_UseNotFound         = (NERR_BASE+150);
  440.   // The network connection could not be found.
  441.   {$EXTERNALSYM NERR_BadAsgType}
  442.   NERR_BadAsgType          = (NERR_BASE+151);
  443.   // This asg_type is invalid.
  444.   {$EXTERNALSYM NERR_DeviceIsShared}
  445.   NERR_DeviceIsShared      = (NERR_BASE+152);
  446.   // This device is currently being shared.
  447. // Message Server related
  448. // Error codes BASE+170 to BASE+209
  449.   {$EXTERNALSYM NERR_NoComputerName}
  450.   NERR_NoComputerName      = (NERR_BASE+170);
  451.   // The computer name could not be added as a message alias.  The name may already exist on the network.
  452.   {$EXTERNALSYM NERR_MsgAlreadyStarted}
  453.   NERR_MsgAlreadyStarted   = (NERR_BASE+171);
  454.   // The Messenger service is already started.
  455.   {$EXTERNALSYM NERR_MsgInitFailed}
  456.   NERR_MsgInitFailed       = (NERR_BASE+172);
  457.   // The Messenger service failed to start.
  458.   {$EXTERNALSYM NERR_NameNotFound}
  459.   NERR_NameNotFound        = (NERR_BASE+173);
  460.   // The message alias could not be found on the network.
  461.   {$EXTERNALSYM NERR_AlreadyForwarded}
  462.   NERR_AlreadyForwarded    = (NERR_BASE+174);
  463.   // This message alias has already been forwarded.
  464.   {$EXTERNALSYM NERR_AddForwarded}
  465.   NERR_AddForwarded        = (NERR_BASE+175);
  466.   // This message alias has been added but is still forwarded.
  467.   {$EXTERNALSYM NERR_AlreadyExists}
  468.   NERR_AlreadyExists       = (NERR_BASE+176);
  469.   // This message alias already exists locally.
  470.   {$EXTERNALSYM NERR_TooManyNames}
  471.   NERR_TooManyNames        = (NERR_BASE+177);
  472.   // The maximum number of added message aliases has been exceeded.
  473.   {$EXTERNALSYM NERR_DelComputerName}
  474.   NERR_DelComputerName     = (NERR_BASE+178);
  475.   // The computer name could not be deleted.
  476.   {$EXTERNALSYM NERR_LocalForward}
  477.   NERR_LocalForward        = (NERR_BASE+179);
  478.   // Messages cannot be forwarded back to the same workstation.
  479.   {$EXTERNALSYM NERR_GrpMsgProcessor}
  480.   NERR_GrpMsgProcessor     = (NERR_BASE+180);
  481.   // An error occurred in the domain message processor.
  482.   {$EXTERNALSYM NERR_PausedRemote}
  483.   NERR_PausedRemote        = (NERR_BASE+181);
  484.   // The message was sent, but the recipient has paused the Messenger service.
  485.   {$EXTERNALSYM NERR_BadReceive}
  486.   NERR_BadReceive          = (NERR_BASE+182);
  487.   // The message was sent but not received.
  488.   {$EXTERNALSYM NERR_NameInUse}
  489.   NERR_NameInUse           = (NERR_BASE+183);
  490.   // The message alias is currently in use. Try again later.
  491.   {$EXTERNALSYM NERR_MsgNotStarted}
  492.   NERR_MsgNotStarted       = (NERR_BASE+184);
  493.   // The Messenger service has not been started.
  494.   {$EXTERNALSYM NERR_NotLocalName}
  495.   NERR_NotLocalName        = (NERR_BASE+185);
  496.   // The name is not on the local computer.
  497.   {$EXTERNALSYM NERR_NoForwardName}
  498.   NERR_NoForwardName       = (NERR_BASE+186);
  499.   // The forwarded message alias could not be found on the network.
  500.   {$EXTERNALSYM NERR_RemoteFull}
  501.   NERR_RemoteFull          = (NERR_BASE+187);
  502.   // The message alias table on the remote station is full.
  503.   {$EXTERNALSYM NERR_NameNotForwarded}
  504.   NERR_NameNotForwarded    = (NERR_BASE+188);
  505.   // Messages for this alias are not currently being forwarded.
  506.   {$EXTERNALSYM NERR_TruncatedBroadcast}
  507.   NERR_TruncatedBroadcast  = (NERR_BASE+189);
  508.   // The broadcast message was truncated.
  509.   {$EXTERNALSYM NERR_InvalidDevice}
  510.   NERR_InvalidDevice       = (NERR_BASE+194);
  511.   // This is an invalid device name.
  512.   {$EXTERNALSYM NERR_WriteFault}
  513.   NERR_WriteFault          = (NERR_BASE+195);
  514.   // A write fault occurred.
  515.   {$EXTERNALSYM NERR_DuplicateName}
  516.   NERR_DuplicateName       = (NERR_BASE+197);
  517.   // A duplicate message alias exists on the network.
  518.   {$EXTERNALSYM NERR_DeleteLater}
  519.   NERR_DeleteLater         = (NERR_BASE+198);
  520.   // @W This message alias will be deleted later.
  521.   {$EXTERNALSYM NERR_IncompleteDel}
  522.   NERR_IncompleteDel       = (NERR_BASE+199);
  523.   // The message alias was not successfully deleted from all networks.
  524.   {$EXTERNALSYM NERR_MultipleNets}
  525.   NERR_MultipleNets        = (NERR_BASE+200);
  526.   // This operation is not supported on computers with multiple networks.
  527.   
  528. // Server API related
  529. // Error codes BASE+210 to BASE+229
  530.   {$EXTERNALSYM NERR_NetNameNotFound}
  531.   NERR_NetNameNotFound     = (NERR_BASE+210);
  532.   // This shared resource does not exist.
  533.   {$EXTERNALSYM NERR_DeviceNotShared}
  534.   NERR_DeviceNotShared     = (NERR_BASE+211);
  535.   // This device is not shared.
  536.   {$EXTERNALSYM NERR_ClientNameNotFound}
  537.   NERR_ClientNameNotFound  = (NERR_BASE+212);
  538.   // A session does not exist with that computer name.
  539.   {$EXTERNALSYM NERR_FileIdNotFound}
  540.   NERR_FileIdNotFound      = (NERR_BASE+214);
  541.   // There is not an open file with that identification number.
  542.   {$EXTERNALSYM NERR_ExecFailure}
  543.   NERR_ExecFailure         = (NERR_BASE+215);
  544.   // A failure occurred when executing a remote administration command.
  545.   {$EXTERNALSYM NERR_TmpFile}
  546.   NERR_TmpFile             = (NERR_BASE+216);
  547.   // A failure occurred when opening a remote temporary file.
  548.   {$EXTERNALSYM NERR_TooMuchData}
  549.   NERR_TooMuchData         = (NERR_BASE+217);
  550.   // The data returned from a remote administration command has been truncated to 64K.
  551.   {$EXTERNALSYM NERR_DeviceShareConflict}
  552.   NERR_DeviceShareConflict  = (NERR_BASE+218);
  553.   // This device cannot be shared as both a spooled and a non-spooled resource.
  554.   {$EXTERNALSYM NERR_BrowserTableIncomplete}
  555.   NERR_BrowserTableIncomplete  = (NERR_BASE+219);
  556.    // The information in the list of servers may be incorrect.
  557.   {$EXTERNALSYM NERR_NotLocalDomain}
  558.   NERR_NotLocalDomain      = (NERR_BASE+220);
  559.   // The computer is not active in this domain.
  560.   {$EXTERNALSYM NERR_IsDfsShare}
  561.   NERR_IsDfsShare          = (NERR_BASE+221);
  562.   // The share must be removed from the Distributed File System before it can be deleted.
  563. // CharDev API related
  564. // Error codes BASE+230 to BASE+249
  565.   {$EXTERNALSYM NERR_DevInvalidOpCode}
  566.   NERR_DevInvalidOpCode    = (NERR_BASE+231);
  567.   // The operation is invalid for this device.
  568.   {$EXTERNALSYM NERR_DevNotFound}
  569.   NERR_DevNotFound         = (NERR_BASE+232);
  570.   // This device cannot be shared.
  571.   {$EXTERNALSYM NERR_DevNotOpen}
  572.   NERR_DevNotOpen          = (NERR_BASE+233);
  573.   // This device was not open.
  574.   {$EXTERNALSYM NERR_BadQueueDevString}
  575.   NERR_BadQueueDevString   = (NERR_BASE+234);
  576.   // This device name list is invalid.
  577.   {$EXTERNALSYM NERR_BadQueuePriority}
  578.   NERR_BadQueuePriority    = (NERR_BASE+235);
  579.   // The queue priority is invalid.
  580.   {$EXTERNALSYM NERR_NoCommDevs}
  581.   NERR_NoCommDevs          = (NERR_BASE+237);
  582.   // There are no shared communication devices.
  583.   {$EXTERNALSYM NERR_QueueNotFound}
  584.   NERR_QueueNotFound       = (NERR_BASE+238);
  585.   // The queue you specified does not exist.
  586.   {$EXTERNALSYM NERR_BadDevString}
  587.   NERR_BadDevString        = (NERR_BASE+240);
  588.   // This list of devices is invalid.
  589.   {$EXTERNALSYM NERR_BadDev}
  590.   NERR_BadDev              = (NERR_BASE+241);
  591.   // The requested device is invalid.
  592.   {$EXTERNALSYM NERR_InUseBySpooler}
  593.   NERR_InUseBySpooler      = (NERR_BASE+242);
  594.   // This device is already in use by the spooler.
  595.   {$EXTERNALSYM NERR_CommDevInUse}
  596.   NERR_CommDevInUse        = (NERR_BASE+243);
  597.   // This device is already in use as a communication device.
  598. // NetICanonicalize and NetIType and NetIMakeLMFileName
  599. // NetIListCanon and NetINameCheck
  600. // Error codes BASE+250 to BASE+269
  601.   {$EXTERNALSYM NERR_InvalidComputer}
  602.   NERR_InvalidComputer    = (NERR_BASE+251);
  603.   // This computer name is invalid.
  604.   {$EXTERNALSYM NERR_MaxLenExceeded}
  605.   NERR_MaxLenExceeded     = (NERR_BASE+254);
  606.   // The string and prefix specified are too long.
  607.   {$EXTERNALSYM NERR_BadComponent}
  608.   NERR_BadComponent       = (NERR_BASE+256);
  609.   // This path component is invalid.
  610.   {$EXTERNALSYM NERR_CantType}
  611.   NERR_CantType           = (NERR_BASE+257);
  612.   // Could not determine the type of input.
  613.   {$EXTERNALSYM NERR_TooManyEntries}
  614.   NERR_TooManyEntries     = (NERR_BASE+262);
  615.   // The buffer for types is not big enough.
  616. // NetProfile
  617. // Error codes BASE+270 to BASE+276
  618.   {$EXTERNALSYM NERR_ProfileFileTooBig}
  619.   NERR_ProfileFileTooBig   = (NERR_BASE+270);
  620.   // Profile files cannot exceed 64K.
  621.   {$EXTERNALSYM NERR_ProfileOffset}
  622.   NERR_ProfileOffset       = (NERR_BASE+271);
  623.   // The start offset is out of range.
  624.   {$EXTERNALSYM NERR_ProfileCleanup}
  625.   NERR_ProfileCleanup      = (NERR_BASE+272);
  626.   // The system cannot delete current connections to network resources.
  627.   {$EXTERNALSYM NERR_ProfileUnknownCmd}
  628.   NERR_ProfileUnknownCmd   = (NERR_BASE+273);
  629.   // The system was unable to parse the command line in this file.
  630.   {$EXTERNALSYM NERR_ProfileLoadErr}
  631.   NERR_ProfileLoadErr      = (NERR_BASE+274);
  632.   // An error occurred while loading the profile file.
  633.   {$EXTERNALSYM NERR_ProfileSaveErr}
  634.   NERR_ProfileSaveErr      = (NERR_BASE+275);
  635.   // @W Errors occurred while saving the profile file.  The profile was partially saved.
  636. // NetAudit and NetErrorLog
  637. // Error codes BASE+277 to BASE+279
  638.   {$EXTERNALSYM NERR_LogOverflow}
  639.   NERR_LogOverflow            = (NERR_BASE+277);
  640.   // Log file %1 is full.
  641.   {$EXTERNALSYM NERR_LogFileChanged}
  642.   NERR_LogFileChanged         = (NERR_BASE+278);
  643.   // This log file has changed between reads.
  644.   {$EXTERNALSYM NERR_LogFileCorrupt}
  645.   NERR_LogFileCorrupt         = (NERR_BASE+279);
  646.   // Log file %1 is corrupt.
  647. // NetRemote
  648. // Error codes BASE+280 to BASE+299
  649.   {$EXTERNALSYM NERR_SourceIsDir}
  650.   NERR_SourceIsDir    = (NERR_BASE+280);
  651.   // The source path cannot be a directory.
  652.   {$EXTERNALSYM NERR_BadSource}
  653.   NERR_BadSource      = (NERR_BASE+281);
  654.   // The source path is illegal.
  655.   {$EXTERNALSYM NERR_BadDest}
  656.   NERR_BadDest        = (NERR_BASE+282);
  657.   // The destination path is illegal.
  658.   {$EXTERNALSYM NERR_DifferentServers}
  659.   NERR_DifferentServers    = (NERR_BASE+283);
  660.   // The source and destination paths are on different servers.
  661.   {$EXTERNALSYM NERR_RunSrvPaused}
  662.   NERR_RunSrvPaused        = (NERR_BASE+285);
  663.   // The Run server you requested is paused.
  664.   {$EXTERNALSYM NERR_ErrCommRunSrv}
  665.   NERR_ErrCommRunSrv       = (NERR_BASE+289);
  666.   // An error occurred when communicating with a Run server.
  667.   {$EXTERNALSYM NERR_ErrorExecingGhost}
  668.   NERR_ErrorExecingGhost   = (NERR_BASE+291);
  669.   // An error occurred when starting a background process.
  670.   {$EXTERNALSYM NERR_ShareNotFound}
  671.   NERR_ShareNotFound       = (NERR_BASE+292);
  672.   // The shared resource you are connected to could not be found.
  673. // NetWksta.sys (redir); returned error codes.
  674. // NERR_BASE + (300-329);
  675.   {$EXTERNALSYM NERR_InvalidLana}
  676.   NERR_InvalidLana         = (NERR_BASE+300);
  677.   // The LAN adapter number is invalid.
  678.   {$EXTERNALSYM NERR_OpenFiles}
  679.   NERR_OpenFiles           = (NERR_BASE+301);
  680.   // There are open files on the connection.
  681.   {$EXTERNALSYM NERR_ActiveConns}
  682.   NERR_ActiveConns         = (NERR_BASE+302);
  683.   // Active connections still exist.
  684.   {$EXTERNALSYM NERR_BadPasswordCore}
  685.   NERR_BadPasswordCore     = (NERR_BASE+303);
  686.   // This share name or password is invalid.
  687.   {$EXTERNALSYM NERR_DevInUse}
  688.   NERR_DevInUse            = (NERR_BASE+304);
  689.   // The device is being accessed by an active process.
  690.   {$EXTERNALSYM NERR_LocalDrive}
  691.   NERR_LocalDrive          = (NERR_BASE+305);
  692.   // The drive letter is in use locally.
  693. //  Alert error codes.
  694. //  NERR_BASE + (330-339);
  695.   {$EXTERNALSYM NERR_AlertExists}
  696.   NERR_AlertExists         = (NERR_BASE+330);
  697.   // The specified client is already registered for the specified event.
  698.   {$EXTERNALSYM NERR_TooManyAlerts}
  699.   NERR_TooManyAlerts       = (NERR_BASE+331);
  700.   // The alert table is full.
  701.   {$EXTERNALSYM NERR_NoSuchAlert}
  702.   NERR_NoSuchAlert         = (NERR_BASE+332);
  703.   // An invalid or nonexistent alert name was raised.
  704.   {$EXTERNALSYM NERR_BadRecipient}
  705.   NERR_BadRecipient        = (NERR_BASE+333);
  706.   // The alert recipient is invalid.
  707.   {$EXTERNALSYM NERR_AcctLimitExceeded}
  708.   NERR_AcctLimitExceeded   = (NERR_BASE+334);
  709.   // A user's session with this server has been deleted because the user's logon hours are no longer valid.
  710. // Additional Error and Audit log codes.
  711. // NERR_BASE +(340-343)
  712.   {$EXTERNALSYM NERR_InvalidLogSeek}
  713.   NERR_InvalidLogSeek      = (NERR_BASE+340);
  714.   // The log file does not contain the requested record number.
  715. // Additional UAS and NETLOGON codes
  716. // NERR_BASE +(350-359)
  717.   {$EXTERNALSYM NERR_BadUasConfig}
  718.   NERR_BadUasConfig        = (NERR_BASE+350);
  719.   // The user accounts database is not configured correctly.
  720.   {$EXTERNALSYM NERR_InvalidUASOp}
  721.   NERR_InvalidUASOp        = (NERR_BASE+351);
  722.   // This operation is not permitted when the Netlogon service is running.
  723.   {$EXTERNALSYM NERR_LastAdmin}
  724.   NERR_LastAdmin           = (NERR_BASE+352);
  725.   // This operation is not allowed on the last administrative account.
  726.   {$EXTERNALSYM NERR_DCNotFound}
  727.   NERR_DCNotFound          = (NERR_BASE+353);
  728.   // Could not find domain controller for this domain.
  729.   {$EXTERNALSYM NERR_LogonTrackingError}
  730.   NERR_LogonTrackingError  = (NERR_BASE+354);
  731.   // Could not set logon information for this user.
  732.   {$EXTERNALSYM NERR_NetlogonNotStarted}
  733.   NERR_NetlogonNotStarted  = (NERR_BASE+355);
  734.   // The Netlogon service has not been started.
  735.   {$EXTERNALSYM NERR_CanNotGrowUASFile}
  736.   NERR_CanNotGrowUASFile   = (NERR_BASE+356);
  737.   // Unable to add to the user accounts database.
  738.   {$EXTERNALSYM NERR_TimeDiffAtDC}
  739.   NERR_TimeDiffAtDC        = (NERR_BASE+357);
  740.   // This server's clock is not synchronized with the primary domain controller's clock.
  741.   {$EXTERNALSYM NERR_PasswordMismatch}
  742.   NERR_PasswordMismatch    = (NERR_BASE+358);
  743.   // A password mismatch has been detected.
  744. // Server Integration error codes.
  745. // NERR_BASE +(360-369)
  746.   {$EXTERNALSYM NERR_NoSuchServer}
  747.   NERR_NoSuchServer        = (NERR_BASE+360);
  748.   // The server identification does not specify a valid server.
  749.   {$EXTERNALSYM NERR_NoSuchSession}
  750.   NERR_NoSuchSession       = (NERR_BASE+361);
  751.   // The session identification does not specify a valid session.
  752.   {$EXTERNALSYM NERR_NoSuchConnection}
  753.   NERR_NoSuchConnection    = (NERR_BASE+362);
  754.   // The connection identification does not specify a valid connection.
  755.   {$EXTERNALSYM NERR_TooManyServers}
  756.   NERR_TooManyServers      = (NERR_BASE+363);
  757.   // There is no space for another entry in the table of available servers.
  758.   {$EXTERNALSYM NERR_TooManySessions}
  759.   NERR_TooManySessions     = (NERR_BASE+364);
  760.   // The server has reached the maximum number of sessions it supports.
  761.   {$EXTERNALSYM NERR_TooManyConnections}
  762.   NERR_TooManyConnections  = (NERR_BASE+365);
  763.   // The server has reached the maximum number of connections it supports.
  764.   {$EXTERNALSYM NERR_TooManyFiles}
  765.   NERR_TooManyFiles        = (NERR_BASE+366);
  766.   // The server cannot open more files because it has reached its maximum number.
  767.   {$EXTERNALSYM NERR_NoAlternateServers}
  768.   NERR_NoAlternateServers  = (NERR_BASE+367);
  769.   // There are no alternate servers registered on this server.
  770.   {$EXTERNALSYM NERR_TryDownLevel}
  771.   NERR_TryDownLevel        = (NERR_BASE+370);
  772.   // Try down-level (remote admin protocol); version of API instead.
  773. // UPS error codes.
  774. // NERR_BASE + (380-384);
  775.   {$EXTERNALSYM NERR_UPSDriverNotStarted}
  776.   NERR_UPSDriverNotStarted     = (NERR_BASE+380);
  777.   // The UPS driver could not be accessed by the UPS service.
  778.   {$EXTERNALSYM NERR_UPSInvalidConfig}
  779.   NERR_UPSInvalidConfig        = (NERR_BASE+381);
  780.   // The UPS service is not configured correctly.
  781.   {$EXTERNALSYM NERR_UPSInvalidCommPort}
  782.   NERR_UPSInvalidCommPort      = (NERR_BASE+382);
  783.   // The UPS service could not access the specified Comm Port.
  784.   {$EXTERNALSYM NERR_UPSSignalAsserted}
  785.   NERR_UPSSignalAsserted       = (NERR_BASE+383);
  786.   // The UPS indicated a line fail or low battery situation. Service not started.
  787.   {$EXTERNALSYM NERR_UPSShutdownFailed}
  788.   NERR_UPSShutdownFailed       = (NERR_BASE+384);
  789.   // The UPS service failed to perform a system shut down.
  790. // Remoteboot error codes.
  791. // NERR_BASE + (400-419);
  792. // Error codes 400 - 405 are used by RPLBOOT.SYS.
  793. // Error codes 403, 407 - 416 are used by RPLLOADR.COM,
  794. // Error code 417 is the alerter message of REMOTEBOOT (RPLSERVR.EXE);.
  795. // Error code 418 is for when REMOTEBOOT can't start
  796. // Error code 419 is for a disallowed 2nd rpl connection
  797.   {$EXTERNALSYM NERR_BadDosRetCode}
  798.   NERR_BadDosRetCode       = (NERR_BASE+400);
  799.   // The program below returned an MS-DOS error code:
  800.   {$EXTERNALSYM NERR_ProgNeedsExtraMem}
  801.   NERR_ProgNeedsExtraMem   = (NERR_BASE+401);
  802.   // The program below needs more memory:
  803.   {$EXTERNALSYM NERR_BadDosFunction}
  804.   NERR_BadDosFunction      = (NERR_BASE+402);
  805.   // The program below called an unsupported MS-DOS function:
  806.   {$EXTERNALSYM NERR_RemoteBootFailed}
  807.   NERR_RemoteBootFailed    = (NERR_BASE+403);
  808.   // The workstation failed to boot.
  809.   {$EXTERNALSYM NERR_BadFileCheckSum}
  810.   NERR_BadFileCheckSum     = (NERR_BASE+404);
  811.   // The file below is corrupt.
  812.   {$EXTERNALSYM NERR_NoRplBootSystem}
  813.   NERR_NoRplBootSystem     = (NERR_BASE+405);
  814.   // No loader is specified in the boot-block definition file.
  815.   {$EXTERNALSYM NERR_RplLoadrNetBiosErr}
  816.   NERR_RplLoadrNetBiosErr  = (NERR_BASE+406);
  817.   // NetBIOS returned an error: The NCB and SMB are dumped above.
  818.   {$EXTERNALSYM NERR_RplLoadrDiskErr}
  819.   NERR_RplLoadrDiskErr     = (NERR_BASE+407);
  820.   // A disk I/O error occurred.
  821.   {$EXTERNALSYM NERR_ImageParamErr}
  822.   NERR_ImageParamErr       = (NERR_BASE+408);
  823.   // Image parameter substitution failed.
  824.   {$EXTERNALSYM NERR_TooManyImageParams}
  825.   NERR_TooManyImageParams  = (NERR_BASE+409);
  826.   // Too many image parameters cross disk sector boundaries.
  827.   {$EXTERNALSYM NERR_NonDosFloppyUsed}
  828.   NERR_NonDosFloppyUsed    = (NERR_BASE+410);
  829.   // The image was not generated from an MS-DOS diskette formatted with /S.
  830.   {$EXTERNALSYM NERR_RplBootRestart}
  831.   NERR_RplBootRestart      = (NERR_BASE+411);
  832.   // Remote boot will be restarted later.
  833.   {$EXTERNALSYM NERR_RplSrvrCallFailed}
  834.   NERR_RplSrvrCallFailed   = (NERR_BASE+412);
  835.   // The call to the Remoteboot server failed.
  836.   {$EXTERNALSYM NERR_CantConnectRplSrvr}
  837.   NERR_CantConnectRplSrvr  = (NERR_BASE+413);
  838.   // Cannot connect to the Remoteboot server.
  839.   {$EXTERNALSYM NERR_CantOpenImageFile}
  840.   NERR_CantOpenImageFile   = (NERR_BASE+414);
  841.   // Cannot open image file on the Remoteboot server.
  842.   {$EXTERNALSYM NERR_CallingRplSrvr}
  843.   NERR_CallingRplSrvr      = (NERR_BASE+415);
  844.   // Connecting to the Remoteboot server...
  845.   {$EXTERNALSYM NERR_StartingRplBoot}
  846.   NERR_StartingRplBoot     = (NERR_BASE+416);
  847.   // Connecting to the Remoteboot server...
  848.   {$EXTERNALSYM NERR_RplBootServiceTerm}
  849.   NERR_RplBootServiceTerm  = (NERR_BASE+417);
  850.   // Remote boot service was stopped; check the error log for the cause of the problem.
  851.   {$EXTERNALSYM NERR_RplBootStartFailed}
  852.   NERR_RplBootStartFailed  = (NERR_BASE+418);
  853.   // Remote boot startup failed; check the error log for the cause of the problem.
  854.   {$EXTERNALSYM NERR_RPL_CONNECTED}
  855.   NERR_RPL_CONNECTED       = (NERR_BASE+419);
  856.   // A second connection to a Remoteboot resource is not allowed.
  857. // FTADMIN API error codes
  858. // NERR_BASE + (425-434)
  859. // (Currently not used in NT);
  860. // Browser service API error codes
  861. // NERR_BASE + (450-475)
  862.   {$EXTERNALSYM NERR_BrowserConfiguredToNotRun}
  863.   NERR_BrowserConfiguredToNotRun      = (NERR_BASE+450);
  864.   // The browser service was configured with MaintainServerList=No.
  865. // Additional Remoteboot error codes.
  866. // NERR_BASE + (510-550);
  867.   {$EXTERNALSYM NERR_RplNoAdaptersStarted}
  868.   NERR_RplNoAdaptersStarted           = (NERR_BASE+510);
  869.   //Service failed to start since none of the network adapters started with this service.
  870.   {$EXTERNALSYM NERR_RplBadRegistry}
  871.   NERR_RplBadRegistry                 = (NERR_BASE+511);
  872.   //Service failed to start due to bad startup information in the registry.
  873.   {$EXTERNALSYM NERR_RplBadDatabase}
  874.   NERR_RplBadDatabase                 = (NERR_BASE+512);
  875.   //Service failed to start because its database is absent or corrupt.
  876.   {$EXTERNALSYM NERR_RplRplfilesShare}
  877.   NERR_RplRplfilesShare               = (NERR_BASE+513);
  878.   //Service failed to start because RPLFILES share is absent.
  879.   {$EXTERNALSYM NERR_RplNotRplServer}
  880.   NERR_RplNotRplServer                = (NERR_BASE+514);
  881.   //Service failed to start because RPLUSER group is absent.
  882.   {$EXTERNALSYM NERR_RplCannotEnum}
  883.   NERR_RplCannotEnum                  = (NERR_BASE+515);
  884.   //Cannot enumerate service records.
  885.   {$EXTERNALSYM NERR_RplWkstaInfoCorrupted}
  886.   NERR_RplWkstaInfoCorrupted          = (NERR_BASE+516);
  887.   //Workstation record information has been corrupted.
  888.   {$EXTERNALSYM NERR_RplWkstaNotFound}
  889.   NERR_RplWkstaNotFound               = (NERR_BASE+517);
  890.   //Workstation record was not found.
  891.   {$EXTERNALSYM NERR_RplWkstaNameUnavailable}
  892.   NERR_RplWkstaNameUnavailable        = (NERR_BASE+518);
  893.   //Workstation name is in use by some other workstation.
  894.   {$EXTERNALSYM NERR_RplProfileInfoCorrupted}
  895.   NERR_RplProfileInfoCorrupted        = (NERR_BASE+519);
  896.   //Profile record information has been corrupted.
  897.   {$EXTERNALSYM NERR_RplProfileNotFound}
  898.   NERR_RplProfileNotFound             = (NERR_BASE+520);
  899.   //Profile record was not found.
  900.   {$EXTERNALSYM NERR_RplProfileNameUnavailable}
  901.   NERR_RplProfileNameUnavailable      = (NERR_BASE+521);
  902.   //Profile name is in use by some other profile.
  903.   {$EXTERNALSYM NERR_RplProfileNotEmpty}
  904.   NERR_RplProfileNotEmpty             = (NERR_BASE+522);
  905.   //There are workstations using this profile.
  906.   {$EXTERNALSYM NERR_RplConfigInfoCorrupted}
  907.   NERR_RplConfigInfoCorrupted         = (NERR_BASE+523);
  908.   //Configuration record information has been corrupted.
  909.   {$EXTERNALSYM NERR_RplConfigNotFound}
  910.   NERR_RplConfigNotFound              = (NERR_BASE+524);
  911.   //Configuration record was not found.
  912.   {$EXTERNALSYM NERR_RplAdapterInfoCorrupted}
  913.   NERR_RplAdapterInfoCorrupted        = (NERR_BASE+525);
  914.   //Adapter id record information has been corrupted.
  915.   {$EXTERNALSYM NERR_RplInternal}
  916.   NERR_RplInternal                    = (NERR_BASE+526);
  917.   //An internal service error has occurred.
  918.   {$EXTERNALSYM NERR_RplVendorInfoCorrupted}
  919.   NERR_RplVendorInfoCorrupted         = (NERR_BASE+527);
  920.   //Vendor id record information has been corrupted.
  921.   {$EXTERNALSYM NERR_RplBootInfoCorrupted}
  922.   NERR_RplBootInfoCorrupted           = (NERR_BASE+528);
  923.   //Boot block record information has been corrupted.
  924.   {$EXTERNALSYM NERR_RplWkstaNeedsUserAcct}
  925.   NERR_RplWkstaNeedsUserAcct          = (NERR_BASE+529);
  926.   //The user account for this workstation record is missing.
  927.   {$EXTERNALSYM NERR_RplNeedsRPLUSERAcct}
  928.   NERR_RplNeedsRPLUSERAcct            = (NERR_BASE+530);
  929.   //The RPLUSER local group could not be found.
  930.   {$EXTERNALSYM NERR_RplBootNotFound}
  931.   NERR_RplBootNotFound                = (NERR_BASE+531);
  932.   //Boot block record was not found.
  933.   {$EXTERNALSYM NERR_RplIncompatibleProfile}
  934.   NERR_RplIncompatibleProfile         = (NERR_BASE+532);
  935.   //Chosen profile is incompatible with this workstation.
  936.   {$EXTERNALSYM NERR_RplAdapterNameUnavailable}
  937.   NERR_RplAdapterNameUnavailable      = (NERR_BASE+533);
  938.   //Chosen network adapter id is in use by some other workstation.
  939.   {$EXTERNALSYM NERR_RplConfigNotEmpty}
  940.   NERR_RplConfigNotEmpty              = (NERR_BASE+534);
  941.   //There are profiles using this configuration.
  942.   {$EXTERNALSYM NERR_RplBootInUse}
  943.   NERR_RplBootInUse                   = (NERR_BASE+535);
  944.   //There are workstations, profiles or configurations using this boot block.
  945.   {$EXTERNALSYM NERR_RplBackupDatabase}
  946.   NERR_RplBackupDatabase              = (NERR_BASE+536);
  947.   //Service failed to backup Remoteboot database.
  948.   {$EXTERNALSYM NERR_RplAdapterNotFound}
  949.   NERR_RplAdapterNotFound             = (NERR_BASE+537);
  950.   //Adapter record was not found.
  951.   {$EXTERNALSYM NERR_RplVendorNotFound}
  952.   NERR_RplVendorNotFound              = (NERR_BASE+538);
  953.   //Vendor record was not found.
  954.   {$EXTERNALSYM NERR_RplVendorNameUnavailable}
  955.   NERR_RplVendorNameUnavailable       = (NERR_BASE+539);
  956.   //Vendor name is in use by some other vendor record.
  957.   {$EXTERNALSYM NERR_RplBootNameUnavailable}
  958.   NERR_RplBootNameUnavailable         = (NERR_BASE+540);
  959.   //(boot name, vendor id); is in use by some other boot block record.
  960.   {$EXTERNALSYM NERR_RplConfigNameUnavailable}
  961.   NERR_RplConfigNameUnavailable       = (NERR_BASE+541);
  962.   //Configuration name is in use by some other configuration.
  963. // **INTERNAL_ONLY**
  964. // Dfs API error codes.
  965. // NERR_BASE + (560-590);
  966.   {$EXTERNALSYM NERR_DfsInternalCorruption}
  967.   NERR_DfsInternalCorruption          = (NERR_BASE+560);
  968.   //The internal database maintained by the Dfs service is corrupt
  969.   {$EXTERNALSYM NERR_DfsVolumeDataCorrupt}
  970.   NERR_DfsVolumeDataCorrupt           = (NERR_BASE+561);
  971.   //One of the records in the internal Dfs database is corrupt
  972.   {$EXTERNALSYM NERR_DfsNoSuchVolume}
  973.   NERR_DfsNoSuchVolume                = (NERR_BASE+562);
  974.   //There is no volume whose entry path matches the input Entry Path
  975.   {$EXTERNALSYM NERR_DfsVolumeAlreadyExists}
  976.   NERR_DfsVolumeAlreadyExists         = (NERR_BASE+563);
  977.   //A volume with the given name already exists
  978.   {$EXTERNALSYM NERR_DfsAlreadyShared}
  979.   NERR_DfsAlreadyShared               = (NERR_BASE+564);
  980.   //The server share specified is already shared in the Dfs
  981.   {$EXTERNALSYM NERR_DfsNoSuchShare}
  982.   NERR_DfsNoSuchShare                 = (NERR_BASE+565);
  983.   //The indicated server share does not support the indicated Dfs volume
  984.   {$EXTERNALSYM NERR_DfsNotALeafVolume}
  985.   NERR_DfsNotALeafVolume              = (NERR_BASE+566);
  986.   //The operation is not valid on a non-leaf volume
  987.   {$EXTERNALSYM NERR_DfsLeafVolume}
  988.   NERR_DfsLeafVolume                  = (NERR_BASE+567);
  989.   //The operation is not valid on a leaf volume
  990.   {$EXTERNALSYM NERR_DfsVolumeHasMultipleServers}
  991.   NERR_DfsVolumeHasMultipleServers    = (NERR_BASE+568);
  992.   //The operation is ambiguous because the volume has multiple servers
  993.   {$EXTERNALSYM NERR_DfsCantCreateJunctionPoint}
  994.   NERR_DfsCantCreateJunctionPoint     = (NERR_BASE+569);
  995.   //Unable to create a junction point
  996.   {$EXTERNALSYM NERR_DfsServerNotDfsAware}
  997.   NERR_DfsServerNotDfsAware           = (NERR_BASE+570);
  998.   //The server is not Dfs Aware
  999.   {$EXTERNALSYM NERR_DfsBadRenamePath}
  1000.   NERR_DfsBadRenamePath               = (NERR_BASE+571);
  1001.   //The specified rename target path is invalid
  1002.   {$EXTERNALSYM NERR_DfsVolumeIsOffline}
  1003.   NERR_DfsVolumeIsOffline             = (NERR_BASE+572);
  1004.   //The specified Dfs volume is offline
  1005.   {$EXTERNALSYM NERR_DfsNoSuchServer}
  1006.   NERR_DfsNoSuchServer                = (NERR_BASE+573);
  1007.   //The specified server is not a server for this volume
  1008.   {$EXTERNALSYM NERR_DfsCyclicalName}
  1009.   NERR_DfsCyclicalName                = (NERR_BASE+574);
  1010.   //A cycle in the Dfs name was detected
  1011.   {$EXTERNALSYM NERR_DfsNotSupportedInServerDfs}
  1012.   NERR_DfsNotSupportedInServerDfs     = (NERR_BASE+575);
  1013.   //The operation is not supported on a server-based Dfs
  1014.   {$EXTERNALSYM NERR_DfsDuplicateService}
  1015.   NERR_DfsDuplicateService            = (NERR_BASE+576);
  1016.   //This volume is already supported by the specified server-share
  1017.   {$EXTERNALSYM NERR_DfsCantRemoveLastServerShare}
  1018.   NERR_DfsCantRemoveLastServerShare   = (NERR_BASE+577);
  1019.   //Can't remove the last server-share supporting this volume
  1020.   {$EXTERNALSYM NERR_DfsVolumeIsInterDfs}
  1021.   NERR_DfsVolumeIsInterDfs            = (NERR_BASE+578);
  1022.   //The operation is not supported for an Inter-Dfs volume
  1023.   {$EXTERNALSYM NERR_DfsInconsistent}
  1024.   NERR_DfsInconsistent                = (NERR_BASE+579);
  1025.   //The internal state of the Dfs Service has become inconsistent
  1026.   {$EXTERNALSYM NERR_DfsServerUpgraded}
  1027.   NERR_DfsServerUpgraded              = (NERR_BASE+580);
  1028.   //The Dfs Service has been installed on the specified server
  1029.   {$EXTERNALSYM NERR_DfsDataIsIdentical}
  1030.   NERR_DfsDataIsIdentical             = (NERR_BASE+581);
  1031.   //The Dfs data being reconciled is identical
  1032.   {$EXTERNALSYM NERR_DfsCantRemoveDfsRoot}
  1033.   NERR_DfsCantRemoveDfsRoot           = (NERR_BASE+582);
  1034.   //The Dfs root volume cannot be deleted - Uninstall Dfs if required
  1035.   {$EXTERNALSYM NERR_DfsChildOrParentInDfs}
  1036.   NERR_DfsChildOrParentInDfs          = (NERR_BASE+583);
  1037.   //A child or parent directory of the share is already in a Dfs
  1038.   {$EXTERNALSYM NERR_DfsInternalError}
  1039.   NERR_DfsInternalError               = (NERR_BASE+590);
  1040.   //Dfs internal error
  1041. // Net setup error codes.
  1042. // NERR_BASE + (591-600);
  1043.   {$EXTERNALSYM NERR_SetupAlreadyJoined}
  1044.   NERR_SetupAlreadyJoined             = (NERR_BASE+591);
  1045.   //This machine is already joined to a domain.
  1046.   {$EXTERNALSYM NERR_SetupNotJoined}
  1047.   NERR_SetupNotJoined                 = (NERR_BASE+592);
  1048.   //This machine is not currently joined to a domain.
  1049.   {$EXTERNALSYM NERR_SetupDomainController}
  1050.   NERR_SetupDomainController          = (NERR_BASE+593);
  1051.   //This machine is a domain controller and cannot be unjoined from a domain.
  1052.   {$EXTERNALSYM NERR_DefaultJoinRequired}
  1053.   NERR_DefaultJoinRequired            = (NERR_BASE+594);
  1054.   //*The destination domain controller does not support creating machine accounts in OUs.
  1055.   {$EXTERNALSYM NERR_InvalidWorkgroupName}
  1056.   NERR_InvalidWorkgroupName           = (NERR_BASE+595);
  1057.   //*The specified workgroup name is invalid
  1058.   {$EXTERNALSYM NERR_NameUsesIncompatibleCodePage}
  1059.   NERR_NameUsesIncompatibleCodePage   = (NERR_BASE+596);
  1060.   //*The specified computer name is incompatible with the default language used on the domain controller.
  1061.   {$EXTERNALSYM NERR_ComputerAccountNotFound}
  1062.   NERR_ComputerAccountNotFound        = (NERR_BASE+597);
  1063.   //*The specified computer account could not be found.
  1064. // ***********WARNING ****************
  1065. // *The range 2750-2799 has been     *
  1066. // *allocated to the IBM LAN Server  *
  1067. // ***********************************
  1068. // ***********WARNING ****************
  1069. // *The range 2900-2999 has been     *
  1070. // *reserved for Microsoft OEMs      *
  1071. // ***********************************
  1072. // **END_INTERNAL**
  1073.   {$EXTERNALSYM MAX_NERR}
  1074.   MAX_NERR                 = (NERR_BASE+899);
  1075.   // This is the last error in NERR range.
  1076. // Translated from LMCONS.H
  1077. // String Lengths for various LanMan names
  1078. const
  1079.   {$EXTERNALSYM CNLEN}
  1080.   CNLEN = 15;                           // Computer name length
  1081.   {$EXTERNALSYM LM20_CNLEN}
  1082.   LM20_CNLEN = 15;                      // LM 2.0 Computer name length
  1083.   {$EXTERNALSYM DNLEN}
  1084.   DNLEN = CNLEN;                        // Maximum domain name length
  1085.   {$EXTERNALSYM LM20_DNLEN}
  1086.   LM20_DNLEN = LM20_CNLEN;              // LM 2.0 Maximum domain name length
  1087.   {$EXTERNALSYM UNCLEN}
  1088.   UNCLEN = (CNLEN+2);                   // UNC computer name length
  1089.   {$EXTERNALSYM LM20_UNCLEN}
  1090.   LM20_UNCLEN = (LM20_CNLEN+2);         // LM 2.0 UNC computer name length
  1091.   {$EXTERNALSYM NNLEN}
  1092.   NNLEN = 80;                           // Net name length (share name)
  1093.   {$EXTERNALSYM LM20_NNLEN}
  1094.   LM20_NNLEN = 12;                      // LM 2.0 Net name length
  1095.   {$EXTERNALSYM RMLEN}
  1096.   RMLEN = (UNCLEN+1+NNLEN);             // Max remote name length
  1097.   {$EXTERNALSYM LM20_RMLEN}
  1098.   LM20_RMLEN  = (LM20_UNCLEN+1+LM20_NNLEN); // LM 2.0 Max remote name length
  1099.   {$EXTERNALSYM SNLEN}
  1100.   SNLEN = 80;                           // Service name length
  1101.   {$EXTERNALSYM LM20_SNLEN}
  1102.   LM20_SNLEN = 15;                      // LM 2.0 Service name length
  1103.   {$EXTERNALSYM STXTLEN}
  1104.   STXTLEN = 256;                        // Service text length
  1105.   {$EXTERNALSYM LM20_STXTLEN}
  1106.   LM20_STXTLEN = 63;                    // LM 2.0 Service text length
  1107.   {$EXTERNALSYM PATHLEN}
  1108.   PATHLEN = 256;                        // Max. path (not including drive name)
  1109.   {$EXTERNALSYM LM20_PATHLEN}
  1110.   LM20_PATHLEN = 256;                   // LM 2.0 Max. path
  1111.   {$EXTERNALSYM DEVLEN}
  1112.   DEVLEN = 80;                          // Device name length
  1113.   {$EXTERNALSYM LM20_DEVLEN}
  1114.   LM20_DEVLEN = 8;                      // LM 2.0 Device name length
  1115.   {$EXTERNALSYM EVLEN}
  1116.   EVLEN = 16;                           // Event name length
  1117. // User, Group and Password lengths
  1118.   {$EXTERNALSYM UNLEN}
  1119.   UNLEN = 256;                          // Maximum user name length
  1120.   {$EXTERNALSYM LM20_UNLEN}
  1121.   LM20_UNLEN = 20;                      // LM 2.0 Maximum user name length
  1122.   {$EXTERNALSYM GNLEN}
  1123.   GNLEN = UNLEN;                        // Group name
  1124.   {$EXTERNALSYM LM20_GNLEN}
  1125.   LM20_GNLEN = LM20_UNLEN;              // LM 2.0 Group name
  1126.   {$EXTERNALSYM PWLEN}
  1127.   PWLEN = 256;                          // Maximum password length
  1128.   {$EXTERNALSYM LM20_PWLEN}
  1129.   LM20_PWLEN = 14;                      // LM 2.0 Maximum password length
  1130.   {$EXTERNALSYM SHPWLEN}
  1131.   SHPWLEN = 8;                          // Share password length (bytes)
  1132.   {$EXTERNALSYM CLTYPE_LEN}
  1133.   CLTYPE_LEN = 12;                      // Length of client type string
  1134.   {$EXTERNALSYM MAXCOMMENTSZ}
  1135.   MAXCOMMENTSZ = 256;                   // Multipurpose comment length
  1136.   {$EXTERNALSYM LM20_MAXCOMMENTSZ}
  1137.   LM20_MAXCOMMENTSZ = 48;               // LM 2.0 Multipurpose comment length
  1138.   {$EXTERNALSYM QNLEN}
  1139.   QNLEN = NNLEN;                        // Queue name maximum length
  1140.   {$EXTERNALSYM LM20_QNLEN}
  1141.   LM20_QNLEN = LM20_NNLEN;              // LM 2.0 Queue name maximum length
  1142. // The ALERTSZ and MAXDEVENTRIES defines have not yet been NT'ized.
  1143. // Whoever ports these components should change these values appropriately.
  1144.   {$EXTERNALSYM ALERTSZ}
  1145.   ALERTSZ = 128;                        // size of alert string in server
  1146.   {$EXTERNALSYM MAXDEVENTRIES}
  1147.   MAXDEVENTRIES = (Sizeof(Integer)*8);  // Max number of device entries
  1148.                                         //
  1149.                                         // We use int bitmap to represent
  1150.                                         //
  1151.   {$EXTERNALSYM NETBIOS_NAME_LEN}
  1152.   NETBIOS_NAME_LEN = 16;                // NetBIOS net name (bytes)
  1153. // Value to be used with APIs which have a "preferred maximum length"
  1154. // parameter.  This value indicates that the API should just allocate
  1155. // "as much as it takes."
  1156.   {$EXTERNALSYM MAX_PREFERRED_LENGTH}
  1157.   MAX_PREFERRED_LENGTH = DWORD(-1);
  1158. //        Constants used with encryption
  1159.   {$EXTERNALSYM CRYPT_KEY_LEN}
  1160.   CRYPT_KEY_LEN = 7;
  1161.   {$EXTERNALSYM CRYPT_TXT_LEN}
  1162.   CRYPT_TXT_LEN = 8;
  1163.   {$EXTERNALSYM ENCRYPTED_PWLEN}
  1164.   ENCRYPTED_PWLEN = 16;
  1165.   {$EXTERNALSYM SESSION_PWLEN}
  1166.   SESSION_PWLEN = 24;
  1167.   {$EXTERNALSYM SESSION_CRYPT_KLEN}
  1168.   SESSION_CRYPT_KLEN = 21;
  1169. //  Value to be used with SetInfo calls to allow setting of all
  1170. //  settable parameters (parmnum zero option)
  1171.   {$EXTERNALSYM PARMNUM_ALL}
  1172.   PARMNUM_ALL = 0;
  1173.   {$EXTERNALSYM PARM_ERROR_UNKNOWN}
  1174.   PARM_ERROR_UNKNOWN = DWORD(-1);
  1175.   {$EXTERNALSYM PARM_ERROR_NONE}
  1176.   PARM_ERROR_NONE = 0;
  1177.   {$EXTERNALSYM PARMNUM_BASE_INFOLEVEL}
  1178.   PARMNUM_BASE_INFOLEVEL = 1000;
  1179. //        Message File Names
  1180.   {$EXTERNALSYM MESSAGE_FILENAME}
  1181.   MESSAGE_FILENAME = 'NETMSG';
  1182.   {$EXTERNALSYM OS2MSG_FILENAME}
  1183.   OS2MSG_FILENAME = 'BASE';
  1184.   {$EXTERNALSYM HELP_MSG_FILENAME}
  1185.   HELP_MSG_FILENAME = 'NETH';
  1186. //**INTERNAL_ONLY**/
  1187. // The backup message file named here is a duplicate of net.msg. It
  1188. // is not shipped with the product, but is used at buildtime to
  1189. // msgbind certain messages to netapi.dll and some of the services.
  1190. // This allows for OEMs to modify the message text in net.msg and
  1191. // have those changes show up.        Only in case there is an error in
  1192. // retrieving the messages from net.msg do we then get the bound
  1193. // messages out of bak.msg (really out of the message segment).
  1194.   {$EXTERNALSYM BACKUP_MSG_FILENAME}
  1195.   BACKUP_MSG_FILENAME = 'BAK.MSG';
  1196. //**END_INTERNAL**/
  1197. // Keywords used in Function Prototypes
  1198. type
  1199.   {$EXTERNALSYM NET_API_STATUS}
  1200.   NET_API_STATUS = DWORD;
  1201.   {$EXTERNALSYM API_RET_TYPE}
  1202.   API_RET_TYPE = NET_API_STATUS;        // Old value: do not use
  1203. // The platform ID indicates the levels to use for platform-specific
  1204. // information.
  1205. const
  1206.   {$EXTERNALSYM PLATFORM_ID_DOS}
  1207.   PLATFORM_ID_DOS = 300;
  1208.   {$EXTERNALSYM PLATFORM_ID_OS2}
  1209.   PLATFORM_ID_OS2 = 400;
  1210.   {$EXTERNALSYM PLATFORM_ID_NT}
  1211.   PLATFORM_ID_NT = 500;
  1212.   {$EXTERNALSYM PLATFORM_ID_OSF}
  1213.   PLATFORM_ID_OSF = 600;
  1214.   {$EXTERNALSYM PLATFORM_ID_VMS}
  1215.   PLATFORM_ID_VMS = 700;
  1216. //      There message numbers assigned to different LANMAN components
  1217. //      are as defined below.
  1218. //
  1219. //      lmerr.h:        2100 - 2999     NERR_BASE
  1220. //      alertmsg.h:     3000 - 3049     ALERT_BASE
  1221. //      lmsvc.h:        3050 - 3099     SERVICE_BASE
  1222. //      lmerrlog.h:     3100 - 3299     ERRLOG_BASE
  1223. //      msgtext.h:      3300 - 3499     MTXT_BASE
  1224. //      apperr.h:       3500 - 3999     APPERR_BASE
  1225. //      apperrfs.h:     4000 - 4299     APPERRFS_BASE
  1226. //      apperr2.h:      4300 - 5299     APPERR2_BASE
  1227. //      ncberr.h:       5300 - 5499     NRCERR_BASE
  1228. //      alertmsg.h:     5500 - 5599     ALERT2_BASE
  1229. //      lmsvc.h:        5600 - 5699     SERVICE2_BASE
  1230. //      lmerrlog.h      5700 - 5799     ERRLOG2_BASE
  1231.   {$EXTERNALSYM MIN_LANMAN_MESSAGE_ID}
  1232.   MIN_LANMAN_MESSAGE_ID = NERR_BASE;
  1233.   {$EXTERNALSYM MAX_LANMAN_MESSAGE_ID}
  1234.   MAX_LANMAN_MESSAGE_ID = 5799;
  1235. // Translated from LMACCESS.H
  1236. // User Class
  1237. // Function Prototypes - User
  1238. {$EXTERNALSYM NetUserAdd}
  1239. function NetUserAdd(servername: LPCWSTR; level: DWORD; buf: Pointer;
  1240.   parm_err: PDWORD): NET_API_STATUS; stdcall;
  1241. {$EXTERNALSYM NetUserEnum}
  1242. function NetUserEnum(servername: LPCWSTR; level: DWORD; filter: DWORD;
  1243.   var bufptr: Pointer; prefmaxlen: DWORD; var entriesread: DWORD;
  1244.   var totalentries: DWORD; resume_handle: PDWORD): NET_API_STATUS; stdcall;
  1245. {$EXTERNALSYM NetUserGetInfo}
  1246. function NetUserGetInfo(servername: LPCWSTR; username: LPCWSTR; level: DWORD;
  1247.   var bufptr: Pointer): NET_API_STATUS; stdcall;
  1248. {$EXTERNALSYM NetUserSetInfo}
  1249. function NetUserSetInfo(servername: LPCWSTR; username: LPCWSTR; level: DWORD;
  1250.   buf: Pointer; parm_err: PDWORD): NET_API_STATUS; stdcall;
  1251. {$EXTERNALSYM NetUserDel}
  1252. function NetUserDel(servername: LPCWSTR; username: LPCWSTR): NET_API_STATUS; stdcall;
  1253. {$EXTERNALSYM NetUserGetGroups}
  1254. function NetUserGetGroups(servername: LPCWSTR; username: LPCWSTR; level: DWORD;
  1255.   var bufptr: Pointer; prefmaxlen: DWORD; var entriesread: DWORD;
  1256.   var totalentries: DWORD): NET_API_STATUS; stdcall;
  1257. {$EXTERNALSYM NetUserSetGroups}
  1258. function NetUserSetGroups(servername: LPCWSTR; username: LPCWSTR; level: DWORD;
  1259.   buf: Pointer; num_entries: DWORD): NET_API_STATUS; stdcall;
  1260. {$EXTERNALSYM NetUserGetLocalGroups}
  1261. function NetUserGetLocalGroups(servername: LPCWSTR; username: LPCWSTR;
  1262.   level: DWORD; flags: DWORD; var bufptr: Pointer; prefmaxlen: DWORD;
  1263.   var entriesread: DWORD; var totalentries: DWORD): NET_API_STATUS; stdcall;
  1264. {$EXTERNALSYM NetUserModalsGet}
  1265. function NetUserModalsGet(servername: LPCWSTR; level: DWORD;
  1266.   var bufptr: Pointer): NET_API_STATUS; stdcall;
  1267. {$EXTERNALSYM NetUserModalsSet}
  1268. function NetUserModalsSet(servername: LPCWSTR; level: DWORD; buf: Pointer;
  1269.   parm_err: PDWORD): NET_API_STATUS; stdcall;
  1270. {$EXTERNALSYM NetUserChangePassword}
  1271. function NetUserChangePassword(domainname, username, oldpassword,
  1272.   newpassword: LPCWSTR): NET_API_STATUS; stdcall;
  1273. //  Data Structures - User
  1274. type
  1275.   PUserInfo0 = ^TUserInfo0;
  1276.   {$EXTERNALSYM _USER_INFO_0}
  1277.   _USER_INFO_0  = record
  1278.     usri0_name: LPWSTR;
  1279.   end;
  1280.   TUserInfo0 = _USER_INFO_0;
  1281.   {$EXTERNALSYM USER_INFO_0}
  1282.   USER_INFO_0 = _USER_INFO_0;
  1283.   PUserInfo1 = ^TUserInfo1;
  1284.   {$EXTERNALSYM _USER_INFO_1}
  1285.   _USER_INFO_1 = record
  1286.     usri1_name: LPWSTR;
  1287.     usri1_password: LPWSTR;
  1288.     usri1_password_age: DWORD;
  1289.     usri1_priv: DWORD;
  1290.     usri1_home_dir: LPWSTR;
  1291.     usri1_comment: LPWSTR;
  1292.     usri1_flags: DWORD;
  1293.     usri1_script_path: LPWSTR;
  1294.   end;
  1295.   TUserInfo1 = _USER_INFO_1;
  1296.   {$EXTERNALSYM USER_INFO_1}
  1297.   USER_INFO_1 = _USER_INFO_1;
  1298.   PUserInfo2 = ^TUserInfo2;
  1299.   {$EXTERNALSYM _USER_INFO_2}
  1300.   _USER_INFO_2 = record
  1301.     usri2_name: LPWSTR;
  1302.     usri2_password: LPWSTR;
  1303.     usri2_password_age: DWORD;
  1304.     usri2_priv: DWORD;
  1305.     usri2_home_dir: LPWSTR;
  1306.     usri2_comment: LPWSTR;
  1307.     usri2_flags: DWORD;
  1308.     usri2_script_path: LPWSTR;
  1309.     usri2_auth_flags: DWORD;
  1310.     usri2_full_name: LPWSTR;
  1311.     usri2_usr_comment: LPWSTR;
  1312.     usri2_parms: LPWSTR;
  1313.     usri2_workstations: LPWSTR;
  1314.     usri2_last_logon: DWORD;
  1315.     usri2_last_logoff: DWORD;
  1316.     usri2_acct_expires: DWORD;
  1317.     usri2_max_storage: DWORD;
  1318.     usri2_units_per_week: DWORD;
  1319.     usri2_logon_hours: PBYTE;
  1320.     usri2_bad_pw_count: DWORD;
  1321.     usri2_num_logons: DWORD;
  1322.     usri2_logon_server: LPWSTR;
  1323.     usri2_country_code: DWORD;
  1324.     usri2_code_page: DWORD;
  1325.   end;
  1326.   TUserInfo2 = _USER_INFO_2;
  1327.   {$EXTERNALSYM USER_INFO_2}
  1328.   USER_INFO_2 = _USER_INFO_2;
  1329.   PUserInfo3 = ^TUserInfo3;
  1330.   {$EXTERNALSYM _USER_INFO_3}
  1331.   _USER_INFO_3 = record
  1332.     usri3_name: LPWSTR;
  1333.     usri3_password: LPWSTR;
  1334.     usri3_password_age: DWORD;
  1335.     usri3_priv: DWORD;
  1336.     usri3_home_dir: LPWSTR;
  1337.     usri3_comment: LPWSTR;
  1338.     usri3_flags: DWORD;
  1339.     usri3_script_path: LPWSTR;
  1340.     usri3_auth_flags: DWORD;
  1341.     usri3_full_name: LPWSTR;
  1342.     usri3_usr_comment: LPWSTR;
  1343.     usri3_parms: LPWSTR;
  1344.     usri3_workstations: LPWSTR;
  1345.     usri3_last_logon: DWORD;
  1346.     usri3_last_logoff: DWORD;
  1347.     usri3_acct_expires: DWORD;
  1348.     usri3_max_storage: DWORD;
  1349.     usri3_units_per_week: DWORD;
  1350.     usri3_logon_hours: PBYTE;
  1351.     usri3_bad_pw_count: DWORD;
  1352.     usri3_num_logons: DWORD;
  1353.     usri3_logon_server: LPWSTR;
  1354.     usri3_country_code: DWORD;
  1355.     usri3_code_page: DWORD;
  1356.     usri3_user_id: DWORD;
  1357.     usri3_primary_group_id: DWORD;
  1358.     usri3_profile: LPWSTR;
  1359.     usri3_home_dir_drive: LPWSTR;
  1360.     usri3_password_expired: DWORD;
  1361.   end;
  1362.   TUserInfo3 = _USER_INFO_3;
  1363.   {$EXTERNALSYM USER_INFO_3}
  1364.   USER_INFO_3 = _USER_INFO_3;
  1365.   PUserInfo10 = ^TUserInfo10;
  1366.   {$EXTERNALSYM _USER_INFO_10}
  1367.   _USER_INFO_10 = record
  1368.     usri10_name: LPWSTR;
  1369.     usri10_comment: LPWSTR;
  1370.     usri10_usr_comment: LPWSTR;
  1371.     usri10_full_name: LPWSTR;
  1372.   end;
  1373.   TUserInfo10 = _USER_INFO_10;
  1374.   {$EXTERNALSYM USER_INFO_10}
  1375.   USER_INFO_10 = _USER_INFO_10;
  1376.   PUserInfo11 = ^TUserInfo11;
  1377.   {$EXTERNALSYM _USER_INFO_11}
  1378.   _USER_INFO_11 = record
  1379.     usri11_name: LPWSTR;
  1380.     usri11_comment: LPWSTR;
  1381.     usri11_usr_comment: LPWSTR;
  1382.     usri11_full_name: LPWSTR;
  1383.     usri11_priv: DWORD;
  1384.     usri11_auth_flags: DWORD;
  1385.     usri11_password_age: DWORD;
  1386.     usri11_home_dir: LPWSTR;
  1387.     usri11_parms: LPWSTR;
  1388.     usri11_last_logon: DWORD;
  1389.     usri11_last_logoff: DWORD;
  1390.     usri11_bad_pw_count: DWORD;
  1391.     usri11_num_logons: DWORD;
  1392.     usri11_logon_server: LPWSTR;
  1393.     usri11_country_code: DWORD;
  1394.     usri11_workstations: LPWSTR;
  1395.     usri11_max_storage: DWORD;
  1396.     usri11_units_per_week: DWORD;
  1397.     usri11_logon_hours: PBYTE;
  1398.     usri11_code_page: DWORD;
  1399.   end;
  1400.   TUserInfo11 = _USER_INFO_11;
  1401.   {$EXTERNALSYM USER_INFO_11}
  1402.   USER_INFO_11 = _USER_INFO_11;
  1403.   PUserInfo20 = ^TUserInfo20;
  1404.   {$EXTERNALSYM _USER_INFO_20}
  1405.   _USER_INFO_20 = record
  1406.     usri20_name: LPWSTR;
  1407.     usri20_full_name: LPWSTR;
  1408.     usri20_comment: LPWSTR;
  1409.     usri20_flags: DWORD;
  1410.     usri20_user_id: DWORD;
  1411.   end;
  1412.   TUserInfo20 = _USER_INFO_20;
  1413.   {$EXTERNALSYM USER_INFO_20}
  1414.   USER_INFO_20 = _USER_INFO_20;
  1415.   PUserInfo21 = ^TUserInfo21;
  1416.   {$EXTERNALSYM _USER_INFO_21}
  1417.   _USER_INFO_21 = record
  1418.     usri21_password: array[0..ENCRYPTED_PWLEN-1] of Byte;
  1419.   end;
  1420.   TUserInfo21 = _USER_INFO_21;
  1421.   {$EXTERNALSYM USER_INFO_21}
  1422.   USER_INFO_21 = _USER_INFO_21;
  1423.   PUserInfo22 = ^TUserInfo22;
  1424.   {$EXTERNALSYM _USER_INFO_22}
  1425.   _USER_INFO_22 = record
  1426.     usri22_name: LPWSTR;
  1427.     usri22_password: array[0..ENCRYPTED_PWLEN-1] of Byte;
  1428.     usri22_password_age: DWORD;
  1429.     usri22_priv: DWORD;
  1430.     usri22_home_dir: LPWSTR;
  1431.     usri22_comment: LPWSTR;
  1432.     usri22_flags: DWORD;
  1433.     usri22_script_path: LPWSTR;
  1434.     usri22_auth_flags: DWORD;
  1435.     usri22_full_name: LPWSTR;
  1436.     usri22_usr_comment: LPWSTR;
  1437.     usri22_parms: LPWSTR;
  1438.     usri22_workstations: LPWSTR;
  1439.     usri22_last_logon: DWORD;
  1440.     usri22_last_logoff: DWORD;
  1441.     usri22_acct_expires: DWORD;
  1442.     usri22_max_storage: DWORD;
  1443.     usri22_units_per_week: DWORD;
  1444.     usri22_logon_hours: PBYTE;
  1445.     usri22_bad_pw_count: DWORD;
  1446.     usri22_num_logons: DWORD;
  1447.     usri22_logon_server: LPWSTR;
  1448.     usri22_country_code: DWORD;
  1449.     usri22_code_page: DWORD;
  1450.   end;
  1451.   TUserInfo22 = _USER_INFO_22;
  1452.   {$EXTERNALSYM USER_INFO_22}
  1453.   USER_INFO_22 = _USER_INFO_22;
  1454.   PUserInfo1003 = ^TUserInfo1003;
  1455.   {$EXTERNALSYM _USER_INFO_1003}
  1456.   _USER_INFO_1003 = record
  1457.     usri1003_password: LPWSTR;
  1458.   end;
  1459.   TUserInfo1003 = _USER_INFO_1003;
  1460.   {$EXTERNALSYM USER_INFO_1003}
  1461.   USER_INFO_1003 = _USER_INFO_1003;
  1462.   PUserInfo1005 = ^TUserInfo1005;
  1463.   {$EXTERNALSYM _USER_INFO_1005}
  1464.   _USER_INFO_1005 = record
  1465.     usri1005_priv: DWORD;
  1466.   end;
  1467.   TUserInfo1005 = _USER_INFO_1005;
  1468.   {$EXTERNALSYM USER_INFO_1005}
  1469.   USER_INFO_1005 = _USER_INFO_1005;
  1470.   PUserInfo1006 = ^TUserInfo1006;
  1471.   {$EXTERNALSYM _USER_INFO_1006}
  1472.   _USER_INFO_1006 = record
  1473.     usri1006_home_dir: LPWSTR;
  1474.   end;
  1475.   TUserInfo1006 = _USER_INFO_1006;
  1476.   {$EXTERNALSYM USER_INFO_1006}
  1477.   USER_INFO_1006 = _USER_INFO_1006;
  1478.   PUserInfo1007 = ^TUserInfo1007;
  1479.   {$EXTERNALSYM _USER_INFO_1007}
  1480.   _USER_INFO_1007 = record
  1481.     usri1007_comment: LPWSTR;
  1482.   end;
  1483.   TUserInfo1007 = _USER_INFO_1007;
  1484.   {$EXTERNALSYM USER_INFO_1007}
  1485.   USER_INFO_1007 = _USER_INFO_1007;
  1486.   PUserInfo1008 = ^TUserInfo1008;
  1487.   {$EXTERNALSYM _USER_INFO_1008}
  1488.   _USER_INFO_1008 = record
  1489.     usri1008_flags: DWORD;
  1490.   end;
  1491.   TUserInfo1008 = _USER_INFO_1008;
  1492.   {$EXTERNALSYM USER_INFO_1008}
  1493.   USER_INFO_1008 = _USER_INFO_1008;
  1494.   PUserInfo1009 = ^TUserInfo1009;
  1495.   {$EXTERNALSYM _USER_INFO_1009}
  1496.   _USER_INFO_1009 = record
  1497.     usri1009_script_path: LPWSTR;
  1498.   end;
  1499.   TUserInfo1009 = _USER_INFO_1009;
  1500.   {$EXTERNALSYM USER_INFO_1009}
  1501.   USER_INFO_1009 = _USER_INFO_1009;
  1502.   PUserInfo1010 = ^TUserInfo1010;
  1503.   {$EXTERNALSYM _USER_INFO_1010}
  1504.   _USER_INFO_1010 = record
  1505.     usri1010_auth_flags: DWORD;
  1506.   end;
  1507.   TUserInfo1010 = _USER_INFO_1010;
  1508.   {$EXTERNALSYM USER_INFO_1010}
  1509.   USER_INFO_1010 = _USER_INFO_1010;
  1510.   PUserInfo1011 = ^TUserInfo1011;
  1511.   {$EXTERNALSYM _USER_INFO_1011}
  1512.   _USER_INFO_1011 = record
  1513.     usri1011_full_name: LPWSTR;
  1514.   end;
  1515.   TUserInfo1011 = _USER_INFO_1011;
  1516.   {$EXTERNALSYM USER_INFO_1011}
  1517.   USER_INFO_1011 = _USER_INFO_1011;
  1518.   PUserInfo1012 = ^TUserInfo1012;
  1519.   {$EXTERNALSYM _USER_INFO_1012}
  1520.   _USER_INFO_1012 = record
  1521.     usri1012_usr_comment: LPWSTR;
  1522.   end;
  1523.   TUserInfo1012 = _USER_INFO_1012;
  1524.   {$EXTERNALSYM USER_INFO_1012}
  1525.   USER_INFO_1012 = _USER_INFO_1012;
  1526.   PUserInfo1013 = ^TUserInfo1013;
  1527.   {$EXTERNALSYM _USER_INFO_1013}
  1528.   _USER_INFO_1013 = record
  1529.     usri1013_parms: LPWSTR;
  1530.   end;
  1531.   TUserInfo1013 = _USER_INFO_1013;
  1532.   {$EXTERNALSYM USER_INFO_1013}
  1533.   USER_INFO_1013 = _USER_INFO_1013;
  1534.   PUserInfo1014 = ^TUserInfo1014;
  1535.   {$EXTERNALSYM _USER_INFO_1014}
  1536.   _USER_INFO_1014 = record
  1537.     usri1014_workstations: LPWSTR;
  1538.   end;
  1539.   TUserInfo1014 = _USER_INFO_1014;
  1540.   {$EXTERNALSYM USER_INFO_1014}
  1541.   USER_INFO_1014 = _USER_INFO_1014;
  1542.   PUserInfo1017 = ^TUserInfo1017;
  1543.   {$EXTERNALSYM _USER_INFO_1017}
  1544.   _USER_INFO_1017 = record
  1545.     usri1017_acct_expires: DWORD;
  1546.   end;
  1547.   TUserInfo1017 = _USER_INFO_1017;
  1548.   {$EXTERNALSYM USER_INFO_1017}
  1549.   USER_INFO_1017 = _USER_INFO_1017;
  1550.   PUserInfo1018 = ^TUserInfo1018;
  1551.   {$EXTERNALSYM _USER_INFO_1018}
  1552.   _USER_INFO_1018 = record
  1553.     usri1018_max_storage: DWORD;
  1554.   end;
  1555.   TUserInfo1018 = _USER_INFO_1018;
  1556.   {$EXTERNALSYM USER_INFO_1018}
  1557.   USER_INFO_1018 = _USER_INFO_1018;
  1558.   PUserInfo1020 = ^TUserInfo1020;
  1559.   {$EXTERNALSYM _USER_INFO_1020}
  1560.   _USER_INFO_1020 = record
  1561.     usri1020_units_per_week: DWORD;
  1562.     usri1020_logon_hours: Pointer;
  1563.   end;
  1564.   TUserInfo1020 = _USER_INFO_1020;
  1565.   {$EXTERNALSYM USER_INFO_1020}
  1566.   USER_INFO_1020 = _USER_INFO_1020;
  1567.   PUserInfo1023 = ^TUserInfo1023;
  1568.   {$EXTERNALSYM _USER_INFO_1023}
  1569.   _USER_INFO_1023 = record
  1570.     usri1023_logon_server: LPWSTR;
  1571.   end;
  1572.   TUserInfo1023 = _USER_INFO_1023;
  1573.   {$EXTERNALSYM USER_INFO_1023}
  1574.   USER_INFO_1023 = _USER_INFO_1023;
  1575.   PUserInfo1024 = ^TUserInfo1024;
  1576.   {$EXTERNALSYM _USER_INFO_1024}
  1577.   _USER_INFO_1024 = record
  1578.     usri1024_country_code: DWORD;
  1579.   end;
  1580.   TUserInfo1024 = _USER_INFO_1024;
  1581.   {$EXTERNALSYM USER_INFO_1024}
  1582.   USER_INFO_1024 = _USER_INFO_1024;
  1583.   PUserInfo1025 = ^TUserInfo1025;
  1584.   {$EXTERNALSYM _USER_INFO_1025}
  1585.   _USER_INFO_1025 = record
  1586.     usri1025_code_page: DWORD;
  1587.   end;
  1588.   TUserInfo1025 = _USER_INFO_1025;
  1589.   {$EXTERNALSYM USER_INFO_1025}
  1590.   USER_INFO_1025 = _USER_INFO_1025;
  1591.   PUserInfo1051 = ^TUserInfo1051;
  1592.   {$EXTERNALSYM _USER_INFO_1051}
  1593.   _USER_INFO_1051 = record
  1594.     usri1051_primary_group_id: DWORD;
  1595.   end;
  1596.   TUserInfo1051 = _USER_INFO_1051;
  1597.   {$EXTERNALSYM USER_INFO_1051}
  1598.   USER_INFO_1051 = _USER_INFO_1051;
  1599.   PUserInfo1052 = ^TUserInfo1052;
  1600.   {$EXTERNALSYM _USER_INFO_1052}
  1601.   _USER_INFO_1052 = record
  1602.     usri1052_profile: LPWSTR;
  1603.   end;
  1604.   TUserInfo1052 = _USER_INFO_1052;
  1605.   {$EXTERNALSYM USER_INFO_1052}
  1606.   USER_INFO_1052 = _USER_INFO_1052;
  1607.   PUserInfo1053 = ^TUserInfo1053;
  1608.   {$EXTERNALSYM _USER_INFO_1053}
  1609.   _USER_INFO_1053 = record
  1610.     usri1053_home_dir_drive: LPWSTR;
  1611.   end;
  1612.   TUserInfo1053 = _USER_INFO_1053;
  1613.   {$EXTERNALSYM USER_INFO_1053}
  1614.   USER_INFO_1053 = _USER_INFO_1053;
  1615. //  Data Structures - User Modals
  1616.   PUserModalsInfo0 = ^TUserModalsInfo0;
  1617.   {$EXTERNALSYM _USER_MODALS_INFO_0}
  1618.   _USER_MODALS_INFO_0 = record
  1619.     usrmod0_min_passwd_len: DWORD;
  1620.     usrmod0_max_passwd_age: DWORD;
  1621.     usrmod0_min_passwd_age: DWORD;
  1622.     usrmod0_force_logoff: DWORD;
  1623.     usrmod0_password_hist_len: DWORD;
  1624.   end;
  1625.   TUserModalsInfo0 = _USER_MODALS_INFO_0;
  1626.   {$EXTERNALSYM USER_MODALS_INFO_0}
  1627.   USER_MODALS_INFO_0 = _USER_MODALS_INFO_0;
  1628.   PUserModalsInfo1 = ^TUserModalsInfo1;
  1629.   {$EXTERNALSYM _USER_MODALS_INFO_1}
  1630.   _USER_MODALS_INFO_1 = record
  1631.     usrmod1_role: DWORD;
  1632.     usrmod1_primary: LPWSTR;
  1633.   end;
  1634.   TUserModalsInfo1 = _USER_MODALS_INFO_1;
  1635.   {$EXTERNALSYM USER_MODALS_INFO_1}
  1636.   USER_MODALS_INFO_1 = _USER_MODALS_INFO_1;
  1637.   PUserModalsInfo2 = ^TUserModalsInfo2;
  1638.   {$EXTERNALSYM _USER_MODALS_INFO_2}
  1639.   _USER_MODALS_INFO_2 = record
  1640.     usrmod2_domain_name: LPWSTR;
  1641.     usrmod2_domain_id: PSID;
  1642.   end;
  1643.   TUserModalsInfo2 = _USER_MODALS_INFO_2;
  1644.   {$EXTERNALSYM USER_MODALS_INFO_2}
  1645.   USER_MODALS_INFO_2 = _USER_MODALS_INFO_2;
  1646.   PUserModalsInfo3 = ^TUserModalsInfo3;
  1647.   {$EXTERNALSYM _USER_MODALS_INFO_3}
  1648.   _USER_MODALS_INFO_3 = record
  1649.     usrmod3_lockout_duration: DWORD;
  1650.     usrmod3_lockout_observation_window: DWORD;
  1651.     usrmod3_lockout_threshold: DWORD;
  1652.   end;
  1653.   TUserModalsInfo3 = _USER_MODALS_INFO_3;
  1654.   {$EXTERNALSYM USER_MODALS_INFO_3}
  1655.   USER_MODALS_INFO_3 = _USER_MODALS_INFO_3;
  1656.   PUserModalsInfo1001 = ^TUserModalsInfo1001;
  1657.   {$EXTERNALSYM _USER_MODALS_INFO_1001}
  1658.   _USER_MODALS_INFO_1001 = record
  1659.     usrmod1001_min_passwd_len: DWORD;
  1660.   end;
  1661.   TUserModalsInfo1001 = _USER_MODALS_INFO_1001;
  1662.   {$EXTERNALSYM USER_MODALS_INFO_1001}
  1663.   USER_MODALS_INFO_1001 = _USER_MODALS_INFO_1001;
  1664.   PUserModalsInfo1002 = ^TUserModalsInfo1002;
  1665.   {$EXTERNALSYM _USER_MODALS_INFO_1002}
  1666.   _USER_MODALS_INFO_1002 = record
  1667.     usrmod1002_max_passwd_age: DWORD;
  1668.   end;
  1669.   TUserModalsInfo1002 = _USER_MODALS_INFO_1002;
  1670.   {$EXTERNALSYM USER_MODALS_INFO_1002}
  1671.   USER_MODALS_INFO_1002 = _USER_MODALS_INFO_1002;
  1672.   PUserModalsInfo1003 = ^TUserModalsInfo1003;
  1673.   {$EXTERNALSYM _USER_MODALS_INFO_1003}
  1674.   _USER_MODALS_INFO_1003 = record
  1675.     usrmod1003_min_passwd_age: DWORD;
  1676.   end;
  1677.   TUserModalsInfo1003 = _USER_MODALS_INFO_1003;
  1678.   {$EXTERNALSYM USER_MODALS_INFO_1003}
  1679.   USER_MODALS_INFO_1003 = _USER_MODALS_INFO_1003;
  1680.   PUserModalsInfo1004 = ^TUserModalsInfo1004;
  1681.   {$EXTERNALSYM _USER_MODALS_INFO_1004}
  1682.   _USER_MODALS_INFO_1004 = record
  1683.     usrmod1004_force_logoff: DWORD;
  1684.   end;
  1685.   TUserModalsInfo1004 = _USER_MODALS_INFO_1004;
  1686.   {$EXTERNALSYM USER_MODALS_INFO_1004}
  1687.   USER_MODALS_INFO_1004 = _USER_MODALS_INFO_1004;
  1688.   PUserModalsInfo1005 = ^TUserModalsInfo1005;
  1689.   {$EXTERNALSYM _USER_MODALS_INFO_1005}
  1690.   _USER_MODALS_INFO_1005 = record
  1691.     usrmod1005_password_hist_len: DWORD;
  1692.   end;
  1693.   TUserModalsInfo1005 = _USER_MODALS_INFO_1005;
  1694.   {$EXTERNALSYM USER_MODALS_INFO_1005}
  1695.   USER_MODALS_INFO_1005 = _USER_MODALS_INFO_1005;
  1696.   PUserModalsInfo1006 = ^TUserModalsInfo1006;
  1697.   {$EXTERNALSYM _USER_MODALS_INFO_1006}
  1698.   _USER_MODALS_INFO_1006 = record
  1699.     usrmod1006_role: DWORD;
  1700.   end;
  1701.   TUserModalsInfo1006 = _USER_MODALS_INFO_1006;
  1702.   {$EXTERNALSYM USER_MODALS_INFO_1006}
  1703.   USER_MODALS_INFO_1006 = _USER_MODALS_INFO_1006;
  1704.   PUserModalsInfo1007 = ^TUserModalsInfo1007;
  1705.   {$EXTERNALSYM _USER_MODALS_INFO_1007}
  1706.   _USER_MODALS_INFO_1007 = record
  1707.     usrmod1007_primary: LPWSTR;
  1708.   end;
  1709.   TUserModalsInfo1007 = _USER_MODALS_INFO_1007;
  1710.   {$EXTERNALSYM USER_MODALS_INFO_1007}
  1711.   USER_MODALS_INFO_1007 = _USER_MODALS_INFO_1007;
  1712. // Special Values and Constants - User
  1713. //  Bit masks for field usriX_flags of USER_INFO_X (X = 0/1).
  1714. const
  1715.   {$EXTERNALSYM UF_SCRIPT}
  1716.   UF_SCRIPT                          = $0001;
  1717.   {$EXTERNALSYM UF_ACCOUNTDISABLE}
  1718.   UF_ACCOUNTDISABLE                  = $0002;
  1719.   {$EXTERNALSYM UF_HOMEDIR_REQUIRED}
  1720.   UF_HOMEDIR_REQUIRED                = $0008;
  1721.   {$EXTERNALSYM UF_LOCKOUT}
  1722.   UF_LOCKOUT                         = $0010;
  1723.   {$EXTERNALSYM UF_PASSWD_NOTREQD}
  1724.   UF_PASSWD_NOTREQD                  = $0020;
  1725.   {$EXTERNALSYM UF_PASSWD_CANT_CHANGE}
  1726.   UF_PASSWD_CANT_CHANGE              = $0040;
  1727.   {$EXTERNALSYM UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED}
  1728.   UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED = $0080;
  1729. // Account type bits as part of usri_flags.
  1730.   {$EXTERNALSYM UF_TEMP_DUPLICATE_ACCOUNT}
  1731.   UF_TEMP_DUPLICATE_ACCOUNT       = $0100;
  1732.   {$EXTERNALSYM UF_NORMAL_ACCOUNT}
  1733.   UF_NORMAL_ACCOUNT               = $0200;
  1734.   {$EXTERNALSYM UF_INTERDOMAIN_TRUST_ACCOUNT}
  1735.   UF_INTERDOMAIN_TRUST_ACCOUNT    = $0800;
  1736.   {$EXTERNALSYM UF_WORKSTATION_TRUST_ACCOUNT}
  1737.   UF_WORKSTATION_TRUST_ACCOUNT    = $1000;
  1738.   {$EXTERNALSYM UF_SERVER_TRUST_ACCOUNT}
  1739.   UF_SERVER_TRUST_ACCOUNT         = $2000;
  1740.   {$EXTERNALSYM UF_MACHINE_ACCOUNT_MASK}
  1741.   UF_MACHINE_ACCOUNT_MASK = UF_INTERDOMAIN_TRUST_ACCOUNT or
  1742.     UF_WORKSTATION_TRUST_ACCOUNT or UF_SERVER_TRUST_ACCOUNT;
  1743.   {$EXTERNALSYM UF_ACCOUNT_TYPE_MASK}
  1744.   UF_ACCOUNT_TYPE_MASK = UF_TEMP_DUPLICATE_ACCOUNT or UF_NORMAL_ACCOUNT or
  1745.     UF_INTERDOMAIN_TRUST_ACCOUNT or UF_WORKSTATION_TRUST_ACCOUNT or
  1746.     UF_SERVER_TRUST_ACCOUNT;
  1747.   {$EXTERNALSYM UF_DONT_EXPIRE_PASSWD}
  1748.   UF_DONT_EXPIRE_PASSWD           = $10000;
  1749.   {$EXTERNALSYM UF_MNS_LOGON_ACCOUNT}
  1750.   UF_MNS_LOGON_ACCOUNT            = $20000;
  1751.   {$EXTERNALSYM UF_SMARTCARD_REQUIRED}
  1752.   UF_SMARTCARD_REQUIRED           = $40000;
  1753.   {$EXTERNALSYM UF_TRUSTED_FOR_DELEGATION}
  1754.   UF_TRUSTED_FOR_DELEGATION       = $80000;
  1755.   {$EXTERNALSYM UF_NOT_DELEGATED}
  1756.   UF_NOT_DELEGATED               = $100000;
  1757.   {$EXTERNALSYM UF_USE_DES_KEY_ONLY}
  1758.   UF_USE_DES_KEY_ONLY            = $200000;
  1759.   {$EXTERNALSYM UF_DONT_REQUIRE_PREAUTH}
  1760.   UF_DONT_REQUIRE_PREAUTH        = $400000;
  1761.   {$EXTERNALSYM UF_SETTABLE_BITS}
  1762.   UF_SETTABLE_BITS = UF_SCRIPT or UF_ACCOUNTDISABLE or UF_LOCKOUT or
  1763.     UF_HOMEDIR_REQUIRED or UF_PASSWD_NOTREQD or UF_PASSWD_CANT_CHANGE or
  1764.     UF_ACCOUNT_TYPE_MASK or UF_DONT_EXPIRE_PASSWD or UF_MNS_LOGON_ACCOUNT or
  1765.     UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED or UF_SMARTCARD_REQUIRED or
  1766.     UF_TRUSTED_FOR_DELEGATION or UF_NOT_DELEGATED or UF_USE_DES_KEY_ONLY or
  1767.     UF_DONT_REQUIRE_PREAUTH;
  1768. // bit masks for the NetUserEnum filter parameter.
  1769.   {$EXTERNALSYM FILTER_TEMP_DUPLICATE_ACCOUNT}
  1770.   FILTER_TEMP_DUPLICATE_ACCOUNT       = $0001;
  1771.   {$EXTERNALSYM FILTER_NORMAL_ACCOUNT}
  1772.   FILTER_NORMAL_ACCOUNT               = $0002;
  1773.   {$EXTERNALSYM FILTER_PROXY_ACCOUNT}
  1774.   FILTER_PROXY_ACCOUNT                = $0004;
  1775.   {$EXTERNALSYM FILTER_INTERDOMAIN_TRUST_ACCOUNT}
  1776.   FILTER_INTERDOMAIN_TRUST_ACCOUNT    = $0008;
  1777.   {$EXTERNALSYM FILTER_WORKSTATION_TRUST_ACCOUNT}
  1778.   FILTER_WORKSTATION_TRUST_ACCOUNT    = $0010;
  1779.   {$EXTERNALSYM FILTER_SERVER_TRUST_ACCOUNT}
  1780.   FILTER_SERVER_TRUST_ACCOUNT         = $0020;
  1781. // bit masks for the NetUserGetLocalGroups flags
  1782.   {$EXTERNALSYM LG_INCLUDE_INDIRECT}
  1783.   LG_INCLUDE_INDIRECT         = $0001;
  1784. //  Bit masks for field usri2_auth_flags of USER_INFO_2.
  1785.   {$EXTERNALSYM AF_OP_PRINT}
  1786.   AF_OP_PRINT             = $1;
  1787.   {$EXTERNALSYM AF_OP_COMM}
  1788.   AF_OP_COMM              = $2;
  1789.   {$EXTERNALSYM AF_OP_SERVER}
  1790.   AF_OP_SERVER            = $4;
  1791.   {$EXTERNALSYM AF_OP_ACCOUNTS}
  1792.   AF_OP_ACCOUNTS          = $8;
  1793.   {$EXTERNALSYM AF_SETTABLE_BITS}
  1794.   AF_SETTABLE_BITS = AF_OP_PRINT or AF_OP_COMM or AF_OP_SERVER or AF_OP_ACCOUNTS;
  1795. //  UAS role manifests under NETLOGON
  1796.   {$EXTERNALSYM UAS_ROLE_STANDALONE}
  1797.   UAS_ROLE_STANDALONE     = 0;
  1798.   {$EXTERNALSYM UAS_ROLE_MEMBER}
  1799.   UAS_ROLE_MEMBER         = 1;
  1800.   {$EXTERNALSYM UAS_ROLE_BACKUP}
  1801.   UAS_ROLE_BACKUP         = 2;
  1802.   {$EXTERNALSYM UAS_ROLE_PRIMARY}
  1803.   UAS_ROLE_PRIMARY        = 3;
  1804. //  Values for ParmError for NetUserSetInfo.
  1805.   {$EXTERNALSYM USER_NAME_PARMNUM}
  1806.   USER_NAME_PARMNUM               = 1;
  1807.   {$EXTERNALSYM USER_PASSWORD_PARMNUM}
  1808.   USER_PASSWORD_PARMNUM           = 3;
  1809.   {$EXTERNALSYM USER_PASSWORD_AGE_PARMNUM}
  1810.   USER_PASSWORD_AGE_PARMNUM       = 4;
  1811.   {$EXTERNALSYM USER_PRIV_PARMNUM}
  1812.   USER_PRIV_PARMNUM               = 5;
  1813.   {$EXTERNALSYM USER_HOME_DIR_PARMNUM}
  1814.   USER_HOME_DIR_PARMNUM           = 6;
  1815.   {$EXTERNALSYM USER_COMMENT_PARMNUM}
  1816.   USER_COMMENT_PARMNUM            = 7;
  1817.   {$EXTERNALSYM USER_FLAGS_PARMNUM}
  1818.   USER_FLAGS_PARMNUM              = 8;
  1819.   {$EXTERNALSYM USER_SCRIPT_PATH_PARMNUM}
  1820.   USER_SCRIPT_PATH_PARMNUM        = 9;
  1821.   {$EXTERNALSYM USER_AUTH_FLAGS_PARMNUM}
  1822.   USER_AUTH_FLAGS_PARMNUM         = 10;
  1823.   {$EXTERNALSYM USER_FULL_NAME_PARMNUM}
  1824.   USER_FULL_NAME_PARMNUM          = 11;
  1825.   {$EXTERNALSYM USER_USR_COMMENT_PARMNUM}
  1826.   USER_USR_COMMENT_PARMNUM        = 12;
  1827.   {$EXTERNALSYM USER_PARMS_PARMNUM}
  1828.   USER_PARMS_PARMNUM              = 13;
  1829.   {$EXTERNALSYM USER_WORKSTATIONS_PARMNUM}
  1830.   USER_WORKSTATIONS_PARMNUM       = 14;
  1831.   {$EXTERNALSYM USER_LAST_LOGON_PARMNUM}
  1832.   USER_LAST_LOGON_PARMNUM         = 15;
  1833.   {$EXTERNALSYM USER_LAST_LOGOFF_PARMNUM}
  1834.   USER_LAST_LOGOFF_PARMNUM        = 16;
  1835.   {$EXTERNALSYM USER_ACCT_EXPIRES_PARMNUM}
  1836.   USER_ACCT_EXPIRES_PARMNUM       = 17;
  1837.   {$EXTERNALSYM USER_MAX_STORAGE_PARMNUM}
  1838.   USER_MAX_STORAGE_PARMNUM        = 18;
  1839.   {$EXTERNALSYM USER_UNITS_PER_WEEK_PARMNUM}
  1840.   USER_UNITS_PER_WEEK_PARMNUM     = 19;
  1841.   {$EXTERNALSYM USER_LOGON_HOURS_PARMNUM}
  1842.   USER_LOGON_HOURS_PARMNUM        = 20;
  1843.   {$EXTERNALSYM USER_PAD_PW_COUNT_PARMNUM}
  1844.   USER_PAD_PW_COUNT_PARMNUM       = 21;
  1845.   {$EXTERNALSYM USER_NUM_LOGONS_PARMNUM}
  1846.   USER_NUM_LOGONS_PARMNUM         = 22;
  1847.   {$EXTERNALSYM USER_LOGON_SERVER_PARMNUM}
  1848.   USER_LOGON_SERVER_PARMNUM       = 23;
  1849.   {$EXTERNALSYM USER_COUNTRY_CODE_PARMNUM}
  1850.   USER_COUNTRY_CODE_PARMNUM       = 24;
  1851.   {$EXTERNALSYM USER_CODE_PAGE_PARMNUM}
  1852.   USER_CODE_PAGE_PARMNUM          = 25;
  1853.   {$EXTERNALSYM USER_PRIMARY_GROUP_PARMNUM}
  1854.   USER_PRIMARY_GROUP_PARMNUM      = 51;
  1855.   {$EXTERNALSYM USER_PROFILE}
  1856.   USER_PROFILE                    = 52; // ?? Delete when convenient
  1857.   {$EXTERNALSYM USER_PROFILE_PARMNUM}
  1858.   USER_PROFILE_PARMNUM            = 52;
  1859.   {$EXTERNALSYM USER_HOME_DIR_DRIVE_PARMNUM}
  1860.   USER_HOME_DIR_DRIVE_PARMNUM     = 53;
  1861. // the new infolevel counterparts of the old info level + parmnum
  1862.   {$EXTERNALSYM USER_NAME_INFOLEVEL}
  1863.   USER_NAME_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_NAME_PARMNUM);
  1864.   {$EXTERNALSYM USER_PASSWORD_INFOLEVEL}
  1865.   USER_PASSWORD_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_PASSWORD_PARMNUM);
  1866.   {$EXTERNALSYM USER_PASSWORD_AGE_INFOLEVEL}
  1867.   USER_PASSWORD_AGE_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_PASSWORD_AGE_PARMNUM);
  1868.   {$EXTERNALSYM USER_PRIV_INFOLEVEL}
  1869.   USER_PRIV_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_PRIV_PARMNUM);
  1870.   {$EXTERNALSYM USER_HOME_DIR_INFOLEVEL}
  1871.   USER_HOME_DIR_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_HOME_DIR_PARMNUM);
  1872.   {$EXTERNALSYM USER_COMMENT_INFOLEVEL}
  1873.   USER_COMMENT_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_COMMENT_PARMNUM);
  1874.   {$EXTERNALSYM USER_FLAGS_INFOLEVEL}
  1875.   USER_FLAGS_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_FLAGS_PARMNUM);
  1876.   {$EXTERNALSYM USER_SCRIPT_PATH_INFOLEVEL}
  1877.   USER_SCRIPT_PATH_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_SCRIPT_PATH_PARMNUM);
  1878.   {$EXTERNALSYM USER_AUTH_FLAGS_INFOLEVEL}
  1879.   USER_AUTH_FLAGS_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_AUTH_FLAGS_PARMNUM);
  1880.   {$EXTERNALSYM USER_FULL_NAME_INFOLEVEL}
  1881.   USER_FULL_NAME_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_FULL_NAME_PARMNUM);
  1882.   {$EXTERNALSYM USER_USR_COMMENT_INFOLEVEL}
  1883.   USER_USR_COMMENT_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_USR_COMMENT_PARMNUM);
  1884.   {$EXTERNALSYM USER_PARMS_INFOLEVEL}
  1885.   USER_PARMS_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_PARMS_PARMNUM);
  1886.   {$EXTERNALSYM USER_WORKSTATIONS_INFOLEVEL}
  1887.   USER_WORKSTATIONS_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_WORKSTATIONS_PARMNUM);
  1888.   {$EXTERNALSYM USER_LAST_LOGON_INFOLEVEL}
  1889.   USER_LAST_LOGON_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_LAST_LOGON_PARMNUM);
  1890.   {$EXTERNALSYM USER_LAST_LOGOFF_INFOLEVEL}
  1891.   USER_LAST_LOGOFF_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_LAST_LOGOFF_PARMNUM);
  1892.   {$EXTERNALSYM USER_ACCT_EXPIRES_INFOLEVEL}
  1893.   USER_ACCT_EXPIRES_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_ACCT_EXPIRES_PARMNUM);
  1894.   {$EXTERNALSYM USER_MAX_STORAGE_INFOLEVEL}
  1895.   USER_MAX_STORAGE_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_MAX_STORAGE_PARMNUM);
  1896.   {$EXTERNALSYM USER_UNITS_PER_WEEK_INFOLEVEL}
  1897.   USER_UNITS_PER_WEEK_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_UNITS_PER_WEEK_PARMNUM);
  1898.   {$EXTERNALSYM USER_LOGON_HOURS_INFOLEVEL}
  1899.   USER_LOGON_HOURS_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_LOGON_HOURS_PARMNUM);
  1900.   {$EXTERNALSYM USER_PAD_PW_COUNT_INFOLEVEL}
  1901.   USER_PAD_PW_COUNT_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_PAD_PW_COUNT_PARMNUM);
  1902.   {$EXTERNALSYM USER_NUM_LOGONS_INFOLEVEL}
  1903.   USER_NUM_LOGONS_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_NUM_LOGONS_PARMNUM);
  1904.   {$EXTERNALSYM USER_LOGON_SERVER_INFOLEVEL}
  1905.   USER_LOGON_SERVER_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_LOGON_SERVER_PARMNUM);
  1906.   {$EXTERNALSYM USER_COUNTRY_CODE_INFOLEVEL}
  1907.   USER_COUNTRY_CODE_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_COUNTRY_CODE_PARMNUM);
  1908.   {$EXTERNALSYM USER_CODE_PAGE_INFOLEVEL}
  1909.   USER_CODE_PAGE_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_CODE_PAGE_PARMNUM);
  1910.   {$EXTERNALSYM USER_PRIMARY_GROUP_INFOLEVEL}
  1911.   USER_PRIMARY_GROUP_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_PRIMARY_GROUP_PARMNUM);
  1912. //  {$EXTERNALSYM USER_POSIX_ID_INFOLEVEL}
  1913. //  USER_POSIX_ID_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_POSIX_ID_PARMNUM);
  1914.   {$EXTERNALSYM USER_HOME_DIR_DRIVE_INFOLEVEL}
  1915.   USER_HOME_DIR_DRIVE_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + USER_HOME_DIR_DRIVE_PARMNUM);
  1916. //  For SetInfo call (parmnum 0) when password change not required
  1917.   {$EXTERNALSYM NULL_USERSETINFO_PASSWD}
  1918.   NULL_USERSETINFO_PASSWD =    '              ';
  1919.   {$EXTERNALSYM TIMEQ_FOREVER}
  1920.   TIMEQ_FOREVER               = DWORD(-1);
  1921.   {$EXTERNALSYM USER_MAXSTORAGE_UNLIMITED}
  1922.   USER_MAXSTORAGE_UNLIMITED   = DWORD(-1);
  1923.   {$EXTERNALSYM USER_NO_LOGOFF}
  1924.   USER_NO_LOGOFF              = DWORD(-1);
  1925.   {$EXTERNALSYM UNITS_PER_DAY}
  1926.   UNITS_PER_DAY               = 24;
  1927.   {$EXTERNALSYM UNITS_PER_WEEK}
  1928.   UNITS_PER_WEEK              = UNITS_PER_DAY * 7;
  1929. // Privilege levels (USER_INFO_X field usriX_priv (X = 0/1)).
  1930.   {$EXTERNALSYM USER_PRIV_MASK}
  1931.   USER_PRIV_MASK      = $3;
  1932.   {$EXTERNALSYM USER_PRIV_GUEST}
  1933.   USER_PRIV_GUEST     = 0;
  1934.   {$EXTERNALSYM USER_PRIV_USER}
  1935.   USER_PRIV_USER      = 1;
  1936.   {$EXTERNALSYM USER_PRIV_ADMIN}
  1937.   USER_PRIV_ADMIN     = 2;
  1938. // user modals related defaults
  1939.   {$EXTERNALSYM MAX_PASSWD_LEN}
  1940.   MAX_PASSWD_LEN      = PWLEN;
  1941.   {$EXTERNALSYM DEF_MIN_PWLEN}
  1942.   DEF_MIN_PWLEN       = 6;
  1943.   {$EXTERNALSYM DEF_PWUNIQUENESS}
  1944.   DEF_PWUNIQUENESS    = 5;
  1945.   {$EXTERNALSYM DEF_MAX_PWHIST}
  1946.   DEF_MAX_PWHIST      = 8;
  1947.   {$EXTERNALSYM DEF_MAX_PWAGE}
  1948.   DEF_MAX_PWAGE       = TIMEQ_FOREVER; // forever
  1949.   {$EXTERNALSYM DEF_MIN_PWAGE}
  1950.   DEF_MIN_PWAGE       = 0;             // 0 days
  1951.   {$EXTERNALSYM DEF_FORCE_LOGOFF}
  1952.   DEF_FORCE_LOGOFF    = MAXDWORD;      // never
  1953.   {$EXTERNALSYM DEF_MAX_BADPW}
  1954.   DEF_MAX_BADPW       = 0;             // no limit
  1955.   {$EXTERNALSYM ONE_DAY}
  1956.   ONE_DAY             = 01*24*3600;    // 01 day
  1957. // User Logon Validation (codes returned)
  1958.   {$EXTERNALSYM VALIDATED_LOGON}
  1959.   VALIDATED_LOGON         = 0;
  1960.   {$EXTERNALSYM PASSWORD_EXPIRED}
  1961.   PASSWORD_EXPIRED        = 2;
  1962.   {$EXTERNALSYM NON_VALIDATED_LOGON}
  1963.   NON_VALIDATED_LOGON     = 3;
  1964.   {$EXTERNALSYM VALID_LOGOFF}
  1965.   VALID_LOGOFF            = 1;
  1966. // parmnum manifests for user modals
  1967.   {$EXTERNALSYM MODALS_MIN_PASSWD_LEN_PARMNUM}
  1968.   MODALS_MIN_PASSWD_LEN_PARMNUM       = 1;
  1969.   {$EXTERNALSYM MODALS_MAX_PASSWD_AGE_PARMNUM}
  1970.   MODALS_MAX_PASSWD_AGE_PARMNUM       = 2;
  1971.   {$EXTERNALSYM MODALS_MIN_PASSWD_AGE_PARMNUM}
  1972.   MODALS_MIN_PASSWD_AGE_PARMNUM       = 3;
  1973.   {$EXTERNALSYM MODALS_FORCE_LOGOFF_PARMNUM}
  1974.   MODALS_FORCE_LOGOFF_PARMNUM         = 4;
  1975.   {$EXTERNALSYM MODALS_PASSWD_HIST_LEN_PARMNUM}
  1976.   MODALS_PASSWD_HIST_LEN_PARMNUM      = 5;
  1977.   {$EXTERNALSYM MODALS_ROLE_PARMNUM}
  1978.   MODALS_ROLE_PARMNUM                 = 6;
  1979.   {$EXTERNALSYM MODALS_PRIMARY_PARMNUM}
  1980.   MODALS_PRIMARY_PARMNUM              = 7;
  1981.   {$EXTERNALSYM MODALS_DOMAIN_NAME_PARMNUM}
  1982.   MODALS_DOMAIN_NAME_PARMNUM          = 8;
  1983.   {$EXTERNALSYM MODALS_DOMAIN_ID_PARMNUM}
  1984.   MODALS_DOMAIN_ID_PARMNUM            = 9;
  1985.   {$EXTERNALSYM MODALS_LOCKOUT_DURATION_PARMNUM}
  1986.   MODALS_LOCKOUT_DURATION_PARMNUM     = 10;
  1987.   {$EXTERNALSYM MODALS_LOCKOUT_OBSERVATION_WINDOW_PARMNUM}
  1988.   MODALS_LOCKOUT_OBSERVATION_WINDOW_PARMNUM = 11;
  1989.   {$EXTERNALSYM MODALS_LOCKOUT_THRESHOLD_PARMNUM}
  1990.   MODALS_LOCKOUT_THRESHOLD_PARMNUM    = 12;
  1991. // the new infolevel counterparts of the old info level + parmnum
  1992.   {$EXTERNALSYM MODALS_MIN_PASSWD_LEN_INFOLEVEL}
  1993.   MODALS_MIN_PASSWD_LEN_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + MODALS_MIN_PASSWD_LEN_PARMNUM);
  1994.   {$EXTERNALSYM MODALS_MAX_PASSWD_AGE_INFOLEVEL}
  1995.   MODALS_MAX_PASSWD_AGE_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + MODALS_MAX_PASSWD_AGE_PARMNUM);
  1996.   {$EXTERNALSYM MODALS_MIN_PASSWD_AGE_INFOLEVEL}
  1997.   MODALS_MIN_PASSWD_AGE_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + MODALS_MIN_PASSWD_AGE_PARMNUM);
  1998.   {$EXTERNALSYM MODALS_FORCE_LOGOFF_INFOLEVEL}
  1999.   MODALS_FORCE_LOGOFF_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + MODALS_FORCE_LOGOFF_PARMNUM);
  2000.   {$EXTERNALSYM MODALS_PASSWD_HIST_LEN_INFOLEVEL}
  2001.   MODALS_PASSWD_HIST_LEN_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + MODALS_PASSWD_HIST_LEN_PARMNUM);
  2002.   {$EXTERNALSYM MODALS_ROLE_INFOLEVEL}
  2003.   MODALS_ROLE_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + MODALS_ROLE_PARMNUM);
  2004.   {$EXTERNALSYM MODALS_PRIMARY_INFOLEVEL}
  2005.   MODALS_PRIMARY_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + MODALS_PRIMARY_PARMNUM);
  2006.   {$EXTERNALSYM MODALS_DOMAIN_NAME_INFOLEVEL}
  2007.   MODALS_DOMAIN_NAME_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + MODALS_DOMAIN_NAME_PARMNUM);
  2008.   {$EXTERNALSYM MODALS_DOMAIN_ID_INFOLEVEL}
  2009.   MODALS_DOMAIN_ID_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + MODALS_DOMAIN_ID_PARMNUM);
  2010. // Group Class
  2011. // Function Prototypes
  2012. {$EXTERNALSYM NetGroupAdd}
  2013. function NetGroupAdd(servername: LPCWSTR; level: DWORD; buf: Pointer;
  2014.   parm_err: PDWORD): NET_API_STATUS; stdcall;
  2015. {$EXTERNALSYM NetGroupAddUser}
  2016. function NetGroupAddUser(servername: LPCWSTR; GroupName: LPCWSTR;
  2017.   username: LPCWSTR): NET_API_STATUS; stdcall;
  2018. {$EXTERNALSYM NetGroupEnum}
  2019. function NetGroupEnum(servername: LPCWSTR; level: DWORD; var bufptr: Pointer;
  2020.   prefmaxlen: DWORD; var entriesread: DWORD; var totalentries: DWORD;
  2021.   resume_handle: PDWORD): NET_API_STATUS; stdcall;
  2022. {$EXTERNALSYM NetGroupGetInfo}
  2023. function NetGroupGetInfo(servername: LPCWSTR; groupname: LPCWSTR; level: DWORD;
  2024.   var bufptr: Pointer): NET_API_STATUS; stdcall;
  2025. {$EXTERNALSYM NetGroupSetInfo}
  2026. function NetGroupSetInfo(servername: LPCWSTR; groupname: LPCWSTR; level: DWORD;
  2027.   buf: Pointer; parm_err: PDWORD): NET_API_STATUS; stdcall;
  2028. {$EXTERNALSYM NetGroupDel}
  2029. function NetGroupDel(servername, groupname: LPCWSTR): NET_API_STATUS; stdcall;
  2030. {$EXTERNALSYM NetGroupDelUser}
  2031. function NetGroupDelUser(servername: LPCWSTR; GroupName: LPCWSTR;
  2032.   Username: LPCWSTR): NET_API_STATUS; stdcall;
  2033. {$EXTERNALSYM NetGroupGetUsers}
  2034. function NetGroupGetUsers(servername: LPCWSTR; groupname: LPCWSTR; level: DWORD;
  2035.   var bufptr: Pointer; prefmaxlen: DWORD; var entriesread: DWORD;
  2036.   var totalentries: DWORD; ResumeHandle: PDWORD): NET_API_STATUS; stdcall;
  2037. {$EXTERNALSYM NetGroupSetUsers}
  2038. function NetGroupSetUsers(servername: LPCWSTR; groupname: LPCWSTR; level: DWORD;
  2039.   buf: Pointer; totalentries: DWORD): NET_API_STATUS; stdcall;
  2040. //  Data Structures - Group
  2041. type
  2042.   PGroupInfo0 = ^TGroupInfo0;
  2043.   {$EXTERNALSYM _GROUP_INFO_0}
  2044.   _GROUP_INFO_0 = record
  2045.     grpi0_name: LPWSTR;
  2046.   end;
  2047.   TGroupInfo0 = _GROUP_INFO_0;
  2048.   {$EXTERNALSYM GROUP_INFO_0}
  2049.   GROUP_INFO_0 = _GROUP_INFO_0;
  2050.   PGroupInfo1 = ^TGroupInfo1;
  2051.   {$EXTERNALSYM _GROUP_INFO_1}
  2052.   _GROUP_INFO_1 = record
  2053.     grpi1_name: LPWSTR;
  2054.     grpi1_comment: LPWSTR;
  2055.   end;
  2056.   TGroupInfo1 = _GROUP_INFO_1;
  2057.   {$EXTERNALSYM GROUP_INFO_1}
  2058.   GROUP_INFO_1 = _GROUP_INFO_1;
  2059.   PGroupInfo2 = ^TGroupInfo2;
  2060.   {$EXTERNALSYM _GROUP_INFO_2}
  2061.   _GROUP_INFO_2 = record
  2062.     grpi2_name: LPWSTR;
  2063.     grpi2_comment: LPWSTR;
  2064.     grpi2_group_id: DWORD;
  2065.     grpi2_attributes: DWORD;
  2066.   end;
  2067.   TGroupInfo2 = _GROUP_INFO_2;
  2068.   {$EXTERNALSYM GROUP_INFO_2}
  2069.   GROUP_INFO_2 = _GROUP_INFO_2;
  2070.   PGroupInfo1002 = ^TGroupInfo1002;
  2071.   {$EXTERNALSYM _GROUP_INFO_1002}
  2072.   _GROUP_INFO_1002 = record
  2073.     grpi1002_comment: LPWSTR;
  2074.   end;
  2075.   TGroupInfo1002 = _GROUP_INFO_1002;
  2076.   {$EXTERNALSYM GROUP_INFO_1002}
  2077.   GROUP_INFO_1002 = _GROUP_INFO_1002;
  2078.   PGroupInfo1005 = ^TGroupInfo1005;
  2079.   {$EXTERNALSYM _GROUP_INFO_1005}
  2080.   _GROUP_INFO_1005 = record
  2081.     grpi1005_attributes: DWORD;
  2082.   end;
  2083.   TGroupInfo1005 = _GROUP_INFO_1005;
  2084.   {$EXTERNALSYM GROUP_INFO_1005}
  2085.   GROUP_INFO_1005 = _GROUP_INFO_1005;
  2086.   PGroupUsersInfo0 = ^TGroupUsersInfo0;
  2087.   {$EXTERNALSYM _GROUP_USERS_INFO_0}
  2088.   _GROUP_USERS_INFO_0 = record
  2089.     grui0_name: LPWSTR;
  2090.   end;
  2091.   TGroupUsersInfo0 = _GROUP_USERS_INFO_0;
  2092.   {$EXTERNALSYM GROUP_USERS_INFO_0}
  2093.   GROUP_USERS_INFO_0 = _GROUP_USERS_INFO_0;
  2094.   PGroupUsersInfo1 = ^TGroupUsersInfo1;
  2095.   {$EXTERNALSYM _GROUP_USERS_INFO_1}
  2096.   _GROUP_USERS_INFO_1 = record
  2097.     grui1_name: LPWSTR;
  2098.     grui1_attributes: DWORD;
  2099.   end;
  2100.   TGroupUsersInfo1 = _GROUP_USERS_INFO_1;
  2101.   {$EXTERNALSYM GROUP_USERS_INFO_1}
  2102.   GROUP_USERS_INFO_1 = _GROUP_USERS_INFO_1;
  2103. //
  2104. // Special Values and Constants - Group
  2105. //
  2106. const
  2107.   {$EXTERNALSYM GROUPIDMASK}
  2108.   GROUPIDMASK                 = $8000;      // MSB set if uid refers;
  2109.                                             // to a group
  2110. // Predefined group for all normal users, administrators and guests
  2111. // LOCAL is a special group for pinball local security.
  2112.   {$EXTERNALSYM GROUP_SPECIALGRP_USERS}
  2113.   GROUP_SPECIALGRP_USERS = 'USERS';
  2114.   {$EXTERNALSYM GROUP_SPECIALGRP_ADMINS}
  2115.   GROUP_SPECIALGRP_ADMINS = 'ADMINS';
  2116.   {$EXTERNALSYM GROUP_SPECIALGRP_GUESTS}
  2117.   GROUP_SPECIALGRP_GUESTS = 'GUESTS';
  2118.   {$EXTERNALSYM GROUP_SPECIALGRP_LOCAL}
  2119.   GROUP_SPECIALGRP_LOCAL = 'LOCAL';
  2120. // parmnum manifests for SetInfo calls (only comment is settable)
  2121.   {$EXTERNALSYM GROUP_ALL_PARMNUM}
  2122.   GROUP_ALL_PARMNUM           = 0;
  2123.   {$EXTERNALSYM GROUP_NAME_PARMNUM}
  2124.   GROUP_NAME_PARMNUM          = 1;
  2125.   {$EXTERNALSYM GROUP_COMMENT_PARMNUM}
  2126.   GROUP_COMMENT_PARMNUM       = 2;
  2127.   {$EXTERNALSYM GROUP_ATTRIBUTES_PARMNUM}
  2128.   GROUP_ATTRIBUTES_PARMNUM    = 3;
  2129. // the new infolevel counterparts of the old info level + parmnum
  2130.   {$EXTERNALSYM GROUP_ALL_INFOLEVEL}
  2131.   GROUP_ALL_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + GROUP_ALL_PARMNUM);
  2132.   {$EXTERNALSYM GROUP_NAME_INFOLEVEL}
  2133.   GROUP_NAME_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + GROUP_NAME_PARMNUM);
  2134.   {$EXTERNALSYM GROUP_COMMENT_INFOLEVEL}
  2135.   GROUP_COMMENT_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + GROUP_COMMENT_PARMNUM);
  2136.   {$EXTERNALSYM GROUP_ATTRIBUTES_INFOLEVEL}
  2137.   GROUP_ATTRIBUTES_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + GROUP_ATTRIBUTES_PARMNUM);
  2138. //  {$EXTERNALSYM GROUP_POSIX_ID_INFOLEVEL}
  2139. //  GROUP_POSIX_ID_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + GROUP_POSIX_ID_PARMNUM);
  2140. // LocalGroup Class
  2141. // Function Prototypes
  2142. {$EXTERNALSYM NetLocalGroupAdd}
  2143. function NetLocalGroupAdd(servername: LPCWSTR; level: DWORD; buf: Pointer;
  2144.   parm_err: PDWORD): NET_API_STATUS; stdcall;
  2145. {$EXTERNALSYM NetLocalGroupAddMember}
  2146. function NetLocalGroupAddMember(servername: LPCWSTR; groupname: LPCWSTR;
  2147.   membersid: PSID): NET_API_STATUS; stdcall;
  2148. {$EXTERNALSYM NetLocalGroupEnum}
  2149. function NetLocalGroupEnum(servername: LPCWSTR; level: DWORD; var bufptr: Pointer;
  2150.   prefmaxlen: DWORD; var entriesread: DWORD; var totalentries: DWORD;
  2151.   resumehandle: PDWORD): NET_API_STATUS; stdcall;
  2152. {$EXTERNALSYM NetLocalGroupGetInfo}
  2153. function NetLocalGroupGetInfo(servername: LPCWSTR; groupname: LPCWSTR;
  2154.   level: DWORD; var bufptr: Pointer): NET_API_STATUS; stdcall;
  2155. {$EXTERNALSYM NetLocalGroupSetInfo}
  2156. function NetLocalGroupSetInfo(servername: LPCWSTR; groupname: LPCWSTR;
  2157.   level: DWORD; buf: Pointer; parm_err: PDWORD): NET_API_STATUS; stdcall;
  2158. {$EXTERNALSYM NetLocalGroupDel}
  2159. function NetLocalGroupDel(servername, groupname: LPCWSTR): NET_API_STATUS; stdcall;
  2160. {$EXTERNALSYM NetLocalGroupDelMember}
  2161. function NetLocalGroupDelMember(servername: LPCWSTR; groupname: LPCWSTR;
  2162.   membersid: PSID): NET_API_STATUS; stdcall;
  2163. {$EXTERNALSYM NetLocalGroupGetMembers}
  2164. function NetLocalGroupGetMembers(servername: LPCWSTR; localgroupname: LPCWSTR;
  2165.   level: DWORD; var bufptr: Pointer; prefmaxlen: DWORD; var entriesread: DWORD;
  2166.   var totalentries: DWORD; resumehandle: PDWORD): NET_API_STATUS; stdcall;
  2167. {$EXTERNALSYM NetLocalGroupSetMembers}
  2168. function NetLocalGroupSetMembers(servername: LPCWSTR; groupname: LPCWSTR;
  2169.   level: DWORD; buf: Pointer; totalentries: DWORD): NET_API_STATUS; stdcall;
  2170. {$EXTERNALSYM NetLocalGroupAddMembers}
  2171. function NetLocalGroupAddMembers(servername: LPCWSTR; groupname: LPCWSTR;
  2172.   level: DWORD; buf: Pointer; totalentries: DWORD): NET_API_STATUS; stdcall;
  2173. {$EXTERNALSYM NetLocalGroupDelMembers}
  2174. function NetLocalGroupDelMembers(servername: LPCWSTR; groupname: LPCWSTR;
  2175.   level: DWORD; buf: Pointer; totalentries: DWORD): NET_API_STATUS; stdcall;
  2176. //  Data Structures - LocalGroup
  2177. type
  2178.   PLocalGroupInfo0 = ^TLocalGroupInfo0;
  2179.   {$EXTERNALSYM _LOCALGROUP_INFO_0}
  2180.   _LOCALGROUP_INFO_0 = record
  2181.     lgrpi0_name: LPWSTR;
  2182.   end;
  2183.   TLocalGroupInfo0 = _LOCALGROUP_INFO_0;
  2184.   {$EXTERNALSYM LOCALGROUP_INFO_0}
  2185.   LOCALGROUP_INFO_0 = _LOCALGROUP_INFO_0;
  2186.   PLocalGroupInfo1 = ^TLocalGroupInfo1;
  2187.   {$EXTERNALSYM _LOCALGROUP_INFO_1}
  2188.   _LOCALGROUP_INFO_1 = record
  2189.     lgrpi1_name: LPWSTR;
  2190.     lgrpi1_comment: LPWSTR;
  2191.   end;
  2192.   TLocalGroupInfo1 = _LOCALGROUP_INFO_1;
  2193.   {$EXTERNALSYM LOCALGROUP_INFO_1}
  2194.   LOCALGROUP_INFO_1 = _LOCALGROUP_INFO_1;
  2195.   PLocalGroupInfo1002 = ^TLocalGroupInfo1002;
  2196.   {$EXTERNALSYM _LOCALGROUP_INFO_1002}
  2197.   _LOCALGROUP_INFO_1002 = record
  2198.     lgrpi1002_comment: LPWSTR;
  2199.   end;
  2200.   TLocalGroupInfo1002 = _LOCALGROUP_INFO_1002;
  2201.   {$EXTERNALSYM LOCALGROUP_INFO_1002}
  2202.   LOCALGROUP_INFO_1002 = _LOCALGROUP_INFO_1002;
  2203.   PLocalGroupMembersInfo0 = ^TLocalGroupMembersInfo0;
  2204.   {$EXTERNALSYM _LOCALGROUP_MEMBERS_INFO_0}
  2205.   _LOCALGROUP_MEMBERS_INFO_0 = record
  2206.     lgrmi0_sid: PSID;
  2207.   end;
  2208.   TLocalGroupMembersInfo0 = _LOCALGROUP_MEMBERS_INFO_0;
  2209.   {$EXTERNALSYM LOCALGROUP_MEMBERS_INFO_0}
  2210.   LOCALGROUP_MEMBERS_INFO_0 = _LOCALGROUP_MEMBERS_INFO_0;
  2211.   PLocalGroupMembersInfo1 = ^TLocalGroupMembersInfo1;
  2212.   {$EXTERNALSYM _LOCALGROUP_MEMBERS_INFO_1}
  2213.   _LOCALGROUP_MEMBERS_INFO_1 = record
  2214.     lgrmi1_sid: PSID;
  2215.     lgrmi1_sidusage: SID_NAME_USE;
  2216.     lgrmi1_name: LPWSTR;
  2217.   end;
  2218.   TLocalGroupMembersInfo1 = _LOCALGROUP_MEMBERS_INFO_1;
  2219.   {$EXTERNALSYM LOCALGROUP_MEMBERS_INFO_1}
  2220.   LOCALGROUP_MEMBERS_INFO_1 = _LOCALGROUP_MEMBERS_INFO_1;
  2221.   PLocalGroupMembersInfo2 = ^TLocalGroupMembersInfo2;
  2222.   {$EXTERNALSYM _LOCALGROUP_MEMBERS_INFO_2}
  2223.   _LOCALGROUP_MEMBERS_INFO_2 = record
  2224.     lgrmi2_sid: PSID;
  2225.     lgrmi2_sidusage: SID_NAME_USE;
  2226.     lgrmi2_domainandname: LPWSTR;
  2227.   end;
  2228.   TLocalGroupMembersInfo2 = _LOCALGROUP_MEMBERS_INFO_2;
  2229.   {$EXTERNALSYM LOCALGROUP_MEMBERS_INFO_2}
  2230.   LOCALGROUP_MEMBERS_INFO_2 = _LOCALGROUP_MEMBERS_INFO_2;
  2231.   PLocalGroupMembersInfo3 = ^TLocalGroupMembersInfo3;
  2232.   {$EXTERNALSYM _LOCALGROUP_MEMBERS_INFO_3}
  2233.   _LOCALGROUP_MEMBERS_INFO_3 = record
  2234.     lgrmi3_domainandname: LPWSTR;
  2235.   end;
  2236.   TLocalGroupMembersInfo3 = _LOCALGROUP_MEMBERS_INFO_3;
  2237.   {$EXTERNALSYM LOCALGROUP_MEMBERS_INFO_3}
  2238.   LOCALGROUP_MEMBERS_INFO_3 = _LOCALGROUP_MEMBERS_INFO_3;
  2239.   PLocalGroupUserInfo0 = ^TLocalGroupUserInfo0;
  2240.   {$EXTERNALSYM _LOCALGROUP_USERS_INFO_0}
  2241.   _LOCALGROUP_USERS_INFO_0 = record
  2242.     lgrui0_name: LPWSTR;
  2243.   end;
  2244.   TLocalGroupUserInfo0 = _LOCALGROUP_USERS_INFO_0;
  2245.   {$EXTERNALSYM LOCALGROUP_USERS_INFO_0}
  2246.   LOCALGROUP_USERS_INFO_0 = _LOCALGROUP_USERS_INFO_0;
  2247. const
  2248.   {$EXTERNALSYM LOCALGROUP_NAME_PARMNUM}
  2249.   LOCALGROUP_NAME_PARMNUM = 1;
  2250.   {$EXTERNALSYM LOCALGROUP_COMMENT_PARMNUM}
  2251.   LOCALGROUP_COMMENT_PARMNUM = 2;
  2252. // Display Information APIs
  2253. {$EXTERNALSYM NetQueryDisplayInformation}
  2254. function NetQueryDisplayInformation(ServerName: LPCWSTR; Level: DWORD;
  2255.   Index: DWORD; EntriesRequested: DWORD; PreferredMaximumLength: DWORD;
  2256.   var ReturnedEntryCount: DWORD; var SortedBuffer: Pointer): NET_API_STATUS; stdcall;
  2257. {$EXTERNALSYM NetGetDisplayInformationIndex}
  2258. function NetGetDisplayInformationIndex(ServerName: LPCWSTR; Level: DWORD;
  2259.   Prefix: LPCWSTR; var Index: DWORD): NET_API_STATUS; stdcall;
  2260. // QueryDisplayInformation levels
  2261. type
  2262.   PNetDisplayUser = ^TNetDisplayUser;
  2263.   {$EXTERNALSYM _NET_DISPLAY_USER}
  2264.   _NET_DISPLAY_USER = record
  2265.     usri1_name: LPWSTR;
  2266.     usri1_comment: LPWSTR;
  2267.     usri1_flags: DWORD;
  2268.     usri1_full_name: LPWSTR;
  2269.     usri1_user_id: DWORD;
  2270.     usri1_next_index: DWORD;
  2271.   end;
  2272.   TNetDisplayUser = _NET_DISPLAY_USER;
  2273.   {$EXTERNALSYM NET_DISPLAY_USER}
  2274.   NET_DISPLAY_USER = _NET_DISPLAY_USER;
  2275.   PNetDisplayMachine = ^TNetDisplayMachine;
  2276.   {$EXTERNALSYM _NET_DISPLAY_MACHINE}
  2277.   _NET_DISPLAY_MACHINE = record
  2278.     usri2_name: LPWSTR;
  2279.     usri2_comment: LPWSTR;
  2280.     usri2_flags: DWORD;
  2281.     usri2_user_id: DWORD;
  2282.     usri2_next_index: DWORD;
  2283.   end;
  2284.   TNetDisplayMachine = _NET_DISPLAY_MACHINE;
  2285.   {$EXTERNALSYM NET_DISPLAY_MACHINE}
  2286.   NET_DISPLAY_MACHINE = _NET_DISPLAY_MACHINE;
  2287.   PNetDisplayGroup = ^TNetDisplayGroup;
  2288.   {$EXTERNALSYM _NET_DISPLAY_GROUP}
  2289.   _NET_DISPLAY_GROUP = record
  2290.     grpi3_name: LPWSTR;
  2291.     grpi3_comment: LPWSTR;
  2292.     grpi3_group_id: DWORD;
  2293.     grpi3_attributes: DWORD;
  2294.     grpi3_next_index: DWORD;
  2295.   end;
  2296.   TNetDisplayGroup = _NET_DISPLAY_GROUP;
  2297.   {$EXTERNALSYM NET_DISPLAY_GROUP}
  2298.   NET_DISPLAY_GROUP = _NET_DISPLAY_GROUP;
  2299. // Access Class
  2300. // Function Prototypes - Access
  2301. // The NetAccess APIs are only available to downlevel
  2302. //#define NetAccessAdd RxNetAccessAdd
  2303. {$EXTERNALSYM NetAccessAdd}
  2304. function NetAccessAdd(servername: LPCWSTR; level: DWORD; buf: Pointer;
  2305.   parm_err: PDWORD): NET_API_STATUS; stdcall;
  2306. //#define NetAccessEnum RxNetAccessEnum
  2307. {$EXTERNALSYM NetAccessEnum}
  2308. function NetAccessEnum(servername: LPCWSTR; BasePath: LPCWSTR; Recursive: DWORD;
  2309.   level: DWORD; bufptr: Pointer; prefmaxlen: DWORD; var entriesread: DWORD;
  2310.   var totalentries: DWORD; resume_handle: PDWORD): NET_API_STATUS; stdcall;
  2311. //#define NetAccessGetInfo RxNetAccessGetInfo
  2312. {$EXTERNALSYM NetAccessGetInfo}
  2313. function NetAccessGetInfo(servername: LPCWSTR; resource: LPCWSTR; level: DWORD;
  2314.   bufptr: Pointer): NET_API_STATUS; stdcall;
  2315. //#define NetAccessSetInfo RxNetAccessSetInfo
  2316. {$EXTERNALSYM NetAccessSetInfo}
  2317. function NetAccessSetInfo(servername: LPCWSTR; resource: LPCWSTR; level: DWORD;
  2318.   buf: Pointer; parm_err: PDWORD): NET_API_STATUS; stdcall;
  2319. //#define NetAccessDel RxNetAccessDel
  2320. {$EXTERNALSYM NetAccessDel}
  2321. function NetAccessDel(servername, resource: LPCWSTR): NET_API_STATUS; stdcall;
  2322. //#define NetAccessGetUserPerms RxNetAccessGetUserPerms
  2323. {$EXTERNALSYM NetAccessGetUserPerms}
  2324. function NetAccessGetUserPerms(servername: LPCWSTR; UGname: LPCWSTR;
  2325.   resource: LPCWSTR; var Perms: DWORD): NET_API_STATUS; stdcall;
  2326. //
  2327. // Data Structures - Access
  2328. //
  2329. type
  2330.   PAccessInfo0 = ^TAccessInfo0;
  2331.   {EXTERNALSYM _ACCESS_INFO_0}
  2332.   _ACCESS_INFO_0 = record
  2333.     acc0_resource_name: LPWSTR;
  2334.   end;
  2335.   TAccessInfo0 = _ACCESS_INFO_0;
  2336.   {$EXTERNALSYM ACCESS_INFO_0}
  2337.   ACCESS_INFO_0 = _ACCESS_INFO_0;
  2338.   PAccessInfo1 = ^TAccessInfo1;
  2339.   {EXTERNALSYM _ACCESS_INFO_1}
  2340.   _ACCESS_INFO_1 = record
  2341.     acc1_resource_name: LPWSTR;
  2342.     acc1_attr: DWORD;
  2343.     acc1_count: DWORD;
  2344.   end;
  2345.   TAccessInfo1 = _ACCESS_INFO_1;
  2346.   {$EXTERNALSYM ACCESS_INFO_1}
  2347.   ACCESS_INFO_1 = _ACCESS_INFO_1;
  2348.   PAccessInfo1002 = ^TAccessInfo1002;
  2349.   {EXTERNALSYM _ACCESS_INFO_1002}
  2350.   _ACCESS_INFO_1002 = record
  2351.     acc1002_attr: DWORD;
  2352.   end;
  2353.   TAccessInfo1002 = _ACCESS_INFO_1002;
  2354.   {$EXTERNALSYM ACCESS_INFO_1002}
  2355.   ACCESS_INFO_1002 = _ACCESS_INFO_1002;
  2356.   PAccessList = ^TAccessList;
  2357.   {EXTERNALSYM _ACCESS_LIST}
  2358.   _ACCESS_LIST = record
  2359.     acl_ugname: LPWSTR;
  2360.     acl_access: DWORD;
  2361.   end;
  2362.   TAccessList = _ACCESS_LIST;
  2363.   {$EXTERNALSYM ACCESS_LIST}
  2364.   ACCESS_LIST = _ACCESS_LIST;
  2365. // Special Values and Constants - Access
  2366. // Maximum number of permission entries for each resource.
  2367. const
  2368.   {$EXTERNALSYM MAXPERMENTRIES}
  2369.   MAXPERMENTRIES = 64;
  2370. //  Bit values for the access permissions.  ACCESS_ALL is a handy
  2371. //  way to specify maximum permissions.  These are used in
  2372. //  acl_access field of access_list structures.
  2373.   {$EXTERNALSYM ACCESS_NONE}
  2374.   ACCESS_NONE = 0;
  2375.   {$EXTERNALSYM ACCESS_READ}
  2376.   ACCESS_READ         = $01;
  2377.   {$EXTERNALSYM ACCESS_WRITE}
  2378.   ACCESS_WRITE        = $02;
  2379.   {$EXTERNALSYM ACCESS_CREATE}
  2380.   ACCESS_CREATE       = $04;
  2381.   {$EXTERNALSYM ACCESS_EXEC}
  2382.   ACCESS_EXEC         = $08;
  2383.   {$EXTERNALSYM ACCESS_DELETE}
  2384.   ACCESS_DELETE       = $10;
  2385.   {$EXTERNALSYM ACCESS_ATRIB}
  2386.   ACCESS_ATRIB        = $20;
  2387.   {$EXTERNALSYM ACCESS_PERM}
  2388.   ACCESS_PERM         = $40;
  2389.   {$EXTERNALSYM ACCESS_GROUP}
  2390.   ACCESS_GROUP        = $8000;
  2391.   {$EXTERNALSYM ACCESS_ALL}
  2392.   ACCESS_ALL = ACCESS_READ or ACCESS_WRITE or ACCESS_CREATE or ACCESS_EXEC or
  2393.     ACCESS_DELETE or ACCESS_ATRIB or ACCESS_PERM;
  2394. // Bit values for the acc1_attr field of the ACCESS_INFO_1 structure.
  2395.   {$EXTERNALSYM ACCESS_AUDIT}
  2396.   ACCESS_AUDIT        = $1;
  2397.   {$EXTERNALSYM ACCESS_SUCCESS_OPEN}
  2398.   ACCESS_SUCCESS_OPEN         = $10;
  2399.   {$EXTERNALSYM ACCESS_SUCCESS_WRITE}
  2400.   ACCESS_SUCCESS_WRITE        = $20;
  2401.   {$EXTERNALSYM ACCESS_SUCCESS_DELETE}
  2402.   ACCESS_SUCCESS_DELETE       = $40;
  2403.   {$EXTERNALSYM ACCESS_SUCCESS_ACL}
  2404.   ACCESS_SUCCESS_ACL          = $80;
  2405.   {$EXTERNALSYM ACCESS_SUCCESS_MASK}
  2406.   ACCESS_SUCCESS_MASK         = $F0;
  2407.   {$EXTERNALSYM ACCESS_FAIL_OPEN}
  2408.   ACCESS_FAIL_OPEN            = $100;
  2409.   {$EXTERNALSYM ACCESS_FAIL_WRITE}
  2410.   ACCESS_FAIL_WRITE           = $200;
  2411.   {$EXTERNALSYM ACCESS_FAIL_DELETE}
  2412.   ACCESS_FAIL_DELETE          = $400;
  2413.   {$EXTERNALSYM ACCESS_FAIL_ACL}
  2414.   ACCESS_FAIL_ACL             = $800;
  2415.   {$EXTERNALSYM ACCESS_FAIL_MASK}
  2416.   ACCESS_FAIL_MASK            = $F00;
  2417.   {$EXTERNALSYM ACCESS_FAIL_SHIFT}
  2418.   ACCESS_FAIL_SHIFT           = 4;
  2419. // Parmnum value for NetAccessSetInfo.
  2420.   {$EXTERNALSYM ACCESS_RESOURCE_NAME_PARMNUM}
  2421.   ACCESS_RESOURCE_NAME_PARMNUM    = 1;
  2422.   {$EXTERNALSYM ACCESS_ATTR_PARMNUM}
  2423.   ACCESS_ATTR_PARMNUM             = 2;
  2424.   {$EXTERNALSYM ACCESS_COUNT_PARMNUM}
  2425.   ACCESS_COUNT_PARMNUM            = 3;
  2426.   {$EXTERNALSYM ACCESS_ACCESS_LIST_PARMNUM}
  2427.   ACCESS_ACCESS_LIST_PARMNUM      = 4;
  2428. // the new infolevel counterparts of the old info level + parmnum
  2429.   {$EXTERNALSYM ACCESS_RESOURCE_NAME_INFOLEVEL}
  2430.   ACCESS_RESOURCE_NAME_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + ACCESS_RESOURCE_NAME_PARMNUM);
  2431.   {$EXTERNALSYM ACCESS_ATTR_INFOLEVEL}
  2432.   ACCESS_ATTR_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + ACCESS_ATTR_PARMNUM);
  2433.   {$EXTERNALSYM ACCESS_COUNT_INFOLEVEL}
  2434.   ACCESS_COUNT_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + ACCESS_COUNT_PARMNUM);
  2435.   {$EXTERNALSYM ACCESS_ACCESS_LIST_INFOLEVEL}
  2436.   ACCESS_ACCESS_LIST_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + ACCESS_ACCESS_LIST_PARMNUM);
  2437. // ACCESS_LETTERS defines a letter for each bit position in
  2438. // the acl_access field of struct access_list.  Note that some
  2439. // bits have a corresponding letter of ' ' (space).
  2440.   {$EXTERNALSYM ACCESS_LETTERS}
  2441.   ACCESS_LETTERS = 'RWCXDAP         ';
  2442. // Domain Class
  2443. // Function Prototypes - Domain
  2444. {$EXTERNALSYM NetGetDCName}
  2445. function NetGetDCName(servername: LPCWSTR; domainname: LPCWSTR;
  2446.   bufptr: Pointer): NET_API_STATUS; stdcall;
  2447. {$EXTERNALSYM NetGetAnyDCName}
  2448. function NetGetAnyDCName(servername: LPCWSTR; domainname: LPCWSTR;
  2449.   bufptr: Pointer): NET_API_STATUS; stdcall;
  2450. {$EXTERNALSYM I_NetLogonControl}
  2451. function I_NetLogonControl(ServerName: LPCWSTR; FunctionCode: DWORD;
  2452.   QueryLevel: DWORD; Buffer: Pointer): NET_API_STATUS; stdcall;
  2453. {$EXTERNALSYM I_NetLogonControl2}
  2454. function I_NetLogonControl2(ServerName: LPCWSTR; FunctionCode: DWORD;
  2455.   QueryLevel: DWORD; Data: Pointer; Buffer: Pointer): NET_API_STATUS; stdcall;
  2456. type
  2457.   PNtStatus = ^TNtStatus;
  2458.   NTSTATUS = LongInt;
  2459.   {$EXTERNALSYM NTSTATUS}
  2460.   TNtStatus = NTSTATUS;
  2461. {$EXTERNALSYM NetEnumerateTrustedDomains}
  2462. function NetEnumerateTrustedDomains(ServerName: LPWSTR; var DomainNames: LPWSTR): NET_API_STATUS; stdcall;
  2463. // Special Values and Constants - Domain
  2464. // FunctionCode values for I_NetLogonControl.
  2465. // NOTE : if you change the following NETLOGON_CONTROL_* values,
  2466. // change them in netsvcdllslogonsrvlogon.idl file also.
  2467. const
  2468.   {$EXTERNALSYM NETLOGON_CONTROL_QUERY}
  2469.   NETLOGON_CONTROL_QUERY         = 1;    // No-op: just query
  2470.   {$EXTERNALSYM NETLOGON_CONTROL_REPLICATE}
  2471.   NETLOGON_CONTROL_REPLICATE     = 2;    // Force replicate on BDC
  2472.   {$EXTERNALSYM NETLOGON_CONTROL_SYNCHRONIZE}
  2473.   NETLOGON_CONTROL_SYNCHRONIZE   = 3;    // Force synchronize on BDC
  2474.   {$EXTERNALSYM NETLOGON_CONTROL_PDC_REPLICATE}
  2475.   NETLOGON_CONTROL_PDC_REPLICATE = 4;    // Force PDC to broadcast change
  2476.   {$EXTERNALSYM NETLOGON_CONTROL_REDISCOVER}
  2477.   NETLOGON_CONTROL_REDISCOVER    = 5;    // Force to re-discover trusted domain DCs
  2478.   {$EXTERNALSYM NETLOGON_CONTROL_TC_QUERY}
  2479.   NETLOGON_CONTROL_TC_QUERY      = 6;    // Query status of specified trusted channel status
  2480.   {$EXTERNALSYM NETLOGON_CONTROL_TRANSPORT_NOTIFY}
  2481.   NETLOGON_CONTROL_TRANSPORT_NOTIFY = 7; // Notify netlogon that a new transport has come online
  2482.   {$EXTERNALSYM NETLOGON_CONTROL_FIND_USER}
  2483.   NETLOGON_CONTROL_FIND_USER     = 8;    // Find named user in a trusted domain
  2484.   {$EXTERNALSYM NETLOGON_CONTROL_CHANGE_PASSWORD}
  2485.   NETLOGON_CONTROL_CHANGE_PASSWORD  = 9;  // Change machine password on a secure channel to a trusted domain
  2486. // Debug function codes
  2487.   {$EXTERNALSYM NETLOGON_CONTROL_UNLOAD_NETLOGON_DLL}
  2488.   NETLOGON_CONTROL_UNLOAD_NETLOGON_DLL = $FFFB;
  2489.   {$EXTERNALSYM NETLOGON_CONTROL_BACKUP_CHANGE_LOG}
  2490.   NETLOGON_CONTROL_BACKUP_CHANGE_LOG   = $FFFC;
  2491.   {$EXTERNALSYM NETLOGON_CONTROL_TRUNCATE_LOG}
  2492.   NETLOGON_CONTROL_TRUNCATE_LOG        = $FFFD;
  2493.   {$EXTERNALSYM NETLOGON_CONTROL_SET_DBFLAG}
  2494.   NETLOGON_CONTROL_SET_DBFLAG          = $FFFE;
  2495.   {$EXTERNALSYM NETLOGON_CONTROL_BREAKPOINT}
  2496.   NETLOGON_CONTROL_BREAKPOINT          = $FFFF;
  2497. // Query level 1 for I_NetLogonControl
  2498. type
  2499.   PNetLogonInfo1 = ^TNetLogonInfo1;
  2500.   {$EXTERNALSYM _NETLOGON_INFO_1}
  2501.   _NETLOGON_INFO_1 = record
  2502.     netlog1_flags: DWORD;
  2503.     netlog1_pdc_connection_status: NET_API_STATUS;
  2504.   end;
  2505.   TNetLogonInfo1 = _NETLOGON_INFO_1;
  2506.   {$EXTERNALSYM NETLOGON_INFO_1}
  2507.   NETLOGON_INFO_1 = _NETLOGON_INFO_1;
  2508.   PNetLogonInfo2 = ^TNetLogonInfo2;
  2509.   {$EXTERNALSYM _NETLOGON_INFO_2}
  2510.   _NETLOGON_INFO_2 = record
  2511.     netlog2_flags: DWORD;
  2512.     netlog2_pdc_connection_status: NET_API_STATUS;
  2513.     netlog2_trusted_dc_name: LPWSTR;
  2514.     netlog2_tc_connection_status: NET_API_STATUS;
  2515.   end;
  2516.   TNetLogonInfo2 = _NETLOGON_INFO_2;
  2517.   {$EXTERNALSYM NETLOGON_INFO_2}
  2518.   NETLOGON_INFO_2 = _NETLOGON_INFO_2;
  2519.   PNetLogonInfo3 = ^TNetLogonInfo3;
  2520.   {$EXTERNALSYM _NETLOGON_INFO_3}
  2521.   _NETLOGON_INFO_3 = record
  2522.     netlog3_flags: DWORD;
  2523.     netlog3_logon_attempts: DWORD;
  2524.     netlog3_reserved1: DWORD;
  2525.     netlog3_reserved2: DWORD;
  2526.     netlog3_reserved3: DWORD;
  2527.     netlog3_reserved4: DWORD;
  2528.     netlog3_reserved5: DWORD;
  2529.   end;
  2530.   TNetLogonInfo3 = _NETLOGON_INFO_3;
  2531.   {$EXTERNALSYM NETLOGON_INFO_3}
  2532.   NETLOGON_INFO_3 = _NETLOGON_INFO_3;
  2533.   PNetLogonInfo4 = ^TNetLogonInfo4;
  2534.   {$EXTERNALSYM _NETLOGON_INFO_4}
  2535.   _NETLOGON_INFO_4 = record
  2536.     netlog4_trusted_dc_name: LPWSTR;
  2537.     netlog4_trusted_domain_name: LPWSTR;
  2538.   end;
  2539.   TNetLogonInfo4 = _NETLOGON_INFO_4;
  2540.   {$EXTERNALSYM NETLOGON_INFO_4}
  2541.   NETLOGON_INFO_4 = _NETLOGON_INFO_4;
  2542. // Values of netlog1_flags
  2543. const
  2544.   {$EXTERNALSYM NETLOGON_REPLICATION_NEEDED}
  2545.   NETLOGON_REPLICATION_NEEDED       = $01;  // Database is out of date
  2546.   {$EXTERNALSYM NETLOGON_REPLICATION_IN_PROGRESS}
  2547.   NETLOGON_REPLICATION_IN_PROGRESS  = $02;  // Replication is happening now
  2548.   {$EXTERNALSYM NETLOGON_FULL_SYNC_REPLICATION}
  2549.   NETLOGON_FULL_SYNC_REPLICATION    = $04;  // full sync replication required/progress
  2550.   {$EXTERNALSYM NETLOGON_REDO_NEEDED}
  2551.   NETLOGON_REDO_NEEDED              = $08;  // Redo of previous replication needed
  2552.   {$EXTERNALSYM NETLOGON_HAS_IP}
  2553.   NETLOGON_HAS_IP                   = $10;  // The trusted domain DC has an IP address
  2554.   {$EXTERNALSYM NETLOGON_HAS_TIMESERV}
  2555.   NETLOGON_HAS_TIMESERV             = $20;  // The trusted domain DC runs the Windows Time Service
  2556. // Translated from LMALERT.H
  2557. // Function Prototypes
  2558. {$EXTERNALSYM NetAlertRaise}
  2559. function NetAlertRaise(AlertEventName: LPCWSTR; Buffer: Pointer;
  2560.   BufferSize: DWORD): NET_API_STATUS; stdcall;
  2561. {$EXTERNALSYM NetAlertRaiseEx}
  2562. function NetAlertRaiseEx(AlertEventName: LPCWSTR; VariableInfo: Pointer;
  2563.   VariableInfoSize: DWORD; ServiceName: LPCWSTR): NET_API_STATUS; stdcall;
  2564. //  Data Structures
  2565. type
  2566.   PStdAlert = ^TStdAlert;
  2567.   {$EXTERNALSYM _STD_ALERT}
  2568.   _STD_ALERT = record
  2569.     alrt_timestamp: DWORD;
  2570.     alrt_eventname: packed array[0..EVLEN] of WCHAR;
  2571.     alrt_servicename: packed array[0..SNLEN] of WCHAR;
  2572.   end;
  2573.   TStdAlert = _STD_ALERT;
  2574.   STD_ALERT = _STD_ALERT;
  2575.   {$EXTERNALSYM STD_ALERT}
  2576.   PAdminOtherInfo = ^TAdminOtherInfo;
  2577.   {$EXTERNALSYM _ADMIN_OTHER_INFO}
  2578.   _ADMIN_OTHER_INFO = record
  2579.     alrtad_errcode: DWORD;
  2580.     alrtad_numstrings: DWORD;
  2581.   end;
  2582.   TAdminOtherInfo = _ADMIN_OTHER_INFO;
  2583.   ADMIN_OTHER_INFO = _ADMIN_OTHER_INFO;
  2584.   {$EXTERNALSYM ADMIN_OTHER_INFO}
  2585.   PErrorOtherInfo = ^TErrorOtherInfo;
  2586.   {$EXTERNALSYM _ERRLOG_OTHER_INFO}
  2587.   _ERRLOG_OTHER_INFO = record
  2588.     alrter_errcode: DWORD;
  2589.     alrter_offset: DWORD;
  2590.   end;
  2591.   TErrorOtherInfo = _ERRLOG_OTHER_INFO;
  2592.   ERRLOG_OTHER_INFO = _ERRLOG_OTHER_INFO;
  2593.   {$EXTERNALSYM ERRLOG_OTHER_INFO}
  2594.   PPrintOtherInfo = ^TPrintOtherInfo;
  2595.   {$EXTERNALSYM _PRINT_OTHER_INFO}
  2596.   _PRINT_OTHER_INFO = record
  2597.     alrtpr_jobid: DWORD;
  2598.     alrtpr_status: DWORD;
  2599.     alrtpr_submitted: DWORD;
  2600.     alrtpr_size: DWORD;
  2601.   end;
  2602.   TPrintOtherInfo = _PRINT_OTHER_INFO;
  2603.   PRINT_OTHER_INFO = _PRINT_OTHER_INFO;
  2604.   {$EXTERNALSYM PRINT_OTHER_INFO}
  2605.   PUserOtherInfo = ^TUserOtherInfo;
  2606.   {$EXTERNALSYM _USER_OTHER_INFO}
  2607.   _USER_OTHER_INFO = record
  2608.     alrtus_errcode: DWORD;
  2609.     alrtus_numstrings: DWORD;
  2610.   end;
  2611.   TUserOtherInfo = _USER_OTHER_INFO;
  2612.   USER_OTHER_INFO = _USER_OTHER_INFO;
  2613.   {$EXTERNALSYM USER_OTHER_INFO}
  2614. // Special Values and Constants
  2615. // Name of mailslot to send alert notifications
  2616. const
  2617.   {$EXTERNALSYM ALERTER_MAILSLOT}
  2618.   ALERTER_MAILSLOT = '\.MAILSLOTAlerter';
  2619. // The following macro gives a pointer to the other_info data.
  2620. // It takes an alert structure and returns a pointer to structure
  2621. // beyond the standard portion.
  2622.   function ALERT_OTHER_INFO(x: Pointer): Pointer;
  2623. //((LPBYTE)(x) + sizeof(STD_ALERT))
  2624. // The following macro gives a pointer to the variable-length data.
  2625. // It takes a pointer to one of the other-info structs and returns a
  2626. // pointer to the variable data portion.
  2627.   function ALERT_VAR_DATA(const p): Pointer;
  2628. //((LPBYTE)(p) + sizeof(*p))
  2629. //      Names of standard Microsoft-defined alert events.
  2630. const
  2631.   {$EXTERNALSYM ALERT_PRINT_EVENT}
  2632.   ALERT_PRINT_EVENT           = 'PRINTING';
  2633.   {$EXTERNALSYM ALERT_MESSAGE_EVENT}