All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sun.jna.platform.win32.Netapi32 Maven / Gradle / Ivy

There is a newer version: 5.14.0
Show newest version
/* Copyright (c) 2010 Daniel Doubrovkine, All Rights Reserved
 *
 * The contents of this file is dual-licensed under 2
 * alternative Open Source/Free licenses: LGPL 2.1 or later and
 * Apache License 2.0. (starting with JNA version 4.0.0).
 *
 * You can freely decide which license you want to apply to
 * the project.
 *
 * You may obtain a copy of the LGPL License at:
 *
 * http://www.gnu.org/licenses/licenses.html
 *
 * A copy is also included in the downloadable source code package
 * containing JNA, in file "LGPL2.1".
 *
 * You may obtain a copy of the Apache License at:
 *
 * http://www.apache.org/licenses/
 *
 * A copy is also included in the downloadable source code package
 * containing JNA, in file "AL2.0".
 */
package com.sun.jna.platform.win32;

import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.Structure.FieldOrder;
import com.sun.jna.WString;
import com.sun.jna.platform.win32.DsGetDC.PDOMAIN_CONTROLLER_INFO;
import com.sun.jna.platform.win32.Guid.GUID;
import com.sun.jna.platform.win32.NTSecApi.PLSA_FOREST_TRUST_INFORMATION;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;
import com.sun.jna.win32.W32APITypeMapper;

/**
 * Netapi32.dll Interface.
 * @author dblock[at]dblock.org
 */
public interface Netapi32 extends StdCallLibrary {

    Netapi32 INSTANCE = Native.load("Netapi32", Netapi32.class, W32APIOptions.DEFAULT_OPTIONS);

    int MAX_PREFERRED_LENGTH = -1;

    /**
     * Contains information about the session, including name of the computer; name
     * of the user; and active and idle times for the session.
     */
    @FieldOrder({ "sesi10_cname", "sesi10_username", "sesi10_time", "sesi10_idle_time" })
    class SESSION_INFO_10 extends Structure {
        public String sesi10_cname;
        public String sesi10_username;
        public int sesi10_time;
        public int sesi10_idle_time;

        public SESSION_INFO_10() {
            super(W32APITypeMapper.UNICODE);
        }

        public SESSION_INFO_10(Pointer p) {
            super(p, Structure.ALIGN_DEFAULT, W32APITypeMapper.UNICODE);
            read();
        }
    }

    /**
     * Provides information about sessions established on a server.
     *
     * @param 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 NULL, the local computer is used.
     * @param UncClientName
     *            Pointer to a string that specifies the name of the computer
     *            session for which information is to be returned. If this parameter
     *            is NULL, NetSessionEnum returns information for all computer
     *            sessions on the server.
     * @param username
     *            Pointer to a string that specifies the name of the user for which
     *            information is to be returned. If this parameter is NULL,
     *            NetSessionEnum returns information for all users.
     * @param level
     *            Specifies the information level of the data. This parameter can be
     *            one of 0, 1, 2, 10, 502.
     * @param bufptr
     *            Pointer to the buffer that receives the data. The format of this
     *            data depends on the value of the level parameter, for example
     *            {@code SESSION_INFO_0} for level 0.
     *            

* This buffer is allocated by the system and must be freed using the * {@link #NetApiBufferFree} function. Note that you must free the * buffer even if the function fails with {@code ERROR_MORE_DATA}. * @param prefmaxlen * Specifies the preferred maximum length of returned data, in bytes. * If you specify {@link #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 * {@code ERROR_MORE_DATA}. * @param entriesread * Pointer to a value that receives the count of elements actually * enumerated. * @param 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 resume_handle * Pointer to a value that contains a resume handle which is used to * continue an existing session search. The handle should be zero on * the first call and left unchanged for subsequent calls. If * resume_handle is NULL, no resume handle is stored. * @return If the function succeeds, the return value is NERR_Success (0). If * the function fails, the return value is an error code. */ int NetSessionEnum(WString servername, WString UncClientName, WString username, int level, PointerByReference bufptr, int prefmaxlen, IntByReference entriesread, IntByReference totalentries, IntByReference resume_handle); /** * Retrieves join status information for the specified computer. * * @param lpServer * Specifies the DNS or NetBIOS name of the computer on which to * call the function. * @param lpNameBuffer * Receives the NetBIOS name of the domain or workgroup to which * the computer is joined. * @param BufferType * Join status of the specified computer. * @return If the function succeeds, the return value is NERR_Success. If * the function fails, the return value is a system error code. */ public int NetGetJoinInformation(String lpServer, PointerByReference lpNameBuffer, IntByReference BufferType); /** * Frees the memory that the NetApiBufferAllocate function allocates. * * @param buffer buffer * @return If the function succeeds, the return value is NERR_Success. If * the function fails, the return value is a system error code. */ public int NetApiBufferFree(Pointer buffer); /** * Returns information about each local group account on the specified * server. * * @param serverName * Specifies the DNS or NetBIOS name of the remote server on * which the function is to execute. If this parameter is NULL, * the local computer is used. * @param level * Specifies the information level of the data. * @param bufptr * Pointer to the address of the buffer that receives the * information structure. * @param prefmaxlen * Specifies the preferred maximum length of returned data, in * bytes. * @param entriesread * Pointer to a value that receives the count of elements * actually enumerated. * @param totalentries * Pointer to a value that receives the approximate total number * of entries that could have been enumerated from the current * resume position. * @param resume_handle * Pointer to a value that contains a resume handle that is used * to continue an existing local group search. * @return If the function succeeds, the return value is NERR_Success. */ public int NetLocalGroupEnum(String serverName, int level, PointerByReference bufptr, int prefmaxlen, IntByReference entriesread, IntByReference totalentries, IntByReference resume_handle); /** * Returns the name of the primary domain controller (PDC). * * @param serverName * Specifies the DNS or NetBIOS name of the remote server on which the function is * to execute. If this parameter is NULL, the local computer is used. * @param domainName * Specifies the name of the domain. * @param bufptr * Receives a string that specifies the server name of the PDC of the domain. * @return * If the function succeeds, the return value is NERR_Success. */ public int NetGetDCName(String serverName, String domainName, PointerByReference bufptr); /** * The NetGroupEnum function retrieves information about each global group * in the security database, which is the security accounts manager (SAM) database or, * in the case of domain controllers, the Active Directory. * @param servername * Pointer to a constant string that specifies the DNS or NetBIOS name of the * remote server on which the function is to execute. If this parameter is NULL, * the local computer is used. * @param level * Specifies the information level of the data. * @param bufptr * Pointer to the buffer to receive the global group information structure. * The format of this data depends on the value of the level parameter. * @param prefmaxlen * Specifies the preferred maximum length of the returned data, in bytes. * If you specify MAX_PREFERRED_LENGTH, the function allocates the amount of * memory required to hold 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. * @param entriesread * Pointer to a value that receives the count of elements actually enumerated. * @param totalentries * Pointer to a value that receives the total number of entries that could have * been enumerated from the current resume position. The total number of entries * is only a hint. * @param resume_handle * Pointer to a variable that contains a resume handle that is used to continue * the global group enumeration. The handle should be zero on the first call and * left unchanged for subsequent calls. If resume_handle is NULL, no resume handle * is stored. * @return * If the function succeeds, the return value is NERR_Success. */ public int NetGroupEnum(String servername, int level, PointerByReference bufptr, int prefmaxlen, IntByReference entriesread, IntByReference totalentries, IntByReference resume_handle); /** * The NetUserEnum function provides information about all user accounts on a server. * @param servername * Pointer to a constant string that specifies the DNS or NetBIOS name of the * remote server on which the function is to execute. If this parameter is NULL, * the local computer is used. * @param level * Specifies the information level of the data. * @param filter * Specifies a value that filters the account types for enumeration. * @param 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 prefmaxlen * Specifies the preferred maximum length, in 8-bit bytes of returned data. 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. * @param entriesread * Pointer to a value that receives the count of elements actually enumerated. * @param 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 resume_handle * Pointer to a value that contains a resume handle which is used to continue an * existing user search. The handle should be zero on the first call and left * unchanged for subsequent calls. If resume_handle is NULL, then no resume * handle is stored. * @return * If the function succeeds, the return value is NERR_Success. */ public int NetUserEnum(String servername, int level, int filter, PointerByReference bufptr, int prefmaxlen, IntByReference entriesread, IntByReference totalentries, IntByReference resume_handle); /** * The NetUserGetGroups function retrieves a list of global groups to which a * specified user belongs. * @param servername * Pointer to a constant string that specifies the DNS or NetBIOS name of the * remote server on which the function is to execute. If this parameter is NULL, * the local computer is used. * @param username * Pointer to a constant string that specifies the name of the user to search for * in each group account. For more information, see the following Remarks section. * @param level * Specifies the information level of the data. * @param bufptr * Pointer to the buffer that receives the data. 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 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. * @param entriesread * Pointer to a value that receives the count of elements actually retrieved. * @param totalentries * Pointer to a value that receives the total number of entries that could have been retrieved. * @return * If the function succeeds, the return value is NERR_Success. */ public int NetUserGetGroups(String servername, String username, int level, PointerByReference bufptr, int prefmaxlen, IntByReference entriesread, IntByReference totalentries); /** * The NetUserGetLocalGroups function retrieves a list of local groups to which a * specified user belongs. * @param servername * Pointer to a constant string that specifies the DNS or NetBIOS name of the remote * server on which the function is to execute. If this parameter is NULL, the local * computer is used. * @param username * Pointer to a constant string that specifies the name of the user for which to return * local group membership information. If the string is of the form DomainName\UserName * the user name is expected to be found on that domain. If the string is of the form * UserName, the user name is expected to be found on the server specified by the * servername parameter. * @param level * Specifies the information level of the data. * @param flags * Specifies a bitmask of flags. Currently, only the value LG_INCLUDE_INDIRECT is * defined. If this bit is set, the function also returns the names of the local * groups in which the user is indirectly a member (that is, the user has membership * in a global group that is itself a member of one or more local groups). * @param 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 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 entriesread * Pointer to a value that receives the count of elements actually enumerated. * @param totalentries * Pointer to a value that receives the total number of entries that could have been enumerated. * @return * If the function succeeds, the return value is NERR_Success. */ public int NetUserGetLocalGroups(String servername, String username, int level, int flags, PointerByReference bufptr, int prefmaxlen, IntByReference entriesread, IntByReference totalentries); /** * The NetUserAdd function adds a user account and assigns a password and privilege level. * @param servername * Pointer to a constant string that specifies the DNS or NetBIOS name of the remote server * on which the function is to execute. * @param level * Specifies the information level of the data. * @param buf * Pointer to the buffer that specifies the data. The format of this data depends on the * value of the level parameter. * @param parm_err * Pointer to a value that receives the index of the first member of the user information * structure that causes ERROR_INVALID_PARAMETER. If this parameter is NULL, the index is * not returned on error. * @return * If the function succeeds, the return value is NERR_Success. */ public int NetUserAdd(String servername, int level, Structure buf, IntByReference parm_err); /** * The NetUserDel function deletes a user account from a server. * @param servername * Pointer to a constant string that specifies the DNS or NetBIOS name of the remote * server on which the function is to execute. If this parameter is NULL, the local * computer is used. * @param username * Pointer to a constant string that specifies the name of the user account to delete. * @return * If the function succeeds, the return value is NERR_Success. */ public int NetUserDel(String servername, String username); /** * The NetUserChangePassword function changes a user's password for a specified * network server or domain. * @param domainname * Pointer to a constant string that specifies the DNS or NetBIOS name of a remote * server or domain on which the function is to execute. If this parameter is NULL, * the logon domain of the caller is used. * @param username * Pointer to a constant string that specifies a user name. The NetUserChangePassword * function changes the password for the specified user. If this parameter is NULL, * the logon name of the caller is used. * @param oldpassword * Pointer to a constant string that specifies the user's old password. * @param newpassword * Pointer to a constant string that specifies the user's new password. * @return * If the function succeeds, the return value is NERR_Success. */ public int NetUserChangePassword(String domainname, String username, String oldpassword, String newpassword); /** * The DsGetDcName function returns the name of a domain controller in a specified domain. * This function accepts additional domain controller selection criteria to indicate * preference for a domain controller with particular characteristics. * @param ComputerName * Pointer to a null-terminated string that specifies the name of the server to process * this function. Typically, this parameter is NULL, which indicates that the local * computer is used. * @param DomainName * Pointer to a null-terminated string that specifies the name of the domain or application * partition to query. This name can either be a DNS style name, for example, fabrikam.com, * or a flat-style name, for example, Fabrikam. If a DNS style name is specified, the name * may be specified with or without a trailing period. * @param DomainGuid * Pointer to a GUID structure that specifies the GUID of the domain queried. If DomainGuid * is not NULL and the domain specified by DomainName or ComputerName cannot be found, * DsGetDcName attempts to locate a domain controller in the domain having the GUID specified * by DomainGuid. * @param SiteName * Pointer to a null-terminated string that specifies the name of the site where the returned * domain controller should physically exist. If this parameter is NULL, DsGetDcName attempts * to return a domain controller in the site closest to the site of the computer specified by * ComputerName. This parameter should be NULL, by default. * @param Flags * Contains a set of flags that provide additional data used to process the request. * @param DomainControllerInfo * Pointer to a PDOMAIN_CONTROLLER_INFO value that receives a pointer to a * DOMAIN_CONTROLLER_INFO structure that contains data about the domain controller selected. * This structure is allocated by DsGetDcName. The caller must free the structure using * the NetApiBufferFree function when it is no longer required. * @return * If the function returns domain controller data, the return value is ERROR_SUCCESS. * If the function fails, the return code is one of ERROR_* values. */ public int DsGetDcName(String ComputerName, String DomainName, GUID DomainGuid, String SiteName, int Flags, PDOMAIN_CONTROLLER_INFO DomainControllerInfo); /** * The DsGetForestTrustInformationW function obtains forest trust data for a specified domain. * @param serverName * Contains the name of the domain controller that DsGetForestTrustInformationW * is connected to remotely. The caller must be an authenticated user on this server. * If this parameter is NULL, the local server is used. * @param trustedDomainName * Contains the NETBIOS or DNS name of the trusted domain that the forest trust data * is to be retrieved for. This domain must have the TRUST_ATTRIBUTE_FOREST_TRANSITIVE * trust attribute. If this parameter is NULL, the forest trust data for the domain * hosted by ServerName is retrieved. * @param Flags * Contains a set of flags that modify the behavior of this function. * DS_GFTI_UPDATE_TDO: If this flag is set, DsGetForestTrustInformationW will update the * forest trust data of the trusted domain identified by the TrustedDomainName parameter. * @param ForestTrustInfo * Pointer to an LSA_FOREST_TRUST_INFORMATION structure pointer that receives the forest * trust data that describes the namespaces claimed by the domain specified by * TrustedDomainName. The Time member of all returned records will be zero. * @return * Returns NO_ERROR if successful or a Win32 error code otherwise. */ public int DsGetForestTrustInformation(String serverName, String trustedDomainName, int Flags, PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo); /** * The DsEnumerateDomainTrusts function obtains domain trust data for a specified domain. * @param serverName * Pointer to a null-terminated string that specifies the name of a computer in the domain to * obtain the trust information for. This computer must be running the Windows 2000 or later * operating system. If this parameter is NULL, the name of the local computer is used. * The caller must be an authenticated user in this domain. * @param Flags * Contains a set of flags that determines which domain trusts to enumerate. * @param Domains * Receives a pointer which points to an array of DS_DOMAIN_TRUSTS structures. * Each structure in this array contains trust data about a domain. The caller must free this * memory when it is no longer required by calling NetApiBufferFree. * @param DomainCount * Pointer to a ULONG value that receives the number of elements returned in the Domains array. * @return * Returns ERROR_SUCCESS if successful or a Win32 error code otherwise. */ public int DsEnumerateDomainTrusts(String serverName, int Flags, PointerByReference Domains, IntByReference DomainCount); /** * The NetUserGetInfo function retrieves information about a particular user account on a server. * @param servername * A pointer to a constant string that specifies the DNS or NetBIOS name of the remote server on * which the function is to execute. If this parameter is NULL, the local computer is used. * @param username * A pointer to a constant string that specifies the name of the user account for which to return information. * For more information, see the following Remarks section. * @param level * The information level of the data. This parameter can be one of the following values. * Value Meaning * 0 Return the user account name. The bufptr parameter points to a USER_INFO_0 structure. * 1 Return detailed information about the user account. The bufptr parameter points to a USER_INFO_1 structure. * 2 Return detailed information and additional attributes about the user account. The bufptr parameter points to a USER_INFO_2 structure. * 3 Return detailed information and additional attributes about the user account. This level is valid only on servers. The bufptr parameter points to a USER_INFO_3 structure. Note that it is recommended that you use USER_INFO_4 instead. * 4 Return detailed information and additional attributes about the user account. This level is valid only on servers. The bufptr parameter points to a USER_INFO_4 structure. Windows 2000: This level is not supported. * 10 Return user and account names and comments. The bufptr parameter points to a USER_INFO_10 structure. * 11 Return detailed information about the user account. The bufptr parameter points to a USER_INFO_11 structure. * 20 Return the user's name and identifier and various account attributes. The bufptr parameter points to a USER_INFO_20 structure. Note that on Windows XP and later, it is recommended that you use USER_INFO_23 instead. * 23 Return the user's name and identifier and various account attributes. The bufptr parameter points to a USER_INFO_23 structure. Windows 2000: This level is not supported. * @param 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. * For more information, see Network Management Function Buffers and Network Management Function Buffer Lengths. * @return * If the function succeeds, the return value is NERR_Success. */ public int NetUserGetInfo(String servername, String username, int level, PointerByReference bufptr); /** * Shares a server resource. * * @param servername [in] * 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 NULL, the local computer is used. * @param level [in] * Specifies the information level of the data. This parameter can be one of the following values: * 2 - Specifies information about the shared resource, including the name of the resource, type and permissions, and number of connections. * The buf parameter points to a SHARE_INFO_2 structure. * 502 - Specifies information about the shared resource, including the name of the resource, type and permissions, number of connections, and other pertinent information. * The buf parameter points to a SHARE_INFO_502 structure. * 503 - Specifies information about the shared resource, including the name of the resource, type and permissions, number of connections, and other pertinent information. * The buf parameter points to a SHARE_INFO_503 structure. * @param buf [in] * 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 (https://msdn.microsoft.com/en-us/library/windows/desktop/aa370676(v=vs.85).aspx) * @param parm_err [out] * Pointer to a value that receives the index of the first member of the share information structure that causes the ERROR_INVALID_PARAMETER error. If this parameter is NULL, the * index is not returned on error. For more information, see the NetShareSetInfo function. * @return If the function succeeds, the return value is NERR_Success. If the function fails, the return value can be an error code as seen on MSDN. */ public int NetShareAdd(String servername, int level, Pointer buf, IntByReference parm_err); /** * Deletes a share name from a server's list of shared resources, disconnecting all connections to the shared resource. * * @param servername [in] * 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 NULL, the local computer is used. * @param netname [in] * Pointer to a string that specifies the name of the share to delete. * @param reserved * Reserved, must be zero. * @return If the function succeeds, the return value is LMErr.NERR_Success. * If the function fails, the return value can be an error code as seen on MSDN. */ public int NetShareDel(String servername, String netname, int reserved); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy