/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
#ifndef SVRAPI_INCLUDED
#define SVRAPI_INCLUDED

#include <lmcons.h>
#include <lmerr.h>

#ifndef RC_INVOKED
#pragma pack(1)
#endif

#ifdef __cplusplus
extern "C" {
#endif

#ifndef _SVRAPI_
#define API_FUNCTION DECLSPEC_IMPORT API_RET_TYPE WINAPI
#else
#define API_FUNCTION API_RET_TYPE WINAPI
#endif

  extern API_FUNCTION NetAccessAdd(const char *pszServer,short sLevel,char *pbBuffer,unsigned short cbBuffer);
  extern API_FUNCTION NetAccessCheck (char *pszReserved,char *pszUserName,char *pszResource,unsigned short usOperation,unsigned short *pusResult);
  extern API_FUNCTION NetAccessDel(const char *pszServer,char *pszResource);
  extern API_FUNCTION NetAccessEnum(const char *pszServer,char *pszBasePath,short fsRecursive,short sLevel,char *pbBuffer,unsigned short cbBuffer,unsigned short *pcEntriesRead,unsigned short *pcTotalAvail);
  extern API_FUNCTION NetAccessGetInfo(const char *pszServer,char *pszResource,short sLevel,char *pbBuffer,unsigned short cbBuffer,unsigned short *pcbTotalAvail);
  extern API_FUNCTION NetAccessSetInfo(const char *pszServer,char *pszResource,short sLevel,char *pbBuffer,unsigned short cbBuffer,short sParmNum);
  extern API_FUNCTION NetAccessGetUserPerms (char *pszServer,char *pszUgName,char *pszResource,unsigned short *pusPerms);

  struct access_list {
    char acl_ugname[LM20_UNLEN+1];
    char acl_ugname_pad_1;
    short acl_access;
  };

  struct access_list_2 {
    char *acl2_ugname;
    unsigned short acl2_access;
  };

  struct access_list_12 {
    char *acl12_ugname;
    unsigned short acl12_access;
  };

  struct access_info_0 {
    char *acc0_resource_name;
  };

  struct access_info_1 {
    char *acc1_resource_name;
    short acc1_attr;
    short acc1_count;
  };

  struct access_info_2 {
    char *acc2_resource_name;
    short acc2_attr;
    short acc2_count;
  };

  struct access_info_10 {
    char *acc10_resource_name;
  };

  struct access_info_12 {
    char *acc12_resource_name;
    short acc12_attr;
    short acc12_count;
  };

#define MAXPERMENTRIES 64

#define ACCESS_NONE 0
#define ACCESS_ALL (ACCESS_READ|ACCESS_WRITE|ACCESS_CREATE|ACCESS_EXEC|ACCESS_DELETE|ACCESS_ATRIB|ACCESS_PERM|ACCESS_FINDFIRST)

#define ACCESS_READ 0x1
#define ACCESS_WRITE 0x2
#define ACCESS_CREATE 0x4
#define ACCESS_EXEC 0x8
#define ACCESS_DELETE 0x10
#define ACCESS_ATRIB 0x20
#define ACCESS_PERM 0x40
#define ACCESS_FINDFIRST 0x80
#define ACCESS_GROUP 0x8000
#define ACCESS_AUDIT 0x1
#define ACCESS_ATTR_PARMNUM 2
#define ACCESS_LETTERS "RWCXDAP         "

  extern API_FUNCTION NetShareAdd(const char *pszServer,short sLevel,const char *pbBuffer,unsigned short cbBuffer);
  extern API_FUNCTION NetShareDel(const char *pszServer,const char *pszNetName,unsigned short usReserved);
  extern API_FUNCTION NetShareEnum(const char *pszServer,short sLevel,char *pbBuffer,unsigned short cbBuffer,unsigned short *pcEntriesRead,unsigned short *pcTotalAvail);
  extern API_FUNCTION NetShareGetInfo(const char *pszServer,const char *pszNetName,short sLevel,char *pbBuffer,unsigned short cbBuffer,unsigned short *pcbTotalAvail);
  extern API_FUNCTION NetShareSetInfo(const char *pszServer,const char *pszNetName,short sLevel,const char *pbBuffer,unsigned short cbBuffer,short sParmNum);

  struct share_info_0 {
    char shi0_netname[LM20_NNLEN+1];
  };

  struct share_info_1 {
    char shi1_netname[LM20_NNLEN+1];
    char shi1_pad1;
    unsigned short shi1_type;
    char *shi1_remark;
  };

  struct share_info_2 {
    char shi2_netname[LM20_NNLEN+1];
    char shi2_pad1;
    unsigned short shi2_type;
    char *shi2_remark;
    unsigned short shi2_permissions;
    unsigned short shi2_max_uses;
    unsigned short shi2_current_uses;
    char *shi2_path;
    char shi2_passwd[SHPWLEN+1];
    char shi2_pad2;
  };

  struct share_info_50 {
    char shi50_netname[LM20_NNLEN+1];
    unsigned char shi50_type;
    unsigned short shi50_flags;
    char *shi50_remark;
    char *shi50_path;
    char shi50_rw_password[SHPWLEN+1];
    char shi50_ro_password[SHPWLEN+1];
  };

#define SHI50F_RDONLY 0x0001
#define SHI50F_FULL 0x0002
#define SHI50F_DEPENDSON (SHI50F_RDONLY|SHI50F_FULL)
#define SHI50F_ACCESSMASK (SHI50F_RDONLY|SHI50F_FULL)

#define SHI50F_PERSIST 0x0100

#define SHI50F_SYSTEM 0x0200

#ifndef PARMNUM_ALL
#define PARMNUM_ALL 0
#endif

#define SHI_REMARK_PARMNUM 4
#define SHI_PERMISSIONS_PARMNUM 5
#define SHI_MAX_USES_PARMNUM 6
#define SHI_PASSWD_PARMNUM 9

#define SHI1_NUM_ELEMENTS 4
#define SHI2_NUM_ELEMENTS 10

#define STYPE_DISKTREE 0
#define STYPE_PRINTQ 1
#define STYPE_DEVICE 2
#define STYPE_IPC 3

#define SHI_USES_UNLIMITED -1

  extern API_FUNCTION NetSessionDel(const char *pszServer,const char *pszClientName,short sReserved);
  extern API_FUNCTION NetSessionEnum(const char *pszServer,short sLevel,char *pbBuffer,unsigned short cbBuffer,unsigned short *pcEntriesRead,unsigned short *pcTotalAvail);
  extern API_FUNCTION NetSessionGetInfo(const char *pszServer,const char *pszClientName,short sLevel,char *pbBuffer,unsigned short cbBuffer,unsigned short *pcbTotalAvail);

  struct session_info_0 {
    char *sesi0_cname;
  };

  struct session_info_1 {
    char *sesi1_cname;
    char *sesi1_username;
    unsigned short sesi1_num_conns;
    unsigned short sesi1_num_opens;
    unsigned short sesi1_num_users;
    unsigned long sesi1_time;
    unsigned long sesi1_idle_time;
    unsigned long sesi1_user_flags;
  };

  struct session_info_2 {
    char *sesi2_cname;
    char *sesi2_username;
    unsigned short sesi2_num_conns;
    unsigned short sesi2_num_opens;
    unsigned short sesi2_num_users;
    unsigned long sesi2_time;
    unsigned long sesi2_idle_time;
    unsigned long sesi2_user_flags;
    char *sesi2_cltype_name;
  };

  struct session_info_10 {
    char *sesi10_cname;
    char *sesi10_username;
    unsigned long sesi10_time;
    unsigned long sesi10_idle_time;
  };

  struct session_info_50 {
    char *sesi50_cname;
    char *sesi50_username;
    unsigned long sesi50_key;
    unsigned short sesi50_num_conns;
    unsigned short sesi50_num_opens;
    unsigned long sesi50_time;
    unsigned long sesi50_idle_time;
    unsigned char sesi50_protocol;
    unsigned char pad1;
  };

#define SESS_GUEST 1
#define SESS_NOENCRYPTION 2

#define SESI1_NUM_ELEMENTS 8
#define SESI2_NUM_ELEMENTS 9

  extern API_FUNCTION NetConnectionEnum(const char *pszServer,const char *pszQualifier,short sLevel,char *pbBuffer,unsigned short cbBuffer,unsigned short *pcEntriesRead,unsigned short *pcTotalAvail);

  struct connection_info_0 {
    unsigned short coni0_id;
  };

  struct connection_info_1 {
    unsigned short coni1_id;
    unsigned short coni1_type;
    unsigned short coni1_num_opens;
    unsigned short coni1_num_users;
    unsigned long coni1_time;
    char *coni1_username;
    char *coni1_netname;
  };

  struct connection_info_50 {
    unsigned short coni50_type;
    unsigned short coni50_num_opens;
    unsigned long coni50_time;
    char *coni50_netname;
    char *coni50_username;
  };

  extern API_FUNCTION NetFileClose2(const char *pszServer,unsigned long ulFileId);
  extern API_FUNCTION NetFileEnum(const char *pszServer,const char *pszBasePath,short sLevel,char *pbBuffer,unsigned short cbBuffer,unsigned short *pcEntriesRead,unsigned short *pcTotalAvail);

  struct file_info_0 {
    unsigned short fi0_id;
  };

  struct file_info_1 {
    unsigned short fi1_id;
    unsigned short fi1_permissions;
    unsigned short fi1_num_locks;
    char *fi1_pathname;
    char *fi1_username;
  };

  struct file_info_2 {
    unsigned long fi2_id;
  };

  struct file_info_3 {
    unsigned long fi3_id;
    unsigned short fi3_permissions;
    unsigned short fi3_num_locks;
    char *fi3_pathname;
    char *fi3_username;
  };

  struct file_info_50 {
    unsigned long fi50_id;
    unsigned short fi50_permissions;
    unsigned short fi50_num_locks;
    char *fi50_pathname;
    char *fi50_username;
    char *fi50_sharename;
  };

  struct res_file_enum_2 {
    unsigned short res_pad;
    unsigned short res_fs;
    unsigned long res_pro;
  };

#define PERM_FILE_READ 0x1
#define PERM_FILE_WRITE 0x2
#define PERM_FILE_CREATE 0x4

  typedef struct res_file_enum_2 FRK;

#define FRK_INIT(f) { (f).res_pad = 0; (f).res_fs = 0; (f).res_pro = 0; }

  extern API_FUNCTION NetServerGetInfo(const char *pszServer,short sLevel,char *pbBuffer,unsigned short cbBuffer,unsigned short *pcbTotalAvail);

  struct server_info_0 {
    char sv0_name[CNLEN + 1];
  };

  struct server_info_1 {
    char sv1_name[CNLEN + 1];
    unsigned char sv1_version_major;
    unsigned char sv1_version_minor;
    unsigned long sv1_type;
    char *sv1_comment;
  };

  struct server_info_50 {
    char sv50_name[CNLEN + 1];
    unsigned char sv50_version_major;
    unsigned char sv50_version_minor;
    unsigned long sv50_type;
    char *sv50_comment;
    unsigned short sv50_security;
    unsigned short sv50_auditing;
    char *sv50_container;
    char *sv50_ab_server;
    char *sv50_ab_dll;
  };

  struct server_info_2 {
    char sv2_name[CNLEN + 1];
    unsigned char sv2_version_major;
    unsigned char sv2_version_minor;
    unsigned long sv2_type;
    char *sv2_comment;
    unsigned long sv2_ulist_mtime;
    unsigned long sv2_glist_mtime;
    unsigned long sv2_alist_mtime;
    unsigned short sv2_users;
    unsigned short sv2_disc;
    char *sv2_alerts;
    unsigned short sv2_security;
    unsigned short sv2_auditing;
    unsigned short sv2_numadmin;
    unsigned short sv2_lanmask;
    unsigned short sv2_hidden;
    unsigned short sv2_announce;
    unsigned short sv2_anndelta;
    char sv2_guestacct[LM20_UNLEN + 1];
    unsigned char sv2_pad1;
    char *sv2_userpath;
    unsigned short sv2_chdevs;
    unsigned short sv2_chdevq;
    unsigned short sv2_chdevjobs;
    unsigned short sv2_connections;
    unsigned short sv2_shares;
    unsigned short sv2_openfiles;
    unsigned short sv2_sessopens;
    unsigned short sv2_sessvcs;
    unsigned short sv2_sessreqs;
    unsigned short sv2_opensearch;
    unsigned short sv2_activelocks;
    unsigned short sv2_numreqbuf;
    unsigned short sv2_sizreqbuf;
    unsigned short sv2_numbigbuf;
    unsigned short sv2_numfiletasks;
    unsigned short sv2_alertsched;
    unsigned short sv2_erroralert;
    unsigned short sv2_logonalert;
    unsigned short sv2_accessalert;
    unsigned short sv2_diskalert;
    unsigned short sv2_netioalert;
    unsigned short sv2_maxauditsz;
    char *sv2_srvheuristics;
  };

  struct server_info_3 {
    char sv3_name[CNLEN + 1];
    unsigned char sv3_version_major;
    unsigned char sv3_version_minor;
    unsigned long sv3_type;
    char *sv3_comment;
    unsigned long sv3_ulist_mtime;
    unsigned long sv3_glist_mtime;
    unsigned long sv3_alist_mtime;
    unsigned short sv3_users;
    unsigned short sv3_disc;
    char *sv3_alerts;
    unsigned short sv3_security;
    unsigned short sv3_auditing;
    unsigned short sv3_numadmin;
    unsigned short sv3_lanmask;
    unsigned short sv3_hidden;
    unsigned short sv3_announce;
    unsigned short sv3_anndelta;
    char sv3_guestacct[LM20_UNLEN + 1];
    unsigned char sv3_pad1;
    char *sv3_userpath;
    unsigned short sv3_chdevs;
    unsigned short sv3_chdevq;
    unsigned short sv3_chdevjobs;
    unsigned short sv3_connections;
    unsigned short sv3_shares;
    unsigned short sv3_openfiles;
    unsigned short sv3_sessopens;
    unsigned short sv3_sessvcs;
    unsigned short sv3_sessreqs;
    unsigned short sv3_opensearch;
    unsigned short sv3_activelocks;
    unsigned short sv3_numreqbuf;
    unsigned short sv3_sizreqbuf;
    unsigned short sv3_numbigbuf;
    unsigned short sv3_numfiletasks;
    unsigned short sv3_alertsched;
    unsigned short sv3_erroralert;
    unsigned short sv3_logonalert;
    unsigned short sv3_accessalert;
    unsigned short sv3_diskalert;
    unsigned short sv3_netioalert;
    unsigned short sv3_maxauditsz;
    char *sv3_srvheuristics;
    unsigned long sv3_auditedevents;
    unsigned short sv3_autoprofile;
    char *sv3_autopath;
  };

#define MAJOR_VERSION_MASK 0x0F

#define SV_TYPE_WORKSTATION 0x00000001
#define SV_TYPE_SERVER 0x00000002
#define SV_TYPE_SQLSERVER 0x00000004
#define SV_TYPE_DOMAIN_CTRL 0x00000008
#define SV_TYPE_DOMAIN_BAKCTRL 0x00000010
#define SV_TYPE_TIME_SOURCE 0x00000020
#define SV_TYPE_AFP 0x00000040
#define SV_TYPE_NOVELL 0x00000080
#define SV_TYPE_DOMAIN_MEMBER 0x00000100
#define SV_TYPE_PRINTQ_SERVER 0x00000200
#define SV_TYPE_DIALIN_SERVER 0x00000400
#define SV_TYPE_ALL 0xFFFFFFFF

#define SV_NODISC 0xFFFF

#define SV_USERSECURITY 1
#define SV_SHARESECURITY 0

#define SV_SECURITY_SHARE 0
#define SV_SECURITY_WINNT 1
#define SV_SECURITY_WINNTAS 2
#define SV_SECURITY_NETWARE 3

#define SV_HIDDEN 1
#define SV_VISIBLE 0

#define SVI1_NUM_ELEMENTS 5
#define SVI2_NUM_ELEMENTS 44
#define SVI3_NUM_ELEMENTS 45

#define SW_AUTOPROF_LOAD_MASK 0x1
#define SW_AUTOPROF_SAVE_MASK 0x2

  extern API_FUNCTION NetSecurityGetInfo(const char *pszServer,short sLevel,char *pbBuffer,unsigned short cbBuffer,unsigned short *pcbTotalAvail);

  struct security_info_1 {
    unsigned long sec1_security;
    char *sec1_container;
    char *sec1_ab_server;
    char *sec1_ab_dll;
  };

#define SEC_SECURITY_SHARE SV_SECURITY_SHARE
#define SEC_SECURITY_WINNT SV_SECURITY_WINNT
#define SEC_SECURITY_WINNTAS SV_SECURITY_WINNTAS
#define SEC_SECURITY_NETWARE SV_SECURITY_NETWARE

#ifdef __cplusplus
}
#endif

#ifndef RC_INVOKED
#pragma pack()
#endif
#endif
