build: enable python 3.0 and 3.1 in testwaf.sh
[amitay/samba.git] / librpc / gen_ndr / srv_winreg.c
index d18614f90b3ffe96d330c979b8eb76765e724e13..c242fd4a6f92222fe97992068e43f69dc5854908 100644 (file)
@@ -2684,6 +2684,15 @@ static bool api_winreg_QueryMultipleValues2(pipes_struct *p)
                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) {
@@ -2719,6 +2728,79 @@ static bool api_winreg_QueryMultipleValues2(pipes_struct *p)
        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[] = 
@@ -2758,6 +2840,7 @@ 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)
@@ -2775,11 +2858,11 @@ NTSTATUS rpc_winreg_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, c
        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);
@@ -2787,11 +2870,11 @@ NTSTATUS rpc_winreg_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, c
                }
 
                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);
@@ -2799,11 +2882,11 @@ NTSTATUS rpc_winreg_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, c
                }
 
                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);
@@ -2811,11 +2894,11 @@ NTSTATUS rpc_winreg_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, c
                }
 
                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);
@@ -2823,11 +2906,11 @@ NTSTATUS rpc_winreg_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, c
                }
 
                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);
@@ -2835,7 +2918,7 @@ NTSTATUS rpc_winreg_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, c
                }
 
                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);
@@ -2843,12 +2926,12 @@ NTSTATUS rpc_winreg_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, c
                }
 
                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);
@@ -2856,19 +2939,19 @@ NTSTATUS rpc_winreg_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, c
                }
 
                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;
@@ -2878,7 +2961,7 @@ NTSTATUS rpc_winreg_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, c
                }
 
                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;
@@ -2890,13 +2973,13 @@ NTSTATUS rpc_winreg_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, c
                }
 
                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);
@@ -2904,23 +2987,23 @@ NTSTATUS rpc_winreg_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, c
                }
 
                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);
@@ -2928,47 +3011,47 @@ NTSTATUS rpc_winreg_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, c
                }
 
                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);
@@ -2976,7 +3059,7 @@ NTSTATUS rpc_winreg_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, c
                }
 
                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;
@@ -2987,59 +3070,59 @@ NTSTATUS rpc_winreg_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, c
                }
 
                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);
@@ -3047,11 +3130,11 @@ NTSTATUS rpc_winreg_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, c
                }
 
                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);
@@ -3059,11 +3142,11 @@ NTSTATUS rpc_winreg_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, c
                }
 
                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);
@@ -3071,7 +3154,7 @@ NTSTATUS rpc_winreg_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, c
                }
 
                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;
@@ -3081,23 +3164,23 @@ NTSTATUS rpc_winreg_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, c
                }
 
                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);
@@ -3105,11 +3188,11 @@ NTSTATUS rpc_winreg_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, c
                }
 
                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);
@@ -3117,11 +3200,25 @@ NTSTATUS rpc_winreg_dispatch(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, c
                }
 
                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;
        }