From 4f5791ebd03eaec1c7da0865a383175b05102712 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 5 May 2024 19:47:29 +0200 Subject: Adding upstream version 2:4.17.12+dfsg. Signed-off-by: Daniel Baumann --- source3/rpc_client/cli_winreg.h | 449 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 449 insertions(+) create mode 100644 source3/rpc_client/cli_winreg.h (limited to 'source3/rpc_client/cli_winreg.h') diff --git a/source3/rpc_client/cli_winreg.h b/source3/rpc_client/cli_winreg.h new file mode 100644 index 0000000..b562531 --- /dev/null +++ b/source3/rpc_client/cli_winreg.h @@ -0,0 +1,449 @@ +/* + * Unix SMB/CIFS implementation. + * + * WINREG client routines + * + * Copyright (c) 2011 Andreas Schneider + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ + +#ifndef CLI_WINREG_H +#define CLI_WINREG_H + +/** + * @brief Query a key for the specified dword value. + * + * Get the data that is associated with the named value of a specified registry + * open key. This function ensures that the key is a dword and converts it + * corretly. + * + * @param[in] mem_ctx The memory context to use. + * + * @param[in] h The binding handle for the rpc connection. + * + * @param[in] key_handle A handle to a key that MUST have been opened + * previously. + * + * @param[in] value The name of the value to query. + * + * @param[out] data A pointer to store the data of the value. + * + * @param[out] pwerr A pointer to a WERROR to store result of the query. + * + * @return NT_STATUS_OK on success or a corresponding error if + * there was a problem on the connection. + */ +NTSTATUS dcerpc_winreg_query_dword(TALLOC_CTX *mem_ctx, + struct dcerpc_binding_handle *h, + struct policy_handle *key_handle, + const char *value, + uint32_t *data, + WERROR *pwerr); + +/** + * @brief Query a key for the specified binary value. + * + * Get the data that is associated with the named value of a specified registry + * open key. This function ensures that the key is a binary value. + * + * @param[in] mem_ctx The memory context to use. + * + * @param[in] h The binding handle for the rpc connection. + * + * @param[in] key_handle A handle to a key that MUST have been opened + * previously. + * + * @param[in] value The name of the value to query. + * + * @param[out] data A pointer to store the data of the value. + * + * @param[out] pwerr A pointer to a WERROR to store result of the query. + * + * @return NT_STATUS_OK on success or a corresponding error if + * there was a problem on the connection. + */ +NTSTATUS dcerpc_winreg_query_binary(TALLOC_CTX *mem_ctx, + struct dcerpc_binding_handle *h, + struct policy_handle *key_handle, + const char *value, + DATA_BLOB *data, + WERROR *pwerr); + +/** + * @brief Query a key for the specified multi sz value. + * + * Get the data that is associated with the named value of a specified registry + * open key. This function ensures that the key is a multi sz value. + * + * @param[in] mem_ctx The memory context to use. + * + * @param[in] h The binding handle for the rpc connection. + * + * @param[in] key_handle A handle to a key that MUST have been opened + * previously. + * + * @param[in] value The name of the value to query. + * + * @param[out] data A pointer to store the data of the value. + * + * @param[out] pwerr A pointer to a WERROR to store result of the query. + * + * @return NT_STATUS_OK on success or a corresponding error if + * there was a problem on the connection. + */ +NTSTATUS dcerpc_winreg_query_multi_sz(TALLOC_CTX *mem_ctx, + struct dcerpc_binding_handle *h, + struct policy_handle *key_handle, + const char *value, + const char ***data, + WERROR *pwerr); + +/** + * @brief Query a key for the specified sz value. + * + * Get the data that is associated with the named value of a specified registry + * open key. This function ensures that the key is a multi sz value. + * + * @param[in] mem_ctx The memory context to use. + * + * @param[in] h The binding handle for the rpc connection. + * + * @param[in] key_handle A handle to a key that MUST have been opened + * previously. + * + * @param[in] value The name of the value to query. + * + * @param[out] data A pointer to store the data of the value. + * + * @param[out] pwerr A pointer to a WERROR to store result of the query. + * + * @return NT_STATUS_OK on success or a corresponding error if + * there was a problem on the connection. + */ +NTSTATUS dcerpc_winreg_query_sz(TALLOC_CTX *mem_ctx, + struct dcerpc_binding_handle *h, + struct policy_handle *key_handle, + const char *value, + const char **data, + WERROR *pwerr); + +/** + * @brief Query a key for the specified security descriptor. + * + * Get the data that is associated with the named value of a specified registry + * open key. This function ensures that the key is a security descriptor. + * + * @param[in] mem_ctx The memory context to use. + * + * @param[in] h The binding handle for the rpc connection. + * + * @param[in] key_handle A handle to a key that MUST have been opened + * previously. + * + * @param[in] value The name of the value to query. + * + * @param[out] data A pointer to store the data of the value. + * + * @param[out] pwerr A pointer to a WERROR to store result of the query. + * + * @return NT_STATUS_OK on success or a corresponding error if + * there was a problem on the connection. + */ +NTSTATUS dcerpc_winreg_query_sd(TALLOC_CTX *mem_ctx, + struct dcerpc_binding_handle *h, + struct policy_handle *key_handle, + const char *value, + struct security_descriptor **data, + WERROR *pwerr); + +/** + * @brief Set a value with the specified dword data. + * + * @param[in] mem_ctx The memory context to use. + * + * @param[in] h The binding handle for the rpc connection. + * + * @param[in] key_handle A handle to a key that MUST have been opened + * previously. + * + * @param[in] value The name of the value to set. + * + * @param[in] data The data to store in the value. + * + * @param[out] pwerr A pointer to a WERROR to store result of the query. + * + * @return NT_STATUS_OK on success or a corresponding error if + * there was a problem on the connection. + */ +NTSTATUS dcerpc_winreg_set_dword(TALLOC_CTX *mem_ctx, + struct dcerpc_binding_handle *h, + struct policy_handle *key_handle, + const char *value, + uint32_t data, + WERROR *pwerr); + +/** + * @brief Set a value with the specified sz data. + * + * @param[in] mem_ctx The memory context to use. + * + * @param[in] h The binding handle for the rpc connection. + * + * @param[in] key_handle A handle to a key that MUST have been opened + * previously. + * + * @param[in] value The name of the value to set. + * + * @param[in] data The data to store in the value. + * + * @param[out] pwerr A pointer to a WERROR to store result of the query. + * + * @return NT_STATUS_OK on success or a corresponding error if + * there was a problem on the connection. + */ +NTSTATUS dcerpc_winreg_set_sz(TALLOC_CTX *mem_ctx, + struct dcerpc_binding_handle *h, + struct policy_handle *key_handle, + const char *value, + const char *data, + WERROR *pwerr); + +/** + * @brief Set a value with the specified expand sz data. + * + * @param[in] mem_ctx The memory context to use. + * + * @param[in] h The binding handle for the rpc connection. + * + * @param[in] key_handle A handle to a key that MUST have been opened + * previously. + * + * @param[in] value The name of the value to set. + * + * @param[in] data The data to store in the value. + * + * @param[out] pwerr A pointer to a WERROR to store result of the query. + * + * @return NT_STATUS_OK on success or a corresponding error if + * there was a problem on the connection. + */ +NTSTATUS dcerpc_winreg_set_expand_sz(TALLOC_CTX *mem_ctx, + struct dcerpc_binding_handle *h, + struct policy_handle *key_handle, + const char *value, + const char *data, + WERROR *pwerr); + +/** + * @brief Set a value with the specified multi sz data. + * + * @param[in] mem_ctx The memory context to use. + * + * @param[in] h The binding handle for the rpc connection. + * + * @param[in] key_handle A handle to a key that MUST have been opened + * previously. + * + * @param[in] value The name of the value to set. + * + * @param[in] data The data to store in the value. + * + * @param[out] pwerr A pointer to a WERROR to store result of the query. + * + * @return NT_STATUS_OK on success or a corresponding error if + * there was a problem on the connection. + */ +NTSTATUS dcerpc_winreg_set_multi_sz(TALLOC_CTX *mem_ctx, + struct dcerpc_binding_handle *h, + struct policy_handle *key_handle, + const char *value, + const char **data, + WERROR *pwerr); + +/** + * @brief Set a value with the specified binary data. + * + * @param[in] mem_ctx The memory context to use. + * + * @param[in] h The binding handle for the rpc connection. + * + * @param[in] key_handle A handle to a key that MUST have been opened + * previously. + * + * @param[in] value The name of the value to set. + * + * @param[in] data The data to store in the value. + * + * @param[out] pwerr A pointer to a WERROR to store result of the query. + * + * @return NT_STATUS_OK on success or a corresponding error if + * there was a problem on the connection. + */ +NTSTATUS dcerpc_winreg_set_binary(TALLOC_CTX *mem_ctx, + struct dcerpc_binding_handle *h, + struct policy_handle *key_handle, + const char *value, + DATA_BLOB *data, + WERROR *pwerr); + +/** + * @brief Set a value with the specified security descriptor. + * + * @param[in] mem_ctx The memory context to use. + * + * @param[in] h The binding handle for the rpc connection. + * + * @param[in] key_handle A handle to a key that MUST have been opened + * previously. + * + * @param[in] value The name of the value to set. + * + * @param[in] data The security descriptor to store in the value. + * + * @param[out] pwerr A pointer to a WERROR to store result of the query. + * + * @return NT_STATUS_OK on success or a corresponding error if + * there was a problem on the connection. + */ +NTSTATUS dcerpc_winreg_set_sd(TALLOC_CTX *mem_ctx, + struct dcerpc_binding_handle *h, + struct policy_handle *key_handle, + const char *value, + const struct security_descriptor *data, + WERROR *pwerr); + +/** + * @brief Add a value to the multi sz data. + * + * This reads the multi sz data from the given value and adds the data to the + * multi sz. Then it saves it to the regsitry. + * + * @param[in] mem_ctx The memory context to use. + * + * @param[in] h The binding handle for the rpc connection. + * + * @param[in] key_handle A handle to a key that MUST have been opened + * previously. + * + * @param[in] value The name of the value to set. + * + * @param[in] data The data to add. + * + * @param[out] pwerr A pointer to a WERROR to store result of the query. + * + * @return NT_STATUS_OK on success or a corresponding error if + * there was a problem on the connection. + */ +NTSTATUS dcerpc_winreg_add_multi_sz(TALLOC_CTX *mem_ctx, + struct dcerpc_binding_handle *h, + struct policy_handle *key_handle, + const char *value, + const char *data, + WERROR *pwerr); + +/** + * @brief Enumerate on the given keyhandle to get the subkey names. + * + * @param[in] mem_ctx The memory context to use. + * + * @param[in] h The binding handle for the rpc connection. + * + * @param[in] key_handle A handle to a key that MUST have been opened + * previously. + * + * @param[out] pnum_subkeys A pointer to store the number of subkeys. + * + * @param[out] psubkeys A pointer to store the names of the subkeys. + * + * @param[out] pwerr A pointer to a WERROR to store result of the query. + * + * @return NT_STATUS_OK on success or a corresponding error if + * there was a problem on the connection. + */ +NTSTATUS dcerpc_winreg_enum_keys(TALLOC_CTX *mem_ctx, + struct dcerpc_binding_handle *h, + struct policy_handle *key_hnd, + uint32_t *pnum_subkeys, + const char ***psubkeys, + WERROR *pwerr); +/** + * @internal + * + * @brief Enumerate values of an opened key handle and retrieve the data. + * + * @param[in] mem_ctx The memory context to use. + * + * @param[in] winreg_handle The binding handle for the rpc connection. + * + * @param[in] key_hnd The opened key handle. + * + * @param[out] pnum_values A pointer to store the number of values we found. + * + * @param[out] pnames A pointer to store all the names of the values we found. + * + * @param[out] _type A pointer to store all the types coresponding with the + * values found. + * @param[out] pdata A pointer to store the data coresponding to the values. + * + * @param[out] pwerr A pointer to the WERROR. WERR_OK on success + * WERR_OK on success, the corresponding DOS error + * code if something's gone wrong. + * + * @return NT_STATUS_OK on success or a corresponding error if + * there was a problem on the connection. + */ + +NTSTATUS dcerpc_winreg_enumvals(TALLOC_CTX *mem_ctx, + struct dcerpc_binding_handle *h, + struct policy_handle *key_hnd, + uint32_t *pnum_values, + const char ***pnames, + enum winreg_Type **_type, + DATA_BLOB **pdata, + WERROR *pwerr); + +/** + * @internal + * + * @brief A function to delete a key and its subkeys recursively. + * + * @param[in] mem_ctx The memory context to use. + * + * @param[in] winreg_handle The binding handle for the rpc connection. + * + * @param[in] hive_handle A opened hive handle to the key. + * + * @param[in] access_mask The access mask to access the key. + * + * @param[in] key The key to delete + * + * @param[out] WERR_OK on success, the corresponding DOS error + * code if something gone wrong. + * + * @return NT_STATUS_OK on success or a corresponding error if + * there was a problem on the connection. + */ + +NTSTATUS dcerpc_winreg_delete_subkeys_recursive(TALLOC_CTX *mem_ctx, + struct dcerpc_binding_handle *h, + struct policy_handle *hive_handle, + uint32_t access_mask, + const char *key, + WERROR *pwerr); + + +#endif /* CLI_WINREG_H */ + +/* vim: set ts=8 sw=8 noet cindent syntax=c.doxygen: */ -- cgit v1.2.3