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

src.com.sun.jna.platform.win32.Advapi32 Maven / Gradle / Ivy

There is a newer version: 1.7.ga
Show newest version
/* Copyright (c) 2010 Daniel Doubrovkine, All Rights Reserved
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 * 
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.  
 */
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.platform.win32.WinBase.SECURITY_ATTRIBUTES;
import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.platform.win32.WinNT.HANDLEByReference;
import com.sun.jna.platform.win32.WinNT.PSID;
import com.sun.jna.platform.win32.WinNT.PSIDByReference;
import com.sun.jna.platform.win32.WinReg.HKEY;
import com.sun.jna.platform.win32.WinReg.HKEYByReference;
import com.sun.jna.platform.win32.Winsvc.SC_HANDLE;
import com.sun.jna.platform.win32.Winsvc.SERVICE_STATUS;
import com.sun.jna.platform.win32.Winsvc.SERVICE_STATUS_PROCESS;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;

/**
 * Advapi32.dll Interface.
 * @author dblock[at]dblock.org
 */
public interface Advapi32 extends StdCallLibrary {
	Advapi32 INSTANCE = (Advapi32) Native.loadLibrary("Advapi32",
			Advapi32.class, W32APIOptions.UNICODE_OPTIONS);

	/**
	 * Retrieves the name of the user associated with the current thread.
	 * http://msdn.microsoft.com/en-us/library/ms724432(VS.85).aspx
	 * 
	 * @param buffer
	 *  Buffer to receive the user's logon name.
	 * @param len
	 *  On input, the size of the buffer, on output the number of
	 *  characters copied into the buffer, including the terminating
	 *  null character.
	 * @return 
	 *  True if succeeded.
	 */
	public boolean GetUserNameW(char[] buffer, IntByReference len);

	/**
	 * Accepts the name of a system and anaccount as input and retrieves a security 
	 * identifier (SID) for the account and the name of the domain on which the 
	 * account was found.
	 * http://msdn.microsoft.com/en-us/library/aa379159(VS.85).aspx
	 * 
	 * @param lpSystemName
	 *  Specifies the name of the system.
	 * @param lpAccountName
	 *  Specifies the account name.
	 * @param Sid
	 *  Receives the SID structure that corresponds to the account
	 *  name pointed to by the lpAccountName parameter.
	 * @param cbSid
	 *  On input, this value specifies the size, in bytes, of the Sid
	 *  buffer. If the function fails because the buffer is too small
	 *  or if cbSid is zero, this variable receives the required
	 *  buffer size.
	 * @param ReferencedDomainName
	 *  Receives the name of the domain where the account name is found.
	 * @param cchReferencedDomainName
	 *  On input, this value specifies the size, in TCHARs, of the
	 *  ReferencedDomainName buffer. If the function fails because the
	 *  buffer is too small, this variable receives the required
	 *  buffer size, including the terminating null character.
	 * @param peUse
	 *  SID_NAME_USE enumerated type that indicates the type of the
	 *  account when the function returns.
	 * @return 
	 *  True if the function was successful, False otherwise.
	 */
	public boolean LookupAccountName(String lpSystemName,
			String lpAccountName, PSID Sid, IntByReference cbSid,
			char[] ReferencedDomainName,
			IntByReference cchReferencedDomainName, PointerByReference peUse);

	/**
	 * Retrieves the name of the account for this SID and the name of the first domain 
	 * on which this SID is found.
	 * 
	 * @param lpSystemName Specifies the target computer.
	 * @param Sid The SID to look up. 
	 * @param lpName
	 *  Buffer that receives a null-terminated string that contains the 
	 * 	account name that corresponds to the lpSid parameter. 
	 * @param cchName 
	 * 	On input, specifies the size, in TCHARs, of the lpName buffer. If the function fails 
	 *  because the buffer is too small or if cchName is zero, cchName receives the required 
	 *  buffer size, including the terminating null character. 
	 * @param ReferencedDomainName
	 *  Pointer to a buffer that receives a null-terminated string that contains the name of 
	 *  the domain where the account name was found.
	 * @param cchReferencedDomainName
	 * 	On input, specifies the size, in TCHARs, of the lpReferencedDomainName buffer. If the 
	 * 	function fails because the buffer is too small or if cchReferencedDomainName is zero, 
	 * 	cchReferencedDomainName receives the required buffer size, including the terminating 
	 * 	null character. 
	 * @param peUse
	 *  Pointer to a variable that receives a SID_NAME_USE value that indicates the type of 
	 *  the account.
	 * @return 
	 *  If the function succeeds, the function returns nonzero.
	 *  If the function fails, it returns zero. To get extended error information, call 
	 *  GetLastError.
	 */
	public boolean LookupAccountSid(String lpSystemName, PSID Sid,
			char[] lpName, IntByReference cchName,  char[] ReferencedDomainName,
	        IntByReference cchReferencedDomainName, PointerByReference peUse);
	
	/**
	 * Convert a security identifier (SID) to a string format suitable for display, 
	 * storage, or transmission.
	 * http://msdn.microsoft.com/en-us/library/aa376399(VS.85).aspx
	 * 
	 * @param Sid
	 *            The SID structure to be converted.
	 * @param StringSid
	 *            Pointer to a variable that receives a pointer to a
	 *            null-terminated SID string. To free the returned buffer, call
	 *            the LocalFree function.
	 * @return True if the function was successful, False otherwise.
	 */
	public boolean ConvertSidToStringSid(PSID Sid,
			PointerByReference StringSid);	
	
	/**
	 * Convert a string-format security identifier (SID) into a valid, functional SID.
	 * http://msdn.microsoft.com/en-us/library/aa376402(VS.85).aspx
	 * 
	 * @param StringSid The string-format SID to convert.
	 * @param Sid Receives a pointer to the converted SID.
	 * @return True if the function was successful, False otherwise.
	 */
	public boolean ConvertStringSidToSid(String StringSid,
			PSIDByReference Sid);
	
	/**
	 * Returns the length, in bytes, of a valid security identifier (SID).
	 * http://msdn.microsoft.com/en-us/library/aa446642(VS.85).aspx
	 * 
	 * @param pSid A pointer to the SID structure whose length is returned.
	 * @return Length of the SID.
	 */
	public int GetLengthSid(PSID pSid);
	
	/**
	 * The IsValidSid function validates a security identifier (SID) by verifying that 
	 * the revision number is within a known range, and that the number of subauthorities 
	 * is less than the maximum.
	 * @param pSid 
	 *  Pointer to the SID structure to validate. This parameter cannot be NULL.
	 * @return
	 *  If the SID structure is valid, the return value is nonzero.
	 *  If the SID structure is not valid, the return value is zero. There is no extended 
	 *  error information for this function; do not call GetLastError.
	 */
	public boolean IsValidSid(PSID pSid);
	
	/**
	 * Compares a SID to a well known SID and returns TRUE if they match.
	 * @param pSid
	 *  SID to test.
	 * @param wellKnownSidType
	 *  Member of the WELL_KNOWN_SID_TYPE enumeration to compare with the SID at pSid. 
	 * @return
	 *  True if the SID is of a given well known type, false otherwise.
	 */
	public boolean IsWellKnownSid(PSID pSid, int wellKnownSidType);
	
	
	/**
	 * The CreateWellKnownSid function creates a SID for predefined aliases.
	 * @param wellKnownSidType
	 *  Member of the WELL_KNOWN_SID_TYPE enumeration that specifies what the SID will identify.
	 * @param domainSid
	 *  Pointer to a SID that identifies the domain control to use when creating the SID. 
	 *  Pass NULL to use the local computer.
	 * @param pSid
	 *  Pointer to memory where CreateWellKnownSid will store the new SID.
	 * @param cbSid
	 *  Pointer to a DWORD that contains the number of bytes available at pSid. 
	 *  The CreateWellKnownSid function stores the number of bytes actually used 
	 *  at this location. 
	 * @return
	 *  If the function succeeds, the return value is nonzero.
	 *  If the function fails, the return value is zero. For extended error information, 
	 *  call GetLastError.
	 */
	public boolean CreateWellKnownSid(int wellKnownSidType, 
			PSID domainSid, PSID pSid, IntByReference cbSid);
	
	/**
	 * The LogonUser function attempts to log a user on to the local computer. The local computer is
	 * the computer from which LogonUser was called. You cannot use LogonUser to log on to a remote
	 * computer. You specify the user with a user name and domain, and authenticate the user with a 
	 * plaintext password. If the function succeeds, you receive a handle to a token that represents 
	 * the logged-on user. You can then use this token handle to impersonate the specified user or, 
	 * in most cases, to create a process that runs in the context of the specified user.
	 * @param lpszUsername
	 *  A pointer to a null-terminated string that specifies the name of the user. This is the name of 
	 *  the user account to log on to. If you use the user principal name (UPN) format, 
	 *  user@DNS_domain_name, the lpszDomain parameter must be NULL. 
	 * @param lpszDomain
	 *  A pointer to a null-terminated string that specifies the name of the domain or server whose 
	 *  account database contains the lpszUsername account. If this parameter is NULL, the user name 
	 *  must be specified in UPN format. If this parameter is ".", the function validates the account 
	 *  using only the local account database. 
	 * @param lpszPassword
	 *  A pointer to a null-terminated string that specifies the plaintext password for the user 
	 *  account specified by lpszUsername. 
	 * @param logonType
	 *  The type of logon operation to perform.
	 * @param logonProvider
	 *  Specifies the logon provider.
	 * @param phToken
	 *  A pointer to a handle variable that receives a handle to a token that represents the specified user. 
	 * @return
	 *  If the function succeeds, the function returns nonzero.
	 *  If the function fails, it returns zero. To get extended error information, call GetLastError.
	 */
	public boolean LogonUser(
			String lpszUsername,
			String lpszDomain,
			String lpszPassword,
			int logonType,
			int logonProvider,
			HANDLEByReference phToken);	
	
	/**
	 * The OpenThreadToken function opens the access token associated with a thread.
	 * @param ThreadHandle
	 *  Handle to the thread whose access token is opened. 
	 * @param DesiredAccess
	 *  Specifies an access mask that specifies the requested types of access to the access token. 
	 *  These requested access types are reconciled against the token's discretionary access 
	 *  control list (DACL) to determine which accesses are granted or denied. 
	 * @param OpenAsSelf
	 *  Indicates whether the access check is to be made against the security context of the 
	 *  thread calling the OpenThreadToken function or against the security context of the 
	 *  process for the calling thread. 
	 * @param TokenHandle
	 *  Pointer to a variable that receives the handle to the newly opened access token.
	 * @return
	 *  If the function succeeds, the return value is nonzero.
	 *  If the function fails, the return value is zero. To get extended error information, 
	 *  call GetLastError. 
	 */
	public boolean OpenThreadToken(
			HANDLE ThreadHandle,
			int DesiredAccess,
			boolean OpenAsSelf,
			HANDLEByReference TokenHandle);
	
	/**
	 * The OpenProcessToken function opens the access token associated with a process.
	 * @param ProcessHandle
	 *  Handle to the process whose access token is opened. The process must have the 
	 *  PROCESS_QUERY_INFORMATION access permission. 
	 * @param DesiredAccess
	 *  Specifies an access mask that specifies the requested types of access to the access 
	 *  token. These requested access types are compared with the discretionary access 
	 *  control list (DACL) of the token to determine which accesses are granted or denied. 
	 * @param TokenHandle
	 *  Pointer to a handle that identifies the newly opened access token when the function returns. 
	 * @return
	 *  If the function succeeds, the return value is nonzero.
	 *  If the function fails, the return value is zero. To get extended error information, 
	 *  call GetLastError.
	 */
	public boolean OpenProcessToken(
			HANDLE ProcessHandle,
			int DesiredAccess,
			HANDLEByReference TokenHandle);

	/**
	 * The DuplicateToken function creates a new access token that duplicates 
	 * one already in existence.
	 * 
	 * @param ExistingTokenHandle
	 *  Handle to an access token opened with TOKEN_DUPLICATE access. 
	 * @param ImpersonationLevel
	 *  Specifies a SECURITY_IMPERSONATION_LEVEL enumerated type that supplies 
	 *  the impersonation level of the new token. 
	 * @param DuplicateTokenHandle
	 *  Pointer to a variable that receives a handle to the duplicate token. 
	 *  This handle has TOKEN_IMPERSONATE and TOKEN_QUERY access to the new token. 
	 * @return
	 *  If the function succeeds, the return value is nonzero.
	 *  If the function fails, the return value is zero. To get extended error information, 
	 *  call GetLastError.
	 */
	public boolean DuplicateToken(
			HANDLE ExistingTokenHandle,
			int ImpersonationLevel, 
			HANDLEByReference DuplicateTokenHandle);
	
	/**
	 * The DuplicateTokenEx function creates a new access token that duplicates an existing token.
	 * This function can create either a primary token or an impersonation token.
	 * @param hExistingToken A handle to an access token opened with TOKEN_DUPLICATE access.
	 * @param dwDesiredAccess Specifies the requested access rights for the new token.
	 * @param lpTokenAttributes A pointer to a SECURITY_ATTRIBUTES structure that specifies a security
	 *  descriptor for the new token and determines whether child processes can inherit the token.
	 * @param ImpersonationLevel Specifies a value from the SECURITY_IMPERSONATION_LEVEL enumeration
	 *  that indicates the impersonation level of the new token.
	 * @param TokenType Specifies one of the following values from the TOKEN_TYPE enumeration.
	 * @param phNewToken A pointer to a HANDLE variable that receives the new token.
	 * @return If the function succeeds, the function returns a nonzero value.
	 *  If the function fails, it returns zero. To get extended error information, call GetLastError.
	 */
	public boolean DuplicateTokenEx(
			HANDLE hExistingToken,
			int dwDesiredAccess,
			WinBase.SECURITY_ATTRIBUTES lpTokenAttributes,
			int ImpersonationLevel,
			int TokenType,
			HANDLEByReference phNewToken);
	
	/**
	 * Retrieves a specified type of information about an access token. 
	 * The calling process must have appropriate access rights to obtain the information.

	 * @param tokenHandle
	 *  Handle to an access token from which information is retrieved. If TokenInformationClass
	 *  specifies TokenSource, the handle must have TOKEN_QUERY_SOURCE access. For all other 
	 *  TokenInformationClass values, the handle must have TOKEN_QUERY access. 
	 * @param tokenInformationClass
	 *  Specifies a value from the TOKEN_INFORMATION_CLASS enumerated type to identify the type of 
	 *  information the function retrieves. 
	 * @param tokenInformation
	 *  Pointer to a buffer the function fills with the requested information. The structure put 
	 *  into this buffer depends upon the type of information specified by the TokenInformationClass 
	 *  parameter.
	 * @param tokenInformationLength
	 *  Specifies the size, in bytes, of the buffer pointed to by the TokenInformation parameter. 
	 *  If TokenInformation is NULL, this parameter must be zero. 
	 * @param returnLength
	 *  Pointer to a variable that receives the number of bytes needed for the buffer pointed to by 
	 *  the TokenInformation parameter. If this value is larger than the value specified in the 
	 *  TokenInformationLength parameter, the function fails and stores no data in the buffer.
	 * @return
	 *  If the function succeeds, the return value is nonzero.
	 *  If the function fails, the return value is zero. To get extended error information, call GetLastError.
	 */
	public boolean GetTokenInformation(
			HANDLE tokenHandle,
			int tokenInformationClass,
			Structure tokenInformation,
			int tokenInformationLength,
			IntByReference returnLength);
	
	/**
	 * The ImpersonateLoggedOnUser function lets the calling thread impersonate the 
	 * security context of a logged-on user. The user is represented by a token 
	 * handle.
	 * @param hToken
	 *  Handle to a primary or impersonation access token that represents a logged-on 
	 *  user. This can be a token handle returned by a call to LogonUser, 
	 *  CreateRestrictedToken, DuplicateToken, DuplicateTokenEx, OpenProcessToken, 
	 *  or OpenThreadToken functions. If hToken is a primary token, it must have 
	 *  TOKEN_QUERY and TOKEN_DUPLICATE access. If hToken is an impersonation token, 
	 *  it must have TOKEN_QUERY and TOKEN_IMPERSONATE access. 
	 * @return
	 *  If the function succeeds, the return value is nonzero.
	 */
	public boolean ImpersonateLoggedOnUser(HANDLE hToken); 
	
	/**
	 * The ImpersonateSelf function obtains an access token that impersonates the security
	 * context of the calling process. The token is assigned to the calling thread.
	 * @param ImpersonationLevel Specifies a SECURITY_IMPERSONATION_LEVEL enumerated type
	 *  that supplies the impersonation level of the new token.
	 * @return If the function succeeds, the return value is nonzero.
	 */
	public boolean ImpersonateSelf(int ImpersonationLevel);

	
	/**
	 * The RevertToSelf function terminates the impersonation of a client application.
	 * @return If the function succeeds, the return value is nonzero. 
	 */
	public boolean RevertToSelf();
	
	
	/**
	 * The RegOpenKeyEx function opens the specified registry key. 
	 * Note that key names are not case sensitive.
	 * @param hKey
	 *  Handle to an open key.
	 * @param lpSubKey
	 *  Pointer to a null-terminated string containing the name of the subkey to open. 
	 * @param ulOptions
	 *  Reserved; must be zero. 
	 * @param samDesired
	 *  Access mask that specifies the desired access rights to the key. The function 
	 *  fails if the security descriptor of the key does not permit the requested access
	 *  for the calling process.
	 * @param phkResult
	 *  Pointer to a variable that receives a handle to the opened key. If the key is 
	 *  not one of the predefined registry keys, call the RegCloseKey function after 
	 *  you have finished using the handle. 
	 * @return
	 *  If the function succeeds, the return value is ERROR_SUCCESS.
	 *  If the function fails, the return value is a nonzero error code defined in Winerror.h.
	 */
	public int RegOpenKeyEx(HKEY hKey, String lpSubKey, int ulOptions, int samDesired, 
			HKEYByReference phkResult);
	  
	/**
	 * The RegQueryValueEx function retrieves the type and data for a specified value name 
	 * associated with an open registry key.
	 * @param hKey
	 *  Handle to an open key. The key must have been opened with the 
	 *  KEY_QUERY_VALUE access right. 
	 * @param lpValueName
	 *  Pointer to a null-terminated string containing the name of the value to query. 
	 *  If lpValueName is NULL or an empty string, "", the function retrieves the type 
	 *  and data for the key's unnamed or default value, if any.
	 * @param lpReserved
	 *  Reserved; must be NULL. 
	 * @param lpType
	 *  Pointer to a variable that receives a code indicating the type of data stored 
	 *  in the specified value.
	 * @param lpData
	 *  Pointer to a buffer that receives the value's data. This parameter can be NULL
	 *  if the data is not required. If the data is a string, the function checks for 
	 *  a terminating null character. If one is not found, the string is stored with a 
	 *  null terminator if the buffer is large enough to accommodate the extra 
	 *  character. Otherwise, the string is stored as is.
	 * @param lpcbData
	 *  Pointer to a variable that specifies the size of the buffer pointed to by the
	 *  lpData parameter, in bytes. When the function returns, this variable contains 
	 *  the size of the data copied to lpData. The lpcbData parameter can be NULL only 
	 *  if lpData is NULL. If the data has the REG_SZ, REG_MULTI_SZ or REG_EXPAND_SZ 
	 *  type, this size includes any terminating null character or characters. 
	 *  If the buffer specified by lpData parameter is not large enough to hold the 
	 *  data, the function returns ERROR_MORE_DATA and stores the required buffer size
	 *  in the variable pointed to by lpcbData. In this case, the contents of the lpData
	 *  buffer are undefined. If lpData is NULL, and lpcbData is non-NULL, the function
	 *  returns ERROR_SUCCESS and stores the size of the data, in bytes, in the variable
	 *  pointed to by lpcbData. This enables an application to determine the best way 
	 *  to allocate a buffer for the value's data.
	 * @return
	 *  If the function succeeds, the return value is ERROR_SUCCESS.
	 *  If the function fails, the return value is a nonzero error code defined in Winerror.h.
	 */
	public int RegQueryValueEx(HKEY hKey, String lpValueName, int lpReserved, 
			IntByReference lpType, char[] lpData, IntByReference lpcbData);
	
	public int RegQueryValueEx(HKEY hKey, String lpValueName, int lpReserved, 
			IntByReference lpType, byte[] lpData, IntByReference lpcbData);

	public int RegQueryValueEx(HKEY hKey, String lpValueName, int lpReserved, 
			IntByReference lpType, IntByReference lpData, IntByReference lpcbData);

	public int RegQueryValueEx(HKEY hKey, String lpValueName, int lpReserved, 
			IntByReference lpType, Pointer lpData, IntByReference lpcbData);
	
	/**
	 * The RegCloseKey function releases a handle to the specified registry key.
	 * @param hKey
	 *  Handle to the open key to be closed. The handle must have been opened by the 
	 *  RegCreateKeyEx, RegOpenKeyEx, or RegConnectRegistry function. 
	 * @return
	 *  If the function succeeds, the return value is ERROR_SUCCESS. If the function 
	 *  fails, the return value is a nonzero error code defined in Winerror.h.
	 */
	public int RegCloseKey(HKEY hKey);

	/**
	 * The RegDeleteValue function removes a named value from the specified registry 
	 * key. Note that value names are not case sensitive.
	 * @param hKey
	 *  Handle to an open key. The key must have been opened with the KEY_SET_VALUE 
	 *  access right. 
	 * @param lpValueName
	 *  Pointer to a null-terminated string that names the value to remove. If this
	 *  parameter is NULL or an empty string, the value set by the RegSetValue function
	 *  is removed. 
	 * @return
	 *  If the function succeeds, the return value is ERROR_SUCCESS. If the function 
	 *  fails, the return value is a nonzero error code defined in Winerror.h. 
	 */
	public int RegDeleteValue(HKEY hKey, String lpValueName);
	
	/**
	 * The RegSetValueEx function sets the data and type of a specified value under a
	 * registry key.
	 * @param hKey
	 *  Handle to an open key. The key must have been opened with the KEY_SET_VALUE 
	 *  access right.
	 * @param lpValueName
	 *  Pointer to a string containing the name of the value to set. If a value with
	 *  this name is not already present in the key, the function adds it to the key. 
	 *  If lpValueName is NULL or an empty string, "", the function sets the type and
	 *  data for the key's unnamed or default value.
	 * @param Reserved
	 *  Reserved; must be zero. 
	 * @param dwType
	 *  Type of data pointed to by the lpData parameter. 
	 * @param lpData
	 *  Pointer to a buffer containing the data to be stored with the specified value name. 
	 * @param cbData
	 *  Size of the information pointed to by the lpData parameter, in bytes. If the data 
	 *  is of type REG_SZ, REG_EXPAND_SZ, or REG_MULTI_SZ, cbData must include the size of 
	 *  the terminating null character or characters. 
	 * @return
	 *  If the function succeeds, the return value is ERROR_SUCCESS. If the function 
	 *  fails, the return value is a nonzero error code defined in Winerror.h. 
	 */
	public int RegSetValueEx(HKEY hKey, String lpValueName, int Reserved, int dwType, 
			char[] lpData, int cbData);
	
	public int RegSetValueEx(HKEY hKey, String lpValueName, int Reserved, int dwType, 
			byte[] lpData, int cbData);
	
	/**
	 * 
	 * @param hKey
	 * @param lpSubKey
	 * @param Reserved
	 * @param lpClass
	 * @param dwOptions
	 * @param samDesired
	 * @param lpSecurityAttributes
	 * @param phkResult
	 * @param lpdwDisposition
	 * @return
	 *  If the function succeeds, the return value is ERROR_SUCCESS. If the function 
	 *  fails, the return value is a nonzero error code defined in Winerror.h. 
	 */
	public int RegCreateKeyEx(HKEY hKey, String lpSubKey, int Reserved, String lpClass, 
			int dwOptions, int samDesired, SECURITY_ATTRIBUTES lpSecurityAttributes,
			HKEYByReference phkResult, IntByReference lpdwDisposition);
	
	/**
	 * 
	 * @param hKey
	 * @param name
	 * @return
	 *  If the function succeeds, the return value is ERROR_SUCCESS. If the function 
	 *  fails, the return value is a nonzero error code defined in Winerror.h. 
	 */
	public int RegDeleteKey(HKEY hKey, String name);
	  
	/**
	 * The RegEnumKeyEx function enumerates subkeys of the specified open registry key.
	 * The function retrieves information about one subkey each time it is called.
	 * @param hKey
	 *  Handle to an open key. The key must have been opened with the 
	 *  KEY_ENUMERATE_SUB_KEYS access right. 
	 * @param dwIndex
	 *  Index of the subkey to retrieve. This parameter should be zero for the first 
	 *  call to the RegEnumKeyEx function and then incremented for subsequent calls. 
	 *  Because subkeys are not ordered, any new subkey will have an arbitrary index.
	 *  This means that the function may return subkeys in any order.
	 * @param lpName
	 *  Pointer to a buffer that receives the name of the subkey, including the 
	 *  terminating null character. The function copies only the name of the subkey,
	 *  not the full key hierarchy, to the buffer. 
	 * @param lpcName
	 *  Pointer to a variable that specifies the size of the buffer specified by the 
	 *  lpName parameter, in TCHARs. This size should include the terminating null 
	 *  character. When the function returns, the variable pointed to by lpcName 
	 *  contains the number of characters stored in the buffer. The count returned 
	 *  does not include the terminating null character.
	 * @param reserved
	 *  Reserved; must be NULL.
	 * @param lpClass
	 *  Pointer to a buffer that receives the null-terminated class string of the 
	 *  enumerated subkey. This parameter can be NULL. 
	 * @param lpcClass
	 *  Pointer to a variable that specifies the size of the buffer specified by the
	 *  lpClass parameter, in TCHARs. The size should include the terminating null 
	 *  character. When the function returns, lpcClass contains the number of 
	 *  characters stored in the buffer. The count returned does not include the
	 *  terminating null character. This parameter can be NULL only if lpClass is NULL. 
	 * @param lpftLastWriteTime
	 *  Pointer to a variable that receives the time at which the enumerated subkey 
	 *  was last written.
	 * @return
	 *  If the function succeeds, the return value is ERROR_SUCCESS. If the function 
	 *  fails, the return value is a nonzero error code defined in Winerror.h. 
	 */
	public int RegEnumKeyEx(HKEY hKey, int dwIndex, char[] lpName, IntByReference lpcName,
			IntByReference reserved, char[] lpClass, IntByReference lpcClass, 
			WinBase.FILETIME lpftLastWriteTime);
	
	/**
	 * The RegEnumValue function enumerates the values for the specified open registry 
	 * key. The function copies one indexed value name and data block for the key each 
	 * time it is called.
	 * @param hKey
	 *  Handle to an open key. The key must have been opened with the KEY_QUERY_VALUE 
	 *  access right. 
	 * @param dwIndex
	 *  Index of the value to be retrieved. This parameter should be zero for the first
	 *  call to the RegEnumValue function and then be incremented for subsequent calls. 
	 *  Because values are not ordered, any new value will have an arbitrary index. 
	 *  This means that the function may return values in any order.
	 * @param lpValueName
	 *  Pointer to a buffer that receives the name of the value, including the 
	 *  terminating null character. 
	 * @param lpcchValueName
	 *  Pointer to a variable that specifies the size of the buffer pointed to by the
	 *  lpValueName parameter, in TCHARs. This size should include the terminating null 
	 *  character. When the function returns, the variable pointed to by lpcValueName 
	 *  contains the number of characters stored in the buffer. The count returned 
	 *  does not include the terminating null character. 
	 * @param reserved
	 *  Reserved; must be NULL. 
	 * @param lpType
	 *  Pointer to a variable that receives a code indicating the type of data stored 
	 *  in the specified value. 
	 * @param lpData
	 *  Pointer to a buffer that receives the data for the value entry. This parameter 
	 *  can be NULL if the data is not required. 
	 * @param lpcbData
	 *  Pointer to a variable that specifies the size of the buffer pointed to by the 
	 *  lpData parameter, in bytes. 
	 * @return
	 *  If the function succeeds, the return value is ERROR_SUCCESS. If the function 
	 *  fails, the return value is a nonzero error code defined in Winerror.h. 
	 */
	public int RegEnumValue(HKEY hKey, int dwIndex, char[] lpValueName, 
			IntByReference lpcchValueName, IntByReference reserved, 
			IntByReference lpType, byte[] lpData, IntByReference lpcbData);	
	
	/**
	 * The RegQueryInfoKey function retrieves information about the specified 
	 * registry key.
	 * @param hKey
	 *  A handle to an open key. The key must have been opened with the 
	 *  KEY_QUERY_VALUE access right. 
	 * @param lpClass
	 *  A pointer to a buffer that receives the null-terminated class 
	 *  string of the key. This parameter can be ignored. This parameter can be NULL. 
	 * @param lpcClass
	 *  A pointer to a variable that specifies the size of the buffer pointed to by
	 *  the lpClass parameter, in characters.
	 * @param lpReserved
	 *  Reserved; must be NULL. 
	 * @param lpcSubKeys
	 *  A pointer to a variable that receives the number of subkeys that are contained by the specified key. 
	 *  This parameter can be NULL. 
	 * @param lpcMaxSubKeyLen
	 *  A pointer to a variable that receives the size of the key's subkey with the 
	 *  longest name, in characters, not including the terminating null character. 
	 *  This parameter can be NULL. 
	 * @param lpcMaxClassLen
	 *  A pointer to a variable that receives the size of the longest string that 
	 *  specifies a subkey class, in characters. The count returned does not include
	 *  the terminating null character. This parameter can be NULL. 
	 * @param lpcValues
	 *  A pointer to a variable that receives the number of values that are associated 
	 *  with the key. This parameter can be NULL. 
	 * @param lpcMaxValueNameLen
	 *  A pointer to a variable that receives the size of the key's longest value name,
	 *  in characters. The size does not include the terminating null character. This 
	 *  parameter can be NULL. 
	 * @param lpcMaxValueLen
	 *  A pointer to a variable that receives the size of the longest data component
	 *  among the key's values, in bytes. This parameter can be NULL. 
	 * @param lpcbSecurityDescriptor
	 *  A pointer to a variable that receives the size of the key's security descriptor,
	 *  in bytes. This parameter can be NULL. 
	 * @param lpftLastWriteTime
	 *  A pointer to a FILETIME structure that receives the last write time. 
	 *  This parameter can be NULL. 
	 * @return
	 * If the function succeeds, the return value is ERROR_SUCCESS. If the function 
	 * fails, the return value is a nonzero error code defined in Winerror.h.
	 */	
	public int RegQueryInfoKey(HKEY hKey, char[] lpClass, 
			IntByReference lpcClass, IntByReference lpReserved,
			IntByReference lpcSubKeys, IntByReference lpcMaxSubKeyLen,
			IntByReference lpcMaxClassLen, IntByReference lpcValues,
			IntByReference lpcMaxValueNameLen, IntByReference lpcMaxValueLen,
			IntByReference lpcbSecurityDescriptor, 
			WinBase.FILETIME lpftLastWriteTime);
			
			
	/**
	 * Retrieves a registered handle to the specified event log.
	 * @param lpUNCServerName
	 *  The Universal Naming Convention (UNC) name of the remote server on which 
	 *  this operation is to be performed. If this parameter is NULL, the local 
	 *  computer is used.
	 * @param lpSourceName
	 *  The name of the event source whose handle is to be retrieved. 
	 *  The source name must be a subkey of a log under the Eventlog registry 
	 *  key. However, the Security log is for system use only.
	 * @return
	 *  If the function succeeds, the return value is a handle to the event log. 
	 *  If the function fails, the return value is NULL. To get extended error information, call GetLastError.
	 *  The function returns ERROR_ACCESS_DENIED if lpSourceName specifies the Security event log.
	 */
	public HANDLE RegisterEventSource(String lpUNCServerName, String lpSourceName);
	
	/**
	 * Closes the specified event log.
	 * @param hEventLog
	 *  A handle to the event log. The RegisterEventSource function returns this handle.
	 * @return
	 *  If the function succeeds, the return value is nonzero.
	 *  If the function fails, the return value is zero. To get extended error information, call GetLastError.
	 */
	public boolean DeregisterEventSource(HANDLE hEventLog);
	
	/**
	 * Opens a handle to the specified event log.
	 * @param lpUNCServerName
	 *  The Universal Naming Convention (UNC) name of the remote server on which the event log is to be 
	 *  opened. If this parameter is NULL, the local computer is used.
	 * @param lpSourceName
	 *  The name of the log. If you specify a custom log and it cannot be found, the event logging 
	 *  service opens the Application log; however, there will be no associated message or category 
	 *  string file.
	 * @return
	 *  If the function succeeds, the return value is the handle to an event log. 
	 *  If the function fails, the return value is NULL. To get extended error information, call GetLastError.
	 */
	public HANDLE OpenEventLog(String lpUNCServerName, String lpSourceName);

	/**
	 * Closes the specified event log.
	 * @param hEventLog
	 *  A handle to the event log to be closed. The OpenEventLog or OpenBackupEventLog function returns this handle.
	 * @return
	 *  If the function succeeds, the return value is nonzero. 
	 *  If the function fails, the return value is zero. To get extended error information, call GetLastError.
	 */
	public boolean CloseEventLog(HANDLE hEventLog);
	
	/**
	 * Retrieves the number of records in the specified event log.
	 * @param hEventLog
	 *  A handle to the open event log. The OpenEventLog or OpenBackupEventLog function returns this handle.
	 * @param NumberOfRecords
	 *  A pointer to a variable that receives the number of records in the specified event log.
	 * @return
	 *  If the function succeeds, the return value is nonzero. 
	 *  If the function fails, the return value is zero. To get extended error information, call GetLastError.
	 */
	public boolean GetNumberOfEventLogRecords(HANDLE hEventLog, IntByReference NumberOfRecords);

	/**
	 * Writes an entry at the end of the specified event log.
	 * @param hEventLog
	 *  A handle to the event log. The RegisterEventSource function returns this handle. 
	 *  As of Windows XP with SP2, this parameter cannot be a handle to the Security log. 
	 *  To write an event to the Security log, use the AuthzReportSecurityEvent function.
	 * @param wType
	 *  The type of event to be logged.
	 * @param wCategory
	 *  The event category. This is source-specific information; the category can have any value. 
	 * @param dwEventID
	 *  The event identifier. The event identifier specifies the entry in the message file 
	 *  associated with the event source.
	 * @param lpUserSid
	 *  A pointer to the current user's security identifier. This parameter can be NULL if the security identifier is not required.
	 * @param wNumStrings
	 *  The number of insert strings in the array pointed to by the lpStrings parameter. A value of zero indicates that no strings are present.
	 * @param dwDataSize
	 *  The number of bytes of event-specific raw (binary) data to write to the log. If this parameter is zero, no event-specific data is present.
	 * @param lpStrings
	 *  A pointer to a buffer containing an array of null-terminated strings that are merged into 
	 *  the message before Event Viewer displays the string to the user. This parameter must 
	 *  be a valid pointer (or NULL), even if wNumStrings is zero. Each string is limited to 
	 *  31,839 characters.
	 * @param lpRawData
	 *  A pointer to the buffer containing the binary data. This parameter must be a valid 
	 *  pointer (or NULL), even if the dwDataSize parameter is zero.
	 * @return
	 *  If the function succeeds, the return value is nonzero, indicating that the entry was written to the log. 
	 *  If the function fails, the return value is zero. To get extended error information, call GetLastError.
	 */
	public boolean ReportEvent(HANDLE hEventLog, int wType, int wCategory, int dwEventID,
			  PSID lpUserSid, int wNumStrings, int dwDataSize, String[] lpStrings, 
			  Pointer lpRawData);

	/**
	 * Clears the specified event log, and optionally saves the current copy of the log to a backup file.
	 * @param hEventLog
	 *  A handle to the event log to be cleared. The OpenEventLog function returns this handle.
	 * @param lpBackupFileName
	 *  The absolute or relative path of the backup file. If this file already exists, the function fails. 
	 *  If the lpBackupFileName parameter is NULL, the event log is not backed up.
	 * @return
	 *  If the function succeeds, the return value is nonzero.
	 *  If the function fails, the return value is zero. To get extended error information, 
	 *  call GetLastError. The ClearEventLog function can fail if the event log is empty or the backup file already exists.
	 */
	public boolean ClearEventLog(HANDLE hEventLog, String lpBackupFileName);

	/**
	 * Saves the specified event log to a backup file. The function does not clear the event log.
	 * @param hEventLog
	 *  A handle to the open event log. The OpenEventLog function returns this handle.
	 * @param lpBackupFileName
	 *  The absolute or relative path of the backup file.
	 * @return
	 *  If the function succeeds, the return value is nonzero. 
	 *  If the function fails, the return value is zero. To get extended error information, call GetLastError.
	 */
	public boolean BackupEventLog(HANDLE hEventLog, String lpBackupFileName);
	
	/**
	 * Opens a handle to a backup event log created by the BackupEventLog function.
	 * @param lpUNCServerName
	 *  The Universal Naming Convention (UNC) name of the remote server on which this operation 
	 *  is to be performed. If this parameter is NULL, the local computer is used.
	 * @param lpFileName
	 *  The full path of the backup file.
	 * @return
	 *  If the function succeeds, the return value is a handle to the backup event log. 
	 *  If the function fails, the return value is NULL. To get extended error information, call GetLastError.
	 */
	public HANDLE OpenBackupEventLog(String lpUNCServerName, String lpFileName);

	/**
	 * Reads the specified number of entries from the specified event log. The function can 
	 * be used to read log entries in chronological or reverse chronological order.
	 * @param hEventLog
	 *  A handle to the event log to be read. The OpenEventLog function returns this handle.
	 * @param dwReadFlags
	 *  Use the following flag values to indicate how to read the log file. 
	 * @param dwRecordOffset
	 *  The record number of the log-entry at which the read operation should start. 
	 *  This parameter is ignored unless dwReadFlags includes the EVENTLOG_SEEK_READ flag.
	 * @param lpBuffer
	 *  An application-allocated buffer that will receive one or more EVENTLOGRECORD structures. 
	 *  This parameter cannot be NULL, even if the nNumberOfBytesToRead parameter is zero. 
	 *  The maximum size of this buffer is 0x7ffff bytes.
	 * @param nNumberOfBytesToRead
	 *  The size of the lpBuffer buffer, in bytes. This function will read as many log entries 
	 *  as will fit in the buffer; the function will not return partial entries.
	 * @param pnBytesRead
	 *  A pointer to a variable that receives the number of bytes read by the function.
	 * @param pnMinNumberOfBytesNeeded
	 *  A pointer to a variable that receives the required size of the lpBuffer buffer. 
	 *  This value is valid only this function returns zero and GetLastError 
	 *  returns ERROR_INSUFFICIENT_BUFFER.
	 * @return
	 *  If the function succeeds, the return value is nonzero. 
	 *  If the function fails, the return value is zero. To get extended error information, call GetLastError.
	 */
	public boolean ReadEventLog(HANDLE hEventLog, int dwReadFlags, int dwRecordOffset,
			Pointer lpBuffer, int nNumberOfBytesToRead, IntByReference pnBytesRead,
			IntByReference pnMinNumberOfBytesNeeded);

	/**
	 * The GetOldestEventLogRecord function retrieves the absolute record number of the oldest
	 * record in the specified event log.
	 * @param hEventLog
	 *  Handle to the open event log. This handle is returned by the OpenEventLog or OpenBackupEventLog function.
	 * @param OldestRecord
	 *  Pointer to a variable that receives the absolute record number of the oldest record in the specified event log. 
	 * @return
	 *  If the function succeeds, the return value is nonzero.
	 *  If the function fails, the return value is zero. To get extended error information, call GetLastError.
	 */
	public boolean GetOldestEventLogRecord(HANDLE hEventLog, IntByReference OldestRecord);
	
	/**
	 * Retrieves the current status of the specified service based on the specified information level.
	 * @param hService 
	 * 	A handle to the service. This handle is returned by the 
	 *  OpenService(SC_HANDLE, String, int) or CreateService() function, and
	 *  it must have the SERVICE_QUERY_STATUS access right. For more information, see 
	 *  Service Security and Access Rights.
	 * @param InfoLevel
	 *  The service attributes to be returned (a value from SC_STATUS_TYPE enumeration). 
	 *  Use SC_STATUS_PROCESS_INFO to retrieve the service status information. The lpBuffer 
	 *  parameter is a pointer to a SERVICE_STATUS_PROCESS  structure.
	 *  Currently, no other information levels are defined.
	 * @param lpBuffer (optional)
	 *  A pointer to the buffer that receives the status information. The format of this data 
	 *  depends on the value of the InfoLevel parameter.
	 *  The maximum size of this array is 8K bytes. To determine the required size, specify NULL
	 *  for this parameter and 0 for the cbBufSize parameter. The function will fail and GetLastError 
	 *  will return ERROR_INSUFFICIENT_BUFFER. The pcbBytesNeeded parameter will receive the required size.
	 * @param cbBufSize
	 *  The size of the buffer pointed to by the lpBuffer parameter, in bytes.
	 * @param pcbBytesNeeded
	 *  A pointer to a variable that receives the number of bytes needed to store all status 
	 *  information, if the function fails with ERROR_INSUFFICIENT_BUFFER.
	 * @return
	 *  If the function succeeds, the return value is true.
	 *  If the function fails, the return value is false. To get extended error information,
	 *  call GetLastError.  This value is a nonzero error code defined in Winerror.h.
	 */
	public boolean QueryServiceStatusEx(SC_HANDLE hService, int InfoLevel,
			SERVICE_STATUS_PROCESS lpBuffer, int cbBufSize, IntByReference pcbBytesNeeded);
	
	/**
	 * Sends a control code to a service.
	 * To specify additional information when stopping a service, use the 
	 * ControlServiceEx function.
	 * @param hService
	 *  A handle to the service. This handle is returned by the 
	 *  OpenService(SC_HANDLE, String, int) or CreateService()
	 *  function. The access rights required for this handle depend on the
	 *  dwControl code requested.
	 * @param dwControl
	 *  This parameter can be one of the following control codes (found in Winsvc.h):
	 *  SERVICE_CONTROL_STOP, SERVICE_CONTROL_PAUSE, SERVICE_CONTROL_CONTINUE
	 *  SERVICE_CONTROL_INTERROGATE, SERVICE_CONTROL_PARAMCHANGE, 
	 *  SERVICE_CONTROL_NETBINDADD, SERVICE_CONTROL_NETBINDREMOVE,
	 *  SERVICE_CONTROL_NETBINDENABLE, SERVICE_CONTROL_NETBINDDISABLE
	 *  This value can also be a user-defined control code, as described below:
	 *  Range 128 to 255 - The service defines the action associated with the 
	 *  control code. The hService handle must have the SERVICE_USER_DEFINED_CONTROL 
	 *  access right.
	 * @param lpServiceStatus
	 *  A pointer to a SERVICE_STATUS structure that receives the latest 
	 *  service status information. The information returned reflects the most 
	 *  recent status that the service reported to the service control manager.
	 *  The service control manager fills in the structure only when ControlService
	 *  returns one of the following error codes: NO_ERROR, ERROR_INVALID_SERVICE_CONTROL,
	 *  ERROR_SERVICE_CANNOT_ACCEPT_CTRL, or ERROR_SERVICE_NOT_ACTIVE. Otherwise,
	 *  the structure is not filled in.
	 * @return
	 *  If the function succeeds, the return value is true.
	 *  If the function fails, the return value is false. To get extended error information,
	 *  call GetLastError.  This value is a nonzero error code defined in Winerror.h.
	 */
	public boolean ControlService(SC_HANDLE hService, int dwControl,
			  SERVICE_STATUS lpServiceStatus);
	
	
	/**
	 * Starts a service.
	 * @param hService
	 *  A handle to the service. This handle is returned by the 
	 *  OpenService(SC_HANDLE, String, int) or CreateService()
	 *  function, and it must have the SERVICE_START access right. For more 
	 *  information, see 
	 * 	Service Security and Access Rights.
	 * @param dwNumServiceArgs
	 *  The number of strings in the lpServiceArgVectors array. If lpServiceArgVectors
	 *  is NULL, this parameter can be zero.
	 * @param lpServiceArgVectors
	 *  The null-terminated strings to be passed to the ServiceMain function for the
	 *  service as arguments. If there are no arguments, this parameter can be null.
	 *  Otherwise, the first argument (lpServiceArgVectors[0]) is the name of the
	 *  service, followed by any additional arguments (lpServiceArgVectors[1] through
	 *  lpServiceArgVectors[dwNumServiceArgs-1]).
	 *  Driver services do not receive these arguments.
	 * @return
	 *  If the function succeeds, the return value is true.
	 *  If the function fails, the return value is false. To get extended error information,
	 *  call GetLastError.  This value is a nonzero error code defined in Winerror.h.
	 */
	public boolean StartService(SC_HANDLE hService, int dwNumServiceArgs, 
			String[] lpServiceArgVectors);
	
	/**
	 * Closes a handle to a service control manager or service object.
	 * @param hSCObject
	 * A handle to the service control manager object or the service object to 
	 * close. Handles to service control manager objects are returned by the 
	 * OpenSCManager(String, String, int) function, and handles to service 
	 * objects are returned by either the OpenService(SC_HANDLE, String, int)
	 * or CreateService() function.
	 * @return
	 * If the function succeeds, the return value is nonzero.
	 * If the function fails, the return value is zero. To get extended 
	 * error information, call GetLastError. This value is a nonzero error code 
	 * defined in Winerror.h.
	 */
	public boolean CloseServiceHandle(SC_HANDLE hSCObject);

	/**
	 * Opens an existing service.
	 * @param hSCManager 
	 * 	A handle to the service control manager database. The 
	 * 	OpenSCManager(String, String, int) function returns this handle.
	 * @param lpServiceName
	 * 	The name of the service to be opened. This is the name specified by the
	 * 	lpServiceName parameter of the CreateService function when the service
	 * 	object was created, not the service display name that is shown by user
	 * 	interface applications to identify the service.
	 * 	The maximum string length is 256 characters. The service control manager
	 * 	database preserves the case of the characters, but service name comparisons
	 * 	are always case insensitive. Forward-slash (/) and backslash (\) are
	 * 	invalid service name characters.
	 * @param dwDesiredAccess
	 * 	The access to the service. For a list of access rights, see 
	 * 	
	 * 	Service Security and Access Rights.
	 * 	Before granting the requested access, the system checks the access token
	 *  of the calling process against the discretionary access-control list of the security descriptor associated with the service object.
	 * @return
	 *  If the function succeeds, the return value is a handle to the service.
	 *  If the function fails, the return value is NULL. To get extended error information,
	 *  call GetLastError. This value is a nonzero error code defined in Winerror.h.
	 */
	public SC_HANDLE OpenService(SC_HANDLE hSCManager, String lpServiceName, int dwDesiredAccess);

	/**
	 * Establishes a connection to the service control manager on the specified 
	 * computer and opens the specified service control manager database.
	 * @param lpMachineName
	 *  The name of the target computer. If the pointer is NULL or points to 
	 *  an empty string, the function connects to the service control manager 
	 *  on the local computer.
	 * @param lpDatabaseName
	 *  The name of the service control manager database. This parameter should
	 *  be set to SERVICES_ACTIVE_DATABASE. If it is NULL, the SERVICES_ACTIVE_DATABASE
	 *  database is opened by default.
	 * @param dwDesiredAccess
	 *  The access to the service control manager. For a list of access rights, see 
	 *  
	 *  Service Security and Access Rights.
	 *  Before granting the requested access rights, the system checks the access 
	 *  token of the calling process against the discretionary access-control list 
	 *  of the security descriptor associated with the service control manager.
	 *  The SC_MANAGER_CONNECT access right is implicitly specified by calling this 
	 *  function.
	 * @return
	 *  If the function succeeds, the return value is a handle to the specified
	 *  service control manager database.
	 *  If the function fails, the return value is NULL. To get extended error information,
	 *  call GetLastError. This value is a nonzero error code defined in Winerror.h.
	 */
	public SC_HANDLE OpenSCManager(String lpMachineName, String lpDatabaseName, int dwDesiredAccess);
	
	/**
	 * Creates a new process and its primary thread. The new process runs in the
	 * security context of the user represented by the specified token.
	 * 
	 * Typically, the process that calls the CreateProcessAsUser function must
	 * have the SE_INCREASE_QUOTA_NAME privilege and may require the
	 * SE_ASSIGNPRIMARYTOKEN_NAME privilege if the token is not assignable. If
	 * this function fails with ERROR_PRIVILEGE_NOT_HELD (1314), use the
	 * CreateProcessWithLogonW function instead. CreateProcessWithLogonW
	 * requires no special privileges, but the specified user account must be
	 * allowed to log on interactively. Generally, it is best to use
	 * CreateProcessWithLogonW to create a process with alternate credentials.
	 * 
	 * @param hToken A handle to the primary token that represents a user.
	 * @param lpApplicationName The name of the module to be executed. 
	 * @param lpCommandLine The command line to be executed. 
	 * @param lpProcessAttributes A pointer to a SECURITY_ATTRIBUTES structure that
	 *  specifies a security descriptor for the new process object and determines whether
	 *  child processes can inherit the returned handle to the process.
	 * @param lpThreadAttributes A pointer to a SECURITY_ATTRIBUTES structure that specifies
	 *  a security descriptor for the new thread object and determines whether child processes
	 *  can inherit the returned handle to the thread.
	 * @param bInheritHandles If this parameter is TRUE, each inheritable handle in the
	 *  calling process is inherited by the new process. If the parameter is FALSE, the
	 *  handles are not inherited. Note that inherited handles have the same value and access
	 *  rights as the original handles.
	 * @param dwCreationFlags The flags that control the priority class and the creation of the process.
	 *  For a list of values, see Process Creation Flags.
	 * @param lpEnvironment A pointer to an environment block for the new process. If this
	 *  parameter is NULL, the new process uses the environment of the calling process.
	 *  
	 *  An environment block consists of a null-terminated block of null-terminated strings.
	 *  Each string is in the following form: name=value\0
	 * @param lpCurrentDirectory The full path to the current directory for the process. The
	 *  string can also specify a UNC path.
	 * @param lpStartupInfo A pointer to a STARTUPINFO or STARTUPINFOEX structure.
	 * @param lpProcessInformation A pointer to a PROCESS_INFORMATION structure that receives
	 *  identification information about the new process.
	 * @return If the function succeeds, the return value is nonzero.
	 *  If the function fails, the return value is zero. To get extended error information, call GetLastError.
	 */
	public boolean CreateProcessAsUser(
			HANDLE hToken,
			String lpApplicationName,
			String lpCommandLine,
			SECURITY_ATTRIBUTES lpProcessAttributes,
			SECURITY_ATTRIBUTES lpThreadAttributes,
			boolean bInheritHandles,
			int dwCreationFlags,
			String lpEnvironment,
			String lpCurrentDirectory,
			WinBase.STARTUPINFO lpStartupInfo,
			WinBase.PROCESS_INFORMATION lpProcessInformation);

	/**
	 * The AdjustTokenPrivileges function enables or disables privileges in the specified access token.
	 * Enabling or disabling privileges in an access token requires TOKEN_ADJUST_PRIVILEGES access.
	 * @param TokenHandle A handle to the access token that contains the privileges to be modified.
	 * @param DisableAllPrivileges Specifies whether the function disables all of the token's privileges. 
	 * @param NewState A pointer to a TOKEN_PRIVILEGES structure that specifies an array of privileges and their attributes.
	 * @param BufferLength Specifies the size, in bytes, of the buffer pointed to by the PreviousState
	 *  parameter. This parameter can be zero if the PreviousState parameter is NULL.
	 * @param PreviousState A pointer to a buffer that the function fills with a TOKEN_PRIVILEGES structure that contains
	 *  the previous state of any privileges that the function modifies. 
	 * @param ReturnLength A pointer to a variable that receives the required size, in bytes, of the buffer
	 *  pointed to by the PreviousState parameter. 
	 * @return If the function succeeds, the return value is nonzero.
	 *  If the function fails, the return value is zero. To get extended error information, call GetLastError.
	 */
	public boolean AdjustTokenPrivileges(
			HANDLE TokenHandle,
			boolean DisableAllPrivileges,
			WinNT.TOKEN_PRIVILEGES NewState,
			int BufferLength,
			WinNT. TOKEN_PRIVILEGES PreviousState,
			IntByReference ReturnLength);

	/**
	 * The LookupPrivilegeName function retrieves the name that corresponds to the privilege represented
	 * on a specific system by a specified locally unique identifier (LUID).
	 * @param lpSystemName A pointer to a null-terminated string that specifies the name of the system on
	 *  which the privilege name is retrieved.  If a null string is specified, the function attempts to
	 *  find the privilege name on the local system.
	 * @param lpLuid A pointer to the LUID by which the privilege is known on the target system.
	 * @param lpName A pointer to a buffer that receives a null-terminated string that represents the privilege name.
	 *  For example, this string could be "SeSecurityPrivilege".
	 * @param cchName A pointer to a variable that specifies the size, in a TCHAR value, of the lpName buffer.
	 * @return If the function succeeds, the return value is nonzero.
	 *  If the function fails, the return value is zero. To get extended error information, call GetLastError.
	 */
	public boolean LookupPrivilegeName(
			String lpSystemName,
			WinNT.LUID lpLuid,
			char[] lpName,
			IntByReference cchName);
	
	/**
	 * The LookupPrivilegeValue function retrieves the locally unique identifier (LUID) used
	 * on a specified system to locally
	 * represent the specified privilege name.
	 * @param lpSystemName A pointer to a null-terminated string that specifies the name of the
	 *  system on which the privilege name is retrieved. If a null string is specified, the
	 *  function attempts to find the privilege name on the local system.
	 * @param lpName A pointer to a null-terminated string that specifies the name of the privilege,
	 *  as defined in the Winnt.h header file. For example, this parameter could specify the constant,
	 *  SE_SECURITY_NAME, or its corresponding string, "SeSecurityPrivilege".
	 * @param lpLuid A pointer to a variable that receives the LUID by which the privilege
	 *  is known on the system specified by the lpSystemName parameter.
	 * @return If the function succeeds, the return value is nonzero.
	 *  If the function fails, the return value is zero. To get extended error information, call GetLastError.
	 */
	public boolean LookupPrivilegeValue(
		String lpSystemName,
		String lpName,
		WinNT.LUID lpLuid);
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy