#ifndef _SVRAPI_H
#define _SVRAPI_H

/* NetAccess, NetConnection, NetFile, NetServer, NetSession, NetShare and NetSecurity API definitions */

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

#include <pshpack1.h>

#ifdef __cplusplus
extern "C" {
#endif

#define API_FUNCTION  DECLSPEC_IMPORT API_RET_TYPE APIENTRY

#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         "

#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

#define SESS_GUEST  1
#define SESS_NOENCRYPTION  2
#define SESI1_NUM_ELEMENTS  8
#define SESI2_NUM_ELEMENTS  9

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

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

#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

#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

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;
};

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];
};

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;
};

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;
};

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;
};

typedef struct res_file_enum_2 FRK;

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;
};

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

extern API_FUNCTION NetAccessAdd(const char*, short,char*,unsigned short);
extern API_FUNCTION NetAccessCheck(char*,char*,char*,unsigned short,unsigned short*);
extern API_FUNCTION NetAccessDel(const char*,char*);
extern API_FUNCTION NetAccessEnum(const char*,char*,short,short,char*,unsigned short,unsigned short*,unsigned short*);
extern API_FUNCTION NetAccessGetInfo(const char*,char*,short,char*,unsigned short,unsigned short*);
extern API_FUNCTION NetAccessSetInfo(const char*,char*,short,char*,unsigned short,short);
extern API_FUNCTION NetAccessGetUserPerms(char*,char*,char*, unsigned short*);
extern API_FUNCTION NetShareAdd(const char*,short,const char*,unsigned short);
extern API_FUNCTION NetShareDel(const char*,const char*,unsigned short);
extern API_FUNCTION NetShareEnum(const char*,short,char*,unsigned short,unsigned short*,unsigned short*);
extern API_FUNCTION NetShareGetInfo(const char*,const char*,short,char*, unsigned short, unsigned short*);
extern API_FUNCTION NetShareSetInfo(const char*,const char*,short,const char*,unsigned short,short);
extern API_FUNCTION NetSessionDel(const char*,const char*,short);
extern API_FUNCTION NetSessionEnum(const char*, short,char*,unsigned short,unsigned short*, unsigned short*);
extern API_FUNCTION NetSessionGetInfo(const char*,const char*,short,char*,unsigned short, unsigned short*);
extern API_FUNCTION NetConnectionEnum(const char*,const char*,short,char*,unsigned short,unsigned short*, unsigned short*);
extern API_FUNCTION NetFileClose2(const char*, unsigned long);
extern API_FUNCTION NetFileEnum(const char*, const char*,short,char*,unsigned short,unsigned short*,unsigned short*);
extern API_FUNCTION NetServerGetInfo(const char*, short,char*,unsigned short,unsigned short*);
extern API_FUNCTION NetSecurityGetInfo(const char*,short,char*,unsigned short,unsigned short*);

#ifdef __cplusplus
}
#endif

#include <poppack.h>

#endif /* _SVRAPI_H */
