Vanara/PInvoke/NetApi32/LmServer.cs

2569 lines
111 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Runtime.InteropServices;
namespace Vanara.PInvoke
{
/// <summary>Platform invokable enumerated types, constants and functions from netapi32.h</summary>
public static partial class NetApi32
{
/// <summary>
/// A constant of type DWORD that is set to 1. This value is valid as an input parameter to any method that takes a
/// PreferedMaximumLength parameter. When specified as an input parameter, this value indicates that the method MUST allocate as much
/// space as the data requires.
/// </summary>
public const uint MAX_PREFERRED_LENGTH = unchecked((uint)-1);
/// <summary>Filters used by <see cref="NetServerEnum(string, uint, out SafeNetApiBuffer, uint, out uint, out uint, NetServerEnumFilter, string, IntPtr)"/>.</summary>
[Flags]
[PInvokeData("lmserver.h", MSDNShortId = "aa370623")]
public enum NetServerEnumFilter : uint
{
/// <summary>All workstations.</summary>
SV_TYPE_WORKSTATION = 0x00000001,
/// <summary>All computers that run the Server service.</summary>
SV_TYPE_SERVER = 0x00000002,
/// <summary>Any server that runs an instance of Microsoft SQL Server.</summary>
SV_TYPE_SQLSERVER = 0x00000004,
/// <summary>A server that is primary domain controller.</summary>
SV_TYPE_DOMAIN_CTRL = 0x00000008,
/// <summary>Any server that is a backup domain controller.</summary>
SV_TYPE_DOMAIN_BAKCTRL = 0x00000010,
/// <summary>Any server that runs the Timesource service.</summary>
SV_TYPE_TIME_SOURCE = 0x00000020,
/// <summary>Any server that runs the Apple Filing Protocol (AFP) file service.</summary>
SV_TYPE_AFP = 0x00000040,
/// <summary>Any server that is a Novell server.</summary>
SV_TYPE_NOVELL = 0x00000080,
/// <summary>Any computer that is LAN Manager 2.x domain member.</summary>
SV_TYPE_DOMAIN_MEMBER = 0x00000100,
/// <summary>Any computer that shares a print queue.</summary>
SV_TYPE_PRINTQ_SERVER = 0x00000200,
/// <summary>Any server that runs a dial-in service.</summary>
SV_TYPE_DIALIN_SERVER = 0x00000400,
/// <summary>Any server that is a Xenix server.</summary>
SV_TYPE_XENIX_SERVER = 0x00000800,
/// <summary>Any server that is a UNIX server. This is the same as the SV_TYPE_XENIX_SERVER.</summary>
SV_TYPE_SERVER_UNIX = 0x00000800,
/// <summary>A workstation or server.</summary>
SV_TYPE_NT = 0x00001000,
/// <summary>Any computer that runs Windows for Workgroups.</summary>
SV_TYPE_WFW = 0x00002000,
/// <summary>Any server that runs the Microsoft File and Print for NetWare service.</summary>
SV_TYPE_SERVER_MFPN = 0x00004000,
/// <summary>Any server that is not a domain controller.</summary>
SV_TYPE_SERVER_NT = 0x00008000,
/// <summary>Any computer that can run the browser service.</summary>
SV_TYPE_POTENTIAL_BROWSER = 0x00010000,
/// <summary>A computer that runs a browser service as backup.</summary>
SV_TYPE_BACKUP_BROWSER = 0x00020000,
/// <summary>A computer that runs the master browser service.</summary>
SV_TYPE_MASTER_BROWSER = 0x00040000,
/// <summary>A computer that runs the domain master browser.</summary>
SV_TYPE_DOMAIN_MASTER = 0x00080000,
/// <summary>A computer that runs OSF/1.</summary>
SV_TYPE_SERVER_OSF = 0x00100000,
/// <summary>A computer that runs Open Virtual Memory System (VMS).</summary>
SV_TYPE_SERVER_VMS = 0x00200000,
/// <summary>A computer that runs Windows.</summary>
SV_TYPE_WINDOWS = 0x00400000,
/// <summary>A computer that is the root of Distributed File System (DFS) tree.</summary>
SV_TYPE_DFS = 0x00800000,
/// <summary>Server clusters available in the domain.</summary>
SV_TYPE_CLUSTER_NT = 0x01000000,
/// <summary>A server running the Terminal Server service.</summary>
SV_TYPE_TERMINALSERVER = 0x02000000,
/// <summary>
/// Cluster virtual servers available in the domain.
/// <para>Windows 2000: This value is not supported.</para>
/// </summary>
SV_TYPE_CLUSTER_VS_NT = 0x04000000,
/// <summary>A computer that runs IBM Directory and Security Services (DSS) or equivalent.</summary>
SV_TYPE_DCE = 0x10000000,
/// <summary>A computer that over an alternate transport.</summary>
SV_TYPE_ALTERNATE_XPORT = 0x20000000,
/// <summary>Any computer maintained in a list by the browser. See the following Remarks section.</summary>
SV_TYPE_LOCAL_LIST_ONLY = 0x40000000,
/// <summary>The primary domain.</summary>
SV_TYPE_DOMAIN_ENUM = 0x80000000,
/// <summary>All servers. This is a convenience that will return all possible servers.</summary>
SV_TYPE_ALL = 0xFFFFFFFF,
}
/// <summary>Flags used by <see cref="SERVER_TRANSPORT_INFO_2"/>.</summary>
[Flags]
[PInvokeData("lmserver.h")]
public enum SERVER_TRANSPORT_FLAGS : uint
{
/// <summary>
/// If this value is set for an endpoint, client requests arriving over the transport to open a named pipe are rerouted
/// (remapped) to the following local pipe name:
/// <para>
/// <code>
/// $$\ServerName\PipeName
/// </code>
/// </para>
/// </summary>
SVTI2_REMAP_PIPE_NAMES = 0x02,
/// <summary>
/// If this value is set for an endpoint and there is an attempt to create a second transport with the same network address but a
/// different transport name and conflicting settings for the SCOPED flag, this transport creation will fail. Thus, every
/// registered transport for a given network address must have the same scoped setting.
/// <para>This value is defined on Windows Server 2008 and Windows Vista with SP1.</para>
/// </summary>
SVTI2_SCOPED_NAME = 0x04,
/// <summary>The scope belongs to clustering.</summary>
SVTI2_CLUSTER_NAME = 0x08,
/// <summary>The scope belongs to scale-out clustering.</summary>
SVTI2_CLUSTER_DNN_NAME = 0x10,
/// <summary>The transport address field passed with the server transport info struct contains a unicode string.</summary>
SVTI2_UNICODE_TRANSPORT_ADDRESS = 0x20,
}
/// <summary>The information level to use for platform-specific information.</summary>
[PInvokeData("lmserver.h", MSDNShortId = "aa370903")]
public enum ServerPlatform
{
/// <summary>The MS-DOS platform.</summary>
PLATFORM_ID_DOS = 300,
/// <summary>The OS/2 platform.</summary>
PLATFORM_ID_OS2 = 400,
/// <summary>The Windows NT platform.</summary>
PLATFORM_ID_NT = 500,
/// <summary>The OSF platform.</summary>
PLATFORM_ID_OSF = 600,
/// <summary>The VMS platform.</summary>
PLATFORM_ID_VMS = 700
}
/// <summary>Inherit from this interface for any implementation of the SERVER_INFO_XXXX structures to use the helper functions.</summary>
public interface INetServerInfo { }
/// <summary>
/// <para>
/// The <c>NetServerComputerNameAdd</c> function enumerates the transports on which the specified server is active, and binds the
/// emulated server name to each of the transports.
/// </para>
/// <para>
/// <c>NetServerComputerNameAdd</c> is a utility function that combines the functionality of the NetServerTransportEnum function and
/// the NetServerTransportAddEx function.
/// </para>
/// </summary>
/// <param name="ServerName">
/// <para>
/// Pointer to a string that specifies the name of the remote server on which the function is to execute. If this parameter is
/// <c>NULL</c>, the local computer is used.
/// </para>
/// </param>
/// <param name="EmulatedDomainName">
/// <para>
/// Pointer to a string that contains the domain name the specified server should use when announcing its presence using the
/// EmulatedServerName. This parameter is optional.
/// </para>
/// </param>
/// <param name="EmulatedServerName">
/// <para>
/// Pointer to a null-terminated character string that contains the emulated name the server should begin supporting in addition to
/// the name specified by the ServerName parameter.
/// </para>
/// </param>
/// <returns>
/// <para>
/// If the function succeeds, the return value is NERR_Success. Note that <c>NetServerComputerNameAdd</c> succeeds if the emulated
/// server name specified is added to at least one transport.
/// </para>
/// <para>If the function fails, the return value can be one of the following error codes.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>ERROR_ACCESS_DENIED</term>
/// <term>The user does not have access to the requested information.</term>
/// </item>
/// <item>
/// <term>ERROR_DUP_NAME</term>
/// <term>A duplicate name exists on the network.</term>
/// </item>
/// <item>
/// <term>ERROR_INVALID_DOMAINNAME</term>
/// <term>The domain name could not be found on the network.</term>
/// </item>
/// <item>
/// <term>ERROR_INVALID_PARAMETER</term>
/// <term>The specified parameter is invalid.</term>
/// </item>
/// <item>
/// <term>ERROR_NOT_ENOUGH_MEMORY</term>
/// <term>Insufficient memory is available.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// Only members of the Administrators or Server Operators local group can successfully execute the <c>NetServerComputerNameAdd</c> function.
/// </para>
/// <para>
/// The server specified by the ServerName parameter continues to support all names it was supporting, and additionally begins to
/// support new names supplied by successful calls to the <c>NetServerComputerNameAdd</c> function.
/// </para>
/// <para>
/// Name emulation that results from a call to <c>NetServerComputerNameAdd</c> ceases when the server reboots or restarts. To
/// discontinue name emulation set by a previous call to <c>NetServerComputerNameAdd</c> without restarting or rebooting, you can
/// call the NetServerComputerNameDel function.
/// </para>
/// <para>
/// The <c>NetServerComputerNameAdd</c> function is typically used when a system administrator replaces a server, but wants to keep
/// the conversion transparent to users.
/// </para>
/// <para>Examples</para>
/// <para>
/// Following is an example of a call to the <c>NetServerComputerNameAdd</c> function requesting that \Server1 also respond to
/// requests for \Server2.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/desktop/api/lmserver/nf-lmserver-netservercomputernameadd NET_API_STATUS NET_API_FUNCTION
// NetServerComputerNameAdd( LMSTR ServerName, LMSTR EmulatedDomainName, LMSTR EmulatedServerName );
[DllImport(Lib.NetApi32, SetLastError = false, ExactSpelling = true, CharSet = CharSet.Unicode)]
[PInvokeData("lmserver.h", MSDNShortId = "0789fbfe-be91-4849-a31c-1e1a6ae1e70d")]
public static extern Win32Error NetServerComputerNameAdd([Optional] string ServerName, string EmulatedDomainName, string EmulatedServerName);
/// <summary>
/// <para>
/// The <c>NetServerComputerNameDel</c> function causes the specified server to cease supporting the emulated server name set by a
/// previous call to the NetServerComputerNameAdd function. The function does this by unbinding network transports from the emulated name.
/// </para>
/// </summary>
/// <param name="ServerName">
/// <para>
/// Pointer to a string that specifies the DNS or NetBIOS name of the remote server on which the function is to execute. If this
/// parameter is <c>NULL</c>, the local computer is used.
/// </para>
/// </param>
/// <param name="EmulatedServerName">
/// <para>
/// Pointer to a null-terminated character string that contains the emulated name the server should stop supporting. The server
/// continues to support all other server names it was supporting.
/// </para>
/// </param>
/// <returns>
/// <para>If the function succeeds, the return value is NERR_Success.</para>
/// <para>If the function fails, the return value can be one of the following error codes.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>ERROR_ACCESS_DENIED</term>
/// <term>The user does not have access to the requested information.</term>
/// </item>
/// <item>
/// <term>ERROR_INVALID_PARAMETER</term>
/// <term>The specified parameter is invalid.</term>
/// </item>
/// <item>
/// <term>ERROR_NOT_ENOUGH_MEMORY</term>
/// <term>Insufficient memory is available.</term>
/// </item>
/// <item>
/// <term>NERR_NetNameNotFound</term>
/// <term>The share name does not exist.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// Only members of the Administrators or Server Operators local group can successfully execute the <c>NetServerComputerNameDel</c> function.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/desktop/api/lmserver/nf-lmserver-netservercomputernamedel NET_API_STATUS NET_API_FUNCTION
// NetServerComputerNameDel( LMSTR ServerName, LMSTR EmulatedServerName );
[DllImport(Lib.NetApi32, SetLastError = false, ExactSpelling = true, CharSet = CharSet.Unicode)]
[PInvokeData("lmserver.h", MSDNShortId = "501232ad-2821-4bbd-9f16-0f49984f6101")]
public static extern Win32Error NetServerComputerNameDel([Optional] string ServerName, string EmulatedServerName);
/// <summary>
/// The <c>NetServerDiskEnum</c> function retrieves a list of disk drives on a server. The function returns an array of
/// three-character strings (a drive letter, a colon, and a terminating null character).
/// </summary>
/// <param name="servername">
/// A pointer to a string that specifies the DNS or NetBIOS name of the remote server on which the function is to execute. If this
/// parameter is <c>NULL</c>, the local computer is used.
/// </param>
/// <param name="level">The level of information required. A value of zero is the only valid level.</param>
/// <param name="bufptr">
/// A pointer to the buffer that receives the data. The data is an array of three-character strings (a drive letter, a colon, and a
/// terminating null character). This buffer is allocated by the system and must be freed using the NetApiBufferFree function. Note
/// that you must free the buffer even if the function fails with ERROR_MORE_DATA.
/// </param>
/// <param name="prefmaxlen">
/// <para>
/// The preferred maximum length of returned data, in bytes. If you specify MAX_PREFERRED_LENGTH, the function allocates the amount
/// of memory required for the data. If you specify another value in this parameter, it can restrict the number of bytes that the
/// function returns. If the buffer size is insufficient to hold all entries, the function returns ERROR_MORE_DATA. For more
/// information, see Network Management Function Buffers and Network Management Function Buffer Lengths.
/// </para>
/// <para><c>Note</c> This parameter is currently ignored.</para>
/// </param>
/// <param name="entriesread">A pointer to a value that receives the count of elements actually enumerated.</param>
/// <param name="totalentries">
/// A pointer to a value that receives the total number of entries that could have been enumerated from the current resume position.
/// Note that applications should consider this value only as a hint.
/// </param>
/// <param name="resume_handle">
/// A pointer to a value that contains a resume handle which is used to continue an existing server disk search. The handle should be
/// zero on the first call and left unchanged for subsequent calls. If the resume_handle parameter is a <c>NULL</c> pointer, then no
/// resume handle is stored.
/// </param>
/// <returns>
/// <para>If the function succeeds, the return value is NERR_Success.</para>
/// <para>If the function fails, the return value can be one of the following error codes.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>ERROR_ACCESS_DENIED</term>
/// <term>The user does not have access to the requested information.</term>
/// </item>
/// <item>
/// <term>ERROR_INVALID_LEVEL</term>
/// <term>The value specified for the level parameter is invalid.</term>
/// </item>
/// <item>
/// <term>ERROR_MORE_DATA</term>
/// <term>More entries are available. Specify a large enough buffer to receive all entries.</term>
/// </item>
/// <item>
/// <term>ERROR_NOT_ENOUGH_MEMORY</term>
/// <term>Insufficient memory is available.</term>
/// </item>
/// <item>
/// <term>ERROR_NOT_SUPPORTED</term>
/// <term>
/// The request is not supported. This error is returned if a remote server was specified in servername parameter, the remote server
/// only supports remote RPC calls using the legacy Remote Access Protocol mechanism, and this request is not supported.
/// </term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// Only members of the Administrators or Server Operators local group can successfully execute the <c>NetServerDiskEnum</c> function
/// on a remote computer.
/// </para>
/// <para>
/// If you are programming for Active Directory, you may be able to call certain Active Directory Service Interface (ADSI) methods to
/// achieve the same results you can achieve by calling the network management server functions. For more information, see the
/// IADsComputer interface reference.
/// </para>
/// <para>Examples</para>
/// <para>
/// The following code sample demonstrates how to call the <c>NetServerDiskEnum</c> function to retrieve a list of disk drives on a
/// server. The sample calls <c>NetServerDiskEnum</c>, specifying the information level 0 (required). If there are entries to return,
/// and the user has access to the information, it prints a list of the drives, in the format of a three-character string: a drive
/// letter, a colon, and a terminating null character. The sample also prints the total number of entries that are available and a
/// hint about the number of entries actually enumerated. Finally, the code sample frees the memory allocated for the buffer.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/desktop/api/lmserver/nf-lmserver-netserverdiskenum NET_API_STATUS NET_API_FUNCTION
// NetServerDiskEnum( LMSTR servername, DWORD level, LPBYTE *bufptr, DWORD prefmaxlen, LPDWORD entriesread, LPDWORD totalentries,
// LPDWORD resume_handle );
[DllImport(Lib.NetApi32, SetLastError = false, ExactSpelling = true, CharSet = CharSet.Unicode)]
[PInvokeData("lmserver.h", MSDNShortId = "56c981f4-7a1d-4465-bd7b-5996222c4210")]
public static extern Win32Error NetServerDiskEnum([Optional] string servername, [Optional] uint level, out SafeNetApiBuffer bufptr, uint prefmaxlen, out uint entriesread, out uint totalentries, ref uint resume_handle);
/// <summary>The <c>NetServerEnum</c> function lists all servers of the specified type that are visible in a domain.</summary>
/// <param name="servername">Reserved; must be <c>NULL</c>.</param>
/// <param name="level">
/// <para>The information level of the data requested. This parameter can be one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>100</term>
/// <term>Return server names and platform information. The bufptr parameter points to an array of SERVER_INFO_100 structures.</term>
/// </item>
/// <item>
/// <term>101</term>
/// <term>Return server names, types, and associated data. The bufptr parameter points to an array of SERVER_INFO_101 structures.</term>
/// </item>
/// </list>
/// </param>
/// <param name="bufptr">
/// A pointer to the buffer that receives the data. The format of this data depends on the value of the level parameter. This buffer
/// is allocated by the system and must be freed using the NetApiBufferFree function. Note that you must free the buffer even if the
/// function fails with ERROR_MORE_DATA.
/// </param>
/// <param name="prefmaxlen">
/// The preferred maximum length of returned data, in bytes. If you specify MAX_PREFERRED_LENGTH, the function allocates the amount
/// of memory required for the data. If you specify another value in this parameter, it can restrict the number of bytes that the
/// function returns. If the buffer size is insufficient to hold all entries, the function returns ERROR_MORE_DATA. For more
/// information, see Network Management Function Buffers and Network Management Function Buffer Lengths.
/// </param>
/// <param name="entriesread">A pointer to a value that receives the count of elements actually enumerated.</param>
/// <param name="totalentries">
/// A pointer to a value that receives the total number of visible servers and workstations on the network. Note that applications
/// should consider this value only as a hint.
/// </param>
/// <param name="servertype">
/// <para>
/// A value that filters the server entries to return from the enumeration. This parameter can be a combination of the following
/// values defined in the Lmserver.h header file.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>SV_TYPE_WORKSTATION 0x00000001</term>
/// <term>All workstations.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_SERVER 0x00000002</term>
/// <term>All computers that run the Server service.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_SQLSERVER 0x00000004</term>
/// <term>Any server that runs an instance of Microsoft SQL Server.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_DOMAIN_CTRL 0x00000008</term>
/// <term>A server that is primary domain controller.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_DOMAIN_BAKCTRL 0x00000010</term>
/// <term>Any server that is a backup domain controller.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_TIME_SOURCE 0x00000020</term>
/// <term>Any server that runs the Timesource service.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_AFP 0x00000040</term>
/// <term>Any server that runs the Apple Filing Protocol (AFP) file service.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_NOVELL 0x00000080</term>
/// <term>Any server that is a Novell server.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_DOMAIN_MEMBER 0x00000100</term>
/// <term>Any computer that is LAN Manager 2.x domain member.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_PRINTQ_SERVER 0x00000200</term>
/// <term>Any computer that shares a print queue.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_DIALIN_SERVER 0x00000400</term>
/// <term>Any server that runs a dial-in service.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_XENIX_SERVER 0x00000800</term>
/// <term>Any server that is a Xenix server.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_SERVER_UNIX 0x00000800</term>
/// <term>Any server that is a UNIX server. This is the same as the SV_TYPE_XENIX_SERVER.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_NT 0x00001000</term>
/// <term>A workstation or server.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_WFW 0x00002000</term>
/// <term>Any computer that runs Windows for Workgroups.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_SERVER_MFPN 0x00004000</term>
/// <term>Any server that runs the Microsoft File and Print for NetWare service.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_SERVER_NT 0x00008000</term>
/// <term>Any server that is not a domain controller.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_POTENTIAL_BROWSER 0x00010000</term>
/// <term>Any computer that can run the browser service.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_BACKUP_BROWSER 0x00020000</term>
/// <term>A computer that runs a browser service as backup.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_MASTER_BROWSER 0x00040000</term>
/// <term>A computer that runs the master browser service.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_DOMAIN_MASTER 0x00080000</term>
/// <term>A computer that runs the domain master browser.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_SERVER_OSF 0x00100000</term>
/// <term>A computer that runs OSF/1.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_SERVER_VMS 0x00200000</term>
/// <term>A computer that runs Open Virtual Memory System (VMS).</term>
/// </item>
/// <item>
/// <term>SV_TYPE_WINDOWS 0x00400000</term>
/// <term>A computer that runs Windows.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_DFS 0x00800000</term>
/// <term>A computer that is the root of Distributed File System (DFS) tree.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_CLUSTER_NT 0x01000000</term>
/// <term>Server clusters available in the domain.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_TERMINALSERVER 0x02000000</term>
/// <term>A server running the Terminal Server service.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_CLUSTER_VS_NT 0x04000000</term>
/// <term>Cluster virtual servers available in the domain. Windows 2000: This value is not supported.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_DCE 0x10000000</term>
/// <term>A computer that runs IBM Directory and Security Services (DSS) or equivalent.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_ALTERNATE_XPORT 0x20000000</term>
/// <term>A computer that over an alternate transport.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_LOCAL_LIST_ONLY 0x40000000</term>
/// <term>Any computer maintained in a list by the browser. See the following Remarks section.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_DOMAIN_ENUM 0x80000000</term>
/// <term>The primary domain.</term>
/// </item>
/// <item>
/// <term>SV_TYPE_ALL 0xFFFFFFFF</term>
/// <term>All servers. This is a convenience that will return all possible servers.</term>
/// </item>
/// </list>
/// </param>
/// <param name="domain">
/// <para>
/// A pointer to a constant string that specifies the name of the domain for which a list of servers is to be returned. The domain
/// name must be a NetBIOS domain name (for example, microsoft). The <c>NetServerEnum</c> function does not support DNS-style names
/// (for example, microsoft.com).
/// </para>
/// <para>If this parameter is <c>NULL</c>, the primary domain is implied.</para>
/// </param>
/// <param name="resume_handle">Reserved; must be set to zero.</param>
/// <returns>
/// <para>If the function succeeds, the return value is NERR_Success.</para>
/// <para>If the function fails, the return value can be one of the following error codes:</para>
/// <list type="table">
/// <listheader>
/// <term>Return code/value</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>ERROR_ACCESS_DENIED 5</term>
/// <term>Access was denied.</term>
/// </item>
/// <item>
/// <term>ERROR_INVALID_PARAMETER 87</term>
/// <term>The parameter is incorrect.</term>
/// </item>
/// <item>
/// <term>ERROR_MORE_DATA 234</term>
/// <term>More entries are available. Specify a large enough buffer to receive all entries.</term>
/// </item>
/// <item>
/// <term>ERROR_NO_BROWSER_SERVERS_FOUND 6118</term>
/// <term>No browser servers found.</term>
/// </item>
/// <item>
/// <term>ERROR_NOT_SUPPORTED 50</term>
/// <term>The request is not supported.</term>
/// </item>
/// <item>
/// <term>NERR_RemoteErr 2127</term>
/// <term>A remote error occurred with no data returned by the server.</term>
/// </item>
/// <item>
/// <term>NERR_ServerNotStarted 2114</term>
/// <term>The server service is not started.</term>
/// </item>
/// <item>
/// <term>NERR_ServiceNotInstalled 2184</term>
/// <term>The service has not been started.</term>
/// </item>
/// <item>
/// <term>NERR_WkstaNotStarted 2138</term>
/// <term>
/// The Workstation service has not been started. The local workstation service is used to communicate with a downlevel remote server.
/// </term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// The <c>NetServerEnum</c> function is used to list all servers of the specified type that are visible in a domain. For example, an
/// application can call <c>NetServerEnum</c> to list all domain controllers only or all servers that run instances of SQL server only.
/// </para>
/// <para>
/// An application combine the bit masks for various server types in the servertype parameter to list several types. For example, a
/// value of SV_TYPE_WORKSTATION | SVTYPE_SERVER (0x00000003) combines the bit masks for SV_TYPE_WORKSTATION (0x00000001) and
/// SV_TYPE_SERVER (0x00000002).
/// </para>
/// <para>If you require more information for a specific server, call the WNetEnumResource function.</para>
/// <para>No special group membership is required to successfully execute the <c>NetServerEnum</c> function.</para>
/// <para>
/// If you specify the value SV_TYPE_LOCAL_LIST_ONLY, the <c>NetServerEnum</c> function returns the list of servers that the browser
/// maintains internally. This has meaning only on the master browser (or on a computer that has been the master browser in the
/// past). The master browser is the computer that currently has rights to determine which computers can be servers or workstations
/// on the network.
/// </para>
/// <para>
/// If there are no servers found that match the types specified in the servertype parameter, the <c>NetServerEnum</c> function
/// returns the bufptr parameter as <c>NULL</c> and DWORD values pointed to by the entriesread and totalentries parameters are set to zero.
/// </para>
/// <para>
/// The <c>NetServerEnum</c> function depends on the browser service being installed and running. If no browser servers are found,
/// then <c>NetServerEnum</c> fails with ERROR_NO_BROWSER_SERVERS_FOUND.
/// </para>
/// <para>
/// If you are programming for Active Directory, you may be able to call certain Active Directory Service Interface (ADSI) methods to
/// achieve the same function you can achieve by calling the network management server functions. For more information, see IADsComputer.
/// </para>
/// <para>Examples</para>
/// <para>
/// The following code sample demonstrates how to list all servers that are visible in a domain with a call to the
/// <c>NetServerEnum</c> function. The sample calls <c>NetServerEnum</c>, specifying information level 101 ( SERVER_INFO_101). If any
/// servers are found, the sample code loops through the entries and prints the retrieved data. If the server is a domain controller,
/// it identifies the server as either a primary domain controller (PDC) or a backup domain controller (BDC). The sample also prints
/// the total number of entries available and a hint about the number of entries actually enumerated, warning the user if all entries
/// were not enumerated. Finally, the sample frees the memory allocated for the information buffer.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/desktop/api/lmserver/nf-lmserver-netserverenum NET_API_STATUS NET_API_FUNCTION
// NetServerEnum( IN LMCSTR servername, IN DWORD level, OUT LPBYTE *bufptr, IN DWORD prefmaxlen, OUT LPDWORD entriesread, OUT LPDWORD
// totalentries, IN DWORD servertype, IN LMCSTR domain, IN OUT LPDWORD resume_handle );
[DllImport(Lib.NetApi32, SetLastError = false, ExactSpelling = true, CharSet = CharSet.Unicode)]
[PInvokeData("lmserver.h", MSDNShortId = "10012a87-805e-4817-9f09-9e5632b1fa09")]
public static extern Win32Error NetServerEnum([Optional] string servername, uint level, out SafeNetApiBuffer bufptr, uint prefmaxlen, out uint entriesread,
out uint totalentries, NetServerEnumFilter servertype, [Optional] string domain, [Optional] IntPtr resume_handle);
/// <summary>The NetServerGetInfo function retrieves current configuration information for the specified server.</summary>
/// <param name="servername">
/// Pointer to a string that specifies the name of the remote server on which the function is to execute. If this parameter is NULL,
/// the local computer is used.
/// </param>
/// <param name="level">Specifies the information level of the data.</param>
/// <param name="bufptr">
/// Pointer to the buffer that receives the data. The format of this data depends on the value of the level parameter. This buffer is
/// allocated by the system and must be freed using the NetApiBufferFree function.
/// </param>
/// <returns>If the function succeeds, the return value is NERR_Success.</returns>
[DllImport(Lib.NetApi32, ExactSpelling = true, CharSet = CharSet.Unicode)]
[PInvokeData("lmserver.h", MSDNShortId = "aa370624")]
public static extern Win32Error NetServerGetInfo([Optional] string servername, int level, out SafeNetApiBuffer bufptr);
/// <summary>
/// <para>
/// The <c>NetServerSetInfo</c> function sets a server's operating parameters; it can set them individually or collectively. The
/// information is stored in a way that allows it to remain in effect after the system has been reinitialized.
/// </para>
/// </summary>
/// <param name="servername">
/// <para>
/// Pointer to a string that specifies the name of the remote server on which the function is to execute. If this parameter is
/// <c>NULL</c>, the local computer is used.
/// </para>
/// </param>
/// <param name="level">
/// <para>Specifies the information level of the data. This parameter can be one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>101</term>
/// <term>Specifies the server name, type, and associated software. The buf parameter points to a SERVER_INFO_101 structure.</term>
/// </item>
/// <item>
/// <term>102</term>
/// <term>
/// Specifies the server name, type, associated software, and other attributes. The buf parameter points to a SERVER_INFO_102 structure.
/// </term>
/// </item>
/// <item>
/// <term>402</term>
/// <term>Specifies detailed information about the server. The buf parameter points to a SERVER_INFO_402 structure.</term>
/// </item>
/// <item>
/// <term>403</term>
/// <term>Specifies detailed information about the server. The buf parameter points to a SERVER_INFO_403 structure.</term>
/// </item>
/// </list>
/// <para>
/// In addition, levels 1001-1006, 1009-1011, 1016-1018, 1021, 1022, 1028, 1029, 1037, and 1043 are valid based on the restrictions
/// for LAN Manager systems.
/// </para>
/// </param>
/// <param name="buf">
/// <para>
/// Pointer to a buffer that receives the server information. The format of this data depends on the value of the level parameter.
/// For more information, see Network Management Function Buffers.
/// </para>
/// </param>
/// <param name="ParmError">
/// <para>
/// Pointer to a value that receives the index of the first member of the server information structure that causes the
/// ERROR_INVALID_PARAMETER error. If this parameter is <c>NULL</c>, the index is not returned on error. For more information, see
/// the following Remarks section.
/// </para>
/// </param>
/// <returns>
/// <para>If the function succeeds, the return value is NERR_Success.</para>
/// <para>If the function fails, the return value can be one of the following error codes.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>ERROR_ACCESS_DENIED</term>
/// <term>The user does not have access to the requested information.</term>
/// </item>
/// <item>
/// <term>ERROR_INVALID_LEVEL</term>
/// <term>The value specified for the level parameter is invalid.</term>
/// </item>
/// <item>
/// <term>ERROR_INVALID_PARAMETER</term>
/// <term>The specified parameter is invalid. For more information, see the following Remarks section.</term>
/// </item>
/// <item>
/// <term>ERROR_NOT_ENOUGH_MEMORY</term>
/// <term>Insufficient memory is available.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// Only members of the Administrators or Server Operators local group can successfully execute the <c>NetServerSetInfo</c> function.
/// </para>
/// <para>
/// If you are programming for Active Directory, you may be able to call certain Active Directory Service Interface (ADSI) methods to
/// achieve the same functionality you can achieve by calling the network management server functions. For more information, see IADsComputer.
/// </para>
/// <para>
/// If the <c>NetServerSetInfo</c> function returns ERROR_INVALID_PARAMETER, you can use the ParmError parameter to indicate the
/// first member of the server information structure that is invalid. (A server information structure begins with SERVER_INFO_ and
/// its format is specified by the level parameter.) The following table lists the values that can be returned in the ParmError
/// parameter and the corresponding structure member that is in error. (The prefix sv*_ indicates that the member can begin with
/// multiple prefixes, for example, sv101_ or sv402_.)
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Member</term>
/// </listheader>
/// <item>
/// <term>SV_PLATFORM_ID_PARMNUM</term>
/// <term>sv*_platform_id</term>
/// </item>
/// <item>
/// <term>SV_NAME_PARMNUM</term>
/// <term>sv*_name</term>
/// </item>
/// <item>
/// <term>SV_VERSION_MAJOR_PARMNUM</term>
/// <term>sv*_version_major</term>
/// </item>
/// <item>
/// <term>SV_VERSION_MINOR_PARMNUM</term>
/// <term>sv*_version_minor</term>
/// </item>
/// <item>
/// <term>SV_TYPE_PARMNUM</term>
/// <term>sv*_type</term>
/// </item>
/// <item>
/// <term>SV_COMMENT_PARMNUM</term>
/// <term>sv*_comment</term>
/// </item>
/// <item>
/// <term>SV_USERS_PARMNUM</term>
/// <term>sv*_users</term>
/// </item>
/// <item>
/// <term>SV_DISC_PARMNUM</term>
/// <term>sv*_disc</term>
/// </item>
/// <item>
/// <term>SV_HIDDEN_PARMNUM</term>
/// <term>sv*_hidden</term>
/// </item>
/// <item>
/// <term>SV_ANNOUNCE_PARMNUM</term>
/// <term>sv*_announce</term>
/// </item>
/// <item>
/// <term>SV_ANNDELTA_PARMNUM</term>
/// <term>sv*_anndelta</term>
/// </item>
/// <item>
/// <term>SV_USERPATH_PARMNUM</term>
/// <term>sv*_userpath</term>
/// </item>
/// <item>
/// <term>SV_ULIST_MTIME_PARMNUM</term>
/// <term>sv*_ulist_mtime</term>
/// </item>
/// <item>
/// <term>SV_GLIST_MTIME_PARMNUM</term>
/// <term>sv*_glist_mtime</term>
/// </item>
/// <item>
/// <term>SV_ALIST_MTIME_PARMNUM</term>
/// <term>sv*_alist_mtime</term>
/// </item>
/// <item>
/// <term>SV_ALERTS_PARMNUM</term>
/// <term>sv*_alerts</term>
/// </item>
/// <item>
/// <term>SV_SECURITY_PARMNUM</term>
/// <term>sv*_security</term>
/// </item>
/// <item>
/// <term>SV_NUMADMIN_PARMNUM</term>
/// <term>sv*_numadmin</term>
/// </item>
/// <item>
/// <term>SV_LANMASK_PARMNUM</term>
/// <term>sv*_lanmask</term>
/// </item>
/// <item>
/// <term>SV_GUESTACC_PARMNUM</term>
/// <term>sv*_guestacc</term>
/// </item>
/// <item>
/// <term>SV_CHDEVQ_PARMNUM</term>
/// <term>sv*_chdevq</term>
/// </item>
/// <item>
/// <term>SV_CHDEVJOBS_PARMNUM</term>
/// <term>sv*_chdevjobs</term>
/// </item>
/// <item>
/// <term>SV_CONNECTIONS_PARMNUM</term>
/// <term>sv*_connections</term>
/// </item>
/// <item>
/// <term>SV_SHARES_PARMNUM</term>
/// <term>sv*_shares</term>
/// </item>
/// <item>
/// <term>SV_OPENFILES_PARMNUM</term>
/// <term>sv*_openfiles</term>
/// </item>
/// <item>
/// <term>SV_SESSOPENS_PARMNUM</term>
/// <term>sv*_sessopens</term>
/// </item>
/// <item>
/// <term>SV_SESSVCS_PARMNUM</term>
/// <term>sv*_sessvcs</term>
/// </item>
/// <item>
/// <term>SV_SESSREQS_PARMNUM</term>
/// <term>sv*_sessreqs</term>
/// </item>
/// <item>
/// <term>SV_OPENSEARCH_PARMNUM</term>
/// <term>sv*_opensearch</term>
/// </item>
/// <item>
/// <term>SV_ACTIVELOCKS_PARMNUM</term>
/// <term>sv*_activelocks</term>
/// </item>
/// <item>
/// <term>SV_NUMREQBUF_PARMNUM</term>
/// <term>sv*_numreqbuf</term>
/// </item>
/// <item>
/// <term>SV_SIZREQBUF_PARMNUM</term>
/// <term>sv*_sizreqbuf</term>
/// </item>
/// <item>
/// <term>SV_NUMBIGBUF_PARMNUM</term>
/// <term>sv*_numbigbuf</term>
/// </item>
/// <item>
/// <term>SV_NUMFILETASKS_PARMNUM</term>
/// <term>sv*_numfiletasks</term>
/// </item>
/// <item>
/// <term>SV_ALERTSCHED_PARMNUM</term>
/// <term>sv*_alertsched</term>
/// </item>
/// <item>
/// <term>SV_ERRORALERT_PARMNUM</term>
/// <term>sv*_erroralert</term>
/// </item>
/// <item>
/// <term>SV_LOGONALERT_PARMNUM</term>
/// <term>sv*_logonalert</term>
/// </item>
/// <item>
/// <term>SV_ACCESSALERT_PARMNUM</term>
/// <term>sv*_accessalert</term>
/// </item>
/// <item>
/// <term>SV_DISKALERT_PARMNUM</term>
/// <term>sv*_diskalert</term>
/// </item>
/// <item>
/// <term>SV_NETIOALERT_PARMNUM</term>
/// <term>sv*_netioalert</term>
/// </item>
/// <item>
/// <term>SV_MAXAUDITSZ_PARMNUM</term>
/// <term>sv*_maxauditsz</term>
/// </item>
/// <item>
/// <term>SV_SRVHEURISTICS_PARMNUM</term>
/// <term>sv*_srvheuristics</term>
/// </item>
/// <item>
/// <term>SV_TIMESOURCE_PARMNUM</term>
/// <term>sv*_timesource</term>
/// </item>
/// </list>
/// <para>Examples</para>
/// <para>
/// The following code sample demonstrates how to call the <c>NetServerSetInfo</c> function. The sample calls
/// <c>NetServerSetInfo</c>, specifying the level parameter as 1005 (required) to set the <c>sv1005_comment</c> member of the
/// SERVER_INFO_1005 structure.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/desktop/api/lmserver/nf-lmserver-netserversetinfo NET_API_STATUS NET_API_FUNCTION
// NetServerSetInfo( LMSTR servername, DWORD level, LPBYTE buf, LPDWORD ParmError );
[DllImport(Lib.NetApi32, SetLastError = false, ExactSpelling = true, CharSet = CharSet.Unicode)]
[PInvokeData("lmserver.h", MSDNShortId = "1a04a43d-34f9-4a08-ac66-750120792af0")]
public static extern Win32Error NetServerSetInfo([Optional] string servername, int level, IntPtr buf, out uint ParmError);
/// <summary>
/// <para>The <c>NetServerTransportAdd</c> function binds the server to the transport protocol.</para>
/// <para>
/// The extended function NetServerTransportAddEx allows the calling application to specify the SERVER_TRANSPORT_INFO_1,
/// SERVER_TRANSPORT_INFO_2, and SERVER_TRANSPORT_INFO_3 information levels.
/// </para>
/// </summary>
/// <param name="servername">
/// <para>
/// A pointer to a string that specifies the name of the remote server on which the function is to execute. If this parameter is
/// <c>NULL</c>, the local computer is used.
/// </para>
/// </param>
/// <param name="level">
/// <para>Specifies the information level of the data. This parameter can be the following value.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>0</term>
/// <term>
/// Specifies information about the transport protocol, including name, address, and location on the network. The bufptr parameter
/// points to a SERVER_TRANSPORT_INFO_0 structure.
/// </term>
/// </item>
/// </list>
/// </param>
/// <param name="bufptr">
/// <para>A pointer to the buffer that contains the data.</para>
/// <para>For more information, see Network Management Function Buffers.</para>
/// </param>
/// <returns>
/// <para>If the function succeeds, the return value is NERR_Success.</para>
/// <para>If the function fails, the return value can be one of the following error codes.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>ERROR_ACCESS_DENIED</term>
/// <term>The user does not have access to the requested information.</term>
/// </item>
/// <item>
/// <term>ERROR_DUP_NAME</term>
/// <term>A duplicate name exists on the network.</term>
/// </item>
/// <item>
/// <term>ERROR_INVALID_DOMAINNAME</term>
/// <term>The domain name could not be found on the network.</term>
/// </item>
/// <item>
/// <term>ERROR_INVALID_LEVEL</term>
/// <term>The value specified for the level parameter is invalid.</term>
/// </item>
/// <item>
/// <term>ERROR_INVALID_PARAMETER</term>
/// <term>
/// A parameter is invalid. This error is returned if the svti0_transportname or svti0_transportaddress member in the
/// SERVER_TRANSPORT_INFO_0 structure pointed to by the bufptr parameter is NULL. This error is also returned if the
/// svti0_transportaddresslength member in the SERVER_TRANSPORT_INFO_0 structure pointed to by the bufptr parameter is zero or larger
/// than MAX_PATH (defined in the Windef.h header file). This error is also returned for other invalid parameters.
/// </term>
/// </item>
/// <item>
/// <term>ERROR_NOT_ENOUGH_MEMORY</term>
/// <term>Insufficient memory is available.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// Only members of the Administrators or Server Operators local group can successfully execute the <c>NetServerTransportAdd</c> function.
/// </para>
/// <para>
/// If you add a transport protocol to a server using a call to the <c>NetServerTransportAdd</c> function, the connection will not
/// remain after the server reboots or restarts.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/desktop/api/lmserver/nf-lmserver-netservertransportadd NET_API_STATUS NET_API_FUNCTION
// NetServerTransportAdd( LMSTR servername, DWORD level, LPBYTE bufptr );
[DllImport(Lib.NetApi32, SetLastError = false, ExactSpelling = true, CharSet = CharSet.Unicode)]
[PInvokeData("lmserver.h", MSDNShortId = "c8521aed-0762-4412-b117-c911fc77049b")]
public static extern Win32Error NetServerTransportAdd([Optional] string servername, int level, IntPtr bufptr);
/// <summary>
/// <para>
/// The <c>NetServerTransportAddEx</c> function binds the specified server to the transport protocol. This extended function allows
/// the calling application to specify the SERVER_TRANSPORT_INFO_0, SERVER_TRANSPORT_INFO_1, SERVER_TRANSPORT_INFO_2, or
/// SERVER_TRANSPORT_INFO_3 information levels.
/// </para>
/// </summary>
/// <param name="servername">
/// <para>
/// A pointer to a string that specifies the name of the remote server on which the function is to execute. If this parameter is
/// <c>NULL</c>, the local computer is used.
/// </para>
/// </param>
/// <param name="level">
/// <para>Specifies a value that indicates the information level of the data. This parameter can be one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>0</term>
/// <term>
/// Specifies information about the transport protocol, including name, address, and location on the network. The bufptr parameter
/// points to a SERVER_TRANSPORT_INFO_0 structure.
/// </term>
/// </item>
/// <item>
/// <term>1</term>
/// <term>
/// Specifies information about the transport protocol, including name, address, network location, and domain. The bufptr parameter
/// points to a SERVER_TRANSPORT_INFO_1 structure.
/// </term>
/// </item>
/// <item>
/// <term>2</term>
/// <term>
/// Specifies the same information as level 1, with the addition of an svti2_flags member. The bufptr parameter points to a
/// SERVER_TRANSPORT_INFO_2 structure.
/// </term>
/// </item>
/// <item>
/// <term>3</term>
/// <term>
/// Specifies the same information as level 2, with the addition of credential information. The bufptr parameter points to a
/// SERVER_TRANSPORT_INFO_3 structure.
/// </term>
/// </item>
/// </list>
/// </param>
/// <param name="bufptr">
/// <para>A pointer to the buffer that contains the data. The format of this data depends on the value of the level parameter.</para>
/// <para>For more information, see Network Management Function Buffers.</para>
/// </param>
/// <returns>
/// <para>If the function succeeds, the return value is NERR_Success.</para>
/// <para>If the function fails, the return value can be one of the following error codes.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>ERROR_ACCESS_DENIED</term>
/// <term>The user does not have access to the requested information.</term>
/// </item>
/// <item>
/// <term>ERROR_DUP_NAME</term>
/// <term>A duplicate name exists on the network.</term>
/// </item>
/// <item>
/// <term>ERROR_INVALID_DOMAINNAME</term>
/// <term>The domain name could not be found on the network.</term>
/// </item>
/// <item>
/// <term>ERROR_INVALID_LEVEL</term>
/// <term>The value specified for the level parameter is invalid.</term>
/// </item>
/// <item>
/// <term>ERROR_INVALID_PARAMETER</term>
/// <term>
/// A parameter is invalid. This error is returned if the transport name or transport address member in the SERVER_TRANSPORT_INFO_0,
/// SERVER_TRANSPORT_INFO_1, SERVER_TRANSPORT_INFO_2, or SERVER_TRANSPORT_INFO_3 structure pointed to by the bufptr parameter is
/// NULL. This error is also returned if the transport address length member in the SERVER_TRANSPORT_INFO_0, SERVER_TRANSPORT_INFO_1,
/// SERVER_TRANSPORT_INFO_2, or SERVER_TRANSPORT_INFO_3 structure pointed to by the bufptr parameter is zero or larger than MAX_PATH
/// (defined in the Windef.h header file). This error is also returned if the flags member of the SERVER_TRANSPORT_INFO_2, or
/// SERVER_TRANSPORT_INFO_3 structure pointed to by the bufptr parameter contains an illegal value. This error is also returned for
/// other invalid parameters.
/// </term>
/// </item>
/// <item>
/// <term>ERROR_NOT_ENOUGH_MEMORY</term>
/// <term>Insufficient memory is available.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// Only members of the Administrators or Server Operators local group can successfully execute the <c>NetServerTransportAddEx</c> function.
/// </para>
/// <para>
/// If you add a transport protocol to a server using a call to the <c>NetServerTransportAddEx</c> function, the connection will not
/// remain after the server reboots or restarts.
/// </para>
/// <para>
/// The NetServerComputerNameAdd function is a utility function. It combines the features of the NetServerTransportEnum function and
/// the <c>NetServerTransportAddEx</c> function, allowing you to specify an emulated server name.
/// </para>
/// <para>
/// On Windows Server 2008 and Windows Vista with Service Pack 1 (SP1), every name registered with the Windows remote file server
/// (SRV) is designated as either a scoped name or a non-scoped name. Every share that is added to the system will then either be
/// attached to all of the non-scoped names, or to a single scoped name. Applications that wish to use the scoping features are
/// responsible for both registering the new name as a scoped endpoint and then creating the shares with an appropriate scope. In
/// this way, legacy uses of the Network Management and Network Share Management functions are not affected in any way since they
/// continue to register shares and names as non-scoped names.
/// </para>
/// <para>
/// A scoped endpoint is created by calling the <c>NetServerTransportAddEx</c> function with the level parameter set to 2 and the
/// bufptr parameter pointed to a SERVER_TRANSPORT_INFO_2 structure with the <c>SVTI2_SCOPED_NAME</c> bit value set in
/// <c>svti2_flags</c> member. A scoped endpoint is also created by calling the <c>NetServerTransportAddEx</c> function with the
/// level parameter set to 3 and the bufptr parameter pointed to a SERVER_TRANSPORT_INFO_3 structure with the
/// <c>SVTI2_SCOPED_NAME</c> bit value set in <c>svti3_flags</c> member.
/// </para>
/// <para>
/// When the <c>SVTI2_SCOPED_NAME</c> bit value is set for a transport, then shares can be added with a corresponding server name
/// (the <c>shi503_servername</c> member of the SHARE_INFO_503 structure) in a scoped fashion using the NetShareAdd function. If
/// there is no transport registered with the <c>SVTI2_SCOPED_NAME</c> bit value and the name provided in <c>shi503_servername</c>
/// member, then the share add in a scoped fashion will not succeed.
/// </para>
/// <para>
/// The NetShareAdd function is used to add a scoped share on a remote server specified in the servername parameter. The remote
/// server specified in the <c>shi503_servername</c> member of the SHARE_INFO_503 passed in the bufptr parameter must have been bound
/// to a transport protocol using the <c>NetServerTransportAddEx</c> function as a scoped endpoint. The <c>SVTI2_SCOPED_NAME</c> flag
/// must have been specified in the <c>shi503_servername</c> member of the SERVER_TRANSPORT_INFO_2 or SERVER_TRANSPORT_INFO_3
/// structure for the transport protocol. The NetShareDelEx function is used to delete a scoped share. The NetShareGetInfo and
/// NetShareSetInfo functions are to used to get and set information on a scoped share.
/// </para>
/// <para>Scoped endpoints are generally used by the cluster namespace.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/desktop/api/lmserver/nf-lmserver-netservertransportaddex NET_API_STATUS NET_API_FUNCTION
// NetServerTransportAddEx( LMSTR servername, DWORD level, LPBYTE bufptr );
[DllImport(Lib.NetApi32, SetLastError = false, ExactSpelling = true, CharSet = CharSet.Unicode)]
[PInvokeData("lmserver.h", MSDNShortId = "d1edc75d-8313-422c-a6fb-8b51a309a252")]
public static extern Win32Error NetServerTransportAddEx([Optional] string servername, int level, IntPtr bufptr);
/// <summary>
/// <para>
/// The <c>NetServerTransportDel</c> function unbinds (or disconnects) the transport protocol from the server. Effectively, the
/// server can no longer communicate with clients using the specified transport protocol (such as TCP or XNS).
/// </para>
/// </summary>
/// <param name="servername">
/// <para>
/// Pointer to a string that specifies the DNS or NetBIOS name of the remote server on which the function is to execute. If this
/// parameter is <c>NULL</c>, the local computer is used.
/// </para>
/// </param>
/// <param name="level">
/// <para>Specifies the information level of the data. This parameter can be one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>0</term>
/// <term>
/// Specifies information about the transport protocol, including name, address, and location on the network. The bufptr parameter
/// points to a SERVER_TRANSPORT_INFO_0 structure.
/// </term>
/// </item>
/// <item>
/// <term>1</term>
/// <term>
/// Specifies information about the transport protocol, including name, address, network location, and domain. The bufptr parameter
/// points to a SERVER_TRANSPORT_INFO_1 structure.
/// </term>
/// </item>
/// </list>
/// </param>
/// <param name="bufptr">
/// <para>
/// Pointer to the buffer that specifies the data. The format of this data depends on the value of the level parameter. For more
/// information, see Network Management Function Buffers.
/// </para>
/// </param>
/// <returns>
/// <para>If the function succeeds, the return value is NERR_Success.</para>
/// <para>If the function fails, the return value can be one of the following error codes.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>ERROR_ACCESS_DENIED</term>
/// <term>The user does not have access to the requested information.</term>
/// </item>
/// <item>
/// <term>ERROR_INVALID_LEVEL</term>
/// <term>The value specified for the level parameter is invalid.</term>
/// </item>
/// <item>
/// <term>ERROR_INVALID_PARAMETER</term>
/// <term>The specified parameter is invalid.</term>
/// </item>
/// <item>
/// <term>ERROR_NOT_ENOUGH_MEMORY</term>
/// <term>Insufficient memory is available.</term>
/// </item>
/// <item>
/// <term>NERR_NetNameNotFound</term>
/// <term>The share name does not exist.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// Only members of the Administrators or Server Operators local group can successfully execute the <c>NetServerTransportDel</c> function.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/desktop/api/lmserver/nf-lmserver-netservertransportdel NET_API_STATUS NET_API_FUNCTION
// NetServerTransportDel( LMSTR servername, DWORD level, LPBYTE bufptr );
[DllImport(Lib.NetApi32, SetLastError = false, ExactSpelling = true, CharSet = CharSet.Unicode)]
[PInvokeData("lmserver.h", MSDNShortId = "69b22f30-62b1-4dcb-bbb0-aceae8d77f61")]
public static extern Win32Error NetServerTransportDel([Optional] string servername, int level, IntPtr bufptr);
/// <summary>
/// The <c>NetServerTransportEnum</c> function supplies information about transport protocols that are managed by the server.
/// </summary>
/// <param name="servername">
/// Pointer to a string that specifies the DNS or NetBIOS name of the remote server on which the function is to execute. If this
/// parameter is <c>NULL</c>, the local computer is used.
/// </param>
/// <param name="level">
/// <para>Specifies the information level of the data. This parameter can be one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>0</term>
/// <term>
/// Return information about the transport protocol, including name, address, and location on the network. The bufptr parameter
/// points to an array of SERVER_TRANSPORT_INFO_0 structures.
/// </term>
/// </item>
/// <item>
/// <term>1</term>
/// <term>
/// Return information about the transport protocol, including name, address, network location, and domain. The bufptr parameter
/// points to an array of SERVER_TRANSPORT_INFO_1 structures.
/// </term>
/// </item>
/// </list>
/// </param>
/// <param name="bufptr">
/// Pointer to the buffer that receives the data. The format of this data depends on the value of the level parameter. This buffer is
/// allocated by the system and must be freed using the NetApiBufferFree function. Note that you must free the buffer even if the
/// function fails with ERROR_MORE_DATA.
/// </param>
/// <param name="prefmaxlen">
/// Specifies the preferred maximum length of returned data, in bytes. If you specify MAX_PREFERRED_LENGTH, the function allocates
/// the amount of memory required for the data. If you specify another value in this parameter, it can restrict the number of bytes
/// that the function returns. If the buffer size is insufficient to hold all entries, the function returns ERROR_MORE_DATA. For more
/// information, see Network Management Function Buffers and Network Management Function Buffer Lengths.
/// </param>
/// <param name="entriesread">Pointer to a value that receives the count of elements actually enumerated.</param>
/// <param name="totalentries">
/// Pointer to a value that receives the total number of entries that could have been enumerated from the current resume position.
/// Note that applications should consider this value only as a hint.
/// </param>
/// <param name="resume_handle">The resume handle.</param>
/// <returns>
/// <para>If the function succeeds, the return value is NERR_Success.</para>
/// <para>If the function fails, the return value can be one of the following error codes.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>ERROR_INVALID_LEVEL</term>
/// <term>The value specified for the level parameter is invalid.</term>
/// </item>
/// <item>
/// <term>ERROR_MORE_DATA</term>
/// <term>More entries are available. Specify a large enough buffer to receive all entries.</term>
/// </item>
/// <item>
/// <term>ERROR_NOT_ENOUGH_MEMORY</term>
/// <term>Insufficient memory is available.</term>
/// </item>
/// <item>
/// <term>NERR_BufTooSmall</term>
/// <term>The supplied buffer is too small.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// Only Authenticated Users can successfully call this function. <c>Windows XP/2000:</c> No special group membership is required to
/// successfully execute this function.
/// </para>
/// <para>Examples</para>
/// <para>
/// The following code sample demonstrates how to retrieve information about transport protocols that are managed by the server,
/// using a call to the <c>NetServerTransportEnum</c> function. The sample calls <c>NetServerTransportEnum</c>, specifying
/// information level 0 ( SERVER_TRANSPORT_INFO_0). The sample prints the name of each transport protocol and the total number
/// enumerated. Finally, the code sample frees the memory allocated for the information buffer.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/desktop/api/lmserver/nf-lmserver-netservertransportenum NET_API_STATUS NET_API_FUNCTION
// NetServerTransportEnum( LMSTR servername, DWORD level, LPBYTE *bufptr, DWORD prefmaxlen, LPDWORD entriesread, LPDWORD
// totalentries, LPDWORD resume_handle );
[DllImport(Lib.NetApi32, SetLastError = false, ExactSpelling = true, CharSet = CharSet.Unicode)]
[PInvokeData("lmserver.h", MSDNShortId = "db42ac44-d70d-4b89-882a-6ac83fd611fd")]
public static extern Win32Error NetServerTransportEnum([Optional] string servername, int level, out SafeNetApiBuffer bufptr, uint prefmaxlen, out uint entriesread, out uint totalentries, ref uint resume_handle);
/// <summary>The <c>SERVER_INFO_100</c> structure contains information about the specified server, including the name and platform.</summary>
/// <seealso cref="INetServerInfo"/>
[StructLayout(LayoutKind.Sequential)]
[PInvokeData("lmserver.h", MSDNShortId = "aa370897")]
public struct SERVER_INFO_100 : INetServerInfo
{
/// <summary>The information level to use for platform-specific information.</summary>
public ServerPlatform sv100_platform_id;
/// <summary>A pointer to a Unicode string that specifies the name of the server.</summary>
[MarshalAs(UnmanagedType.LPWStr)]
public string sv100_name;
}
/// <summary>
/// The <c>SERVER_INFO_101</c> structure contains information about the specified server, including name, platform, type of server,
/// and associated software.
/// </summary>
/// <seealso cref="INetServerInfo"/>
[StructLayout(LayoutKind.Sequential)]
[PInvokeData("lmserver.h", MSDNShortId = "aa370903")]
public struct SERVER_INFO_101 : INetServerInfo
{
/// <summary>The information level to use for platform-specific information.</summary>
public ServerPlatform sv101_platform_id;
/// <summary>A pointer to a Unicode string specifying the name of a server.</summary>
[MarshalAs(UnmanagedType.LPWStr)]
public string sv101_name;
/// <summary>
/// The major version number and the server type.
/// <para>
/// The major release version number of the operating system is specified in the least significant 4 bits. The server type is
/// specified in the most significant 4 bits. The <c>MAJOR_VERSION_MASK</c> bitmask defined in the Lmserver.h header should be
/// used by an application to obtain the major version number from this member.
/// </para>
/// </summary>
public int sv101_version_major;
/// <summary>The minor release version number of the operating system.</summary>
public int sv101_version_minor;
/// <summary>The type of software the computer is running.</summary>
public NetServerEnumFilter sv101_type;
/// <summary>A pointer to a Unicode string specifying a comment describing the server. The comment can be null.</summary>
[MarshalAs(UnmanagedType.LPWStr)]
public string sv101_comment;
/// <summary>Gets the version composed of both <see cref="sv101_version_major"/> and <see cref="sv101_version_minor"/>.</summary>
/// <value>The version.</value>
public Version Version => new Version(sv101_version_major, sv101_version_minor);
}
/// <summary>
/// The SERVER_INFO_102 structure contains information about the specified server, including name, platform, type of server,
/// attributes, and associated software.
/// </summary>
/// <seealso cref="INetServerInfo"/>
[StructLayout(LayoutKind.Sequential)]
[PInvokeData("lmserver.h", MSDNShortId = "aa370904")]
public struct SERVER_INFO_102 : INetServerInfo
{
/// <summary>The information level to use for platform-specific information.</summary>
public ServerPlatform sv102_platform_id;
/// <summary>A pointer to a Unicode string specifying the name of a server.</summary>
[MarshalAs(UnmanagedType.LPWStr)]
public string sv102_name;
/// <summary>
/// The major version number and the server type.
/// <para>
/// The major release version number of the operating system is specified in the least significant 4 bits. The server type is
/// specified in the most significant 4 bits. The <c>MAJOR_VERSION_MASK</c> bitmask defined in the Lmserver.h header should be
/// used by an application to obtain the major version number from this member.
/// </para>
/// </summary>
public int sv102_version_major;
/// <summary>The minor release version number of the operating system.</summary>
public int sv102_version_minor;
/// <summary>The type of software the computer is running.</summary>
public NetServerEnumFilter sv102_type;
/// <summary>A pointer to a Unicode string specifying a comment describing the server. The comment can be null.</summary>
[MarshalAs(UnmanagedType.LPWStr)]
public string sv102_comment;
/// <summary>
/// The number of users who can attempt to log on to the system server. Note that it is the license server that determines how
/// many of these users can actually log on.
/// </summary>
public int sv102_users;
/// <summary>
/// The auto-disconnect time, in minutes. A session is disconnected if it is idle longer than the period of time specified by the
/// sv102_disc member. If the value of sv102_disc is SV_NODISC, auto-disconnect is not enabled.
/// </summary>
public int sv102_disc;
/// <summary>A value that indicates whether the server is visible to other computers in the same network domain.</summary>
[MarshalAs(UnmanagedType.Bool)]
public bool sv102_hidden;
/// <summary>
/// The network announce rate, in seconds. This rate determines how often the server is announced to other computers on the network.
/// </summary>
public int sv102_announce;
/// <summary>
/// The delta value for the announce rate, in milliseconds. This value specifies how much the announce rate can vary from the
/// period of time specified in the sv102_announce member.
/// <para>
/// The delta value allows randomly varied announce rates. For example, if the sv102_announce member has the value 10 and the
/// sv102_anndelta member has the value 1, the announce rate can vary from 9.999 seconds to 10.001 seconds.
/// </para>
/// </summary>
public int sv102_anndelta;
/// <summary>The number of users per license. By default, this number is SV_USERS_PER_LICENSE.</summary>
public int sv102_licenses;
/// <summary>A pointer to a Unicode string specifying the path to user directories.</summary>
[MarshalAs(UnmanagedType.LPWStr)]
public string sv102_userpath;
/// <summary>Gets the version composed of both <see cref="sv102_version_major"/> and <see cref="sv102_version_minor"/>.</summary>
/// <value>The version.</value>
public Version Version => new Version(sv102_version_major, sv102_version_minor);
}
/// <summary>
/// <para>The <c>SERVER_INFO_402</c> structure contains information about a specified server.</para>
/// </summary>
// https://docs.microsoft.com/en-us/windows/desktop/api/lmserver/ns-lmserver-_server_info_402 typedef struct _SERVER_INFO_402 { DWORD
// sv402_ulist_mtime; DWORD sv402_glist_mtime; DWORD sv402_alist_mtime; LMSTR sv402_alerts; DWORD sv402_security; DWORD
// sv402_numadmin; DWORD sv402_lanmask; LMSTR sv402_guestacct; DWORD sv402_chdevs; DWORD sv402_chdevq; DWORD sv402_chdevjobs; DWORD
// sv402_connections; DWORD sv402_shares; DWORD sv402_openfiles; DWORD sv402_sessopens; DWORD sv402_sessvcs; DWORD sv402_sessreqs;
// DWORD sv402_opensearch; DWORD sv402_activelocks; DWORD sv402_numreqbuf; DWORD sv402_sizreqbuf; DWORD sv402_numbigbuf; DWORD
// sv402_numfiletasks; DWORD sv402_alertsched; DWORD sv402_erroralert; DWORD sv402_logonalert; DWORD sv402_accessalert; DWORD
// sv402_diskalert; DWORD sv402_netioalert; DWORD sv402_maxauditsz; LMSTR sv402_srvheuristics; } SERVER_INFO_402, *PSERVER_INFO_402, *LPSERVER_INFO_402;
[PInvokeData("lmserver.h", MSDNShortId = "51e5c27e-6a7d-45ac-9cfa-37b1f7f241f9")]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SERVER_INFO_402 : INetServerInfo
{
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>
/// The last time the user list was modified. The value is expressed as the number of seconds that have elapsed since 00:00:00,
/// January 1, 1970, GMT, and applies to servers running with user-level security.
/// </para>
/// </summary>
public uint sv402_ulist_mtime;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>
/// The last time the group list was modified. The value is expressed as the number of seconds that have elapsed since 00:00:00,
/// January 1, 1970, GMT, and applies to servers running with user-level security.
/// </para>
/// </summary>
public uint sv402_glist_mtime;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>
/// The last time the access control list was modified. The value is expressed as the number of seconds that have elapsed since
/// 00:00:00, January 1, 1970, GMT, and applies to servers running with user-level security.
/// </para>
/// </summary>
public uint sv402_alist_mtime;
/// <summary>
/// <para>Type: <c>LPWSTR</c></para>
/// <para>A pointer to a Unicode string that specifies the list of user names on the server. Spaces separate the names.</para>
/// </summary>
public string sv402_alerts;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>
/// The security type of the server. This member can be one of the following values. Note that Windows NT, Windows 2000, Windows
/// XP, and Windows Server 2003 operating systems do not support share-level security.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>SV_SHARESECURITY</term>
/// <term>Share-level security</term>
/// </item>
/// <item>
/// <term>SV_USERSECURITY</term>
/// <term>User-level security</term>
/// </item>
/// </list>
/// </summary>
public uint sv402_security;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of administrators the server can accommodate at one time.</para>
/// </summary>
public uint sv402_numadmin;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The order in which the network device drivers are served.</para>
/// </summary>
public uint sv402_lanmask;
/// <summary>
/// <para>Type: <c>LPWSTR</c></para>
/// <para>
/// A pointer to a Unicode string that specifies the name of a reserved account for guest users on the server. The constant UNLEN
/// specifies the maximum number of characters in the string.
/// </para>
/// </summary>
public string sv402_guestacct;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of character-oriented devices that can be shared on the server.</para>
/// </summary>
public uint sv402_chdevs;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of character-oriented device queues that can coexist on the server.</para>
/// </summary>
public uint sv402_chdevq;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of character-oriented device jobs that can be pending at one time on the server.</para>
/// </summary>
public uint sv402_chdevjobs;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of connections allowed on the server.</para>
/// </summary>
public uint sv402_connections;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of share names the server can accommodate.</para>
/// </summary>
public uint sv402_shares;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of files that can be open at once on the server.</para>
/// </summary>
public uint sv402_openfiles;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of files that one session can open.</para>
/// </summary>
public uint sv402_sessopens;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The maximum number of virtual circuits permitted per client.</para>
/// </summary>
public uint sv402_sessvcs;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of simultaneous requests a client can make on a single virtual circuit.</para>
/// </summary>
public uint sv402_sessreqs;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of search operations that can be carried out simultaneously.</para>
/// </summary>
public uint sv402_opensearch;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of file locks that can be active at the same time.</para>
/// </summary>
public uint sv402_activelocks;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of server buffers provided.</para>
/// </summary>
public uint sv402_numreqbuf;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The size, in bytes, of each server buffer.</para>
/// </summary>
public uint sv402_sizreqbuf;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of 64K server buffers provided.</para>
/// </summary>
public uint sv402_numbigbuf;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of processes that can access the operating system at one time.</para>
/// </summary>
public uint sv402_numfiletasks;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The interval, in seconds, for notifying an administrator of a network event.</para>
/// </summary>
public uint sv402_alertsched;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>
/// The number of entries that can be written to the error log, in any one interval, before notifying an administrator. The
/// interval is specified by the <c>sv402_alertsched</c> member.
/// </para>
/// </summary>
public uint sv402_erroralert;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of invalid logon attempts to allow a user before notifying an administrator.</para>
/// </summary>
public uint sv402_logonalert;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of invalid file access attempts to allow before notifying an administrator.</para>
/// </summary>
public uint sv402_accessalert;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>
/// The point at which the system sends a message notifying an administrator that free space on a disk is low. This value is
/// expressed as the number of kilobytes of free disk space remaining on the disk.
/// </para>
/// </summary>
public uint sv402_diskalert;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The network I/O error ratio, in tenths of a percent, that is allowed before notifying an administrator.</para>
/// </summary>
public uint sv402_netioalert;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The maximum size, in kilobytes, of the audit file. The audit file traces user activity.</para>
/// </summary>
public uint sv402_maxauditsz;
/// <summary>
/// <para>Type: <c>LPWSTR</c></para>
/// <para>A pointer to a Unicode string containing flags that control operations on a server.</para>
/// </summary>
public string sv402_srvheuristics;
}
/// <summary>
/// <para>The <c>SERVER_INFO_403</c> structure contains information about a specified server.</para>
/// </summary>
// https://docs.microsoft.com/en-us/windows/desktop/api/lmserver/ns-lmserver-_server_info_403 typedef struct _SERVER_INFO_403 { DWORD
// sv403_ulist_mtime; DWORD sv403_glist_mtime; DWORD sv403_alist_mtime; LMSTR sv403_alerts; DWORD sv403_security; DWORD
// sv403_numadmin; DWORD sv403_lanmask; LMSTR sv403_guestacct; DWORD sv403_chdevs; DWORD sv403_chdevq; DWORD sv403_chdevjobs; DWORD
// sv403_connections; DWORD sv403_shares; DWORD sv403_openfiles; DWORD sv403_sessopens; DWORD sv403_sessvcs; DWORD sv403_sessreqs;
// DWORD sv403_opensearch; DWORD sv403_activelocks; DWORD sv403_numreqbuf; DWORD sv403_sizreqbuf; DWORD sv403_numbigbuf; DWORD
// sv403_numfiletasks; DWORD sv403_alertsched; DWORD sv403_erroralert; DWORD sv403_logonalert; DWORD sv403_accessalert; DWORD
// sv403_diskalert; DWORD sv403_netioalert; DWORD sv403_maxauditsz; LMSTR sv403_srvheuristics; DWORD sv403_auditedevents; DWORD
// sv403_autoprofile; LMSTR sv403_autopath; } SERVER_INFO_403, *PSERVER_INFO_403, *LPSERVER_INFO_403;
[PInvokeData("lmserver.h", MSDNShortId = "14309dbe-ad7b-4ae0-8acc-39e9999f411b")]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SERVER_INFO_403 : INetServerInfo
{
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>
/// The last time the user list was modified. The value is expressed as the number of seconds that have elapsed since 00:00:00,
/// January 1, 1970, GMT, and applies to servers running with user-level security.
/// </para>
/// </summary>
public uint sv403_ulist_mtime;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>
/// The last time the group list was modified. The value is expressed as the number of seconds that have elapsed since 00:00:00,
/// January 1, 1970, GMT, and applies to servers running with user-level security.
/// </para>
/// </summary>
public uint sv403_glist_mtime;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>
/// The last time the access control list was modified. The value is expressed as the number of seconds that have elapsed since
/// 00:00:00, January 1, 1970, GMT, and applies to servers running with user-level security.
/// </para>
/// </summary>
public uint sv403_alist_mtime;
/// <summary>
/// <para>Type: <c>LPWSTR</c></para>
/// <para>A pointer to a Unicode string that specifies the list of user names on the server. Spaces separate the names.</para>
/// </summary>
public string sv403_alerts;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>
/// The security type of the server. This member can be one of the following values. Note that Windows NT, Windows 2000, Windows
/// XP, and Windows Server 2003 operating systems do not support share-level security.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>SV_SHARESECURITY</term>
/// <term>Share-level security</term>
/// </item>
/// <item>
/// <term>SV_USERSECURITY</term>
/// <term>User-level security</term>
/// </item>
/// </list>
/// </summary>
public uint sv403_security;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of administrators the server can accommodate at one time.</para>
/// </summary>
public uint sv403_numadmin;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The order in which the network device drivers are served.</para>
/// </summary>
public uint sv403_lanmask;
/// <summary>
/// <para>Type: <c>LPWSTR</c></para>
/// <para>
/// A pointer to a Unicode string that specifies the name of a reserved account for guest users on the server. The constant UNLEN
/// specifies the maximum number of characters in the string.
/// </para>
/// </summary>
public string sv403_guestacct;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of character-oriented devices that can be shared on the server.</para>
/// </summary>
public uint sv403_chdevs;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of character-oriented device queues that can coexist on the server.</para>
/// </summary>
public uint sv403_chdevq;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of character-oriented device jobs that can be pending at one time on the server.</para>
/// </summary>
public uint sv403_chdevjobs;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of connections allowed on the server.</para>
/// </summary>
public uint sv403_connections;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of share names the server can accommodate.</para>
/// </summary>
public uint sv403_shares;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of files that can be open at once on the server.</para>
/// </summary>
public uint sv403_openfiles;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of files that one session can open.</para>
/// </summary>
public uint sv403_sessopens;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The maximum number of virtual circuits permitted per client.</para>
/// </summary>
public uint sv403_sessvcs;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of simultaneous requests a client can make on a single virtual circuit.</para>
/// </summary>
public uint sv403_sessreqs;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of search operations that can be carried out simultaneously.</para>
/// </summary>
public uint sv403_opensearch;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of file locks that can be active at the same time.</para>
/// </summary>
public uint sv403_activelocks;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of server buffers provided.</para>
/// </summary>
public uint sv403_numreqbuf;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The size, in bytes, of each server buffer.</para>
/// </summary>
public uint sv403_sizreqbuf;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of 64K server buffers provided.</para>
/// </summary>
public uint sv403_numbigbuf;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of processes that can access the operating system at one time.</para>
/// </summary>
public uint sv403_numfiletasks;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The interval, in seconds, for notifying an administrator of a network event.</para>
/// </summary>
public uint sv403_alertsched;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>
/// The number of entries that can be written to the error log, in any one interval, before notifying an administrator. The
/// interval is specified by the <c>sv403_alertsched</c> member.
/// </para>
/// </summary>
public uint sv403_erroralert;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of invalid logon attempts to allow a user before notifying an administrator.</para>
/// </summary>
public uint sv403_logonalert;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of invalid file access attempts to allow before notifying an administrator.</para>
/// </summary>
public uint sv403_accessalert;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>
/// The point at which the system sends a message notifying an administrator that free space on a disk is low. This value is
/// expressed as the number of kilobytes of free disk space remaining on the disk.
/// </para>
/// </summary>
public uint sv403_diskalert;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The network I/O error ratio, in tenths of a percent, that is allowed before notifying an administrator.</para>
/// </summary>
public uint sv403_netioalert;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The maximum size, in kilobytes, of the audit file. The audit file traces user activity.</para>
/// </summary>
public uint sv403_maxauditsz;
/// <summary>
/// <para>Type: <c>LPWSTR</c></para>
/// <para>A pointer to a Unicode string containing flags that control operations on a server.</para>
/// </summary>
public string sv403_srvheuristics;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The audit event control mask.</para>
/// </summary>
public uint sv403_auditedevents;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>A value that controls the action of the server on the profile. The following values are predefined.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>SW_AUTOPROF_LOAD_MASK</term>
/// <term>The server loads the profile.</term>
/// </item>
/// <item>
/// <term>SW_AUTOPROF_SAVE_MASK</term>
/// <term>The server saves the profile.</term>
/// </item>
/// </list>
/// </summary>
public uint sv403_autoprofile;
/// <summary>
/// <para>Type: <c>LPWSTR</c></para>
/// <para>A pointer to a Unicode string that contains the path for the profile.</para>
/// </summary>
public string sv403_autopath;
}
/// <summary>
/// <para>
/// The <c>SERVER_TRANSPORT_INFO_0</c> structure contains information about the specified transport protocol, including name,
/// address, and location on the network.
/// </para>
/// </summary>
/// <remarks>
/// <para>
/// The <c>SERVER_TRANSPORT_INFO_0</c> structure is used by the NetServerTransportAdd or NetServerTransportAddEx function to bind the
/// specified server to the transport protocol.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/desktop/api/lmserver/ns-lmserver-_server_transport_info_0 typedef struct
// _SERVER_TRANSPORT_INFO_0 { DWORD svti0_numberofvcs; LMSTR svti0_transportname; LPBYTE svti0_transportaddress; DWORD
// svti0_transportaddresslength; LMSTR svti0_networkaddress; } SERVER_TRANSPORT_INFO_0, *PSERVER_TRANSPORT_INFO_0, *LPSERVER_TRANSPORT_INFO_0;
[PInvokeData("lmserver.h", MSDNShortId = "5b94cf7a-74d1-4ae8-87bd-22b2daf292cb")]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SERVER_TRANSPORT_INFO_0
{
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>
/// The number of clients connected to the server that are using the transport protocol specified by the
/// <c>svti0_transportname</c> member.
/// </para>
/// </summary>
public uint svti0_numberofvcs;
/// <summary>
/// <para>Type: <c>LMSTR</c></para>
/// <para>A pointer to a null-terminated character string that contains the name of a transport device; for example,</para>
/// <para>
/// <code>
/// \Device\NetBT_Tcpip_{2C9725F4-151A-11D3-AEEC-C3B211BD350B
/// </code>
/// </para>
/// <para>This string is Unicode if <c>_WIN32_WINNT</c> or <c>FORCE_UNICODE</c> are defined.</para>
/// </summary>
public string svti0_transportname;
/// <summary>
/// <para>Type: <c>LPBYTE</c></para>
/// <para>
/// A pointer to a variable that contains the address the server is using on the transport device specified by the
/// <c>svti0_transportname</c> member.
/// </para>
/// <para>
/// This member is usually the NetBIOS name that the server is using. In these instances, the name must be 16 characters long,
/// and the last character must be a blank character (0x20).
/// </para>
/// </summary>
public IntPtr svti0_transportaddress;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>
/// The length, in bytes, of the <c>svti0_transportaddress</c> member. For NetBIOS names, the value of this member is 16 (decimal).
/// </para>
/// </summary>
public uint svti0_transportaddresslength;
/// <summary>
/// <para>Type: <c>LMSTR</c></para>
/// <para>
/// A pointer to a NULL-terminated character string that contains the address the network adapter is using. The string is transport-specific.
/// </para>
/// <para>
/// You can retrieve this value only with a call to the NetServerTransportEnum function. You cannot set this value with a call to
/// the NetServerTransportAdd function or the NetServerTransportAddEx function.)
/// </para>
/// <para>This string is Unicode if <c>_WIN32_WINNT</c> or <c>FORCE_UNICODE</c> are defined.</para>
/// </summary>
public string svti0_networkaddress;
}
/// <summary>
/// <para>
/// The <c>SERVER_TRANSPORT_INFO_1</c> structure contains information about the specified transport protocol, including name and
/// address. This information level is valid only for the NetServerTransportAddEx function.
/// </para>
/// </summary>
/// <remarks>
/// <para>
/// The <c>SERVER_TRANSPORT_INFO_1</c> structure is used by the NetServerTransportAddEx function to bind the specified server to the
/// transport protocol.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/desktop/api/lmserver/ns-lmserver-_server_transport_info_1 typedef struct
// _SERVER_TRANSPORT_INFO_1 { DWORD svti1_numberofvcs; LMSTR svti1_transportname; LPBYTE svti1_transportaddress; DWORD
// svti1_transportaddresslength; LMSTR svti1_networkaddress; LMSTR svti1_domain; } SERVER_TRANSPORT_INFO_1,
// *PSERVER_TRANSPORT_INFO_1, *LPSERVER_TRANSPORT_INFO_1;
[PInvokeData("lmserver.h", MSDNShortId = "f21fed49-207a-4f64-becd-3d3c1e995eb0")]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SERVER_TRANSPORT_INFO_1
{
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>
/// The number of clients connected to the server that are using the transport protocol specified by the
/// <c>svti1_transportname</c> member.
/// </para>
/// </summary>
public uint svti1_numberofvcs;
/// <summary>
/// <para>Type: <c>LMSTR</c></para>
/// <para>A pointer to a null-terminated character string that contains the name of a transport device; for example,</para>
/// <para>
/// <code>
/// \Device\NetBT_Tcpip_{2C9725F4-151A-11D3-AEEC-C3B211BD350B
/// </code>
/// </para>
/// <para>This string is Unicode if <c>_WIN32_WINNT</c> or <c>FORCE_UNICODE</c> are defined.</para>
/// </summary>
public string svti1_transportname;
/// <summary>
/// <para>Type: <c>LPBYTE</c></para>
/// <para>
/// A pointer to a variable that contains the address the server is using on the transport device specified by the
/// <c>svti1_transportname</c> member.
/// </para>
/// <para>
/// This member is usually the NetBIOS name that the server is using. In these instances, the name must be 16 characters long,
/// and the last character must be a blank character (0x20).
/// </para>
/// </summary>
public IntPtr svti1_transportaddress;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>
/// The length, in bytes, of the <c>svti1_transportaddress</c> member. For NetBIOS names, the value of this member is 16 (decimal).
/// </para>
/// </summary>
public uint svti1_transportaddresslength;
/// <summary>
/// <para>Type: <c>LMSTR</c></para>
/// <para>
/// A pointer to a NULL-terminated character string that contains the address the network adapter is using. The string is transport-specific.
/// </para>
/// <para>
/// You can retrieve this value only with a call to the NetServerTransportEnum function. You cannot set this value with a call to
/// the NetServerTransportAdd function or the NetServerTransportAddEx function.)
/// </para>
/// <para>This string is Unicode if <c>_WIN32_WINNT</c> or <c>FORCE_UNICODE</c> are defined.</para>
/// </summary>
public string svti1_networkaddress;
/// <summary>
/// <para>Type: <c>LMSTR</c></para>
/// <para>
/// A pointer to a NULL-terminated character string that contains the name of the domain to which the server should announce its
/// presence. (When you call NetServerTransportEnum, this member is the name of the domain to which the server is announcing its presence.)
/// </para>
/// <para>This string is Unicode if <c>_WIN32_WINNT</c> or <c>FORCE_UNICODE</c> are defined.</para>
/// </summary>
public string svti1_domain;
}
/// <summary>
/// <para>
/// The <c>SERVER_TRANSPORT_INFO_2</c> structure contains information about the specified transport protocol, including the transport
/// name and address. This information level is valid only for the NetServerTransportAddEx function.
/// </para>
/// </summary>
/// <remarks>
/// <para>
/// The <c>SERVER_TRANSPORT_INFO_2</c> structure is used by the NetServerTransportAddEx function to bind the specified server to the
/// transport protocol.
/// </para>
/// <para>
/// An example of the use of the SVTI2_REMAP_PIPE_NAMES value follows. Call the NetServerTransportAddEx function to add a transport
/// to the server, specifying the address of "MyServer" in the <c>svti2_transportaddress</c> member, and
/// <c>SVTI2_REMAP_PIPE_NAMES</c> in the <c>svti2_flags</c> member. When a client attempts to open "Pipe" on "\MyServer" the client
/// will actually open $$MyServer\Pipe instead.
/// </para>
/// <para>
/// On Windows Server 2008 and Windows Vista with SP1, every name registered with the Windows remote file server (SRV) is designated
/// as either a scoped name or a non-scoped name. Every share that is added to the system will then either be attached to all of the
/// non-scoped names, or to a single scoped name. Applications that wish to use the scoping features are responsible for both
/// registering the new name as a scoped endpoint and then creating the shares with an appropriate scope. In this way, legacy uses of
/// the Network Management and Network Share Management functions are not affected in any way since they continue to register shares
/// and names as non-scoped names.
/// </para>
/// <para>
/// A scoped endpoint is created by calling the NetServerTransportAddEx function with the level parameter set to 2 and the bufptr
/// parameter pointed to a <c>SERVER_TRANSPORT_INFO_2</c> structure with the <c>SVTI2_SCOPED_NAME</c> bit value set in
/// <c>svti2_flags</c> member. A scoped endpoint is also created by calling the <c>NetServerTransportAddEx</c> function with the
/// level parameter set to 3 and the bufptr parameter pointed to a SERVER_TRANSPORT_INFO_3 structure with the
/// <c>SVTI2_SCOPED_NAME</c> bit value set in <c>svti3_flags</c> member.
/// </para>
/// <para>
/// When the <c>SVTI2_SCOPED_NAME</c> bit value is set for a transport, then shares can be added with a corresponding server name
/// (the <c>shi503_servername</c> member of the SHARE_INFO_503 structure) in a scoped fashion using the NetShareAdd function. If
/// there is no transport registered with the <c>SVTI2_SCOPED_NAME</c> bit value and the name provided in <c>shi503_servername</c>
/// member, then the share add in a scoped fashion will not succeed.
/// </para>
/// <para>
/// The NetShareAdd function is used to add a scoped share on a remote server specified in the servername parameter. The remote
/// server specified in the <c>shi503_servername</c> member of the SHARE_INFO_503 passed in the bufptr parameter must have been bound
/// to a transport protocol using the NetServerTransportAddEx function as a scoped endpoint. The <c>SVTI2_SCOPED_NAME</c> flag must
/// have been specified in the <c>shi503_servername</c> member of the <c>SERVER_TRANSPORT_INFO_2</c> or SERVER_TRANSPORT_INFO_3
/// structure for the transport protocol. The NetShareDelEx function is used to delete a scoped share. The NetShareGetInfo and
/// NetShareSetInfo functions are to used to get and set information on a scoped share.
/// </para>
/// <para>Scoped endpoints are generally used by the cluster namespace.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/desktop/api/lmserver/ns-lmserver-_server_transport_info_2 typedef struct
// _SERVER_TRANSPORT_INFO_2 { DWORD svti2_numberofvcs; LMSTR svti2_transportname; LPBYTE svti2_transportaddress; DWORD
// svti2_transportaddresslength; LMSTR svti2_networkaddress; LMSTR svti2_domain; ULONG svti2_flags; } SERVER_TRANSPORT_INFO_2,
// *PSERVER_TRANSPORT_INFO_2, *LPSERVER_TRANSPORT_INFO_2;
[PInvokeData("lmserver.h", MSDNShortId = "b422eb71-1f93-432d-8283-81432edfe568")]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SERVER_TRANSPORT_INFO_2
{
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>
/// The number of clients connected to the server that are using the transport protocol specified by the
/// <c>svti2_transportname</c> member.
/// </para>
/// </summary>
public uint svti2_numberofvcs;
/// <summary>
/// <para>Type: <c>LMSTR</c></para>
/// <para>A pointer to a null-terminated character string that contains the name of a transport device; for example,</para>
/// <para>
/// <code>
/// \Device\NetBT_Tcpip_{2C9725F4-151A-11D3-AEEC-C3B211BD350B
/// </code>
/// </para>
/// <para>This string is Unicode if <c>_WIN32_WINNT</c> or <c>FORCE_UNICODE</c> are defined.</para>
/// </summary>
public string svti2_transportname;
/// <summary>
/// <para>Type: <c>LPBYTE</c></para>
/// <para>
/// A pointer to a variable that contains the address the server is using on the transport device specified by the
/// <c>svti2_transportname</c> member.
/// </para>
/// <para>
/// This member is usually the NetBIOS name that the server is using. In these instances, the name must be 16 characters long,
/// and the last character must be a blank character (0x20).
/// </para>
/// </summary>
public IntPtr svti2_transportaddress;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>
/// The length, in bytes, of the <c>svti2_transportaddress</c> member. For NetBIOS names, the value of this member is 16 (decimal).
/// </para>
/// </summary>
public uint svti2_transportaddresslength;
/// <summary>
/// <para>Type: <c>LMSTR</c></para>
/// <para>
/// A pointer to a NULL-terminated character string that contains the address the network adapter is using. The string is transport-specific.
/// </para>
/// <para>
/// You can retrieve this value only with a call to the NetServerTransportEnum function. You cannot set this value with a call to
/// the NetServerTransportAdd function or the NetServerTransportAddEx function.)
/// </para>
/// <para>This string is Unicode if <c>_WIN32_WINNT</c> or <c>FORCE_UNICODE</c> are defined.</para>
/// </summary>
public string svti2_networkaddress;
/// <summary>
/// <para>Type: <c>LMSTR</c></para>
/// <para>
/// A pointer to a NULL-terminated character string that contains the name of the domain to which the server should announce its
/// presence. (When you call NetServerTransportEnum, this member is the name of the domain to which the server is announcing its presence.)
/// </para>
/// <para>This string is Unicode if <c>_WIN32_WINNT</c> or <c>FORCE_UNICODE</c> are defined.</para>
/// </summary>
public string svti2_domain;
/// <summary>
/// <para>Type: <c>ULONG</c></para>
/// <para>This member can be a combination of the following bit values defined in the Lmserver.h header file.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>SVTI2_REMAP_PIPE_NAMES</term>
/// <term>
/// If this value is set for an endpoint, client requests arriving over the transport to open a named pipe are rerouted
/// (remapped) to the following local pipe name: $$\ServerName\PipeName For more information on the use of this value, see the
/// Remarks section.
/// </term>
/// </item>
/// <item>
/// <term>SVTI2_SCOPED_NAME</term>
/// <term>
/// If this value is set for an endpoint and there is an attempt to create a second transport with the same network address but a
/// different transport name and conflicting settings for the SCOPED flag, this transport creation will fail. Thus, every
/// registered transport for a given network address must have the same scoped setting. For more information on the use of this
/// value, see the Remarks section. This value is defined on Windows Server 2008 and Windows Vista with SP1.
/// </term>
/// </item>
/// </list>
/// </summary>
public SERVER_TRANSPORT_FLAGS svti2_flags;
}
/// <summary>
/// <para>
/// The <c>SERVER_TRANSPORT_INFO_3</c> structure contains information about the specified transport protocol, including name, address
/// and password (credentials). This information level is valid only for the NetServerTransportAddEx function.
/// </para>
/// </summary>
/// <remarks>
/// <para>
/// The <c>SERVER_TRANSPORT_INFO_3</c> structure is used by the NetServerTransportAddEx function to bind the specified server to the
/// transport protocol.
/// </para>
/// <para>
/// An example of the use of the SVTI2_REMAP_PIPE_NAMES value follows. Call the NetServerTransportAddEx function to add a transport
/// to the server, specifying the address of "MyServer" in the <c>svti3_transportaddress</c> member, and
/// <c>SVTI2_REMAP_PIPE_NAMES</c> in the <c>svti3_flags</c> member. When a client attempts to open "Pipe" on "\MyServer" the client
/// will actually open $$MyServer\Pipe instead.
/// </para>
/// <para>
/// The <c>svti3_passwordlength</c> and <c>svti3_password</c> members are necessary for a client and server to perform mutual authentication.
/// </para>
/// <para>
/// On Windows Server 2008 and Windows Vista with SP1, every name registered with the Windows remote file server (SRV) is designated
/// as either a scoped name or a non-scoped name. Every share that is added to the system will then either be attached to all of the
/// non-scoped names, or to a single scoped name. Applications that wish to use the scoping features are responsible for both
/// registering the new name as a scoped endpoint and then creating the shares with an appropriate scope. In this way, legacy uses of
/// the Network Management and Network Share Management functions are not affected in any way since they continue to register shares
/// and names as non-scoped names.
/// </para>
/// <para>
/// A scoped endpoint is created by calling the NetServerTransportAddEx function with the level parameter set to 2 and the bufptr
/// parameter pointed to a SERVER_TRANSPORT_INFO_2 structure with the <c>SVTI2_SCOPED_NAME</c> bit value set in <c>svti2_flags</c>
/// member. A scoped endpoint is also created by calling the <c>NetServerTransportAddEx</c> function with the level parameter set to
/// 3 and the bufptr parameter pointed to a <c>SERVER_TRANSPORT_INFO_3</c> structure with the <c>SVTI2_SCOPED_NAME</c> bit value set
/// in <c>svti3_flags</c> member.
/// </para>
/// <para>
/// When the <c>SVTI2_SCOPED_NAME</c> bit value is set for a transport, then shares can be added with a corresponding server name
/// (the <c>shi503_servername</c> member of the SHARE_INFO_503 structure) in a scoped fashion using the NetShareAdd function. If
/// there is no transport registered with the <c>SVTI2_SCOPED_NAME</c> bit value and the name provided in <c>shi503_servername</c>
/// member, then the share add in a scoped fashion will not succeed.
/// </para>
/// <para>
/// The NetShareAdd function is used to add a scoped share on a remote server specified in the servername parameter. The remote
/// server specified in the <c>shi503_servername</c> member of the SHARE_INFO_503 passed in the bufptr parameter must have been bound
/// to a transport protocol using the NetServerTransportAddEx function as a scoped endpoint. The <c>SVTI2_SCOPED_NAME</c> flag must
/// have been specified in the <c>shi503_servername</c> member of the SERVER_TRANSPORT_INFO_2 or <c>SERVER_TRANSPORT_INFO_3</c>
/// structure for the transport protocol. The NetShareDelEx function is used to delete a scoped share. The NetShareGetInfo and
/// NetShareSetInfo functions are to used to get and set information on a scoped share.
/// </para>
/// <para>Scoped endpoints are generally used by the cluster namespace.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/desktop/api/lmserver/ns-lmserver-_server_transport_info_3 typedef struct
// _SERVER_TRANSPORT_INFO_3 { DWORD svti3_numberofvcs; LMSTR svti3_transportname; LPBYTE svti3_transportaddress; DWORD
// svti3_transportaddresslength; LMSTR svti3_networkaddress; LMSTR svti3_domain; ULONG svti3_flags; DWORD svti3_passwordlength; BYTE
// svti3_password[256]; } SERVER_TRANSPORT_INFO_3, *PSERVER_TRANSPORT_INFO_3, *LPSERVER_TRANSPORT_INFO_3;
[PInvokeData("lmserver.h", MSDNShortId = "045d60d4-518f-4ce4-b611-e23d1588d5d3")]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SERVER_TRANSPORT_INFO_3
{
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>
/// The number of clients connected to the server that are using the transport protocol specified by the
/// <c>svti3_transportname</c> member.
/// </para>
/// </summary>
public uint svti3_numberofvcs;
/// <summary>
/// <para>Type: <c>LMSTR</c></para>
/// <para>A pointer to a null-terminated character string that contains the name of a transport device; for example,</para>
/// <para>
/// <code>
/// \Device\NetBT_Tcpip_{2C9725F4-151A-11D3-AEEC-C3B211BD350B
/// </code>
/// </para>
/// <para>This string is Unicode if <c>_WIN32_WINNT</c> or <c>FORCE_UNICODE</c> are defined.</para>
/// </summary>
public string svti3_transportname;
/// <summary>
/// <para>Type: <c>LPBYTE</c></para>
/// <para>
/// A pointer to a variable that contains the address the server is using on the transport device specified by the
/// <c>svti3_transportname</c> member.
/// </para>
/// <para>
/// This member is usually the NetBIOS name that the server is using. In these instances, the name must be 16 characters long,
/// and the last character must be a blank character (0x20).
/// </para>
/// </summary>
public IntPtr svti3_transportaddress;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>
/// The length, in bytes, of the <c>svti3_transportaddress</c> member. For NetBIOS names, the value of this member is 16 (decimal).
/// </para>
/// </summary>
public uint svti3_transportaddresslength;
/// <summary>
/// <para>Type: <c>LMSTR</c></para>
/// <para>
/// A pointer to a NULL-terminated character string that contains the address the network adapter is using. The string is transport-specific.
/// </para>
/// <para>
/// You can retrieve this value only with a call to the NetServerTransportEnum function. You cannot set this value with a call to
/// the NetServerTransportAdd function or the NetServerTransportAddEx function.)
/// </para>
/// <para>This string is Unicode if <c>_WIN32_WINNT</c> or <c>FORCE_UNICODE</c> are defined.</para>
/// </summary>
public string svti3_networkaddress;
/// <summary>
/// <para>Type: <c>LMSTR</c></para>
/// <para>
/// A pointer to a NULL-terminated character string that contains the name of the domain to which the server should announce its
/// presence. (When you call NetServerTransportEnum, this member is the name of the domain to which the server is announcing its presence.)
/// </para>
/// <para>This string is Unicode if <c>_WIN32_WINNT</c> or <c>FORCE_UNICODE</c> are defined.</para>
/// </summary>
public string svti3_domain;
/// <summary>
/// <para>Type: <c>ULONG</c></para>
/// <para>This member can be a combination of the following bit values defined in the Lmserver.h header file.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>SVTI2_REMAP_PIPE_NAMES</term>
/// <term>
/// If this value is set for an endpoint, client requests arriving over the transport to open a named pipe are rerouted
/// (remapped) to the following local pipe name: $$\ServerName\PipeName For more information on the use of this value, see the
/// Remarks section.
/// </term>
/// </item>
/// <item>
/// <term>SVTI2_SCOPED_NAME</term>
/// <term>
/// If this value is set for an endpoint and there is an attempt to create a second transport with the same network address but a
/// different transport name and conflicting settings for the SCOPED flag, this transport creation will fail. Thus, every
/// registered transport for a given network address must have the same scoped setting. For more information on the use of this
/// value, see the Remarks section. This value is defined on Windows Server 2008 and Windows Vista with SP1.
/// </term>
/// </item>
/// </list>
/// </summary>
public SERVER_TRANSPORT_FLAGS svti3_flags;
/// <summary>
/// <para>Type: <c>DWORD</c></para>
/// <para>The number of valid bytes in the <c>svti3_password</c> member.</para>
/// </summary>
public uint svti3_passwordlength;
/// <summary>
/// <para>Type: <c>BYTE[256]</c></para>
/// <para>
/// The credentials to use for the new transport address. If the <c>svti3_passwordlength</c> member is zero, the credentials for
/// the server are used.
/// </para>
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
public byte[] svti3_password;
}
/*
SERVER_INFO_1005 structure
SERVER_INFO_1010 structure
SERVER_INFO_1016 structure
SERVER_INFO_1017 structure
SERVER_INFO_1018 structure
SERVER_INFO_1107 structure
SERVER_INFO_1501 structure
SERVER_INFO_1502 structure
SERVER_INFO_1503 structure
SERVER_INFO_1506 structure
SERVER_INFO_1509 structure
SERVER_INFO_1510 structure
SERVER_INFO_1511 structure
SERVER_INFO_1512 structure
SERVER_INFO_1513 structure
SERVER_INFO_1515 structure
SERVER_INFO_1516 structure
SERVER_INFO_1518 structure
SERVER_INFO_1523 structure
SERVER_INFO_1528 structure
SERVER_INFO_1529 structure
SERVER_INFO_1530 structure
SERVER_INFO_1533 structure
SERVER_INFO_1536 structure
SERVER_INFO_1538 structure
SERVER_INFO_1539 structure
SERVER_INFO_1540 structure
SERVER_INFO_1541 structure
SERVER_INFO_1542 structure
SERVER_INFO_1544 structure
SERVER_INFO_1550 structure
SERVER_INFO_1552 structure
SERVER_INFO_502 structure
SERVER_INFO_503 structure*/
}
}