NDR_PRINT_IN_DEBUG(winreg_QueryMultipleValues2, r);
}
+ ZERO_STRUCT(r->out);
+ r->out.values = r->in.values;
+ r->out.buffer = r->in.buffer;
+ r->out.needed = talloc_zero(r, uint32_t);
+ if (r->out.needed == NULL) {
+ talloc_free(r);
+ return false;
+ }
+
r->out.result = _winreg_QueryMultipleValues2(p, r);
if (p->rng_fault_state) {
return true;
}
+static bool api_winreg_DeleteKeyEx(pipes_struct *p)
+{
+ const struct ndr_interface_call *call;
+ struct ndr_pull *pull;
+ struct ndr_push *push;
+ enum ndr_err_code ndr_err;
+ DATA_BLOB blob;
+ struct winreg_DeleteKeyEx *r;
+
+ call = &ndr_table_winreg.calls[NDR_WINREG_DELETEKEYEX];
+
+ r = talloc(talloc_tos(), struct winreg_DeleteKeyEx);
+ if (r == NULL) {
+ return false;
+ }
+
+ if (!prs_data_blob(&p->in_data.data, &blob, r)) {
+ talloc_free(r);
+ return false;
+ }
+
+ pull = ndr_pull_init_blob(&blob, r, NULL);
+ if (pull == NULL) {
+ talloc_free(r);
+ return false;
+ }
+
+ pull->flags |= LIBNDR_FLAG_REF_ALLOC;
+ ndr_err = call->ndr_pull(pull, NDR_IN, r);
+ if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+ talloc_free(r);
+ return false;
+ }
+
+ if (DEBUGLEVEL >= 10) {
+ NDR_PRINT_IN_DEBUG(winreg_DeleteKeyEx, r);
+ }
+
+ r->out.result = _winreg_DeleteKeyEx(p, r);
+
+ if (p->rng_fault_state) {
+ talloc_free(r);
+ /* Return true here, srv_pipe_hnd.c will take care */
+ return true;
+ }
+
+ if (DEBUGLEVEL >= 10) {
+ NDR_PRINT_OUT_DEBUG(winreg_DeleteKeyEx, r);
+ }
+
+ push = ndr_push_init_ctx(r, NULL);
+ if (push == NULL) {
+ talloc_free(r);
+ return false;
+ }
+
+ ndr_err = call->ndr_push(push, NDR_OUT, r);
+ if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+ talloc_free(r);
+ return false;
+ }
+
+ blob = ndr_push_blob(push);
+ if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
+ talloc_free(r);
+ return false;
+ }
+
+ talloc_free(r);
+
+ return true;
+}
+
/* Tables */
static struct api_struct api_winreg_cmds[] =
{"WINREG_OPENHKPT", NDR_WINREG_OPENHKPT, api_winreg_OpenHKPT},
{"WINREG_OPENHKPN", NDR_WINREG_OPENHKPN, api_winreg_OpenHKPN},
{"WINREG_QUERYMULTIPLEVALUES2", NDR_WINREG_QUERYMULTIPLEVALUES2, api_winreg_QueryMultipleValues2},
+ {"WINREG_DELETEKEYEX", NDR_WINREG_DELETEKEYEX, api_winreg_DeleteKeyEx},
};
void winreg_get_pipe_fns(struct api_struct **fns, int *n_fns)
switch (opnum)
{
case NDR_WINREG_OPENHKCR: {
- struct winreg_OpenHKCR *r = _r;
+ struct winreg_OpenHKCR *r = (struct winreg_OpenHKCR *)_r;
ZERO_STRUCT(r->out);
r->out.handle = talloc_zero(mem_ctx, struct policy_handle);
if (r->out.handle == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return NT_STATUS_NO_MEMORY;
}
r->out.result = _winreg_OpenHKCR(cli->pipes_struct, r);
}
case NDR_WINREG_OPENHKCU: {
- struct winreg_OpenHKCU *r = _r;
+ struct winreg_OpenHKCU *r = (struct winreg_OpenHKCU *)_r;
ZERO_STRUCT(r->out);
r->out.handle = talloc_zero(mem_ctx, struct policy_handle);
if (r->out.handle == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return NT_STATUS_NO_MEMORY;
}
r->out.result = _winreg_OpenHKCU(cli->pipes_struct, r);
}
case NDR_WINREG_OPENHKLM: {
- struct winreg_OpenHKLM *r = _r;
+ struct winreg_OpenHKLM *r = (struct winreg_OpenHKLM *)_r;
ZERO_STRUCT(r->out);
r->out.handle = talloc_zero(mem_ctx, struct policy_handle);
if (r->out.handle == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return NT_STATUS_NO_MEMORY;
}
r->out.result = _winreg_OpenHKLM(cli->pipes_struct, r);
}
case NDR_WINREG_OPENHKPD: {
- struct winreg_OpenHKPD *r = _r;
+ struct winreg_OpenHKPD *r = (struct winreg_OpenHKPD *)_r;
ZERO_STRUCT(r->out);
r->out.handle = talloc_zero(mem_ctx, struct policy_handle);
if (r->out.handle == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return NT_STATUS_NO_MEMORY;
}
r->out.result = _winreg_OpenHKPD(cli->pipes_struct, r);
}
case NDR_WINREG_OPENHKU: {
- struct winreg_OpenHKU *r = _r;
+ struct winreg_OpenHKU *r = (struct winreg_OpenHKU *)_r;
ZERO_STRUCT(r->out);
r->out.handle = talloc_zero(mem_ctx, struct policy_handle);
if (r->out.handle == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return NT_STATUS_NO_MEMORY;
}
r->out.result = _winreg_OpenHKU(cli->pipes_struct, r);
}
case NDR_WINREG_CLOSEKEY: {
- struct winreg_CloseKey *r = _r;
+ struct winreg_CloseKey *r = (struct winreg_CloseKey *)_r;
ZERO_STRUCT(r->out);
r->out.handle = r->in.handle;
r->out.result = _winreg_CloseKey(cli->pipes_struct, r);
}
case NDR_WINREG_CREATEKEY: {
- struct winreg_CreateKey *r = _r;
+ struct winreg_CreateKey *r = (struct winreg_CreateKey *)_r;
ZERO_STRUCT(r->out);
r->out.action_taken = r->in.action_taken;
r->out.new_handle = talloc_zero(mem_ctx, struct policy_handle);
if (r->out.new_handle == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return NT_STATUS_NO_MEMORY;
}
r->out.result = _winreg_CreateKey(cli->pipes_struct, r);
}
case NDR_WINREG_DELETEKEY: {
- struct winreg_DeleteKey *r = _r;
+ struct winreg_DeleteKey *r = (struct winreg_DeleteKey *)_r;
r->out.result = _winreg_DeleteKey(cli->pipes_struct, r);
return NT_STATUS_OK;
}
case NDR_WINREG_DELETEVALUE: {
- struct winreg_DeleteValue *r = _r;
+ struct winreg_DeleteValue *r = (struct winreg_DeleteValue *)_r;
r->out.result = _winreg_DeleteValue(cli->pipes_struct, r);
return NT_STATUS_OK;
}
case NDR_WINREG_ENUMKEY: {
- struct winreg_EnumKey *r = _r;
+ struct winreg_EnumKey *r = (struct winreg_EnumKey *)_r;
ZERO_STRUCT(r->out);
r->out.name = r->in.name;
r->out.keyclass = r->in.keyclass;
}
case NDR_WINREG_ENUMVALUE: {
- struct winreg_EnumValue *r = _r;
+ struct winreg_EnumValue *r = (struct winreg_EnumValue *)_r;
ZERO_STRUCT(r->out);
r->out.name = r->in.name;
r->out.type = r->in.type;
}
case NDR_WINREG_FLUSHKEY: {
- struct winreg_FlushKey *r = _r;
+ struct winreg_FlushKey *r = (struct winreg_FlushKey *)_r;
r->out.result = _winreg_FlushKey(cli->pipes_struct, r);
return NT_STATUS_OK;
}
case NDR_WINREG_GETKEYSECURITY: {
- struct winreg_GetKeySecurity *r = _r;
+ struct winreg_GetKeySecurity *r = (struct winreg_GetKeySecurity *)_r;
ZERO_STRUCT(r->out);
r->out.sd = r->in.sd;
r->out.result = _winreg_GetKeySecurity(cli->pipes_struct, r);
}
case NDR_WINREG_LOADKEY: {
- struct winreg_LoadKey *r = _r;
+ struct winreg_LoadKey *r = (struct winreg_LoadKey *)_r;
r->out.result = _winreg_LoadKey(cli->pipes_struct, r);
return NT_STATUS_OK;
}
case NDR_WINREG_NOTIFYCHANGEKEYVALUE: {
- struct winreg_NotifyChangeKeyValue *r = _r;
+ struct winreg_NotifyChangeKeyValue *r = (struct winreg_NotifyChangeKeyValue *)_r;
r->out.result = _winreg_NotifyChangeKeyValue(cli->pipes_struct, r);
return NT_STATUS_OK;
}
case NDR_WINREG_OPENKEY: {
- struct winreg_OpenKey *r = _r;
+ struct winreg_OpenKey *r = (struct winreg_OpenKey *)_r;
ZERO_STRUCT(r->out);
r->out.handle = talloc_zero(mem_ctx, struct policy_handle);
if (r->out.handle == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return NT_STATUS_NO_MEMORY;
}
r->out.result = _winreg_OpenKey(cli->pipes_struct, r);
}
case NDR_WINREG_QUERYINFOKEY: {
- struct winreg_QueryInfoKey *r = _r;
+ struct winreg_QueryInfoKey *r = (struct winreg_QueryInfoKey *)_r;
ZERO_STRUCT(r->out);
r->out.classname = r->in.classname;
r->out.num_subkeys = talloc_zero(mem_ctx, uint32_t);
if (r->out.num_subkeys == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return NT_STATUS_NO_MEMORY;
}
r->out.max_subkeylen = talloc_zero(mem_ctx, uint32_t);
if (r->out.max_subkeylen == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return NT_STATUS_NO_MEMORY;
}
r->out.max_classlen = talloc_zero(mem_ctx, uint32_t);
if (r->out.max_classlen == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return NT_STATUS_NO_MEMORY;
}
r->out.num_values = talloc_zero(mem_ctx, uint32_t);
if (r->out.num_values == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return NT_STATUS_NO_MEMORY;
}
r->out.max_valnamelen = talloc_zero(mem_ctx, uint32_t);
if (r->out.max_valnamelen == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return NT_STATUS_NO_MEMORY;
}
r->out.max_valbufsize = talloc_zero(mem_ctx, uint32_t);
if (r->out.max_valbufsize == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return NT_STATUS_NO_MEMORY;
}
r->out.secdescsize = talloc_zero(mem_ctx, uint32_t);
if (r->out.secdescsize == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return NT_STATUS_NO_MEMORY;
}
r->out.last_changed_time = talloc_zero(mem_ctx, NTTIME);
if (r->out.last_changed_time == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return NT_STATUS_NO_MEMORY;
}
r->out.result = _winreg_QueryInfoKey(cli->pipes_struct, r);
}
case NDR_WINREG_QUERYVALUE: {
- struct winreg_QueryValue *r = _r;
+ struct winreg_QueryValue *r = (struct winreg_QueryValue *)_r;
ZERO_STRUCT(r->out);
r->out.type = r->in.type;
r->out.data = r->in.data;
}
case NDR_WINREG_REPLACEKEY: {
- struct winreg_ReplaceKey *r = _r;
+ struct winreg_ReplaceKey *r = (struct winreg_ReplaceKey *)_r;
r->out.result = _winreg_ReplaceKey(cli->pipes_struct, r);
return NT_STATUS_OK;
}
case NDR_WINREG_RESTOREKEY: {
- struct winreg_RestoreKey *r = _r;
+ struct winreg_RestoreKey *r = (struct winreg_RestoreKey *)_r;
r->out.result = _winreg_RestoreKey(cli->pipes_struct, r);
return NT_STATUS_OK;
}
case NDR_WINREG_SAVEKEY: {
- struct winreg_SaveKey *r = _r;
+ struct winreg_SaveKey *r = (struct winreg_SaveKey *)_r;
r->out.result = _winreg_SaveKey(cli->pipes_struct, r);
return NT_STATUS_OK;
}
case NDR_WINREG_SETKEYSECURITY: {
- struct winreg_SetKeySecurity *r = _r;
+ struct winreg_SetKeySecurity *r = (struct winreg_SetKeySecurity *)_r;
r->out.result = _winreg_SetKeySecurity(cli->pipes_struct, r);
return NT_STATUS_OK;
}
case NDR_WINREG_SETVALUE: {
- struct winreg_SetValue *r = _r;
+ struct winreg_SetValue *r = (struct winreg_SetValue *)_r;
r->out.result = _winreg_SetValue(cli->pipes_struct, r);
return NT_STATUS_OK;
}
case NDR_WINREG_UNLOADKEY: {
- struct winreg_UnLoadKey *r = _r;
+ struct winreg_UnLoadKey *r = (struct winreg_UnLoadKey *)_r;
r->out.result = _winreg_UnLoadKey(cli->pipes_struct, r);
return NT_STATUS_OK;
}
case NDR_WINREG_INITIATESYSTEMSHUTDOWN: {
- struct winreg_InitiateSystemShutdown *r = _r;
+ struct winreg_InitiateSystemShutdown *r = (struct winreg_InitiateSystemShutdown *)_r;
r->out.result = _winreg_InitiateSystemShutdown(cli->pipes_struct, r);
return NT_STATUS_OK;
}
case NDR_WINREG_ABORTSYSTEMSHUTDOWN: {
- struct winreg_AbortSystemShutdown *r = _r;
+ struct winreg_AbortSystemShutdown *r = (struct winreg_AbortSystemShutdown *)_r;
r->out.result = _winreg_AbortSystemShutdown(cli->pipes_struct, r);
return NT_STATUS_OK;
}
case NDR_WINREG_GETVERSION: {
- struct winreg_GetVersion *r = _r;
+ struct winreg_GetVersion *r = (struct winreg_GetVersion *)_r;
ZERO_STRUCT(r->out);
r->out.version = talloc_zero(mem_ctx, uint32_t);
if (r->out.version == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return NT_STATUS_NO_MEMORY;
}
r->out.result = _winreg_GetVersion(cli->pipes_struct, r);
}
case NDR_WINREG_OPENHKCC: {
- struct winreg_OpenHKCC *r = _r;
+ struct winreg_OpenHKCC *r = (struct winreg_OpenHKCC *)_r;
ZERO_STRUCT(r->out);
r->out.handle = talloc_zero(mem_ctx, struct policy_handle);
if (r->out.handle == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return NT_STATUS_NO_MEMORY;
}
r->out.result = _winreg_OpenHKCC(cli->pipes_struct, r);
}
case NDR_WINREG_OPENHKDD: {
- struct winreg_OpenHKDD *r = _r;
+ struct winreg_OpenHKDD *r = (struct winreg_OpenHKDD *)_r;
ZERO_STRUCT(r->out);
r->out.handle = talloc_zero(mem_ctx, struct policy_handle);
if (r->out.handle == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return NT_STATUS_NO_MEMORY;
}
r->out.result = _winreg_OpenHKDD(cli->pipes_struct, r);
}
case NDR_WINREG_QUERYMULTIPLEVALUES: {
- struct winreg_QueryMultipleValues *r = _r;
+ struct winreg_QueryMultipleValues *r = (struct winreg_QueryMultipleValues *)_r;
ZERO_STRUCT(r->out);
r->out.values = r->in.values;
r->out.buffer = r->in.buffer;
}
case NDR_WINREG_INITIATESYSTEMSHUTDOWNEX: {
- struct winreg_InitiateSystemShutdownEx *r = _r;
+ struct winreg_InitiateSystemShutdownEx *r = (struct winreg_InitiateSystemShutdownEx *)_r;
r->out.result = _winreg_InitiateSystemShutdownEx(cli->pipes_struct, r);
return NT_STATUS_OK;
}
case NDR_WINREG_SAVEKEYEX: {
- struct winreg_SaveKeyEx *r = _r;
+ struct winreg_SaveKeyEx *r = (struct winreg_SaveKeyEx *)_r;
r->out.result = _winreg_SaveKeyEx(cli->pipes_struct, r);
return NT_STATUS_OK;
}
case NDR_WINREG_OPENHKPT: {
- struct winreg_OpenHKPT *r = _r;
+ struct winreg_OpenHKPT *r = (struct winreg_OpenHKPT *)_r;
ZERO_STRUCT(r->out);
r->out.handle = talloc_zero(mem_ctx, struct policy_handle);
if (r->out.handle == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return NT_STATUS_NO_MEMORY;
}
r->out.result = _winreg_OpenHKPT(cli->pipes_struct, r);
}
case NDR_WINREG_OPENHKPN: {
- struct winreg_OpenHKPN *r = _r;
+ struct winreg_OpenHKPN *r = (struct winreg_OpenHKPN *)_r;
ZERO_STRUCT(r->out);
r->out.handle = talloc_zero(mem_ctx, struct policy_handle);
if (r->out.handle == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return NT_STATUS_NO_MEMORY;
}
r->out.result = _winreg_OpenHKPN(cli->pipes_struct, r);
}
case NDR_WINREG_QUERYMULTIPLEVALUES2: {
- struct winreg_QueryMultipleValues2 *r = _r;
+ struct winreg_QueryMultipleValues2 *r = (struct winreg_QueryMultipleValues2 *)_r;
+ ZERO_STRUCT(r->out);
+ r->out.values = r->in.values;
+ r->out.buffer = r->in.buffer;
+ r->out.needed = talloc_zero(mem_ctx, uint32_t);
+ if (r->out.needed == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
+
r->out.result = _winreg_QueryMultipleValues2(cli->pipes_struct, r);
return NT_STATUS_OK;
}
+ case NDR_WINREG_DELETEKEYEX: {
+ struct winreg_DeleteKeyEx *r = (struct winreg_DeleteKeyEx *)_r;
+ r->out.result = _winreg_DeleteKeyEx(cli->pipes_struct, r);
+ return NT_STATUS_OK;
+ }
+
default:
return NT_STATUS_NOT_IMPLEMENTED;
}