mirror of
https://github.com/samba-team/samba.git
synced 2025-12-02 00:23:50 +03:00
s3-rpc_client: Added winreg query binary helper.
Signed-off-by: Günther Deschner <gd@samba.org>
This commit is contained in:
committed by
Günther Deschner
parent
9c7607d3d3
commit
d24bd4be91
@@ -98,4 +98,75 @@ NTSTATUS dcerpc_winreg_query_dword(TALLOC_CTX *mem_ctx,
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
struct winreg_String wvalue;
|
||||||
|
enum winreg_Type type;
|
||||||
|
WERROR result = WERR_OK;
|
||||||
|
uint32_t value_len = 0;
|
||||||
|
uint32_t data_size = 0;
|
||||||
|
NTSTATUS status;
|
||||||
|
DATA_BLOB blob;
|
||||||
|
|
||||||
|
wvalue.name = value;
|
||||||
|
|
||||||
|
status = dcerpc_winreg_QueryValue(h,
|
||||||
|
mem_ctx,
|
||||||
|
key_handle,
|
||||||
|
&wvalue,
|
||||||
|
&type,
|
||||||
|
NULL,
|
||||||
|
&data_size,
|
||||||
|
&value_len,
|
||||||
|
&result);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
if (!W_ERROR_IS_OK(result)) {
|
||||||
|
*pwerr = result;
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type != REG_BINARY) {
|
||||||
|
*pwerr = WERR_INVALID_DATATYPE;
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
blob = data_blob_talloc(mem_ctx, NULL, data_size);
|
||||||
|
if (blob.data == NULL) {
|
||||||
|
*pwerr = WERR_NOMEM;
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
value_len = 0;
|
||||||
|
|
||||||
|
status = dcerpc_winreg_QueryValue(h,
|
||||||
|
mem_ctx,
|
||||||
|
key_handle,
|
||||||
|
&wvalue,
|
||||||
|
&type,
|
||||||
|
blob.data,
|
||||||
|
&data_size,
|
||||||
|
&value_len,
|
||||||
|
&result);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
if (!W_ERROR_IS_OK(result)) {
|
||||||
|
*pwerr = result;
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data) {
|
||||||
|
data->data = blob.data;
|
||||||
|
data->length = blob.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
/* vim: set ts=8 sw=8 noet cindent syntax=c.doxygen: */
|
/* vim: set ts=8 sw=8 noet cindent syntax=c.doxygen: */
|
||||||
|
|||||||
@@ -52,6 +52,34 @@ NTSTATUS dcerpc_winreg_query_dword(TALLOC_CTX *mem_ctx,
|
|||||||
uint32_t *data,
|
uint32_t *data,
|
||||||
WERROR *pwerr);
|
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);
|
||||||
#endif /* CLI_WINREG_H */
|
#endif /* CLI_WINREG_H */
|
||||||
|
|
||||||
/* vim: set ts=8 sw=8 noet cindent syntax=c.doxygen: */
|
/* vim: set ts=8 sw=8 noet cindent syntax=c.doxygen: */
|
||||||
|
|||||||
Reference in New Issue
Block a user