}
if (!W_ERROR_IS_OK(r.out.result)) {
+ printf("OpenKey failed - %s\n", win_errstr(r.out.result));
+
return False;
}
if (!test_OpenKey(
p, mem_ctx, handle, r.out.out_name->name,
&key_handle)) {
- printf("OpenKey(%s) failed - %s\n",
- r.out.out_name->name,
- win_errstr(r.out.result));
} else {
test_key(p, mem_ctx, &key_handle, depth + 1);
}
return True;
}
+static BOOL test_QueryValue(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct policy_handle *handle, const char *valuename)
+{
+ struct winreg_QueryValue r;
+ NTSTATUS status;
+ uint32 zero = 0;
+ uint32 offered = 0xfff;
+
+ printf("Testing QueryValue\n");
+
+ r.in.handle = handle;
+ r.in.value_name.name = valuename;
+ r.in.type = &zero;
+ r.in.size = &offered;
+ r.in.length = &zero;
+
+ status = dcerpc_winreg_QueryValue(p, mem_ctx, &r);
+ if(NT_STATUS_IS_ERR(status)) {
+ printf("QueryValue failed - %s\n", nt_errstr(status));
+ return False;
+ }
+
+ if (!W_ERROR_IS_OK(r.out.result)) {
+ printf("QueryValue failed - %s\n", win_errstr(r.out.result));
+ return False;
+ }
+
+ return True;
+}
+
static BOOL test_EnumValue(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
struct policy_handle *handle, int max_valnamelen, int max_valbufsize)
{
struct winreg_EnumValue r;
- struct EnumValueIn buf_name;
- struct EnumValueIn buf_val;
- uint32 type;
- uint32 len1 = max_valbufsize, len2 = 0;
+ uint32 type = 0;
+ uint32 size = max_valbufsize, zero = 0;
+ BOOL ret = True;
+ uint8_t buf8;
+ uint16_t buf16;
printf("testing EnumValue\n");
r.in.handle = handle;
r.in.enum_index = 0;
- r.in.name_in.len = 0;
- r.in.name_in.max_len = max_valnamelen * 2;
- buf_name.max_len = max_valnamelen;
- buf_name.offset = 0;
- buf_name.len = 0;
- r.in.name_in.buffer = &buf_name;
+ r.in.name_in.length = 0;
+ r.in.name_in.size = 0x200;
+ r.in.name_in.name = &buf16;
r.in.type = &type;
- buf_val.max_len = max_valbufsize;
- buf_val.offset = 0;
- buf_val.len = 0;
- r.in.value_in = &buf_val;
- r.in.value_len1 = &len1;
- r.in.value_len2 = &len2;
+ r.in.value = &buf8;
+ r.in.length = &zero;
+ r.in.size = &size;
do {
NTSTATUS status = dcerpc_winreg_EnumValue(p, mem_ctx, &r);
return False;
}
+ if (W_ERROR_IS_OK(r.out.result)) {
+ ret &= test_QueryValue(p, mem_ctx, handle, r.out.name_out.name);
+ }
+
r.in.enum_index++;
} while (W_ERROR_IS_OK(r.out.result));
return False;
}
- return True;
+ return ret;
}
static BOOL test_OpenHKLM(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
unknown.unknown0 = 0x84e0;
unknown.unknown1 = 0x0000;
r.in.unknown = &unknown;
- r.in.access_required = SEC_RIGHTS_MAXIMUM_ALLOWED;
+ r.in.access_required = SEC_FLAG_MAXIMUM_ALLOWED;
r.out.handle = handle;
status = dcerpc_winreg_OpenHKLM(p, mem_ctx, &r);
unknown.unknown0 = 0x84e0;
unknown.unknown1 = 0x0000;
r.in.unknown = &unknown;
- r.in.access_required = SEC_RIGHTS_MAXIMUM_ALLOWED;
+ r.in.access_required = SEC_FLAG_MAXIMUM_ALLOWED;
r.out.handle = handle;
status = dcerpc_winreg_OpenHKU(p, mem_ctx, &r);
unknown.unknown0 = 0x84e0;
unknown.unknown1 = 0x0000;
r.in.unknown = &unknown;
- r.in.access_required = SEC_RIGHTS_MAXIMUM_ALLOWED;
+ r.in.access_required = SEC_FLAG_MAXIMUM_ALLOWED;
r.out.handle = handle;
status = dcerpc_winreg_OpenHKCR(p, mem_ctx, &r);
struct winreg_InitiateSystemShutdown r;
NTSTATUS status;
+ init_winreg_String(&r.in.hostname, NULL);
init_winreg_String(&r.in.message, msg);
r.in.flags = 0;
r.in.timeout = timeout;
unknown.unknown0 = 0x84e0;
unknown.unknown1 = 0x0000;
r.in.unknown = &unknown;
- r.in.access_required = SEC_RIGHTS_MAXIMUM_ALLOWED;
+ r.in.access_required = SEC_FLAG_MAXIMUM_ALLOWED;
r.out.handle = handle;
status = dcerpc_winreg_OpenHKCU(p, mem_ctx, &r);