static WERROR rpc_add_key(TALLOC_CTX *mem_ctx, struct registry_key *parent, const char *name, uint32_t access_mask, SEC_DESC *sec, struct registry_key **key)
{
- return WERR_NOT_SUPPORTED;
+ NTSTATUS status;
+ struct winreg_CreateKey r;
+
+ init_winreg_String(&r.in.key, name);
+ init_winreg_String(&r.in.class, NULL);
+
+ r.in.handle = parent->backend_data;
+ r.out.handle = talloc_p(mem_ctx, struct policy_handle);
+ r.in.options = 0;
+ r.in.access_mask = access_mask;
+ r.in.sec_desc = NULL;
+
+ status = dcerpc_winreg_CreateKey((struct dcerpc_pipe *)(parent->hive->backend_data), mem_ctx, &r);
+
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(1, ("CreateKey failed - %s\n", nt_errstr(status)));
+ return ntstatus_to_werror(status);
+ }
+
+ if (W_ERROR_IS_OK(r.out.result)) {
+ *key = talloc_p(mem_ctx, struct registry_key);
+ (*key)->name = talloc_strdup(*key, name);
+ (*key)->backend_data = r.out.handle;
+ }
+
+ return r.out.result;
}
static WERROR rpc_query_key(struct registry_key *k)
[in,out,ref] policy_handle *handle,
[in] winreg_String key,
[in] winreg_String class,
- [in] uint32 reserved,
- [out] uint32 *unknown,
+ [in] uint32 options,
[in] uint32 access_mask,
- [in,ref] uint32 *sec_info,
+ [in,out,ref] uint32 *action_taken,
[in] sec_desc_buf *sec_desc
);
struct winreg_CreateKey r;
struct policy_handle newhandle;
NTSTATUS status;
- uint32_t sec_info = 0;
+ uint32_t action_taken = 0;
printf("\ntesting CreateKey\n");
r.out.handle = &newhandle;
init_winreg_String(&r.in.key, name);
init_winreg_String(&r.in.class, class);
- r.in.reserved = 0x0;
+ r.in.options = 0x0;
r.in.access_mask = 0x02000000;
- r.in.sec_info = &sec_info;
+ r.in.action_taken = r.out.action_taken = &action_taken;
r.in.sec_desc = NULL;
status = dcerpc_winreg_CreateKey(p, mem_ctx, &r);
if (lp_parm_int(-1, "torture", "dangerous") != 1) {
printf("winreg_InitiateShutdown disabled - enable dangerous tests to use\n");
-
+ } else {
ret &= test_InitiateSystemShutdown(p, mem_ctx, "spottyfood", 30);
ret &= test_AbortSystemShutdown(p, mem_ctx);
}