Package com.sun.jna.platform.win32

# Class Advapi32Util

java.lang.Object
com.sun.jna.platform.win32.Advapi32Util

public abstract class Advapi32Util extends Object
Advapi32 utility API.

Author:
  dblock[at]dblock.org

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static enum`
`Advapi32Util.AccessCheckPermission`
`static class`
`Advapi32Util.Account`
An account.
`static class`
`Advapi32Util.EnumKey`
`static class`
`Advapi32Util.EventLogIterator`
An iterator for Event Log entries.
`static class`
`Advapi32Util.EventLogRecord`
An event log record.
`static enum`
`Advapi32Util.EventLogType`
Event log types.
`static class`
`Advapi32Util.InfoKey`
`static class`
`Advapi32Util.Privilege`
Convenience class to enable certain Windows process privileges

## Constructor Summary

Constructors
Constructor
Description
`Advapi32Util()`

## Method Summary

Modifier and Type
Method
Description
`static boolean`
`accessCheck(File file, Advapi32Util.AccessCheckPermission permissionToCheck)`
Checks if the current process has the given permission for the file.
`static int`
`alignOnDWORD(int cbAcl)`
Align cbAcl on a DWORD
`static void`
`backupEncryptedFile(File src, File destDir)`
Backup an encrypted file or folder without decrypting it.
`static String`
`convertSidToStringSid(WinNT.PSID sid)`
Convert a security identifier (SID) to a string format suitable for display, storage, or transmission.
`static byte[]`
`convertStringSidToSid(String sidString)`
Convert a string representation of a security identifier (SID) to a binary format.
`static void`
`decryptFile(File file)`
Decrypts an encrypted file or directory.
`static void`
`disableEncryption(File directory, boolean disable)`
Disables or enables encryption of the specified directory and the files in it.
`static void`
`encryptFile(File file)`
Encrypts a file or directory.
`static int`
`fileEncryptionStatus(File file)`
Checks the encryption status of a file.
`static Advapi32Util.Account`
`getAccountByName(String accountName)`
Retrieves a security identifier (SID) for the account on the current system.
`static Advapi32Util.Account`
`getAccountByName(String systemName, String accountName)`
Retrieves a security identifier (SID) for a given account.
`static Advapi32Util.Account`
`getAccountBySid(WinNT.PSID sid)`
Get the account by SID on the local system.
`static Advapi32Util.Account`
`getAccountBySid(String sidString)`
Get an account name from a string SID on the local machine.
`static Advapi32Util.Account`
`getAccountBySid(String systemName, WinNT.PSID sid)`
Get the account by SID.
`static Advapi32Util.Account`
`getAccountBySid(String systemName, String sidString)`
Get an account name from a string SID.
`static int`
`getAceSize(int sidLength)`
Helper function to calculate the size of an ACE for a given PSID size
`static Advapi32Util.Account[]`
`getCurrentUserGroups()`
Return the group memberships of the currently logged on user.
`static String`
`getEnvironmentBlock(Map<String,String> environment)`
Converts a map of environment variables to an environment block suitable for `Advapi32.CreateProcessAsUser(com.sun.jna.platform.win32.WinNT.HANDLE, java.lang.String, java.lang.String, com.sun.jna.platform.win32.WinBase.SECURITY_ATTRIBUTES, com.sun.jna.platform.win32.WinBase.SECURITY_ATTRIBUTES, boolean, int, java.lang.String, java.lang.String, com.sun.jna.platform.win32.WinBase.STARTUPINFO, com.sun.jna.platform.win32.WinBase.PROCESS_INFORMATION)`.
`static WinNT.ACE_HEADER[]`
`getFileSecurity(String fileName, boolean compact)`
`static WinNT.SECURITY_DESCRIPTOR_RELATIVE`
`getFileSecurityDescriptor(File file, boolean getSACL)`
Gets a file's Security Descriptor.
`static Memory`
`getSecurityDescriptorForObject(String absoluteObjectPath, int objectType, boolean getSACL)`
Get a self relative security descriptor for the given object type.
`static Advapi32Util.Account`
`getTokenAccount(WinNT.HANDLE hToken)`
This function returns the information about the user who owns a security token,
`static Advapi32Util.Account[]`
`getTokenGroups(WinNT.HANDLE hToken)`
This function returns the groups associated with a security token, such as a user token.
`static Advapi32Util.Account`
`getTokenPrimaryGroup(WinNT.HANDLE hToken)`
This function returns the primary group associated with a security token, such as a user token.
`static String`
`getUserName()`
Retrieves the name of the user associated with the current thread.
`static boolean`
`isCurrentProcessElevated()`
Reports whether the current process is running with elevated permissions.
`static boolean`
`isWellKnownSid(byte[] sidBytes, int wellKnownSidType)`
Compares a SID to a well known SID and returns TRUE if they match.
`static boolean`
`isWellKnownSid(String sidString, int wellKnownSidType)`
Compares a SID to a well known SID and returns TRUE if they match.
`static void`
`registryCloseKey(WinReg.HKEY hKey)`
Close the registry key
`static boolean`
`registryCreateKey(WinReg.HKEY hKey, String keyName)`
Create a registry key.
`static boolean`
`registryCreateKey(WinReg.HKEY hKey, String keyName, int samDesiredExtra)`
Create a registry key.
`static boolean`
`registryCreateKey(WinReg.HKEY root, String parentPath, String keyName)`
Create a registry key.
`static boolean`
`registryCreateKey(WinReg.HKEY root, String parentPath, String keyName, int samDesiredExtra)`
Create a registry key.
`static void`
`registryDeleteKey(WinReg.HKEY hKey, String keyName)`
Delete a registry key.
`static void`
`registryDeleteKey(WinReg.HKEY root, String keyPath, String keyName)`
Delete a registry key.
`static void`
`registryDeleteKey(WinReg.HKEY root, String keyPath, String keyName, int samDesiredExtra)`
Delete a registry key.
`static void`
`registryDeleteValue(WinReg.HKEY hKey, String valueName)`
Delete a registry value.
`static void`
`registryDeleteValue(WinReg.HKEY root, String keyPath, String valueName)`
Delete a registry value.
`static void`
`registryDeleteValue(WinReg.HKEY root, String keyPath, String valueName, int samDesiredExtra)`
Delete a registry value.
`static byte[]`
`registryGetBinaryValue(WinReg.HKEY hKey, String value)`
Get a registry REG_BINARY value.
`static byte[]`
`registryGetBinaryValue(WinReg.HKEY root, String key, String value)`
Get a registry REG_BINARY value.
`static byte[]`
`registryGetBinaryValue(WinReg.HKEY root, String key, String value, int samDesiredExtra)`
Get a registry REG_BINARY value.
`static String`
`registryGetExpandableStringValue(WinReg.HKEY hKey, String value)`
Get a registry REG_EXPAND_SZ value.
`static String`
`registryGetExpandableStringValue(WinReg.HKEY root, String key, String value)`
Get a registry REG_EXPAND_SZ value.
`static String`
`registryGetExpandableStringValue(WinReg.HKEY root, String key, String value, int samDesiredExtra)`
Get a registry REG_EXPAND_SZ value.
`static int`
`registryGetIntValue(WinReg.HKEY hKey, String value)`
Get a registry DWORD value.
`static int`
`registryGetIntValue(WinReg.HKEY root, String key, String value)`
Get a registry DWORD value.
`static int`
`registryGetIntValue(WinReg.HKEY root, String key, String value, int samDesiredExtra)`
Get a registry DWORD value.
`static WinReg.HKEYByReference`
`registryGetKey(WinReg.HKEY root, String keyPath, int samDesired)`
Get a registry key, the caller is responsible to close the key after use.
`static String[]`
`registryGetKeys(WinReg.HKEY hKey)`
Get names of the registry key's sub-keys.
`static String[]`
`registryGetKeys(WinReg.HKEY root, String keyPath)`
Get names of the registry key's sub-keys.
`static String[]`
`registryGetKeys(WinReg.HKEY root, String keyPath, int samDesiredExtra)`
Get names of the registry key's sub-keys.
`static long`
`registryGetLongValue(WinReg.HKEY hKey, String value)`
Get a registry QWORD value.
`static long`
`registryGetLongValue(WinReg.HKEY root, String key, String value)`
Get a registry QWORD value.
`static long`
`registryGetLongValue(WinReg.HKEY root, String key, String value, int samDesiredExtra)`
Get a registry QWORD value.
`static String[]`
`registryGetStringArray(WinReg.HKEY hKey, String value)`
Get a registry REG_MULTI_SZ value.
`static String[]`
`registryGetStringArray(WinReg.HKEY root, String key, String value)`
Get a registry REG_MULTI_SZ value.
`static String[]`
`registryGetStringArray(WinReg.HKEY root, String key, String value, int samDesiredExtra)`
Get a registry REG_MULTI_SZ value.
`static String`
`registryGetStringValue(WinReg.HKEY hKey, String value)`
Get a registry REG_SZ value.
`static String`
`registryGetStringValue(WinReg.HKEY root, String key, String value)`
Get a registry REG_SZ value.
`static String`
`registryGetStringValue(WinReg.HKEY root, String key, String value, int samDesiredExtra)`
Get a registry REG_SZ value.
`static Object`
`registryGetValue(WinReg.HKEY hkKey, String subKey, String lpValueName)`
Get a registry value and returns a java object depending on the value type.
`static TreeMap<String,Object>`
`registryGetValues(WinReg.HKEY hKey)`
Get a table of registry values.
`static TreeMap<String,Object>`
`registryGetValues(WinReg.HKEY root, String keyPath)`
Get a table of registry values.
`static TreeMap<String,Object>`
`registryGetValues(WinReg.HKEY root, String keyPath, int samDesiredExtra)`
Get a table of registry values.
`static boolean`
`registryKeyExists(WinReg.HKEY root, String key)`
Checks whether a registry key exists.
`static boolean`
`registryKeyExists(WinReg.HKEY root, String key, int samDesiredExtra)`
Checks whether a registry key exists.
`static WinReg.HKEYByReference`
`registryLoadAppKey(String fileName, int samDesired, int dwOptions)`
Loads the specified registry hive as an application hive.
`static Advapi32Util.InfoKey`
`registryQueryInfoKey(WinReg.HKEY hKey, int lpcbSecurityDescriptor)`
Queries the information about a specified key.
`static Advapi32Util.EnumKey`
`registryRegEnumKey(WinReg.HKEY hKey, int dwIndex)`
Queries the information about a specified key.
`static void`
`registrySetBinaryValue(WinReg.HKEY hKey, String name, byte[] data)`
Set a binary value in registry.
`static void`
`registrySetBinaryValue(WinReg.HKEY root, String keyPath, String name, byte[] data)`
Set a binary value in registry.
`static void`
`registrySetBinaryValue(WinReg.HKEY root, String keyPath, String name, byte[] data, int samDesiredExtra)`
Set a binary value in registry.
`static void`
`registrySetExpandableStringValue(WinReg.HKEY hKey, String name, String value)`
Set an expandable string value in registry.
`static void`
`registrySetExpandableStringValue(WinReg.HKEY root, String keyPath, String name, String value)`
Set a string value in registry.
`static void`
`registrySetExpandableStringValue(WinReg.HKEY root, String keyPath, String name, String value, int samDesiredExtra)`
Set a string value in registry.
`static void`
`registrySetIntValue(WinReg.HKEY hKey, String name, int value)`
Set an integer value in registry.
`static void`
`registrySetIntValue(WinReg.HKEY root, String keyPath, String name, int value)`
Set an integer value in registry.
`static void`
`registrySetIntValue(WinReg.HKEY root, String keyPath, String name, int value, int samDesiredExtra)`
Set an integer value in registry.
`static void`
`registrySetLongValue(WinReg.HKEY hKey, String name, long value)`
Set a long value in registry.
`static void`
`registrySetLongValue(WinReg.HKEY root, String keyPath, String name, long value)`
Set a long value in registry.
`static void`
`registrySetLongValue(WinReg.HKEY root, String keyPath, String name, long value, int samDesiredExtra)`
Set a long value in registry.
`static void`
`registrySetStringArray(WinReg.HKEY hKey, String name, String[] arr)`
Set a string array value in registry.
`static void`
`registrySetStringArray(WinReg.HKEY root, String keyPath, String name, String[] arr)`
Set a string array value in registry.
`static void`
`registrySetStringArray(WinReg.HKEY root, String keyPath, String name, String[] arr, int samDesiredExtra)`
Set a string array value in registry.
`static void`
`registrySetStringValue(WinReg.HKEY hKey, String name, String value)`
Set a string value in registry.
`static void`
`registrySetStringValue(WinReg.HKEY root, String keyPath, String name, String value)`
Set a string value in registry.
`static void`
`registrySetStringValue(WinReg.HKEY root, String keyPath, String name, String value, int samDesiredExtra)`
Set a string value in registry.
`static boolean`
`registryValueExists(WinReg.HKEY root, String key, String value)`
Checks whether a registry value exists.
`static boolean`
`registryValueExists(WinReg.HKEY root, String key, String value, int samDesiredExtra)`
Checks whether a registry value exists.
`(package private) static String[]`
`regMultiSzBufferToStringArray(Memory data)`
Convert the null-delimited buffer of strings returned from registry values of type `WinNT.REG_MULTI_SZ` to an array of strings.
`static void`
`setFileSecurityDescriptor(File file, WinNT.SECURITY_DESCRIPTOR_RELATIVE securityDescriptor, boolean setOwner, boolean setGroup, boolean setDACL, boolean setSACL, boolean setDACLProtectedStatus, boolean setSACLProtectedStatus)`
Sets a file's Security Descriptor.
`static void`
`setSecurityDescriptorForObject(String absoluteObjectPath, int objectType, WinNT.SECURITY_DESCRIPTOR_RELATIVE securityDescriptor, boolean setOwner, boolean setGroup, boolean setDACL, boolean setSACL, boolean setDACLProtectedStatus, boolean setSACLProtectedStatus)`
Set a self relative security descriptor for the given object type.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### Advapi32Util

public Advapi32Util()

## Method Details

### getUserName

public static String getUserName()
Retrieves the name of the user associated with the current thread.

Returns:
  A user name.

### getAccountByName

public static Advapi32Util.Account getAccountByName(String accountName)
Retrieves a security identifier (SID) for the account on the current system.

Parameters:
  `accountName` - Specifies the account name.
Returns:
  A structure containing the account SID;

### getAccountByName

public static Advapi32Util.Account getAccountByName(String systemName, String accountName)
Retrieves a security identifier (SID) for a given account.

Parameters:
  `systemName` - Name of the system.
  `accountName` - Account name.
Returns:
  A structure containing the account SID.

### getAccountBySid

public static Advapi32Util.Account getAccountBySid(WinNT.PSID sid)
Get the account by SID on the local system.

Parameters:
  `sid` - SID.
Returns:
  Account.

### getAccountBySid

public static Advapi32Util.Account getAccountBySid(String systemName, WinNT.PSID sid)
Get the account by SID.

Parameters:
  `systemName` - Name of the system.
  `sid` - SID.
Returns:
  Account.

### convertSidToStringSid

public static String convertSidToStringSid(WinNT.PSID sid)
Convert a security identifier (SID) to a string format suitable for display, storage, or transmission.

Parameters:
  `sid` - SID bytes.
Returns:
  String SID.

### convertStringSidToSid

public static byte[] convertStringSidToSid(String sidString)
Convert a string representation of a security identifier (SID) to a binary format.

Parameters:
  `sidString` - String SID.
Returns:
  SID bytes.

### isWellKnownSid

public static boolean isWellKnownSid(String sidString, int wellKnownSidType)
Compares a SID to a well known SID and returns TRUE if they match.

Parameters:
  `sidString` - String representation of a SID.
  `wellKnownSidType` - Member of the WELL_KNOWN_SID_TYPE enumeration to compare with the SID at pSid.
Returns:
  True if the SID is of the well-known type, false otherwise.

### isWellKnownSid

public static boolean isWellKnownSid(byte[] sidBytes, int wellKnownSidType)
Compares a SID to a well known SID and returns TRUE if they match.

Parameters:
  `sidBytes` - Byte representation of a SID.
  `wellKnownSidType` - Member of the WELL_KNOWN_SID_TYPE enumeration to compare with the SID at pSid.
Returns:
  True if the SID is of the well-known type, false otherwise.

### alignOnDWORD

public static int alignOnDWORD(int cbAcl)
Align cbAcl on a DWORD

Parameters:
  `cbAcl` - size to align
Returns:
  the aligned size

### getAceSize

public static int getAceSize(int sidLength)
Helper function to calculate the size of an ACE for a given PSID size

Parameters:
  `sidLength` - length of the sid
Returns:
  size of the ACE

### getAccountBySid

public static Advapi32Util.Account getAccountBySid(String sidString)
Get an account name from a string SID on the local machine.

Parameters:
  `sidString` - SID.
Returns:
  Account.

### getAccountBySid

public static Advapi32Util.Account getAccountBySid(String systemName, String sidString)
Get an account name from a string SID.

Parameters:
  `systemName` - System name.
  `sidString` - SID.
Returns:
  Account.

### getTokenGroups

public static Advapi32Util.Account[] getTokenGroups(WinNT.HANDLE hToken)
This function returns the groups associated with a security token, such as a user token.

Parameters:
  `hToken` - Token.
Returns:
  Token groups.

### getTokenPrimaryGroup

public static Advapi32Util.Account getTokenPrimaryGroup(WinNT.HANDLE hToken)
This function returns the primary group associated with a security token, such as a user token.

Parameters:
  `hToken` - Token.
Returns:
  Token primary group.

### getTokenAccount

public static Advapi32Util.Account getTokenAccount(WinNT.HANDLE hToken)
This function returns the information about the user who owns a security token,

Parameters:
  `hToken` - Token.
Returns:
  Token user.

### getCurrentUserGroups

public static Advapi32Util.Account[] getCurrentUserGroups()
Return the group memberships of the currently logged on user.

Returns:
  An array of groups.

### registryKeyExists

public static boolean registryKeyExists(WinReg.HKEY root, String key)
Checks whether a registry key exists.

Parameters:
  `root` - HKEY_LOCAL_MACHINE, etc.
  `key` - Path to the registry key.
Returns:
  True if the key exists.

### registryKeyExists

public static boolean registryKeyExists(WinReg.HKEY root, String key, int samDesiredExtra)
Checks whether a registry key exists.

Parameters:
  `root` - HKEY_LOCAL_MACHINE, etc.
  `key` - Path to the registry key.
  `samDesiredExtra` - Registry key security and access rights to be requested in addition to WinNT.KEY_READ. (e.g WinNT.KEY_WOW64_32KEY or WinNT.KEY_WOW64_64KEY to force 32bit or 64bit registry access.)
Returns:
  True if the key exists.

### registryValueExists

public static boolean registryValueExists(WinReg.HKEY root, String key, String value)
Checks whether a registry value exists.

Parameters:
  `root` - HKEY_LOCAL_MACHINE, etc.
  `key` - Registry key path.
  `value` - Value name.
Returns:
  True if the value exists.

### registryValueExists

public static boolean registryValueExists(WinReg.HKEY root, String key, String value, int samDesiredExtra)
Checks whether a registry value exists.

Parameters:
  `root` - HKEY_LOCAL_MACHINE, etc.
  `key` - Registry key path.
  `value` - Value name.
  `samDesiredExtra` - Registry key security and access rights to be requested in addition to WinNT.KEY_READ. (e.g WinNT.KEY_WOW64_32KEY or WinNT.KEY_WOW64_64KEY to force 32bit or 64bit registry access.)
Returns:
  True if the value exists.

### registryGetStringValue

public static String registryGetStringValue(WinReg.HKEY root, String key, String value)
Get a registry REG_SZ value.

Parameters:
  `root` - Root key.
  `key` - Registry path.
  `value` - Name of the value to retrieve.
Returns:
  String value.

### registryGetStringValue

public static String registryGetStringValue(WinReg.HKEY root, String key, String value, int samDesiredExtra)
Get a registry REG_SZ value.

Parameters:
  `root` - Root key.
  `key` - Registry path.
  `value` - Name of the value to retrieve.
  `samDesiredExtra` - Registry key security and access rights to be requested in addition to WinNT.KEY_READ. (e.g WinNT.KEY_WOW64_32KEY or WinNT.KEY_WOW64_64KEY to force 32bit or 64bit registry access.)
Returns:
  String value.

### registryGetStringValue

public static String registryGetStringValue(WinReg.HKEY hKey, String value)
Get a registry REG_SZ value.

Parameters:
  `hKey` - Parent Key.
  `value` - Name of the value to retrieve.
Returns:
  String value.

### registryGetExpandableStringValue

public static String registryGetExpandableStringValue(WinReg.HKEY root, String key, String value)
Get a registry REG_EXPAND_SZ value.

Parameters:
  `root` - Root key.
  `key` - Registry path.
  `value` - Name of the value to retrieve.
Returns:
  String value.

### registryGetExpandableStringValue

public static String registryGetExpandableStringValue(WinReg.HKEY root, String key, String value, int samDesiredExtra)
Get a registry REG_EXPAND_SZ value.

Parameters:
  `root` - Root key.
  `key` - Registry path.
  `value` - Name of the value to retrieve.
  `samDesiredExtra` - Registry key security and access rights to be requested in addition to WinNT.KEY_READ. (e.g WinNT.KEY_WOW64_32KEY or WinNT.KEY_WOW64_64KEY to force 32bit or 64bit registry access.)
Returns:
  String value.

### registryGetExpandableStringValue

public static String registryGetExpandableStringValue(WinReg.HKEY hKey, String value)
Get a registry REG_EXPAND_SZ value.

Parameters:
  `hKey` - Parent Key.
  `value` - Name of the value to retrieve.
Returns:
  String value.

### registryGetStringArray

public static String[] registryGetStringArray(WinReg.HKEY root, String key, String value)
Get a registry REG_MULTI_SZ value.

Parameters:
  `root` - Root key.
  `key` - Registry path.
  `value` - Name of the value to retrieve.
Returns:
  String value.

### registryGetStringArray

public static String[] registryGetStringArray(WinReg.HKEY root, String key, String value, int samDesiredExtra)
Get a registry REG_MULTI_SZ value.

Parameters:
  `root` - Root key.
  `key` - Registry path.
  `value` - Name of the value to retrieve.
  `samDesiredExtra` - Registry key security and access rights to be requested in addition to WinNT.KEY_READ. (e.g WinNT.KEY_WOW64_32KEY or WinNT.KEY_WOW64_64KEY to force 32bit or 64bit registry access.)
Returns:
  String value.

### registryGetStringArray

public static String[] registryGetStringArray(WinReg.HKEY hKey, String value)
Get a registry REG_MULTI_SZ value.

Parameters:
  `hKey` - Parent Key.
  `value` - Name of the value to retrieve.
Returns:
  String value.

### regMultiSzBufferToStringArray

static String[] regMultiSzBufferToStringArray(Memory data)
Convert the null-delimited buffer of strings returned from registry values of type `WinNT.REG_MULTI_SZ` to an array of strings.

Parameters:
  `data` - A buffer containing strings delimited by a null character, ending with two null characters.
Returns:
  An array of strings corresponding to the strings in the buffer.

### registryGetBinaryValue

public static byte[] registryGetBinaryValue(WinReg.HKEY root, String key, String value)
Get a registry REG_BINARY value.

Parameters:
  `root` - Root key.
  `key` - Registry path.
  `value` - Name of the value to retrieve.
Returns:
  String value.

### registryGetBinaryValue

public static byte[] registryGetBinaryValue(WinReg.HKEY root, String key, String value, int samDesiredExtra)
Get a registry REG_BINARY value.

Parameters:
  `root` - Root key.
  `key` - Registry path.
  `value` - Name of the value to retrieve.
  `samDesiredExtra` - Registry key security and access rights to be requested in addition to WinNT.KEY_READ. (e.g WinNT.KEY_WOW64_32KEY or WinNT.KEY_WOW64_64KEY to force 32bit or 64bit registry access.)
Returns:
  String value.

### registryGetBinaryValue

public static byte[] registryGetBinaryValue(WinReg.HKEY hKey, String value)
Get a registry REG_BINARY value.

Parameters:
  `hKey` - Parent Key.
  `value` - Name of the value to retrieve.
Returns:
  String value.

### registryGetIntValue

public static int registryGetIntValue(WinReg.HKEY root, String key, String value)
Get a registry DWORD value.

Parameters:
  `root` - Root key.
  `key` - Registry key path.
  `value` - Name of the value to retrieve.
Returns:
  Integer value.

### registryGetIntValue

public static int registryGetIntValue(WinReg.HKEY root, String key, String value, int samDesiredExtra)
Get a registry DWORD value.

Parameters:
  `root` - Root key.
  `key` - Registry key path.
  `value` - Name of the value to retrieve.
  `samDesiredExtra` - Registry key security and access rights to be requested in addition to WinNT.KEY_READ. (e.g WinNT.KEY_WOW64_32KEY or WinNT.KEY_WOW64_64KEY to force 32bit or 64bit registry access.)
Returns:
  Integer value.

### registryGetIntValue

public static int registryGetIntValue(WinReg.HKEY hKey, String value)
Get a registry DWORD value.

Parameters:
  `hKey` - Parent key.
  `value` - Name of the value to retrieve.
Returns:
  Integer value.

### registryGetLongValue

public static long registryGetLongValue(WinReg.HKEY root, String key, String value)
Get a registry QWORD value.

Parameters:
  `root` - Root key.
  `key` - Registry key path.
  `value` - Name of the value to retrieve.
Returns:
  Integer value.

### registryGetLongValue

public static long registryGetLongValue(WinReg.HKEY root, String key, String value, int samDesiredExtra)
Get a registry QWORD value.

Parameters:
  `root` - Root key.
  `key` - Registry key path.
  `value` - Name of the value to retrieve.
  `samDesiredExtra` - Registry key security and access rights to be requested in addition to WinNT.KEY_READ. (e.g WinNT.KEY_WOW64_32KEY or WinNT.KEY_WOW64_64KEY to force 32bit or 64bit registry access.)
Returns:
  Integer value.

### registryGetLongValue

public static long registryGetLongValue(WinReg.HKEY hKey, String value)
Get a registry QWORD value.

Parameters:
  `hKey` - Parent key.
  `value` - Name of the value to retrieve.
Returns:
  Integer value.

### registryGetValue

public static Object registryGetValue(WinReg.HKEY hkKey, String subKey, String lpValueName)
Get a registry value and returns a java object depending on the value type.

Parameters:
  `hkKey` - Root key.
  `subKey` - Registry key path.
  `lpValueName` - Name of the value to retrieve or null for the default value.
Returns:
  Object value.

### registryCreateKey

public static boolean registryCreateKey(WinReg.HKEY hKey, String keyName)
Create a registry key.

Parameters:
  `hKey` - Parent key.
  `keyName` - Key name.
Returns:
  True if the key was created, false otherwise.

### registryCreateKey

public static boolean registryCreateKey(WinReg.HKEY hKey, String keyName, int samDesiredExtra)
Create a registry key.

Parameters:
  `hKey` - Parent key.
  `keyName` - Key name.
  `samDesiredExtra` - Registry key security and access rights to be requested in addition to WinNT.KEY_READ. (e.g WinNT.KEY_WOW64_32KEY or WinNT.KEY_WOW64_64KEY to force 32bit or 64bit registry access.)
Returns:
  True if the key was created, false otherwise.

### registryCreateKey

public static boolean registryCreateKey(WinReg.HKEY root, String parentPath, String keyName)
Create a registry key.

Parameters:
  `root` - Root key.
  `parentPath` - Path to an existing registry key.
  `keyName` - Key name.
Returns:
  True if the key was created, false otherwise.

### registryCreateKey

public static boolean registryCreateKey(WinReg.HKEY root, String parentPath, String keyName, int samDesiredExtra)
Create a registry key.

Parameters:
  `root` - Root key.
  `parentPath` - Path to an existing registry key.
  `keyName` - Key name.
  `samDesiredExtra` - Registry key security and access rights to be requested in addition to WinNT.KEY_CREATE_SUB_KEY. (e.g WinNT.KEY_WOW64_32KEY or WinNT.KEY_WOW64_64KEY to force 32bit or 64bit registry access.)
Returns:
  True if the key was created, false otherwise.

### registrySetIntValue

public static void registrySetIntValue(WinReg.HKEY hKey, String name, int value)
Set an integer value in registry.

Parameters:
  `hKey` - Parent key.
  `name` - Value name.
  `value` - Value to write to registry.

### registrySetIntValue

public static void registrySetIntValue(WinReg.HKEY root, String keyPath, String name, int value)
Set an integer value in registry.

Parameters:
  `root` - Root key.
  `keyPath` - Path to an existing registry key.
  `name` - Value name.
  `value` - Value to write to registry.

### registrySetIntValue

public static void registrySetIntValue(WinReg.HKEY root, String keyPath, String name, int value, int samDesiredExtra)
Set an integer value in registry.

Parameters:
  `root` - Root key.
  `keyPath` - Path to an existing registry key.
  `name` - Value name.
  `value` - Value to write to registry.
  `samDesiredExtra` - Registry key security and access rights to be requested in addition to WinNT.KEY_READ and WinNT.KEY_WRITE. (e.g WinNT.KEY_WOW64_32KEY or WinNT.KEY_WOW64_64KEY to force 32bit or 64bit registry access.)

### registrySetLongValue

public static void registrySetLongValue(WinReg.HKEY hKey, String name, long value)
Set a long value in registry.

Parameters:
  `hKey` - Parent key.
  `name` - Value name.
  `value` - Value to write to registry.

### registrySetLongValue

public static void registrySetLongValue(WinReg.HKEY root, String keyPath, String name, long value)
Set a long value in registry.

Parameters:
  `root` - Root key.
  `keyPath` - Path to an existing registry key.
  `name` - Value name.
  `value` - Value to write to registry.

### registrySetLongValue

public static void registrySetLongValue(WinReg.HKEY root, String keyPath, String name, long value, int samDesiredExtra)
Set a long value in registry.

Parameters:
  `root` - Root key.
  `keyPath` - Path to an existing registry key.
  `name` - Value name.
  `value` - Value to write to registry.
  `samDesiredExtra` - Registry key security and access rights to be requested in addition to WinNT.KEY_READ and WinNT.KEY_WRITE. (e.g WinNT.KEY_WOW64_32KEY or WinNT.KEY_WOW64_64KEY to force 32bit or 64bit registry access.)

### registrySetStringValue

public static void registrySetStringValue(WinReg.HKEY hKey, String name, String value)
Set a string value in registry.

Parameters:
  `hKey` - Parent key.
  `name` - Value name.
  `value` - Value to write to registry.

### registrySetStringValue

public static void registrySetStringValue(WinReg.HKEY root, String keyPath, String name, String value)
Set a string value in registry.

Parameters:
  `root` - Root key.
  `keyPath` - Path to an existing registry key.
  `name` - Value name.
  `value` - Value to write to registry.

### registrySetStringValue

public static void registrySetStringValue(WinReg.HKEY root, String keyPath, String name, String value, int samDesiredExtra)
Set a string value in registry.

Parameters:
  `root` - Root key.
  `keyPath` - Path to an existing registry key.
  `name` - Value name.
  `value` - Value to write to registry.
  `samDesiredExtra` - Registry key security and access rights to be requested in addition to WinNT.KEY_READ and WinNT.KEY_WRITE. (e.g WinNT.KEY_WOW64_32KEY or WinNT.KEY_WOW64_64KEY to force 32bit or 64bit registry access.)

### registrySetExpandableStringValue

public static void registrySetExpandableStringValue(WinReg.HKEY hKey, String name, String value)
Set an expandable string value in registry.

Parameters:
  `hKey` - Parent key.
  `name` - Value name.
  `value` - Value to write to registry.

### registrySetExpandableStringValue

public static void registrySetExpandableStringValue(WinReg.HKEY root, String keyPath, String name, String value)
Set a string value in registry.

Parameters:
  `root` - Root key.
  `keyPath` - Path to an existing registry key.
  `name` - Value name.
  `value` - Value to write to registry.

### registrySetExpandableStringValue

public static void registrySetExpandableStringValue(WinReg.HKEY root, String keyPath, String name, String value, int samDesiredExtra)
Set a string value in registry.

Parameters:
  `root` - Root key.
  `keyPath` - Path to an existing registry key.
  `name` - Value name.
  `value` - Value to write to registry.
  `samDesiredExtra` - Registry key security and access rights to be requested in addition to WinNT.KEY_READ and WinNT.KEY_WRITE. (e.g WinNT.KEY_WOW64_32KEY or WinNT.KEY_WOW64_64KEY to force 32bit or 64bit registry access.)

### registrySetStringArray

public static void registrySetStringArray(WinReg.HKEY hKey, String name, String[] arr)
Set a string array value in registry.

Parameters:
  `hKey` - Parent key.
  `name` - Name.
  `arr` - Array of strings to write to registry.

### registrySetStringArray

public static void registrySetStringArray(WinReg.HKEY root, String keyPath, String name, String[] arr)
Set a string array value in registry.

Parameters:
  `root` - Root key.
  `keyPath` - Path to an existing registry key.
  `name` - Value name.
  `arr` - Array of strings to write to registry.

### registrySetStringArray

public static void registrySetStringArray(WinReg.HKEY root, String keyPath, String name, String[] arr, int samDesiredExtra)
Set a string array value in registry.

Parameters:
  `root` - Root key.
  `keyPath` - Path to an existing registry key.
  `name` - Value name.
  `arr` - Array of strings to write to registry.
  `samDesiredExtra` - Registry key security and access rights to be requested in addition to WinNT.KEY_READ and WinNT.KEY_WRITE. (e.g WinNT.KEY_WOW64_32KEY or WinNT.KEY_WOW64_64KEY to force 32bit or 64bit registry access.)

### registrySetBinaryValue

public static void registrySetBinaryValue(WinReg.HKEY hKey, String name, byte[] data)
Set a binary value in registry.

Parameters:
  `hKey` - Parent key.
  `name` - Value name.
  `data` - Data to write to registry.

### registrySetBinaryValue

public static void registrySetBinaryValue(WinReg.HKEY root, String keyPath, String name, byte[] data)
Set a binary value in registry.

Parameters:
  `root` - Root key.
  `keyPath` - Path to an existing registry key.
  `name` - Value name.
  `data` - Data to write to registry.

### registrySetBinaryValue

public static void registrySetBinaryValue(WinReg.HKEY root, String keyPath, String name, byte[] data, int samDesiredExtra)
Set a binary value in registry.

Parameters:
  `root` - Root key.
  `keyPath` - Path to an existing registry key.
  `name` - Value name.
  `data` - Data to write to registry.
  `samDesiredExtra` - Registry key security and access rights to be requested in addition to WinNT.KEY_READ and WinNT.KEY_WRITE. (e.g WinNT.KEY_WOW64_32KEY or WinNT.KEY_WOW64_64KEY to force 32bit or 64bit registry access.)

### registryDeleteKey

public static void registryDeleteKey(WinReg.HKEY hKey, String keyName)
Delete a registry key.

Parameters:
  `hKey` - Parent key.
  `keyName` - Name of the key to delete.

### registryDeleteKey

public static void registryDeleteKey(WinReg.HKEY root, String keyPath, String keyName)
Delete a registry key.

Parameters:
  `root` - Root key.
  `keyPath` - Path to an existing registry key.
  `keyName` - Name of the key to delete.

### registryDeleteKey

public static void registryDeleteKey(WinReg.HKEY root, String keyPath, String keyName, int samDesiredExtra)
Delete a registry key.

Parameters:
  `root` - Root key.
  `keyPath` - Path to an existing registry key.
  `keyName` - Name of the key to delete.
  `samDesiredExtra` - Registry key security and access rights to be requested in addition to WinNT.KEY_READ and WinNT.KEY_WRITE. (e.g WinNT.KEY_WOW64_32KEY or WinNT.KEY_WOW64_64KEY to force 32bit or 64bit registry access.)

### registryDeleteValue

public static void registryDeleteValue(WinReg.HKEY hKey, String valueName)
Delete a registry value.

Parameters:
  `hKey` - Parent key.
  `valueName` - Name of the value to delete.

### registryDeleteValue

public static void registryDeleteValue(WinReg.HKEY root, String keyPath, String valueName)
Delete a registry value.

Parameters:
  `root` - Root key.
  `keyPath` - Path to an existing registry key.
  `valueName` - Name of the value to delete.

### registryDeleteValue

public static void registryDeleteValue(WinReg.HKEY root, String keyPath, String valueName, int samDesiredExtra)
Delete a registry value.

Parameters:
  `root` - Root key.
  `keyPath` - Path to an existing registry key.
  `valueName` - Name of the value to delete.
  `samDesiredExtra` - Registry key security and access rights to be requested in addition to WinNT.KEY_READ and WinNT.KEY_WRITE. (e.g WinNT.KEY_WOW64_32KEY or WinNT.KEY_WOW64_64KEY to force 32bit or 64bit registry access.)

### registryGetKeys

public static String[] registryGetKeys(WinReg.HKEY hKey)
Get names of the registry key's sub-keys.

Parameters:
  `hKey` - Registry key.
Returns:
  Array of registry key names.

### registryGetKeys

public static String[] registryGetKeys(WinReg.HKEY root, String keyPath)
Get names of the registry key's sub-keys.

Parameters:
  `root` - Root key.
  `keyPath` - Path to a registry key.
Returns:
  Array of registry key names.

### registryGetKeys

public static String[] registryGetKeys(WinReg.HKEY root, String keyPath, int samDesiredExtra)
Get names of the registry key's sub-keys.

Parameters:
  `root` - Root key.
  `keyPath` - Path to a registry key.
  `samDesiredExtra` - Registry key security and access rights to be requested in addition to WinNT.KEY_READ. (e.g WinNT.KEY_WOW64_32KEY or WinNT.KEY_WOW64_64KEY to force 32bit or 64bit registry access.)
Returns:
  Array of registry key names.

### registryGetKey

public static WinReg.HKEYByReference registryGetKey(WinReg.HKEY root, String keyPath, int samDesired)
Get a registry key, the caller is responsible to close the key after use.

Parameters:
  `root` - Root key.
  `keyPath` - Path to a registry key.
  `samDesired` - Access level (e.g. WinNT.KEY_READ)
Returns:
  HKEYByReference.

### registryLoadAppKey

public static WinReg.HKEYByReference registryLoadAppKey(String fileName, int samDesired, int dwOptions)
Loads the specified registry hive as an application hive.

Parameters:
  `fileName` - Path to the file
  `samDesired` - Access mask that specifies the desired access rights to the
  `dwOptions` - If this parameter is REG_PROCESS_APPKEY, the hive cannot be loaded again while it is loaded by the caller. This prevents access to this registry hive by another caller.

### registryCloseKey

public static void registryCloseKey(WinReg.HKEY hKey)
Close the registry key

Parameters:
  `hKey` - Registry key.

### registryGetValues

public static TreeMap<String,Object> registryGetValues(WinReg.HKEY hKey)
Get a table of registry values.

Parameters:
  `hKey` - Registry key.
Returns:
  Table of values.

### registryGetValues

public static TreeMap<String,Object> registryGetValues(WinReg.HKEY root, String keyPath)
Get a table of registry values.

Parameters:
  `root` - Registry root.
  `keyPath` - Regitry key path.
Returns:
  Table of values.

### registryGetValues

public static TreeMap<String,Object> registryGetValues(WinReg.HKEY root, String keyPath, int samDesiredExtra)
Get a table of registry values.

Parameters:
  `root` - Registry root.
  `keyPath` - Regitry key path.
  `samDesiredExtra` - Registry key security and access rights to be requested in addition to WinNT.KEY_READ. (e.g WinNT.KEY_WOW64_32KEY or WinNT.KEY_WOW64_64KEY to force 32bit or 64bit registry access.)
Returns:
  Table of values.

### registryQueryInfoKey

public static Advapi32Util.InfoKey registryQueryInfoKey(WinReg.HKEY hKey, int lpcbSecurityDescriptor)
Queries the information about a specified key.

Parameters:
  `hKey` - Current registry key.
  `lpcbSecurityDescriptor` - security descriptor
Returns:
  A InfoKey value object.

### registryRegEnumKey

public static Advapi32Util.EnumKey registryRegEnumKey(WinReg.HKEY hKey, int dwIndex)
Queries the information about a specified key.

Parameters:
  `hKey` - Current registry key.
  `dwIndex` -
Returns:
  A InfoKey value object.

### getEnvironmentBlock

public static String getEnvironmentBlock(Map<String,String> environment)
Converts a map of environment variables to an environment block suitable for `Advapi32.CreateProcessAsUser(com.sun.jna.platform.win32.WinNT.HANDLE, java.lang.String, java.lang.String, com.sun.jna.platform.win32.WinBase.SECURITY_ATTRIBUTES, com.sun.jna.platform.win32.WinBase.SECURITY_ATTRIBUTES, boolean, int, java.lang.String, java.lang.String, com.sun.jna.platform.win32.WinBase.STARTUPINFO, com.sun.jna.platform.win32.WinBase.PROCESS_INFORMATION)`. This environment block consists of null-terminated blocks of null-terminated strings. Each string is in the following form: name=value\0

Parameters:
  `environment` - Environment variables
Returns:
  A environment block

### getFileSecurity

public static WinNT.ACE_HEADER[] getFileSecurity(String fileName, boolean compact)

Parameters:
  `fileName` - path to the file
  `compact` - if true compatible ACEs are merged if possible
Returns:
  list of ACEs in the DACL of the referenced file

### getSecurityDescriptorForObject

public static Memory getSecurityDescriptorForObject(String absoluteObjectPath, int objectType, boolean getSACL)
Get a self relative security descriptor for the given object type. The value is returned in Memory

Parameters:
  `absoluteObjectPath` - A pointer to a null-terminated string that specifies the name of the object from which to retrieve security information. For descriptions of the string formats for the different object types, see SE_OBJECT_TYPE in `AccCtrl.SE_OBJECT_TYPE`
  `objectType` - Object type referred to by the path. See `AccCtrl.SE_OBJECT_TYPE` for valid definitions.
  `getSACL` - Get SACL of the object. See `Advapi32.GetNamedSecurityInfo(java.lang.String, int, int, com.sun.jna.ptr.PointerByReference, com.sun.jna.ptr.PointerByReference, com.sun.jna.ptr.PointerByReference, com.sun.jna.ptr.PointerByReference, com.sun.jna.ptr.PointerByReference)` for process privilege requirements in getting the SACL.
Returns:
  Memory containing the self relative security descriptor

### setSecurityDescriptorForObject

public static void setSecurityDescriptorForObject(String absoluteObjectPath, int objectType, WinNT.SECURITY_DESCRIPTOR_RELATIVE securityDescriptor, boolean setOwner, boolean setGroup, boolean setDACL, boolean setSACL, boolean setDACLProtectedStatus, boolean setSACLProtectedStatus)
Set a self relative security descriptor for the given object type.

Parameters:
  `absoluteObjectPath` - A pointer to a null-terminated string that specifies the name of the object from which to retrieve security information. For descriptions of the string formats for the different object types, see `AccCtrl.SE_OBJECT_TYPE`.
  `objectType` - Object type referred to by the path. See `AccCtrl.SE_OBJECT_TYPE` for valid definitions.
  `securityDescriptor` - A security descriptor to set.
  `setOwner` - Set the owner. The owner is extracted from securityDescriptor and must be valid, otherwise IllegalArgumentException is throw. See `Advapi32.SetNamedSecurityInfo(java.lang.String, int, int, com.sun.jna.Pointer, com.sun.jna.Pointer, com.sun.jna.Pointer, com.sun.jna.Pointer)` for process privilege requirements in getting the OWNER.
  `setGroup` - Set the group. The group is extracted from securityDescriptor and must be valid, otherwise IllegalArgumentException is throw.
  `setDACL` - Set the DACL. The DACL is extracted from securityDescriptor and must be valid, otherwise IllegalArgumentException is throw.
  `setSACL` - Set the SACL. The SACL is extracted from securityDescriptor and must be valid, otherwise IllegalArgumentException is throw. See `Advapi32.SetNamedSecurityInfo(java.lang.String, int, int, com.sun.jna.Pointer, com.sun.jna.Pointer, com.sun.jna.Pointer, com.sun.jna.Pointer)` for process privilege requirements in getting the SACL.
  `setDACLProtectedStatus` - Set DACL protected status as contained within securityDescriptor.control.
  `setSACLProtectedStatus` - Set SACL protected status as contained within securityDescriptor.control.

### accessCheck

public static boolean accessCheck(File file, Advapi32Util.AccessCheckPermission permissionToCheck)
Checks if the current process has the given permission for the file.

Parameters:
  `file` - the file to check
  `permissionToCheck` - the permission to check for the file
Returns:
  true if has access, otherwise false

### getFileSecurityDescriptor

public static WinNT.SECURITY_DESCRIPTOR_RELATIVE getFileSecurityDescriptor(File file, boolean getSACL)
Gets a file's Security Descriptor. Convenience wrapper getSecurityDescriptorForObject.

Parameters:
  `file` - File object containing a path to a file system object.
  `getSACL` - Get the SACL. See `Advapi32.GetNamedSecurityInfo(java.lang.String, int, int, com.sun.jna.ptr.PointerByReference, com.sun.jna.ptr.PointerByReference, com.sun.jna.ptr.PointerByReference, com.sun.jna.ptr.PointerByReference, com.sun.jna.ptr.PointerByReference)` for process privilege requirements in getting the SACL.
Returns:
  The file's Security Descriptor in self relative format.

### setFileSecurityDescriptor

public static void setFileSecurityDescriptor(File file, WinNT.SECURITY_DESCRIPTOR_RELATIVE securityDescriptor, boolean setOwner, boolean setGroup, boolean setDACL, boolean setSACL, boolean setDACLProtectedStatus, boolean setSACLProtectedStatus)
Sets a file's Security Descriptor. Convenience wrapper setSecurityDescriptorForObject.

Parameters:
  `file` - File object containing a path to a file system object.
  `securityDescriptor` - The security descriptor to set.
  `setOwner` - Set the owner. See `Advapi32.SetNamedSecurityInfo(java.lang.String, int, int, com.sun.jna.Pointer, com.sun.jna.Pointer, com.sun.jna.Pointer, com.sun.jna.Pointer)` for process privilege requirements in setting the owner.
  `setGroup` - Set the group.
  `setDACL` - Set the DACL.
  `setSACL` - Set the SACL. See `Advapi32.SetNamedSecurityInfo(java.lang.String, int, int, com.sun.jna.Pointer, com.sun.jna.Pointer, com.sun.jna.Pointer, com.sun.jna.Pointer)` for process privilege requirements in setting the SACL.
  `setDACLProtectedStatus` - Set DACL protected status as contained within securityDescriptor.control.
  `setSACLProtectedStatus` - Set SACL protected status as contained within securityDescriptor.control. *

### encryptFile

public static void encryptFile(File file)
Encrypts a file or directory.

Parameters:
  `file` - The file or directory to encrypt.

### decryptFile

public static void decryptFile(File file)
Decrypts an encrypted file or directory.

Parameters:
  `file` - The file or directory to decrypt.

### fileEncryptionStatus

public static int fileEncryptionStatus(File file)
Checks the encryption status of a file.

Parameters:
  `file` - The file to check the status for.
Returns:
  The status of the file.

### disableEncryption

public static void disableEncryption(File directory, boolean disable)
Disables or enables encryption of the specified directory and the files in it.

Parameters:
  `directory` - The directory for which to enable or disable encryption.
  `disable` - TRUE to disable encryption. FALSE to enable it.

### backupEncryptedFile

public static void backupEncryptedFile(File src, File destDir)
Backup an encrypted file or folder without decrypting it. A file named "bar/sample.text" will be backed-up to "destDir/sample.text". A directory named "bar" will be backed-up to "destDir/bar". This method is NOT recursive. If you have an encrypted directory with encrypted files, this method must be called once for the directory, and once for each encrypted file to be backed-up.

Parameters:
  `src` - The encrypted file or directory to backup.
  `destDir` - The directory where the backup will be saved.

### isCurrentProcessElevated

public static boolean isCurrentProcessElevated()
Reports whether the current process is running with elevated permissions.

Returns:
  true if the current process has elevated perissions, false otherwise.