static bool test_PNP_GetDeviceRegProp(struct torture_context *tctx, struct dcerpc_pipe *p) { NTSTATUS status; struct PNP_GetDeviceRegProp r; enum winreg_Type reg_data_type = REG_NONE; uint32_t buffer_size = 0; uint32_t needed = 0; uint8_t *buffer; buffer = talloc(tctx, uint8_t); r.in.devicepath = "ACPI\\ACPI0003\\1"; r.in.property = DEV_REGPROP_DESC; r.in.flags = 0; r.in.reg_data_type = ®_data_type; r.in.buffer_size = &buffer_size; r.in.needed = &needed; r.out.buffer = buffer; r.out.reg_data_type = ®_data_type; r.out.buffer_size = &buffer_size; r.out.needed = &needed; status = dcerpc_PNP_GetDeviceRegProp(p, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "PNP_GetDeviceRegProp"); if (W_ERROR_EQUAL(r.out.result, WERR_CM_BUFFER_SMALL)) { buffer = talloc_array(tctx, uint8_t, needed); r.in.buffer_size = &needed; status = dcerpc_PNP_GetDeviceRegProp(p, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "PNP_GetDeviceRegProp"); } return true; }
static WERROR cmd_ntsvcs_get_dev_reg_prop(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, int argc, const char **argv) { struct dcerpc_binding_handle *b = cli->binding_handle; NTSTATUS status; WERROR werr; const char *devicepath = NULL; uint32_t property = DEV_REGPROP_DESC; uint32_t reg_data_type = REG_NONE; uint8_t *buffer; uint32_t buffer_size = 0; uint32_t needed = 0; uint32_t flags = 0; if (argc < 2) { printf("usage: %s [devicepath] [buffersize]\n", argv[0]); return WERR_OK; } devicepath = argv[1]; if (argc >= 3) { buffer_size = atoi(argv[2]); needed = buffer_size; } buffer = talloc_array(mem_ctx, uint8_t, buffer_size); W_ERROR_HAVE_NO_MEMORY(buffer); status = dcerpc_PNP_GetDeviceRegProp(b, mem_ctx, devicepath, property, ®_data_type, buffer, &buffer_size, &needed, flags, &werr); if (!NT_STATUS_IS_OK(status)) { return ntstatus_to_werror(status); } return werr; }